Pristine Ack-5.5
[Ack-5.5.git] / mach / mantra / int / mloop5
1 .sect .text
2 .sect .rom
3 .sect .data
4 .sect .bss
5 .sect .text
6 !-----------------------------------------------------------------------------.
7 !               ARRAY GROUP
8 !-------------------------------------------------------------------------------
9 !subroutine
10 calcarr:        move.l  (sp)+,d3        !save return address
11                 move.l  (sp)+,a0        !address of array describtor
12                 mov     (sp)+,d0        !index
13                 subt    (a0)+,d0        !relative address
14                 blt     9f
15                 comp    (a0)+,d0        !check upper bound
16                 bgt     9f
17                 move.l  #0,d1
18                 mov     (a0),d1
19                 mulu    d1,d0           !objectsize in d1
20                 move.l  (sp)+,a0
21                 ad      d0,a0           !a0 address of array element
22 #if     test
23                 locptr
24                 heaptr
25                 extptr
26 7:              bra     e_badptr
27 6:
28 #endif
29                 move.l  d3,-(sp)
30                 rts
31 9:              bsr     e_array ;tst.l  (sp)+ ; jmp     (a4)
32
33 aar_1W:         bsr     calcarr ;       move.l  a0,-(sp)
34                 jmp     (a4)
35 aar_l:          adroff          ;       cmp.w   wrd,(a5)
36 0:              bne     e_illins ;      bra     aar_1W
37 aar_z:          comp    wrd,(sp)+  ;    bra     0b
38
39 lar_1W:         bsr     calcarr ;       add.l   d1,a0
40                 asr.w   #1,d1   ;       bcc     5f
41                 clr.l   d1      ;       move.b  -(a0),d1 
42                 mov     d1,-(sp);       jmp     (a4)
43 5:
44 #ifdef lword
45                 asr.w   #1,d1   ;       bcc     6f
46                 move.w  -(a0),d1;       move.l  d1,-(sp)
47                 jmp     (a4)
48 #endif
49 6:              sub.l   #1,d1
50 7:              mov     -(a0),-(sp);    dbra    d1,7b
51                 jmp     (a4)
52
53 lar_l:          adroff          ;       cmp.w   wrd,(a5)
54 8:              bne     e_illins;       bra     lar_1W
55 lar_z:          comp    wrd,(sp)+ ;     bra     8b
56
57 sar_1W:         bsr     calcarr ;       asr.w   #1,d1
58                 bcc     5f      ;       testen  (sp)+
59                 move.b  -1(sp),(a0);    jmp     (a4)
60 5:
61 #ifdef lword
62                 asr.w   #1,d1   ;       bcc     6f
63                 tst.w   (sp)+   ;       move.w  (sp)+,(a0)
64                 jmp     (a4)
65 #endif
66 6:              sub.l   #1,d1
67 7:              mov (sp)+,(a0)+ ;       dbra    d1,7b
68                 jmp     (a4)
69 sar_z:          comp    wrd,(sp)+ ;     bra     1f
70 sar_l:          adroff          ;       cmp.w   wrd,(a5)
71 1:              bne     e_illins ;      bra     sar_1W
72
73 !-------------------------------------------------------------------------
74 !                CONVERT GROUP
75 !-------------------------------------------------------------------------w
76
77 cii_z:          mov     (sp)+,d0 ;      mov     (sp)+,d1 ;  !d0 destination size
78                                                         !d1 source size
79 #if test
80                 cmp.w   wrd,d1  ;       bne     0f
81                 comp    und,(sp) ;      bne     0f
82                 bsr     e_iund
83 #endif
84 0:              cmp.w   d0,d1   ;       bne     1f      ;       jmp (a4)
85 1:              bge     6f      ;       mov     (sp)+,d2
86                 cmp.w   #1,d1   ;       bne     3f              !d1<d0
87                 ext.w   d2
88 #ifndef lword
89                 cmp.w   #2,d0   ;       bne     3f
90                 move.w  d2,-(sp);       jmp     (a4)
91 #endif
92 3:              ext.l   d2      ;       move.l  d2,-(sp);       jmp (a4)
93 6:
94 #ifdef lword
95                 bsr     e_conv  ;       add.l   #4,sp
96 #else
97                 move.w  (sp)+,d2
98 #if test
99                 bne     7f      ;       tst.w   (sp)    ;       bge 9f
100 8:              bsr     e_conv  ;       jmp     (a4)
101 7:              comp    #-1,d2  ;       bne     8b
102                 tst.w   (sp)    ;       bge     8b
103 #endif
104 #endif
105 9:              jmp     (a4)
106
107 cui_z:          mov     (sp)+,d0 ;      mov     (sp)+,d1
108                 sub.w   d1,d0   ;       bne     2f
109 #if test
110                 testen  (sp)    ;       bpl     1f
111 0:              bsr     e_conv
112 #endif
113 1:              jmp     (a4)
114 2:
115 #ifdef lword
116                 sub.l   d0,sp   ;       bsr     e_conv
117 #else
118                 bgt     3f      ;       cmp.w   #-2,d0  ;       beq 5f
119                 bsr     e_conv
120 #if test
121                 tst.w   (sp)    ;       bne     0b
122                 tst.w   2(sp)   ;       bmi     0b
123 #endif
124 5:              sub.l   #-2,sp  ;       jmp     (a4)
125 3:              cmp.w   #2,d0   ;       beq     4f
126                 bsr     e_conv
127 4:              clr.w   -(sp)
128 #endif
129                 jmp     (a4)
130
131 ciu_z:          mov     (sp)+,d0 ;      mov     (sp)+,d1
132 #if test
133                 cmp.w   wrd,d1  ;       bne     0f
134                 comp    und,(sp) ;      bne     0f
135                 bsr     e_iund
136 #endif
137 0:              sub.w   d1,d0   ;       bne     1f
138                 jmp     (a4)
139 #ifndef lword
140 1:              bgt     4f      ;       cmp.w   #-2,d0
141                 beq     5f      ;       bsr     e_conv
142 5:
143 6:              add.l   #2,sp   ;       jmp     (a4)
144 #endif
145 4:      1:      bclr    #0,d0   ;       beq     2f
146 #ifdef lword
147                 clr.b   2(sp)
148 #else
149                 clr.b   (sp)
150 #endif
151 2:              bclr    #1,d0   ;       beq     3f
152 #ifdef lword
153                 clr.w   (sp)
154 #else
155                 clr.w   -(sp)
156 #endif
157 3:              jmp     (a4)
158
159 cuu_z:          mov     (sp)+,d0 ;      mov     (sp)+,d1
160                 sub.w   d1,d0   ;       bne     1f
161                 jmp     (a4)
162 1:
163 #ifdef lword
164                 bsr     e_conv  ;       sub.l   d0,sp
165 #else
166                 blt     3f
167 #if test
168                         cmp.w   #2,d0   ;       beq     2f
169                 bsr     e_conv
170 #endif
171 2:              clr.w   -(sp)   ;       jmp     (a4)
172 3:
173 #if test
174                 cmp.w   #-2,d0  ;       beq     4f
175                 bsr     e_conv
176 #endif
177 4:              tst.w   (sp)+
178 #if test
179                 beq     5f      ;       bsr     e_conv
180 #endif
181 #endif
182 5:              jmp     (a4)
183
184 !--------------------------------------------------------------------------
185 #ifdef FLTRAP
186 cuf_z:          cfu_z:          cff_z:          cfi_z:          cif_z:
187                 mov     (sp)+,d0 ;      subt    (sp)+,d0
188                 ext.l   d0
189                 sub.l   d0,sp   
190                 bra     flnim                   !floating point not implemented
191 #else
192 cfu_z:
193                 clr.l   d0
194                 mov     (sp)+,d0
195                 clr.l   d1
196                 mov     (sp)+,d1
197                 move.l  d1,-(sp)
198                 move.l  d0,-(sp)
199                 checksize
200 2:
201                 move.l  #4,(sp)
202                 cmp     #4,d1
203                 bne     1f
204                 jsr     .cfu
205                 add     #8,sp
206 2:
207                 mov     #4,-(sp)
208                 mov     #2,-(sp)
209                 bra     cuu_z
210 1:
211                 cmp     #8,d1
212                 beq     1f
213                 bra     e_oddz
214 1:
215                 jsr     .cfu
216                 add     #12,sp
217                 bra     2b
218 4:
219                 mov     d1,d0
220                 checkfsize
221 4:
222                 jsr     .cfu
223                 add     #8,sp
224                 jmp     (a4)
225 8:
226                 jsr     .cfu
227                 add     #12,sp
228                 jmp     (a4)
229 cfi_z:
230                 clr.l   d0
231                 mov     (sp)+,d0
232                 clr.l   d1
233                 mov     (sp)+,d1
234                 move.l  d1,-(sp)
235                 move.l  d0,-(sp)
236                 checksize
237 2:
238                 move.l  #4,(sp)
239                 cmp     #4,d1
240                 bne     1f
241                 jsr     .cfi
242                 add     #8,sp
243 2:
244                 mov     #4,-(sp)
245                 mov     #2,-(sp)
246                 bra     cii_z
247 1:
248                 cmp     #8,d1
249                 beq     1f
250                 bra     e_oddz
251 1:
252                 jsr     .cfi
253                 add     #12,sp
254                 bra     2b
255 4:
256                 mov     d1,d0
257                 checkfsize
258 4:
259                 jsr     .cfi
260                 add     #8,sp
261                 jmp     (a4)
262 8:
263                 jsr     .cfi
264                 add     #12,sp
265                 jmp     (a4)
266 cuf_z:
267                 mov     (sp)+,d0
268                 checkfsize
269 4:
270                 mov     (sp)+,d0
271                 checksize
272 2:
273                 clr.l   d0
274                 move.w  (sp)+,d0
275                 move.l  d0,-(sp)
276 4:
277                 move.l  #4,-(sp)
278                 jsr     .cuf4
279                 add     #4,sp
280                 jmp     (a4)
281 8:
282                 mov     (sp)+,d0
283                 checksize
284 2:
285                 clr.l   d0
286                 move.w  (sp)+,d0
287                 move.l  d0,-(sp)
288 4:
289                 move.l  #4,-(sp)
290                 jsr     .cuf8
291                 jmp     (a4)
292
293 cif_z:
294                 mov     (sp)+,d0
295                 checkfsize
296 4:
297                 mov     (sp)+,d0
298                 checksize
299 2:
300                 move.w  (sp)+,d0
301                 ext.l   d0
302                 move.l  d0,-(sp)
303 4:
304                 move.l  #4,-(sp)
305                 jsr     .cif4
306                 add     #4,sp
307                 jmp     (a4)
308 8:
309                 mov     (sp)+,d0
310                 checksize
311 2:
312                 move.w  (sp)+,d0
313                 ext.l   d0
314                 move.l  d0,-(sp)
315 4:
316                 move.l  #4,-(sp)
317                 jsr     .cif8
318                 jmp     (a4)
319
320 cff_z:
321                 mov     (sp)+,d0 ;
322                 checkfsize
323 4:
324                 mov     (sp)+,d0 ;      cmp     #4,d0 ; beq     1f
325                 cmp     #8,d0   ;       beq     2f
326                 bra     e_oddz
327 2:
328                 jsr     .cff4
329                 add     #4,sp
330 1:
331                 jmp     (a4)
332 8:
333                 mov     (sp)+,d0 ;      cmp     #8,d0 ; beq     1f
334                 cmp     #4,d0 ;         beq     2f
335                 bra     e_oddz
336 2:
337                 move.l  (sp)+,d0
338                 clr.l   -(sp)
339                 move.l  d0,-(sp)
340                 jsr     .cff8
341 1:
342                 jmp     (a4)
343 #endif