milli.S revision 1.2 1 1.2 andvar ; $NetBSD: milli.S,v 1.2 2021/08/17 22:00:32 andvar Exp $
2 1.1 fredette ;
3 1.1 fredette ; $OpenBSD: milli.S,v 1.5 2001/03/29 04:08:20 mickey Exp $
4 1.1 fredette ;
5 1.1 fredette ; (c) Copyright 1986 HEWLETT-PACKARD COMPANY
6 1.1 fredette ;
7 1.1 fredette ; To anyone who acknowledges that this file is provided "AS IS"
8 1.1 fredette ; without any express or implied warranty:
9 1.1 fredette ; permission to use, copy, modify, and distribute this file
10 1.1 fredette ; for any purpose is hereby granted without fee, provided that
11 1.1 fredette ; the above copyright notice and this notice appears in all
12 1.1 fredette ; copies, and that the name of Hewlett-Packard Company not be
13 1.1 fredette ; used in advertising or publicity pertaining to distribution
14 1.1 fredette ; of the software without specific, written prior permission.
15 1.1 fredette ; Hewlett-Packard Company makes no representations about the
16 1.1 fredette ; suitability of this software for any purpose.
17 1.1 fredette ;
18 1.1 fredette
19 1.1 fredette ; Standard Hardware Register Definitions for Use with Assembler
20 1.1 fredette ; version A.08.06
21 1.1 fredette ; - fr16-31 added at Utah
22 1.1 fredette ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23 1.1 fredette ; Hardware General Registers
24 1.1 fredette r0: .equ 0
25 1.1 fredette
26 1.1 fredette r1: .equ 1
27 1.1 fredette
28 1.1 fredette r2: .equ 2
29 1.1 fredette
30 1.1 fredette r3: .equ 3
31 1.1 fredette
32 1.1 fredette r4: .equ 4
33 1.1 fredette
34 1.1 fredette r5: .equ 5
35 1.1 fredette
36 1.1 fredette r6: .equ 6
37 1.1 fredette
38 1.1 fredette r7: .equ 7
39 1.1 fredette
40 1.1 fredette r8: .equ 8
41 1.1 fredette
42 1.1 fredette r9: .equ 9
43 1.1 fredette
44 1.1 fredette r10: .equ 10
45 1.1 fredette
46 1.1 fredette r11: .equ 11
47 1.1 fredette
48 1.1 fredette r12: .equ 12
49 1.1 fredette
50 1.1 fredette r13: .equ 13
51 1.1 fredette
52 1.1 fredette r14: .equ 14
53 1.1 fredette
54 1.1 fredette r15: .equ 15
55 1.1 fredette
56 1.1 fredette r16: .equ 16
57 1.1 fredette
58 1.1 fredette r17: .equ 17
59 1.1 fredette
60 1.1 fredette r18: .equ 18
61 1.1 fredette
62 1.1 fredette r19: .equ 19
63 1.1 fredette
64 1.1 fredette r20: .equ 20
65 1.1 fredette
66 1.1 fredette r21: .equ 21
67 1.1 fredette
68 1.1 fredette r22: .equ 22
69 1.1 fredette
70 1.1 fredette r23: .equ 23
71 1.1 fredette
72 1.1 fredette r24: .equ 24
73 1.1 fredette
74 1.1 fredette r25: .equ 25
75 1.1 fredette
76 1.1 fredette r26: .equ 26
77 1.1 fredette
78 1.1 fredette r27: .equ 27
79 1.1 fredette
80 1.1 fredette r28: .equ 28
81 1.1 fredette
82 1.1 fredette r29: .equ 29
83 1.1 fredette
84 1.1 fredette r30: .equ 30
85 1.1 fredette
86 1.1 fredette r31: .equ 31
87 1.1 fredette
88 1.1 fredette ; Hardware Space Registers
89 1.1 fredette sr0: .equ 0
90 1.1 fredette
91 1.1 fredette sr1: .equ 1
92 1.1 fredette
93 1.1 fredette sr2: .equ 2
94 1.1 fredette
95 1.1 fredette sr3: .equ 3
96 1.1 fredette
97 1.1 fredette sr4: .equ 4
98 1.1 fredette
99 1.1 fredette sr5: .equ 5
100 1.1 fredette
101 1.1 fredette sr6: .equ 6
102 1.1 fredette
103 1.1 fredette sr7: .equ 7
104 1.1 fredette
105 1.1 fredette ; Hardware Floating Point Registers
106 1.1 fredette fr0: .equ 0
107 1.1 fredette
108 1.1 fredette fr1: .equ 1
109 1.1 fredette
110 1.1 fredette fr2: .equ 2
111 1.1 fredette
112 1.1 fredette fr3: .equ 3
113 1.1 fredette
114 1.1 fredette fr4: .equ 4
115 1.1 fredette
116 1.1 fredette fr5: .equ 5
117 1.1 fredette
118 1.1 fredette fr6: .equ 6
119 1.1 fredette
120 1.1 fredette fr7: .equ 7
121 1.1 fredette
122 1.1 fredette fr8: .equ 8
123 1.1 fredette
124 1.1 fredette fr9: .equ 9
125 1.1 fredette
126 1.1 fredette fr10: .equ 10
127 1.1 fredette
128 1.1 fredette fr11: .equ 11
129 1.1 fredette
130 1.1 fredette fr12: .equ 12
131 1.1 fredette
132 1.1 fredette fr13: .equ 13
133 1.1 fredette
134 1.1 fredette fr14: .equ 14
135 1.1 fredette
136 1.1 fredette fr15: .equ 15
137 1.1 fredette
138 1.1 fredette fr16: .equ 16
139 1.1 fredette
140 1.1 fredette fr17: .equ 17
141 1.1 fredette
142 1.1 fredette fr18: .equ 18
143 1.1 fredette
144 1.1 fredette fr19: .equ 19
145 1.1 fredette
146 1.1 fredette fr20: .equ 20
147 1.1 fredette
148 1.1 fredette fr21: .equ 21
149 1.1 fredette
150 1.1 fredette fr22: .equ 22
151 1.1 fredette
152 1.1 fredette fr23: .equ 23
153 1.1 fredette
154 1.1 fredette fr24: .equ 24
155 1.1 fredette
156 1.1 fredette fr25: .equ 25
157 1.1 fredette
158 1.1 fredette fr26: .equ 26
159 1.1 fredette
160 1.1 fredette fr27: .equ 27
161 1.1 fredette
162 1.1 fredette fr28: .equ 28
163 1.1 fredette
164 1.1 fredette fr29: .equ 29
165 1.1 fredette
166 1.1 fredette fr30: .equ 30
167 1.1 fredette
168 1.1 fredette fr31: .equ 31
169 1.1 fredette
170 1.1 fredette ; Hardware Control Registers
171 1.1 fredette cr0: .equ 0
172 1.1 fredette
173 1.1 fredette rctr: .equ 0 ; Recovery Counter Register
174 1.1 fredette
175 1.1 fredette cr8: .equ 8 ; Protection ID 1
176 1.1 fredette
177 1.1 fredette pidr1: .equ 8
178 1.1 fredette
179 1.1 fredette cr9: .equ 9 ; Protection ID 2
180 1.1 fredette
181 1.1 fredette pidr2: .equ 9
182 1.1 fredette
183 1.1 fredette cr10: .equ 10
184 1.1 fredette
185 1.2 andvar ccr: .equ 10 ; Coprocessor Configuration Register
186 1.1 fredette
187 1.1 fredette cr11: .equ 11
188 1.1 fredette
189 1.1 fredette sar: .equ 11 ; Shift Amount Register
190 1.1 fredette
191 1.1 fredette cr12: .equ 12
192 1.1 fredette
193 1.1 fredette pidr3: .equ 12 ; Protection ID 3
194 1.1 fredette
195 1.1 fredette cr13: .equ 13
196 1.1 fredette
197 1.1 fredette pidr4: .equ 13 ; Protection ID 4
198 1.1 fredette
199 1.1 fredette cr14: .equ 14
200 1.1 fredette
201 1.1 fredette iva: .equ 14 ; Interrupt Vector Address
202 1.1 fredette
203 1.1 fredette cr15: .equ 15
204 1.1 fredette
205 1.1 fredette eiem: .equ 15 ; External Interrupt Enable Mask
206 1.1 fredette
207 1.1 fredette cr16: .equ 16
208 1.1 fredette
209 1.1 fredette itmr: .equ 16 ; Interval Timer
210 1.1 fredette
211 1.1 fredette cr17: .equ 17
212 1.1 fredette
213 1.1 fredette pcsq: .equ 17 ; Program Counter Space queue
214 1.1 fredette
215 1.1 fredette cr18: .equ 18
216 1.1 fredette
217 1.1 fredette pcoq: .equ 18 ; Program Counter Offset queue
218 1.1 fredette
219 1.1 fredette cr19: .equ 19
220 1.1 fredette
221 1.1 fredette iir: .equ 19 ; Interruption Instruction Register
222 1.1 fredette
223 1.1 fredette cr20: .equ 20
224 1.1 fredette
225 1.1 fredette isr: .equ 20 ; Interruption Space Register
226 1.1 fredette
227 1.1 fredette cr21: .equ 21
228 1.1 fredette
229 1.1 fredette ior: .equ 21 ; Interruption Offset Register
230 1.1 fredette
231 1.1 fredette cr22: .equ 22
232 1.1 fredette
233 1.2 andvar ipsw: .equ 22 ; Interruption Processor Status Word
234 1.1 fredette
235 1.1 fredette cr23: .equ 23
236 1.1 fredette
237 1.1 fredette eirr: .equ 23 ; External Interrupt Request
238 1.1 fredette
239 1.1 fredette cr24: .equ 24
240 1.1 fredette
241 1.2 andvar ppda: .equ 24 ; Physical Page Directory Address
242 1.1 fredette
243 1.1 fredette tr0: .equ 24 ; Temporary register 0
244 1.1 fredette
245 1.1 fredette cr25: .equ 25
246 1.1 fredette
247 1.1 fredette hta: .equ 25 ; Hash Table Address
248 1.1 fredette
249 1.1 fredette tr1: .equ 25 ; Temporary register 1
250 1.1 fredette
251 1.1 fredette cr26: .equ 26
252 1.1 fredette
253 1.1 fredette tr2: .equ 26 ; Temporary register 2
254 1.1 fredette
255 1.1 fredette cr27: .equ 27
256 1.1 fredette
257 1.1 fredette tr3: .equ 27 ; Temporary register 3
258 1.1 fredette
259 1.1 fredette cr28: .equ 28
260 1.1 fredette
261 1.1 fredette tr4: .equ 28 ; Temporary register 4
262 1.1 fredette
263 1.1 fredette cr29: .equ 29
264 1.1 fredette
265 1.1 fredette tr5: .equ 29 ; Temporary register 5
266 1.1 fredette
267 1.1 fredette cr30: .equ 30
268 1.1 fredette
269 1.1 fredette tr6: .equ 30 ; Temporary register 6
270 1.1 fredette
271 1.1 fredette cr31: .equ 31
272 1.1 fredette
273 1.1 fredette tr7: .equ 31 ; Temporary register 7
274 1.1 fredette
275 1.1 fredette ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
276 1.1 fredette ; Procedure Call Convention ~
277 1.1 fredette ; Register Definitions for Use with Assembler ~
278 1.1 fredette ; version A.08.06 ~
279 1.1 fredette ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
280 1.1 fredette ; Software Architecture General Registers
281 1.1 fredette rp: .equ r2 ; return pointer
282 1.1 fredette
283 1.1 fredette mrp: .equ r31 ; millicode return pointer
284 1.1 fredette
285 1.1 fredette ret0: .equ r28 ; return value
286 1.1 fredette
287 1.1 fredette ret1: .equ r29 ; return value (high part of double)
288 1.1 fredette
289 1.1 fredette sl: .equ r29 ; static link
290 1.1 fredette
291 1.1 fredette sp: .equ r30 ; stack pointer
292 1.1 fredette
293 1.1 fredette dp: .equ r27 ; data pointer
294 1.1 fredette
295 1.1 fredette arg0: .equ r26 ; argument
296 1.1 fredette
297 1.1 fredette arg1: .equ r25 ; argument or high part of double argument
298 1.1 fredette
299 1.1 fredette arg2: .equ r24 ; argument
300 1.1 fredette
301 1.1 fredette arg3: .equ r23 ; argument or high part of double argument
302 1.1 fredette
303 1.1 fredette ;_____________________________________________________________________________
304 1.1 fredette ; Software Architecture Space Registers
305 1.1 fredette ; sr0 ; return link form BLE
306 1.1 fredette sret: .equ sr1 ; return value
307 1.1 fredette
308 1.1 fredette sarg: .equ sr1 ; argument
309 1.1 fredette
310 1.1 fredette ; sr4 ; PC SPACE tracker
311 1.1 fredette ; sr5 ; process private data
312 1.1 fredette ;_____________________________________________________________________________
313 1.1 fredette ; Software Architecture Pseudo Registers
314 1.1 fredette previous_sp: .equ 64 ; old stack pointer (locates previous frame)
315 1.1 fredette
316 1.1 fredette ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
317 1.1 fredette ; Standard space and subspace definitions. version A.08.06
318 1.1 fredette ; These are generally suitable for programs on HP_UX and HPE.
319 1.1 fredette ; Statements commented out are used when building such things as operating
320 1.1 fredette ; system kernels.
321 1.1 fredette ;;;;;;;;;;;;;;;;
322 1.1 fredette ; Additional code subspaces should have ALIGN=8 for an interspace BV
323 1.1 fredette ; and should have SORT=24.
324 1.1 fredette ;
325 1.1 fredette ; For an incomplete executable (program bound to shared libraries),
326 1.1 fredette ; sort keys $GLOBAL$ -1 and $GLOBAL$ -2 are reserved for the $DLT$
327 1.1 fredette ; and $PLT$ subspaces respectively.
328 1.1 fredette ;;;;;;;;;;;;;;;
329 1.1 fredette
330 1.1 fredette .text
331 1.1 fredette .EXPORT $$remI,millicode
332 1.1 fredette ; .IMPORT cerror
333 1.1 fredette $$remI:
334 1.1 fredette .PROC
335 1.1 fredette .CALLINFO NO_CALLS
336 1.1 fredette .ENTRY
337 1.1 fredette addit,= 0,arg1,r0
338 1.1 fredette add,>= r0,arg0,ret1
339 1.1 fredette sub r0,ret1,ret1
340 1.1 fredette sub r0,arg1,r1
341 1.1 fredette ds r0,r1,r0
342 1.1 fredette or r0,r0,r1
343 1.1 fredette add ret1,ret1,ret1
344 1.1 fredette ds r1,arg1,r1
345 1.1 fredette addc ret1,ret1,ret1
346 1.1 fredette ds r1,arg1,r1
347 1.1 fredette addc ret1,ret1,ret1
348 1.1 fredette ds r1,arg1,r1
349 1.1 fredette addc ret1,ret1,ret1
350 1.1 fredette ds r1,arg1,r1
351 1.1 fredette addc ret1,ret1,ret1
352 1.1 fredette ds r1,arg1,r1
353 1.1 fredette addc ret1,ret1,ret1
354 1.1 fredette ds r1,arg1,r1
355 1.1 fredette addc ret1,ret1,ret1
356 1.1 fredette ds r1,arg1,r1
357 1.1 fredette addc ret1,ret1,ret1
358 1.1 fredette ds r1,arg1,r1
359 1.1 fredette addc ret1,ret1,ret1
360 1.1 fredette ds r1,arg1,r1
361 1.1 fredette addc ret1,ret1,ret1
362 1.1 fredette ds r1,arg1,r1
363 1.1 fredette addc ret1,ret1,ret1
364 1.1 fredette ds r1,arg1,r1
365 1.1 fredette addc ret1,ret1,ret1
366 1.1 fredette ds r1,arg1,r1
367 1.1 fredette addc ret1,ret1,ret1
368 1.1 fredette ds r1,arg1,r1
369 1.1 fredette addc ret1,ret1,ret1
370 1.1 fredette ds r1,arg1,r1
371 1.1 fredette addc ret1,ret1,ret1
372 1.1 fredette ds r1,arg1,r1
373 1.1 fredette addc ret1,ret1,ret1
374 1.1 fredette ds r1,arg1,r1
375 1.1 fredette addc ret1,ret1,ret1
376 1.1 fredette ds r1,arg1,r1
377 1.1 fredette addc ret1,ret1,ret1
378 1.1 fredette ds r1,arg1,r1
379 1.1 fredette addc ret1,ret1,ret1
380 1.1 fredette ds r1,arg1,r1
381 1.1 fredette addc ret1,ret1,ret1
382 1.1 fredette ds r1,arg1,r1
383 1.1 fredette addc ret1,ret1,ret1
384 1.1 fredette ds r1,arg1,r1
385 1.1 fredette addc ret1,ret1,ret1
386 1.1 fredette ds r1,arg1,r1
387 1.1 fredette addc ret1,ret1,ret1
388 1.1 fredette ds r1,arg1,r1
389 1.1 fredette addc ret1,ret1,ret1
390 1.1 fredette ds r1,arg1,r1
391 1.1 fredette addc ret1,ret1,ret1
392 1.1 fredette ds r1,arg1,r1
393 1.1 fredette addc ret1,ret1,ret1
394 1.1 fredette ds r1,arg1,r1
395 1.1 fredette addc ret1,ret1,ret1
396 1.1 fredette ds r1,arg1,r1
397 1.1 fredette addc ret1,ret1,ret1
398 1.1 fredette ds r1,arg1,r1
399 1.1 fredette addc ret1,ret1,ret1
400 1.1 fredette ds r1,arg1,r1
401 1.1 fredette addc ret1,ret1,ret1
402 1.1 fredette ds r1,arg1,r1
403 1.1 fredette addc ret1,ret1,ret1
404 1.1 fredette ds r1,arg1,r1
405 1.1 fredette addc ret1,ret1,ret1
406 1.1 fredette ds r1,arg1,r1
407 1.1 fredette addc ret1,ret1,ret1
408 1.1 fredette movb,>=,n r1,ret1,remI300
409 1.1 fredette add,< arg1,r0,r0
410 1.1 fredette add,tr r1,arg1,ret1
411 1.1 fredette sub r1,arg1,ret1
412 1.1 fredette remI300: add,>= arg0,r0,r0
413 1.1 fredette
414 1.1 fredette sub r0,ret1,ret1
415 1.1 fredette bv r0(r31)
416 1.1 fredette nop
417 1.1 fredette .EXIT
418 1.1 fredette .PROCEND
419 1.1 fredette
420 1.1 fredette bit1: .equ 1
421 1.1 fredette
422 1.1 fredette bit30: .equ 30
423 1.1 fredette bit31: .equ 31
424 1.1 fredette
425 1.1 fredette len2: .equ 2
426 1.1 fredette
427 1.1 fredette len4: .equ 4
428 1.1 fredette
429 1.1 fredette #if 0
430 1.1 fredette $$dyncall:
431 1.1 fredette .proc
432 1.1 fredette .callinfo NO_CALLS
433 1.1 fredette .export $$dyncall,MILLICODE
434 1.1 fredette
435 1.1 fredette bb,>=,n 22,bit30,noshlibs
436 1.1 fredette
437 1.1 fredette depi 0,bit31,len2,22
438 1.1 fredette ldw 4(22),19
439 1.1 fredette ldw 0(22),22
440 1.1 fredette noshlibs:
441 1.1 fredette ldsid (22),r1
442 1.1 fredette mtsp r1,sr0
443 1.1 fredette be 0(sr0,r22)
444 1.1 fredette stw rp,-24(sp)
445 1.1 fredette .procend
446 1.1 fredette #endif
447 1.1 fredette
448 1.1 fredette $$sh_func_adrs:
449 1.1 fredette .proc
450 1.1 fredette .callinfo NO_CALLS
451 1.1 fredette .export $$sh_func_adrs, millicode
452 1.1 fredette ldo 0(r26),ret1
453 1.1 fredette dep r0,30,1,r26
454 1.1 fredette probew (r26),r31,r22
455 1.1 fredette extru,= r22,31,1,r22
456 1.1 fredette bv r0(r31)
457 1.1 fredette ldws 0(r26),ret1
458 1.1 fredette .procend
459 1.1 fredette
460 1.1 fredette temp: .EQU r1
461 1.1 fredette
462 1.1 fredette retreg: .EQU ret1 ; r29
463 1.1 fredette
464 1.1 fredette .export $$divU,millicode
465 1.1 fredette .import $$divU_3,millicode
466 1.1 fredette .import $$divU_5,millicode
467 1.1 fredette .import $$divU_6,millicode
468 1.1 fredette .import $$divU_7,millicode
469 1.1 fredette .import $$divU_9,millicode
470 1.1 fredette .import $$divU_10,millicode
471 1.1 fredette .import $$divU_12,millicode
472 1.1 fredette .import $$divU_14,millicode
473 1.1 fredette .import $$divU_15,millicode
474 1.1 fredette $$divU:
475 1.1 fredette .proc
476 1.1 fredette .callinfo NO_CALLS
477 1.1 fredette ; The subtract is not nullified since it does no harm and can be used
478 1.1 fredette ; by the two cases that branch back to "normal".
479 1.1 fredette comib,>= 15,arg1,special_divisor
480 1.1 fredette sub r0,arg1,temp ; clear carry, negate the divisor
481 1.1 fredette ds r0,temp,r0 ; set V-bit to 1
482 1.1 fredette normal:
483 1.1 fredette add arg0,arg0,retreg ; shift msb bit into carry
484 1.1 fredette ds r0,arg1,temp ; 1st divide step, if no carry
485 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
486 1.1 fredette ds temp,arg1,temp ; 2nd divide step
487 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
488 1.1 fredette ds temp,arg1,temp ; 3rd divide step
489 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
490 1.1 fredette ds temp,arg1,temp ; 4th divide step
491 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
492 1.1 fredette ds temp,arg1,temp ; 5th divide step
493 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
494 1.1 fredette ds temp,arg1,temp ; 6th divide step
495 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
496 1.1 fredette ds temp,arg1,temp ; 7th divide step
497 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
498 1.1 fredette ds temp,arg1,temp ; 8th divide step
499 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
500 1.1 fredette ds temp,arg1,temp ; 9th divide step
501 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
502 1.1 fredette ds temp,arg1,temp ; 10th divide step
503 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
504 1.1 fredette ds temp,arg1,temp ; 11th divide step
505 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
506 1.1 fredette ds temp,arg1,temp ; 12th divide step
507 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
508 1.1 fredette ds temp,arg1,temp ; 13th divide step
509 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
510 1.1 fredette ds temp,arg1,temp ; 14th divide step
511 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
512 1.1 fredette ds temp,arg1,temp ; 15th divide step
513 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
514 1.1 fredette ds temp,arg1,temp ; 16th divide step
515 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
516 1.1 fredette ds temp,arg1,temp ; 17th divide step
517 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
518 1.1 fredette ds temp,arg1,temp ; 18th divide step
519 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
520 1.1 fredette ds temp,arg1,temp ; 19th divide step
521 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
522 1.1 fredette ds temp,arg1,temp ; 20th divide step
523 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
524 1.1 fredette ds temp,arg1,temp ; 21st divide step
525 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
526 1.1 fredette ds temp,arg1,temp ; 22nd divide step
527 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
528 1.1 fredette ds temp,arg1,temp ; 23rd divide step
529 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
530 1.1 fredette ds temp,arg1,temp ; 24th divide step
531 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
532 1.1 fredette ds temp,arg1,temp ; 25th divide step
533 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
534 1.1 fredette ds temp,arg1,temp ; 26th divide step
535 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
536 1.1 fredette ds temp,arg1,temp ; 27th divide step
537 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
538 1.1 fredette ds temp,arg1,temp ; 28th divide step
539 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
540 1.1 fredette ds temp,arg1,temp ; 29th divide step
541 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
542 1.1 fredette ds temp,arg1,temp ; 30th divide step
543 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
544 1.1 fredette ds temp,arg1,temp ; 31st divide step
545 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
546 1.1 fredette ds temp,arg1,temp ; 32nd divide step,
547 1.1 fredette bv 0(r31)
548 1.1 fredette addc retreg,retreg,retreg ; shift last retreg bit into retreg
549 1.1 fredette ;_____________________________________________________________________________
550 1.1 fredette ; handle the cases where divisor is a small constant or has high bit on
551 1.1 fredette special_divisor:
552 1.1 fredette blr arg1,r0
553 1.1 fredette comib,>,n 0,arg1,big_divisor ; nullify previous instruction
554 1.1 fredette zero_divisor: ; this label is here to provide external visibility
555 1.1 fredette
556 1.1 fredette addit,= 0,arg1,0 ; trap for zero dvr
557 1.1 fredette nop
558 1.1 fredette bv 0(r31) ; divisor == 1
559 1.1 fredette copy arg0,retreg
560 1.1 fredette bv 0(r31) ; divisor == 2
561 1.1 fredette extru arg0,30,31,retreg
562 1.1 fredette b,n $$divU_3 ; divisor == 3
563 1.1 fredette nop
564 1.1 fredette bv 0(r31) ; divisor == 4
565 1.1 fredette extru arg0,29,30,retreg
566 1.1 fredette b,n $$divU_5 ; divisor == 5
567 1.1 fredette nop
568 1.1 fredette b,n $$divU_6 ; divisor == 6
569 1.1 fredette nop
570 1.1 fredette b,n $$divU_7 ; divisor == 7
571 1.1 fredette nop
572 1.1 fredette bv 0(r31) ; divisor == 8
573 1.1 fredette extru arg0,28,29,retreg
574 1.1 fredette b,n $$divU_9 ; divisor == 9
575 1.1 fredette nop
576 1.1 fredette b,n $$divU_10 ; divisor == 10
577 1.1 fredette nop
578 1.1 fredette b normal ; divisor == 11
579 1.1 fredette ds r0,temp,r0 ; set V-bit to 1
580 1.1 fredette b,n $$divU_12 ; divisor == 12
581 1.1 fredette nop
582 1.1 fredette b normal ; divisor == 13
583 1.1 fredette ds r0,temp,r0 ; set V-bit to 1
584 1.1 fredette b,n $$divU_14 ; divisor == 14
585 1.1 fredette nop
586 1.1 fredette b,n $$divU_15 ; divisor == 15
587 1.1 fredette nop
588 1.1 fredette ;_____________________________________________________________________________
589 1.1 fredette ; Handle the case where the high bit is on in the divisor.
590 1.1 fredette ; Compute: if( dividend>=divisor) quotient=1; else quotient=0;
591 1.1 fredette ; Note: dividend>==divisor iff dividend-divisor does not borrow
592 1.1 fredette ; and not borrow iff carry
593 1.1 fredette big_divisor:
594 1.1 fredette sub arg0,arg1,r0
595 1.1 fredette bv 0(r31)
596 1.1 fredette addc r0,r0,retreg
597 1.1 fredette .procend
598 1.1 fredette .end
599 1.1 fredette
600 1.1 fredette t2: .EQU r1
601 1.1 fredette
602 1.1 fredette ; x2 .EQU arg0 ; r26
603 1.1 fredette t1: .EQU arg1 ; r25
604 1.1 fredette
605 1.1 fredette ; x1 .EQU ret1 ; r29
606 1.1 fredette ;_____________________________________________________________________________
607 1.1 fredette
608 1.1 fredette $$divide_by_constant:
609 1.1 fredette .PROC
610 1.1 fredette .CALLINFO NO_CALLS
611 1.1 fredette .export $$divide_by_constant,millicode
612 1.1 fredette ; Provides a "nice" label for the code covered by the unwind descriptor
613 1.1 fredette ; for things like gprof.
614 1.1 fredette
615 1.1 fredette $$divI_2:
616 1.1 fredette .EXPORT $$divI_2,MILLICODE
617 1.1 fredette COMCLR,>= arg0,0,0
618 1.1 fredette ADDI 1,arg0,arg0
619 1.1 fredette bv 0(r31)
620 1.1 fredette EXTRS arg0,30,31,ret1
621 1.1 fredette
622 1.1 fredette $$divI_4:
623 1.1 fredette .EXPORT $$divI_4,MILLICODE
624 1.1 fredette COMCLR,>= arg0,0,0
625 1.1 fredette ADDI 3,arg0,arg0
626 1.1 fredette bv 0(r31)
627 1.1 fredette EXTRS arg0,29,30,ret1
628 1.1 fredette
629 1.1 fredette $$divI_8:
630 1.1 fredette .EXPORT $$divI_8,MILLICODE
631 1.1 fredette COMCLR,>= arg0,0,0
632 1.1 fredette ADDI 7,arg0,arg0
633 1.1 fredette bv 0(r31)
634 1.1 fredette EXTRS arg0,28,29,ret1
635 1.1 fredette
636 1.1 fredette $$divI_16:
637 1.1 fredette .EXPORT $$divI_16,MILLICODE
638 1.1 fredette COMCLR,>= arg0,0,0
639 1.1 fredette ADDI 15,arg0,arg0
640 1.1 fredette bv 0(r31)
641 1.1 fredette EXTRS arg0,27,28,ret1
642 1.1 fredette
643 1.1 fredette $$divI_3:
644 1.1 fredette .EXPORT $$divI_3,MILLICODE
645 1.1 fredette COMB,<,N arg0,0,$neg3
646 1.1 fredette
647 1.1 fredette ADDI 1,arg0,arg0
648 1.1 fredette EXTRU arg0,1,2,ret1
649 1.1 fredette SH2ADD arg0,arg0,arg0
650 1.1 fredette B $pos
651 1.1 fredette ADDC ret1,0,ret1
652 1.1 fredette
653 1.1 fredette $neg3:
654 1.1 fredette SUBI 1,arg0,arg0
655 1.1 fredette EXTRU arg0,1,2,ret1
656 1.1 fredette SH2ADD arg0,arg0,arg0
657 1.1 fredette B $neg
658 1.1 fredette ADDC ret1,0,ret1
659 1.1 fredette
660 1.1 fredette $$divU_3:
661 1.1 fredette .EXPORT $$divU_3,MILLICODE
662 1.1 fredette ADDI 1,arg0,arg0
663 1.1 fredette ADDC 0,0,ret1
664 1.1 fredette SHD ret1,arg0,30,t1
665 1.1 fredette SH2ADD arg0,arg0,arg0
666 1.1 fredette B $pos
667 1.1 fredette ADDC ret1,t1,ret1
668 1.1 fredette
669 1.1 fredette $$divI_5:
670 1.1 fredette .EXPORT $$divI_5,MILLICODE
671 1.1 fredette COMB,<,N arg0,0,$neg5
672 1.1 fredette ADDI 3,arg0,t1
673 1.1 fredette SH1ADD arg0,t1,arg0
674 1.1 fredette B $pos
675 1.1 fredette ADDC 0,0,ret1
676 1.1 fredette
677 1.1 fredette $neg5:
678 1.1 fredette SUB 0,arg0,arg0
679 1.1 fredette ADDI 1,arg0,arg0
680 1.1 fredette SHD 0,arg0,31,ret1
681 1.1 fredette SH1ADD arg0,arg0,arg0
682 1.1 fredette B $neg
683 1.1 fredette ADDC ret1,0,ret1
684 1.1 fredette
685 1.1 fredette $$divU_5:
686 1.1 fredette .EXPORT $$divU_5,MILLICODE
687 1.1 fredette ADDI 1,arg0,arg0
688 1.1 fredette ADDC 0,0,ret1
689 1.1 fredette SHD ret1,arg0,31,t1
690 1.1 fredette SH1ADD arg0,arg0,arg0
691 1.1 fredette B $pos
692 1.1 fredette ADDC t1,ret1,ret1
693 1.1 fredette
694 1.1 fredette $$divI_6:
695 1.1 fredette .EXPORT $$divI_6,MILLICODE
696 1.1 fredette COMB,<,N arg0,0,$neg6
697 1.1 fredette EXTRU arg0,30,31,arg0
698 1.1 fredette ADDI 5,arg0,t1
699 1.1 fredette SH2ADD arg0,t1,arg0
700 1.1 fredette B $pos
701 1.1 fredette ADDC 0,0,ret1
702 1.1 fredette
703 1.1 fredette $neg6:
704 1.1 fredette SUBI 2,arg0,arg0
705 1.1 fredette EXTRU arg0,30,31,arg0
706 1.1 fredette SHD 0,arg0,30,ret1
707 1.1 fredette SH2ADD arg0,arg0,arg0
708 1.1 fredette B $neg
709 1.1 fredette ADDC ret1,0,ret1
710 1.1 fredette
711 1.1 fredette $$divU_6:
712 1.1 fredette .EXPORT $$divU_6,MILLICODE
713 1.1 fredette EXTRU arg0,30,31,arg0
714 1.1 fredette ADDI 1,arg0,arg0
715 1.1 fredette SHD 0,arg0,30,ret1
716 1.1 fredette SH2ADD arg0,arg0,arg0
717 1.1 fredette B $pos
718 1.1 fredette ADDC ret1,0,ret1
719 1.1 fredette
720 1.1 fredette $$divU_10:
721 1.1 fredette .EXPORT $$divU_10,MILLICODE
722 1.1 fredette EXTRU arg0,30,31,arg0
723 1.1 fredette ADDI 3,arg0,t1
724 1.1 fredette SH1ADD arg0,t1,arg0
725 1.1 fredette ADDC 0,0,ret1
726 1.1 fredette $pos:
727 1.1 fredette SHD ret1,arg0,28,t1
728 1.1 fredette SHD arg0,0,28,t2
729 1.1 fredette ADD arg0,t2,arg0
730 1.1 fredette ADDC ret1,t1,ret1
731 1.1 fredette $pos_for_17:
732 1.1 fredette SHD ret1,arg0,24,t1
733 1.1 fredette SHD arg0,0,24,t2
734 1.1 fredette ADD arg0,t2,arg0
735 1.1 fredette ADDC ret1,t1,ret1
736 1.1 fredette
737 1.1 fredette SHD ret1,arg0,16,t1
738 1.1 fredette SHD arg0,0,16,t2
739 1.1 fredette ADD arg0,t2,arg0
740 1.1 fredette bv 0(r31)
741 1.1 fredette ADDC ret1,t1,ret1
742 1.1 fredette
743 1.1 fredette $$divI_10:
744 1.1 fredette .EXPORT $$divI_10,MILLICODE
745 1.1 fredette COMB,< arg0,0,$neg10
746 1.1 fredette COPY 0,ret1
747 1.1 fredette EXTRU arg0,30,31,arg0
748 1.1 fredette ADDIB,TR 1,arg0,$pos
749 1.1 fredette SH1ADD arg0,arg0,arg0
750 1.1 fredette
751 1.1 fredette $neg10:
752 1.1 fredette SUBI 2,arg0,arg0
753 1.1 fredette EXTRU arg0,30,31,arg0
754 1.1 fredette SH1ADD arg0,arg0,arg0
755 1.1 fredette $neg:
756 1.1 fredette SHD ret1,arg0,28,t1
757 1.1 fredette SHD arg0,0,28,t2
758 1.1 fredette ADD arg0,t2,arg0
759 1.1 fredette ADDC ret1,t1,ret1
760 1.1 fredette $neg_for_17:
761 1.1 fredette SHD ret1,arg0,24,t1
762 1.1 fredette SHD arg0,0,24,t2
763 1.1 fredette ADD arg0,t2,arg0
764 1.1 fredette ADDC ret1,t1,ret1
765 1.1 fredette
766 1.1 fredette SHD ret1,arg0,16,t1
767 1.1 fredette SHD arg0,0,16,t2
768 1.1 fredette ADD arg0,t2,arg0
769 1.1 fredette ADDC ret1,t1,ret1
770 1.1 fredette bv 0(r31)
771 1.1 fredette SUB 0,ret1,ret1
772 1.1 fredette
773 1.1 fredette $$divI_12:
774 1.1 fredette .EXPORT $$divI_12,MILLICODE
775 1.1 fredette COMB,< arg0,0,$neg12
776 1.1 fredette COPY 0,ret1
777 1.1 fredette EXTRU arg0,29,30,arg0
778 1.1 fredette ADDIB,TR 1,arg0,$pos
779 1.1 fredette SH2ADD arg0,arg0,arg0
780 1.1 fredette
781 1.1 fredette $neg12:
782 1.1 fredette SUBI 4,arg0,arg0
783 1.1 fredette EXTRU arg0,29,30,arg0
784 1.1 fredette B $neg
785 1.1 fredette SH2ADD arg0,arg0,arg0
786 1.1 fredette
787 1.1 fredette $$divU_12:
788 1.1 fredette .EXPORT $$divU_12,MILLICODE
789 1.1 fredette EXTRU arg0,29,30,arg0
790 1.1 fredette ADDI 5,arg0,t1
791 1.1 fredette SH2ADD arg0,t1,arg0
792 1.1 fredette B $pos
793 1.1 fredette ADDC 0,0,ret1
794 1.1 fredette
795 1.1 fredette $$divI_15:
796 1.1 fredette .EXPORT $$divI_15,MILLICODE
797 1.1 fredette COMB,< arg0,0,$neg15
798 1.1 fredette COPY 0,ret1
799 1.1 fredette ADDIB,TR 1,arg0,$pos+4
800 1.1 fredette SHD ret1,arg0,28,t1
801 1.1 fredette
802 1.1 fredette $neg15:
803 1.1 fredette B $neg
804 1.1 fredette SUBI 1,arg0,arg0
805 1.1 fredette
806 1.1 fredette $$divU_15:
807 1.1 fredette .EXPORT $$divU_15,MILLICODE
808 1.1 fredette ADDI 1,arg0,arg0
809 1.1 fredette B $pos
810 1.1 fredette ADDC 0,0,ret1
811 1.1 fredette
812 1.1 fredette $$divI_17:
813 1.1 fredette .EXPORT $$divI_17,MILLICODE
814 1.1 fredette COMB,<,N arg0,0,$neg17
815 1.1 fredette ADDI 1,arg0,arg0
816 1.1 fredette SHD 0,arg0,28,t1
817 1.1 fredette SHD arg0,0,28,t2
818 1.1 fredette SUB t2,arg0,arg0
819 1.1 fredette B $pos_for_17
820 1.1 fredette SUBB t1,0,ret1
821 1.1 fredette
822 1.1 fredette $neg17:
823 1.1 fredette SUBI 1,arg0,arg0
824 1.1 fredette SHD 0,arg0,28,t1
825 1.1 fredette SHD arg0,0,28,t2
826 1.1 fredette SUB t2,arg0,arg0
827 1.1 fredette B $neg_for_17
828 1.1 fredette SUBB t1,0,ret1
829 1.1 fredette
830 1.1 fredette $$divU_17:
831 1.1 fredette .EXPORT $$divU_17,MILLICODE
832 1.1 fredette ADDI 1,arg0,arg0
833 1.1 fredette ADDC 0,0,ret1
834 1.1 fredette SHD ret1,arg0,28,t1
835 1.1 fredette $u17:
836 1.1 fredette SHD arg0,0,28,t2
837 1.1 fredette SUB t2,arg0,arg0
838 1.1 fredette B $pos_for_17
839 1.1 fredette SUBB t1,ret1,ret1
840 1.1 fredette
841 1.1 fredette $$divI_7:
842 1.1 fredette .EXPORT $$divI_7,MILLICODE
843 1.1 fredette COMB,<,N arg0,0,$neg7
844 1.1 fredette $7:
845 1.1 fredette ADDI 1,arg0,arg0
846 1.1 fredette SHD 0,arg0,29,ret1
847 1.1 fredette SH3ADD arg0,arg0,arg0
848 1.1 fredette ADDC ret1,0,ret1
849 1.1 fredette $pos7:
850 1.1 fredette SHD ret1,arg0,26,t1
851 1.1 fredette SHD arg0,0,26,t2
852 1.1 fredette ADD arg0,t2,arg0
853 1.1 fredette ADDC ret1,t1,ret1
854 1.1 fredette
855 1.1 fredette SHD ret1,arg0,20,t1
856 1.1 fredette SHD arg0,0,20,t2
857 1.1 fredette ADD arg0,t2,arg0
858 1.1 fredette ADDC ret1,t1,t1
859 1.1 fredette
860 1.1 fredette COPY 0,ret1
861 1.1 fredette SHD,= t1,arg0,24,t1
862 1.1 fredette $1:
863 1.1 fredette ADDB,TR t1,ret1,$2
864 1.1 fredette EXTRU arg0,31,24,arg0
865 1.1 fredette
866 1.1 fredette bv,n 0(r31)
867 1.1 fredette
868 1.1 fredette $2:
869 1.1 fredette ADDB,TR t1,arg0,$1
870 1.1 fredette EXTRU,= arg0,7,8,t1
871 1.1 fredette
872 1.1 fredette $neg7:
873 1.1 fredette SUBI 1,arg0,arg0
874 1.1 fredette $8:
875 1.1 fredette SHD 0,arg0,29,ret1
876 1.1 fredette SH3ADD arg0,arg0,arg0
877 1.1 fredette ADDC ret1,0,ret1
878 1.1 fredette
879 1.1 fredette $neg7_shift:
880 1.1 fredette SHD ret1,arg0,26,t1
881 1.1 fredette SHD arg0,0,26,t2
882 1.1 fredette ADD arg0,t2,arg0
883 1.1 fredette ADDC ret1,t1,ret1
884 1.1 fredette
885 1.1 fredette SHD ret1,arg0,20,t1
886 1.1 fredette SHD arg0,0,20,t2
887 1.1 fredette ADD arg0,t2,arg0
888 1.1 fredette ADDC ret1,t1,t1
889 1.1 fredette
890 1.1 fredette COPY 0,ret1
891 1.1 fredette SHD,= t1,arg0,24,t1
892 1.1 fredette $3:
893 1.1 fredette ADDB,TR t1,ret1,$4
894 1.1 fredette EXTRU arg0,31,24,arg0
895 1.1 fredette
896 1.1 fredette bv 0(r31)
897 1.1 fredette SUB 0,ret1,ret1
898 1.1 fredette
899 1.1 fredette $4:
900 1.1 fredette ADDB,TR t1,arg0,$3
901 1.1 fredette EXTRU,= arg0,7,8,t1
902 1.1 fredette
903 1.1 fredette $$divU_7:
904 1.1 fredette .EXPORT $$divU_7,MILLICODE
905 1.1 fredette ADDI 1,arg0,arg0
906 1.1 fredette ADDC 0,0,ret1
907 1.1 fredette SHD ret1,arg0,29,t1
908 1.1 fredette SH3ADD arg0,arg0,arg0
909 1.1 fredette B $pos7
910 1.1 fredette ADDC t1,ret1,ret1
911 1.1 fredette
912 1.1 fredette $$divI_9:
913 1.1 fredette .EXPORT $$divI_9,MILLICODE
914 1.1 fredette COMB,<,N arg0,0,$neg9
915 1.1 fredette ADDI 1,arg0,arg0
916 1.1 fredette SHD 0,arg0,29,t1
917 1.1 fredette SHD arg0,0,29,t2
918 1.1 fredette SUB t2,arg0,arg0
919 1.1 fredette B $pos7
920 1.1 fredette SUBB t1,0,ret1
921 1.1 fredette
922 1.1 fredette $neg9:
923 1.1 fredette SUBI 1,arg0,arg0
924 1.1 fredette SHD 0,arg0,29,t1
925 1.1 fredette SHD arg0,0,29,t2
926 1.1 fredette SUB t2,arg0,arg0
927 1.1 fredette B $neg7_shift
928 1.1 fredette SUBB t1,0,ret1
929 1.1 fredette
930 1.1 fredette $$divU_9:
931 1.1 fredette .EXPORT $$divU_9,MILLICODE
932 1.1 fredette ADDI 1,arg0,arg0
933 1.1 fredette ADDC 0,0,ret1
934 1.1 fredette SHD ret1,arg0,29,t1
935 1.1 fredette SHD arg0,0,29,t2
936 1.1 fredette SUB t2,arg0,arg0
937 1.1 fredette B $pos7
938 1.1 fredette SUBB t1,ret1,ret1
939 1.1 fredette
940 1.1 fredette $$divI_14:
941 1.1 fredette .EXPORT $$divI_14,MILLICODE
942 1.1 fredette COMB,<,N arg0,0,$neg14
943 1.1 fredette $$divU_14:
944 1.1 fredette .EXPORT $$divU_14,MILLICODE
945 1.1 fredette B $7
946 1.1 fredette EXTRU arg0,30,31,arg0
947 1.1 fredette
948 1.1 fredette $neg14:
949 1.1 fredette SUBI 2,arg0,arg0
950 1.1 fredette B $8
951 1.1 fredette EXTRU arg0,30,31,arg0
952 1.1 fredette
953 1.1 fredette .PROCEND
954 1.1 fredette .END
955 1.1 fredette
956 1.1 fredette rmndr: .EQU ret1 ; r29
957 1.1 fredette
958 1.1 fredette .export $$remU,millicode
959 1.1 fredette $$remU:
960 1.1 fredette .proc
961 1.1 fredette .callinfo NO_CALLS
962 1.1 fredette .entry
963 1.1 fredette
964 1.1 fredette comib,>=,n 0,arg1,special_case
965 1.1 fredette sub r0,arg1,rmndr ; clear carry, negate the divisor
966 1.1 fredette ds r0,rmndr,r0 ; set V-bit to 1
967 1.1 fredette add arg0,arg0,temp ; shift msb bit into carry
968 1.1 fredette ds r0,arg1,rmndr ; 1st divide step, if no carry
969 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
970 1.1 fredette ds rmndr,arg1,rmndr ; 2nd divide step
971 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
972 1.1 fredette ds rmndr,arg1,rmndr ; 3rd divide step
973 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
974 1.1 fredette ds rmndr,arg1,rmndr ; 4th divide step
975 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
976 1.1 fredette ds rmndr,arg1,rmndr ; 5th divide step
977 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
978 1.1 fredette ds rmndr,arg1,rmndr ; 6th divide step
979 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
980 1.1 fredette ds rmndr,arg1,rmndr ; 7th divide step
981 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
982 1.1 fredette ds rmndr,arg1,rmndr ; 8th divide step
983 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
984 1.1 fredette ds rmndr,arg1,rmndr ; 9th divide step
985 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
986 1.1 fredette ds rmndr,arg1,rmndr ; 10th divide step
987 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
988 1.1 fredette ds rmndr,arg1,rmndr ; 11th divide step
989 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
990 1.1 fredette ds rmndr,arg1,rmndr ; 12th divide step
991 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
992 1.1 fredette ds rmndr,arg1,rmndr ; 13th divide step
993 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
994 1.1 fredette ds rmndr,arg1,rmndr ; 14th divide step
995 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
996 1.1 fredette ds rmndr,arg1,rmndr ; 15th divide step
997 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
998 1.1 fredette ds rmndr,arg1,rmndr ; 16th divide step
999 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1000 1.1 fredette ds rmndr,arg1,rmndr ; 17th divide step
1001 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1002 1.1 fredette ds rmndr,arg1,rmndr ; 18th divide step
1003 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1004 1.1 fredette ds rmndr,arg1,rmndr ; 19th divide step
1005 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1006 1.1 fredette ds rmndr,arg1,rmndr ; 20th divide step
1007 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1008 1.1 fredette ds rmndr,arg1,rmndr ; 21st divide step
1009 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1010 1.1 fredette ds rmndr,arg1,rmndr ; 22nd divide step
1011 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1012 1.1 fredette ds rmndr,arg1,rmndr ; 23rd divide step
1013 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1014 1.1 fredette ds rmndr,arg1,rmndr ; 24th divide step
1015 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1016 1.1 fredette ds rmndr,arg1,rmndr ; 25th divide step
1017 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1018 1.1 fredette ds rmndr,arg1,rmndr ; 26th divide step
1019 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1020 1.1 fredette ds rmndr,arg1,rmndr ; 27th divide step
1021 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1022 1.1 fredette ds rmndr,arg1,rmndr ; 28th divide step
1023 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1024 1.1 fredette ds rmndr,arg1,rmndr ; 29th divide step
1025 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1026 1.1 fredette ds rmndr,arg1,rmndr ; 30th divide step
1027 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1028 1.1 fredette ds rmndr,arg1,rmndr ; 31st divide step
1029 1.1 fredette addc temp,temp,temp ; shift temp with/into carry
1030 1.1 fredette ds rmndr,arg1,rmndr ; 32nd divide step,
1031 1.1 fredette comiclr,<= 0,rmndr,r0
1032 1.1 fredette add rmndr,arg1,rmndr ; correction
1033 1.1 fredette ; .exit
1034 1.1 fredette bv,n 0(r31)
1035 1.1 fredette nop
1036 1.1 fredette ; Putting >= on the last DS and deleting COMICLR does not work!
1037 1.1 fredette ;_____________________________________________________________________________
1038 1.1 fredette special_case:
1039 1.1 fredette addit,= 0,arg1,r0 ; trap on div by zero
1040 1.1 fredette sub,>>= arg0,arg1,rmndr
1041 1.1 fredette copy arg0,rmndr
1042 1.1 fredette .exit
1043 1.1 fredette bv,n 0(r31)
1044 1.1 fredette nop
1045 1.1 fredette .procend
1046 1.1 fredette .end
1047 1.1 fredette
1048 1.1 fredette ; Use bv 0(r31) and bv,n 0(r31) instead.
1049 1.1 fredette ; #define return bv 0(%mrp)
1050 1.1 fredette ; #define return_n bv,n 0(%mrp)
1051 1.1 fredette
1052 1.1 fredette .align 16
1053 1.1 fredette $$mulI:
1054 1.1 fredette
1055 1.1 fredette .proc
1056 1.1 fredette .callinfo NO_CALLS
1057 1.1 fredette .export $$mulI, millicode
1058 1.1 fredette combt,<<= %r25,%r26,l4 ; swap args if unsigned %r25>%r26
1059 1.1 fredette copy 0,%r29 ; zero out the result
1060 1.1 fredette xor %r26,%r25,%r26 ; swap %r26 & %r25 using the
1061 1.1 fredette xor %r26,%r25,%r25 ; old xor trick
1062 1.1 fredette xor %r26,%r25,%r26
1063 1.1 fredette l4: combt,<= 0,%r26,l3 ; if %r26>=0 then proceed like unsigned
1064 1.1 fredette
1065 1.1 fredette zdep %r25,30,8,%r1 ; %r1 = (%r25&0xff)<<1 *********
1066 1.1 fredette sub,> 0,%r25,%r1 ; otherwise negate both and
1067 1.1 fredette combt,<=,n %r26,%r1,l2 ; swap back if |%r26|<|%r25|
1068 1.1 fredette sub 0,%r26,%r25
1069 1.1 fredette movb,tr,n %r1,%r26,l2 ; 10th inst.
1070 1.1 fredette
1071 1.1 fredette l0: add %r29,%r1,%r29 ; add in this partial product
1072 1.1 fredette
1073 1.1 fredette l1: zdep %r26,23,24,%r26 ; %r26 <<= 8 ******************
1074 1.1 fredette
1075 1.1 fredette l2: zdep %r25,30,8,%r1 ; %r1 = (%r25&0xff)<<1 *********
1076 1.1 fredette
1077 1.1 fredette l3: blr %r1,0 ; case on these 8 bits ******
1078 1.1 fredette
1079 1.1 fredette extru %r25,23,24,%r25 ; %r25 >>= 8 ******************
1080 1.1 fredette
1081 1.1 fredette ;16 insts before this.
1082 1.1 fredette ; %r26 <<= 8 **************************
1083 1.1 fredette x0: comb,<> %r25,0,l2 ! zdep %r26,23,24,%r26 ! bv,n 0(r31) ! nop
1084 1.1 fredette
1085 1.1 fredette x1: comb,<> %r25,0,l1 ! add %r29,%r26,%r29 ! bv,n 0(r31) ! nop
1086 1.1 fredette
1087 1.1 fredette x2: comb,<> %r25,0,l1 ! sh1add %r26,%r29,%r29 ! bv,n 0(r31) ! nop
1088 1.1 fredette
1089 1.1 fredette x3: comb,<> %r25,0,l0 ! sh1add %r26,%r26,%r1 ! bv 0(r31) ! add %r29,%r1,%r29
1090 1.1 fredette
1091 1.1 fredette x4: comb,<> %r25,0,l1 ! sh2add %r26,%r29,%r29 ! bv,n 0(r31) ! nop
1092 1.1 fredette
1093 1.1 fredette x5: comb,<> %r25,0,l0 ! sh2add %r26,%r26,%r1 ! bv 0(r31) ! add %r29,%r1,%r29
1094 1.1 fredette
1095 1.1 fredette x6: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh1add %r1,%r29,%r29 ! bv,n 0(r31)
1096 1.1 fredette
1097 1.1 fredette x7: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r26,%r29,%r29 ! b,n ret_t0
1098 1.1 fredette
1099 1.1 fredette x8: comb,<> %r25,0,l1 ! sh3add %r26,%r29,%r29 ! bv,n 0(r31) ! nop
1100 1.1 fredette
1101 1.1 fredette x9: comb,<> %r25,0,l0 ! sh3add %r26,%r26,%r1 ! bv 0(r31) ! add %r29,%r1,%r29
1102 1.1 fredette
1103 1.1 fredette x10: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh1add %r1,%r29,%r29 ! bv,n 0(r31)
1104 1.1 fredette
1105 1.1 fredette x11: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r26,%r29,%r29 ! b,n ret_t0
1106 1.1 fredette
1107 1.1 fredette x12: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh2add %r1,%r29,%r29 ! bv,n 0(r31)
1108 1.1 fredette
1109 1.1 fredette x13: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r26,%r29,%r29 ! b,n ret_t0
1110 1.1 fredette
1111 1.1 fredette x14: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1112 1.1 fredette
1113 1.1 fredette x15: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh1add %r1,%r1,%r1 ! b,n ret_t0
1114 1.1 fredette
1115 1.1 fredette x16: zdep %r26,27,28,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31)
1116 1.1 fredette
1117 1.1 fredette x17: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r26,%r1,%r1 ! b,n ret_t0
1118 1.1 fredette
1119 1.1 fredette x18: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh1add %r1,%r29,%r29 ! bv,n 0(r31)
1120 1.1 fredette
1121 1.1 fredette x19: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh1add %r1,%r26,%r1 ! b,n ret_t0
1122 1.1 fredette
1123 1.1 fredette x20: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh2add %r1,%r29,%r29 ! bv,n 0(r31)
1124 1.1 fredette
1125 1.1 fredette x21: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r26,%r1 ! b,n ret_t0
1126 1.1 fredette
1127 1.1 fredette x22: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1128 1.1 fredette
1129 1.1 fredette x23: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1130 1.1 fredette
1131 1.1 fredette x24: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh3add %r1,%r29,%r29 ! bv,n 0(r31)
1132 1.1 fredette
1133 1.1 fredette x25: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r1,%r1 ! b,n ret_t0
1134 1.1 fredette
1135 1.1 fredette x26: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1136 1.1 fredette
1137 1.1 fredette x27: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r1,%r1,%r1 ! b,n ret_t0
1138 1.1 fredette
1139 1.1 fredette x28: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1140 1.1 fredette
1141 1.1 fredette x29: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1142 1.1 fredette
1143 1.1 fredette x30: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1144 1.1 fredette
1145 1.1 fredette x31: zdep %r26,26,27,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0
1146 1.1 fredette
1147 1.1 fredette x32: zdep %r26,26,27,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31)
1148 1.1 fredette
1149 1.1 fredette x33: sh3add %r26,0,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r26,%r1 ! b,n ret_t0
1150 1.1 fredette
1151 1.1 fredette x34: zdep %r26,27,28,%r1 ! add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1152 1.1 fredette
1153 1.1 fredette x35: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r26,%r1,%r1
1154 1.1 fredette
1155 1.1 fredette x36: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh2add %r1,%r29,%r29 ! bv,n 0(r31)
1156 1.1 fredette
1157 1.1 fredette x37: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r26,%r1 ! b,n ret_t0
1158 1.1 fredette
1159 1.1 fredette x38: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1160 1.1 fredette
1161 1.1 fredette x39: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1162 1.1 fredette
1163 1.1 fredette x40: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh3add %r1,%r29,%r29 ! bv,n 0(r31)
1164 1.1 fredette
1165 1.1 fredette x41: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r1,%r26,%r1 ! b,n ret_t0
1166 1.1 fredette
1167 1.1 fredette x42: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1168 1.1 fredette
1169 1.1 fredette x43: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1170 1.1 fredette
1171 1.1 fredette x44: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1172 1.1 fredette
1173 1.1 fredette x45: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r1,%r1 ! b,n ret_t0
1174 1.1 fredette
1175 1.1 fredette x46: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! add %r1,%r26,%r1
1176 1.1 fredette
1177 1.1 fredette x47: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh1add %r26,%r1,%r1
1178 1.1 fredette
1179 1.1 fredette x48: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! zdep %r1,27,28,%r1 ! b,n ret_t0
1180 1.1 fredette
1181 1.1 fredette x49: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r26,%r1,%r1
1182 1.1 fredette
1183 1.1 fredette x50: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1184 1.1 fredette
1185 1.1 fredette x51: sh3add %r26,%r26,%r1 ! sh3add %r26,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1186 1.1 fredette
1187 1.1 fredette x52: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1188 1.1 fredette
1189 1.1 fredette x53: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1190 1.1 fredette
1191 1.1 fredette x54: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1192 1.1 fredette
1193 1.1 fredette x55: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1194 1.1 fredette
1195 1.1 fredette x56: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1196 1.1 fredette
1197 1.1 fredette x57: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1198 1.1 fredette
1199 1.1 fredette x58: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1
1200 1.1 fredette
1201 1.1 fredette x59: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t02a0 ! sh1add %r1,%r1,%r1
1202 1.1 fredette
1203 1.1 fredette x60: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1204 1.1 fredette
1205 1.1 fredette x61: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1206 1.1 fredette
1207 1.1 fredette x62: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1208 1.1 fredette
1209 1.1 fredette x63: zdep %r26,25,26,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0
1210 1.1 fredette
1211 1.1 fredette x64: zdep %r26,25,26,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31)
1212 1.1 fredette
1213 1.1 fredette x65: sh3add %r26,0,%r1 ! comb,<> %r25,0,l0 ! sh3add %r1,%r26,%r1 ! b,n ret_t0
1214 1.1 fredette
1215 1.1 fredette x66: zdep %r26,26,27,%r1 ! add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1216 1.1 fredette
1217 1.1 fredette x67: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1218 1.1 fredette
1219 1.1 fredette x68: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1220 1.1 fredette
1221 1.1 fredette x69: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1222 1.1 fredette
1223 1.1 fredette x70: zdep %r26,25,26,%r1 ! sh2add %r26,%r1,%r1 ! b e_t0 ! sh1add %r26,%r1,%r1
1224 1.1 fredette
1225 1.1 fredette x71: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_t0 ! sub %r1,%r26,%r1
1226 1.1 fredette
1227 1.1 fredette x72: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh3add %r1,%r29,%r29 ! bv,n 0(r31)
1228 1.1 fredette
1229 1.1 fredette x73: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! add %r29,%r1,%r29
1230 1.1 fredette
1231 1.1 fredette x74: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1232 1.1 fredette
1233 1.1 fredette x75: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1234 1.1 fredette
1235 1.1 fredette x76: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1236 1.1 fredette
1237 1.1 fredette x77: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1238 1.1 fredette
1239 1.1 fredette x78: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1
1240 1.1 fredette
1241 1.1 fredette x79: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1
1242 1.1 fredette
1243 1.1 fredette x80: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! add %r29,%r1,%r29
1244 1.1 fredette
1245 1.1 fredette x81: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_shift ! add %r29,%r1,%r29
1246 1.1 fredette
1247 1.1 fredette x82: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1248 1.1 fredette
1249 1.1 fredette x83: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1250 1.1 fredette
1251 1.1 fredette x84: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1252 1.1 fredette
1253 1.1 fredette x85: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1254 1.1 fredette
1255 1.1 fredette x86: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1
1256 1.1 fredette
1257 1.1 fredette x87: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_t02a0 ! sh2add %r26,%r1,%r1
1258 1.1 fredette
1259 1.1 fredette x88: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1260 1.1 fredette
1261 1.1 fredette x89: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1
1262 1.1 fredette
1263 1.1 fredette x90: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1264 1.1 fredette
1265 1.1 fredette x91: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1266 1.1 fredette
1267 1.1 fredette x92: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1
1268 1.1 fredette
1269 1.1 fredette x93: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1270 1.1 fredette
1271 1.1 fredette x94: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh1add %r26,%r1,%r1
1272 1.1 fredette
1273 1.1 fredette x95: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1274 1.1 fredette
1275 1.1 fredette x96: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1276 1.1 fredette
1277 1.1 fredette x97: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1278 1.1 fredette
1279 1.1 fredette x98: zdep %r26,26,27,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh1add %r26,%r1,%r1
1280 1.1 fredette
1281 1.1 fredette x99: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1282 1.1 fredette
1283 1.1 fredette x100: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1284 1.1 fredette
1285 1.1 fredette x101: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1286 1.1 fredette
1287 1.1 fredette x102: zdep %r26,26,27,%r1 ! sh1add %r26,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1288 1.1 fredette
1289 1.1 fredette x103: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t02a0 ! sh2add %r1,%r26,%r1
1290 1.1 fredette
1291 1.1 fredette x104: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1292 1.1 fredette
1293 1.1 fredette x105: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1294 1.1 fredette
1295 1.1 fredette x106: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1
1296 1.1 fredette
1297 1.1 fredette x107: sh3add %r26,%r26,%r1 ! sh2add %r26,%r1,%r1 ! b e_t02a0 ! sh3add %r1,%r26,%r1
1298 1.1 fredette
1299 1.1 fredette x108: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1300 1.1 fredette
1301 1.1 fredette x109: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1302 1.1 fredette
1303 1.1 fredette x110: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1
1304 1.1 fredette
1305 1.1 fredette x111: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1306 1.1 fredette
1307 1.1 fredette x112: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! zdep %r1,27,28,%r1
1308 1.1 fredette
1309 1.1 fredette x113: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t02a0 ! sh1add %r1,%r1,%r1
1310 1.1 fredette
1311 1.1 fredette x114: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1
1312 1.1 fredette
1313 1.1 fredette x115: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1
1314 1.1 fredette
1315 1.1 fredette x116: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh2add %r1,%r26,%r1
1316 1.1 fredette
1317 1.1 fredette x117: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r1,%r1
1318 1.1 fredette
1319 1.1 fredette x118: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0a0 ! sh3add %r1,%r1,%r1
1320 1.1 fredette
1321 1.1 fredette x119: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t02a0 ! sh3add %r1,%r1,%r1
1322 1.1 fredette
1323 1.1 fredette x120: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1324 1.1 fredette
1325 1.1 fredette x121: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1
1326 1.1 fredette
1327 1.1 fredette x122: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1
1328 1.1 fredette
1329 1.1 fredette x123: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1330 1.1 fredette
1331 1.1 fredette x124: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1332 1.1 fredette
1333 1.1 fredette x125: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1334 1.1 fredette
1335 1.1 fredette x126: zdep %r26,25,26,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1336 1.1 fredette
1337 1.1 fredette x127: zdep %r26,24,25,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0
1338 1.1 fredette
1339 1.1 fredette x128: zdep %r26,24,25,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31)
1340 1.1 fredette
1341 1.1 fredette x129: zdep %r26,24,25,%r1 ! comb,<> %r25,0,l0 ! add %r1,%r26,%r1 ! b,n ret_t0
1342 1.1 fredette
1343 1.1 fredette x130: zdep %r26,25,26,%r1 ! add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1344 1.1 fredette
1345 1.1 fredette x131: sh3add %r26,0,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1346 1.1 fredette
1347 1.1 fredette x132: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1348 1.1 fredette
1349 1.1 fredette x133: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1350 1.1 fredette
1351 1.1 fredette x134: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1
1352 1.1 fredette
1353 1.1 fredette x135: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1354 1.1 fredette
1355 1.1 fredette x136: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1356 1.1 fredette
1357 1.1 fredette x137: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1
1358 1.1 fredette
1359 1.1 fredette x138: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1
1360 1.1 fredette
1361 1.1 fredette x139: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0a0 ! sh2add %r1,%r26,%r1
1362 1.1 fredette
1363 1.1 fredette x140: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh2add %r1,%r1,%r1
1364 1.1 fredette
1365 1.1 fredette x141: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0a0 ! sh1add %r1,%r26,%r1
1366 1.1 fredette
1367 1.1 fredette x142: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_2t0 ! sub %r1,%r26,%r1
1368 1.1 fredette
1369 1.1 fredette x143: zdep %r26,27,28,%r1 ! sh3add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1
1370 1.1 fredette
1371 1.1 fredette x144: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1372 1.1 fredette
1373 1.1 fredette x145: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1374 1.1 fredette
1375 1.1 fredette x146: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1376 1.1 fredette
1377 1.1 fredette x147: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1378 1.1 fredette
1379 1.1 fredette x148: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1380 1.1 fredette
1381 1.1 fredette x149: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1382 1.1 fredette
1383 1.1 fredette x150: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1
1384 1.1 fredette
1385 1.1 fredette x151: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r26,%r1
1386 1.1 fredette
1387 1.1 fredette x152: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1388 1.1 fredette
1389 1.1 fredette x153: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1
1390 1.1 fredette
1391 1.1 fredette x154: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1
1392 1.1 fredette
1393 1.1 fredette x155: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1394 1.1 fredette
1395 1.1 fredette x156: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1
1396 1.1 fredette
1397 1.1 fredette x157: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t02a0 ! sh2add %r1,%r1,%r1
1398 1.1 fredette
1399 1.1 fredette x158: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sub %r1,%r26,%r1
1400 1.1 fredette
1401 1.1 fredette x159: zdep %r26,26,27,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1
1402 1.1 fredette
1403 1.1 fredette x160: sh2add %r26,%r26,%r1 ! sh2add %r1,0,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1404 1.1 fredette
1405 1.1 fredette x161: sh3add %r26,0,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1406 1.1 fredette
1407 1.1 fredette x162: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1408 1.1 fredette
1409 1.1 fredette x163: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1
1410 1.1 fredette
1411 1.1 fredette x164: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1412 1.1 fredette
1413 1.1 fredette x165: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1414 1.1 fredette
1415 1.1 fredette x166: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1
1416 1.1 fredette
1417 1.1 fredette x167: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r26,%r1
1418 1.1 fredette
1419 1.1 fredette x168: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1420 1.1 fredette
1421 1.1 fredette x169: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1
1422 1.1 fredette
1423 1.1 fredette x170: zdep %r26,26,27,%r1 ! sh1add %r26,%r1,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1424 1.1 fredette
1425 1.1 fredette x171: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r1,%r1
1426 1.1 fredette
1427 1.1 fredette x172: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1
1428 1.1 fredette
1429 1.1 fredette x173: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t02a0 ! sh3add %r1,%r1,%r1
1430 1.1 fredette
1431 1.1 fredette x174: zdep %r26,26,27,%r1 ! sh1add %r26,%r1,%r1 ! b e_t04a0 ! sh2add %r1,%r1,%r1
1432 1.1 fredette
1433 1.1 fredette x175: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_5t0 ! sh1add %r1,%r26,%r1
1434 1.1 fredette
1435 1.1 fredette x176: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_8t0 ! add %r1,%r26,%r1
1436 1.1 fredette
1437 1.1 fredette x177: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_8t0a0 ! add %r1,%r26,%r1
1438 1.1 fredette
1439 1.1 fredette x178: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh3add %r1,%r26,%r1
1440 1.1 fredette
1441 1.1 fredette x179: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0a0 ! sh3add %r1,%r26,%r1
1442 1.1 fredette
1443 1.1 fredette x180: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1444 1.1 fredette
1445 1.1 fredette x181: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1446 1.1 fredette
1447 1.1 fredette x182: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1
1448 1.1 fredette
1449 1.1 fredette x183: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0a0 ! sh1add %r1,%r26,%r1
1450 1.1 fredette
1451 1.1 fredette x184: sh2add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_4t0 ! add %r1,%r26,%r1
1452 1.1 fredette
1453 1.1 fredette x185: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1454 1.1 fredette
1455 1.1 fredette x186: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1
1456 1.1 fredette
1457 1.1 fredette x187: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t02a0 ! sh2add %r1,%r1,%r1
1458 1.1 fredette
1459 1.1 fredette x188: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_4t0 ! sh1add %r26,%r1,%r1
1460 1.1 fredette
1461 1.1 fredette x189: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r1,%r1
1462 1.1 fredette
1463 1.1 fredette x190: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r1,%r1
1464 1.1 fredette
1465 1.1 fredette x191: zdep %r26,25,26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1
1466 1.1 fredette
1467 1.1 fredette x192: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1468 1.1 fredette
1469 1.1 fredette x193: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1
1470 1.1 fredette
1471 1.1 fredette x194: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1
1472 1.1 fredette
1473 1.1 fredette x195: sh3add %r26,0,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1474 1.1 fredette
1475 1.1 fredette x196: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1
1476 1.1 fredette
1477 1.1 fredette x197: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_4t0a0 ! sh1add %r1,%r26,%r1
1478 1.1 fredette
1479 1.1 fredette x198: zdep %r26,25,26,%r1 ! sh1add %r26,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1480 1.1 fredette
1481 1.1 fredette x199: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1
1482 1.1 fredette
1483 1.1 fredette x200: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1484 1.1 fredette
1485 1.1 fredette x201: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1
1486 1.1 fredette
1487 1.1 fredette x202: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1
1488 1.1 fredette
1489 1.1 fredette x203: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0a0 ! sh2add %r1,%r26,%r1
1490 1.1 fredette
1491 1.1 fredette x204: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r1,%r1
1492 1.1 fredette
1493 1.1 fredette x205: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1494 1.1 fredette
1495 1.1 fredette x206: zdep %r26,25,26,%r1 ! sh2add %r26,%r1,%r1 ! b e_t02a0 ! sh1add %r1,%r1,%r1
1496 1.1 fredette
1497 1.1 fredette x207: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_3t0 ! sh2add %r1,%r26,%r1
1498 1.1 fredette
1499 1.1 fredette x208: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_8t0 ! add %r1,%r26,%r1
1500 1.1 fredette
1501 1.1 fredette x209: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_8t0a0 ! add %r1,%r26,%r1
1502 1.1 fredette
1503 1.1 fredette x210: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r1,%r1
1504 1.1 fredette
1505 1.1 fredette x211: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh2add %r1,%r1,%r1
1506 1.1 fredette
1507 1.1 fredette x212: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_4t0 ! sh2add %r1,%r26,%r1
1508 1.1 fredette
1509 1.1 fredette x213: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_4t0a0 ! sh2add %r1,%r26,%r1
1510 1.1 fredette
1511 1.1 fredette x214: sh3add %r26,%r26,%r1 ! sh2add %r26,%r1,%r1 ! b e2t04a0 ! sh3add %r1,%r26,%r1
1512 1.1 fredette
1513 1.1 fredette x215: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_5t0 ! sh1add %r1,%r26,%r1
1514 1.1 fredette
1515 1.1 fredette x216: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1516 1.1 fredette
1517 1.1 fredette x217: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1
1518 1.1 fredette
1519 1.1 fredette x218: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1
1520 1.1 fredette
1521 1.1 fredette x219: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1522 1.1 fredette
1523 1.1 fredette x220: sh1add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1
1524 1.1 fredette
1525 1.1 fredette x221: sh1add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_4t0a0 ! sh1add %r1,%r26,%r1
1526 1.1 fredette
1527 1.1 fredette x222: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1
1528 1.1 fredette
1529 1.1 fredette x223: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1
1530 1.1 fredette
1531 1.1 fredette x224: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_8t0 ! add %r1,%r26,%r1
1532 1.1 fredette
1533 1.1 fredette x225: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1
1534 1.1 fredette
1535 1.1 fredette x226: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t02a0 ! zdep %r1,26,27,%r1
1536 1.1 fredette
1537 1.1 fredette x227: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t02a0 ! sh2add %r1,%r1,%r1
1538 1.1 fredette
1539 1.1 fredette x228: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r1,%r1
1540 1.1 fredette
1541 1.1 fredette x229: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0a0 ! sh1add %r1,%r1,%r1
1542 1.1 fredette
1543 1.1 fredette x230: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_5t0 ! add %r1,%r26,%r1
1544 1.1 fredette
1545 1.1 fredette x231: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_3t0 ! sh2add %r1,%r26,%r1
1546 1.1 fredette
1547 1.1 fredette x232: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_8t0 ! sh2add %r1,%r26,%r1
1548 1.1 fredette
1549 1.1 fredette x233: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_8t0a0 ! sh2add %r1,%r26,%r1
1550 1.1 fredette
1551 1.1 fredette x234: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh3add %r1,%r1,%r1
1552 1.1 fredette
1553 1.1 fredette x235: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh3add %r1,%r1,%r1
1554 1.1 fredette
1555 1.1 fredette x236: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e4t08a0 ! sh1add %r1,%r1,%r1
1556 1.1 fredette
1557 1.1 fredette x237: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_3t0 ! sub %r1,%r26,%r1
1558 1.1 fredette
1559 1.1 fredette x238: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e2t04a0 ! sh3add %r1,%r1,%r1
1560 1.1 fredette
1561 1.1 fredette x239: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0ma0 ! sh1add %r1,%r1,%r1
1562 1.1 fredette
1563 1.1 fredette x240: sh3add %r26,%r26,%r1 ! add %r1,%r26,%r1 ! b e_8t0 ! sh1add %r1,%r1,%r1
1564 1.1 fredette
1565 1.1 fredette x241: sh3add %r26,%r26,%r1 ! add %r1,%r26,%r1 ! b e_8t0a0 ! sh1add %r1,%r1,%r1
1566 1.1 fredette
1567 1.1 fredette x242: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh3add %r1,%r26,%r1
1568 1.1 fredette
1569 1.1 fredette x243: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1
1570 1.1 fredette
1571 1.1 fredette x244: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_4t0 ! sh2add %r1,%r26,%r1
1572 1.1 fredette
1573 1.1 fredette x245: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_5t0 ! sh1add %r1,%r26,%r1
1574 1.1 fredette
1575 1.1 fredette x246: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1
1576 1.1 fredette
1577 1.1 fredette x247: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1
1578 1.1 fredette
1579 1.1 fredette x248: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29
1580 1.1 fredette
1581 1.1 fredette x249: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1
1582 1.1 fredette
1583 1.1 fredette x250: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r1,%r1
1584 1.1 fredette
1585 1.1 fredette x251: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0a0 ! sh2add %r1,%r1,%r1
1586 1.1 fredette
1587 1.1 fredette x252: zdep %r26,25,26,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29
1588 1.1 fredette
1589 1.1 fredette x253: zdep %r26,25,26,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1
1590 1.1 fredette
1591 1.1 fredette x254: zdep %r26,24,25,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29
1592 1.1 fredette
1593 1.1 fredette x255: zdep %r26,23,24,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0
1594 1.1 fredette
1595 1.1 fredette ;1040 insts before this.
1596 1.1 fredette ret_t0: bv 0(r31)
1597 1.1 fredette
1598 1.1 fredette e_t0: add %r29,%r1,%r29
1599 1.1 fredette
1600 1.1 fredette e_shift: comb,<> %r25,0,l2
1601 1.1 fredette
1602 1.1 fredette zdep %r26,23,24,%r26 ; %r26 <<= 8 ***********
1603 1.1 fredette bv,n 0(r31)
1604 1.1 fredette e_t0ma0: comb,<> %r25,0,l0
1605 1.1 fredette
1606 1.1 fredette sub %r1,%r26,%r1
1607 1.1 fredette bv 0(r31)
1608 1.1 fredette add %r29,%r1,%r29
1609 1.1 fredette e_t0a0: comb,<> %r25,0,l0
1610 1.1 fredette
1611 1.1 fredette add %r1,%r26,%r1
1612 1.1 fredette bv 0(r31)
1613 1.1 fredette add %r29,%r1,%r29
1614 1.1 fredette e_t02a0: comb,<> %r25,0,l0
1615 1.1 fredette
1616 1.1 fredette sh1add %r26,%r1,%r1
1617 1.1 fredette bv 0(r31)
1618 1.1 fredette add %r29,%r1,%r29
1619 1.1 fredette e_t04a0: comb,<> %r25,0,l0
1620 1.1 fredette
1621 1.1 fredette sh2add %r26,%r1,%r1
1622 1.1 fredette bv 0(r31)
1623 1.1 fredette add %r29,%r1,%r29
1624 1.1 fredette e_2t0: comb,<> %r25,0,l1
1625 1.1 fredette
1626 1.1 fredette sh1add %r1,%r29,%r29
1627 1.1 fredette bv,n 0(r31)
1628 1.1 fredette e_2t0a0: comb,<> %r25,0,l0
1629 1.1 fredette
1630 1.1 fredette sh1add %r1,%r26,%r1
1631 1.1 fredette bv 0(r31)
1632 1.1 fredette add %r29,%r1,%r29
1633 1.1 fredette e2t04a0: sh1add %r26,%r1,%r1
1634 1.1 fredette
1635 1.1 fredette comb,<> %r25,0,l1
1636 1.1 fredette sh1add %r1,%r29,%r29
1637 1.1 fredette bv,n 0(r31)
1638 1.1 fredette e_3t0: comb,<> %r25,0,l0
1639 1.1 fredette
1640 1.1 fredette sh1add %r1,%r1,%r1
1641 1.1 fredette bv 0(r31)
1642 1.1 fredette add %r29,%r1,%r29
1643 1.1 fredette e_4t0: comb,<> %r25,0,l1
1644 1.1 fredette
1645 1.1 fredette sh2add %r1,%r29,%r29
1646 1.1 fredette bv,n 0(r31)
1647 1.1 fredette e_4t0a0: comb,<> %r25,0,l0
1648 1.1 fredette
1649 1.1 fredette sh2add %r1,%r26,%r1
1650 1.1 fredette bv 0(r31)
1651 1.1 fredette add %r29,%r1,%r29
1652 1.1 fredette e4t08a0: sh1add %r26,%r1,%r1
1653 1.1 fredette
1654 1.1 fredette comb,<> %r25,0,l1
1655 1.1 fredette sh2add %r1,%r29,%r29
1656 1.1 fredette bv,n 0(r31)
1657 1.1 fredette e_5t0: comb,<> %r25,0,l0
1658 1.1 fredette
1659 1.1 fredette sh2add %r1,%r1,%r1
1660 1.1 fredette bv 0(r31)
1661 1.1 fredette add %r29,%r1,%r29
1662 1.1 fredette e_8t0: comb,<> %r25,0,l1
1663 1.1 fredette
1664 1.1 fredette sh3add %r1,%r29,%r29
1665 1.1 fredette bv,n 0(r31)
1666 1.1 fredette e_8t0a0: comb,<> %r25,0,l0
1667 1.1 fredette
1668 1.1 fredette sh3add %r1,%r26,%r1
1669 1.1 fredette bv 0(r31)
1670 1.1 fredette add %r29,%r1,%r29
1671 1.1 fredette
1672 1.1 fredette .procend
1673 1.1 fredette .end
1674 1.1 fredette
1675 1.1 fredette .import $$divI_2,millicode
1676 1.1 fredette .import $$divI_3,millicode
1677 1.1 fredette .import $$divI_4,millicode
1678 1.1 fredette .import $$divI_5,millicode
1679 1.1 fredette .import $$divI_6,millicode
1680 1.1 fredette .import $$divI_7,millicode
1681 1.1 fredette .import $$divI_8,millicode
1682 1.1 fredette .import $$divI_9,millicode
1683 1.1 fredette .import $$divI_10,millicode
1684 1.1 fredette .import $$divI_12,millicode
1685 1.1 fredette .import $$divI_14,millicode
1686 1.1 fredette .import $$divI_15,millicode
1687 1.1 fredette .export $$divI,millicode
1688 1.1 fredette .export $$divoI,millicode
1689 1.1 fredette $$divoI:
1690 1.1 fredette .proc
1691 1.1 fredette .callinfo NO_CALLS
1692 1.1 fredette comib,=,n -1,arg1,negative1 ; when divisor == -1
1693 1.1 fredette $$divI:
1694 1.1 fredette comib,>>=,n 15,arg1,small_divisor
1695 1.1 fredette add,>= 0,arg0,retreg ; move dividend, if retreg < 0,
1696 1.1 fredette normal1:
1697 1.1 fredette sub 0,retreg,retreg ; make it positive
1698 1.1 fredette sub 0,arg1,temp ; clear carry,
1699 1.1 fredette ; negate the divisor
1700 1.1 fredette ds 0,temp,0 ; set V-bit to the comple-
1701 1.1 fredette ; ment of the divisor sign
1702 1.1 fredette add retreg,retreg,retreg ; shift msb bit into carry
1703 1.1 fredette ds r0,arg1,temp ; 1st divide step, if no carry
1704 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1705 1.1 fredette ds temp,arg1,temp ; 2nd divide step
1706 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1707 1.1 fredette ds temp,arg1,temp ; 3rd divide step
1708 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1709 1.1 fredette ds temp,arg1,temp ; 4th divide step
1710 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1711 1.1 fredette ds temp,arg1,temp ; 5th divide step
1712 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1713 1.1 fredette ds temp,arg1,temp ; 6th divide step
1714 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1715 1.1 fredette ds temp,arg1,temp ; 7th divide step
1716 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1717 1.1 fredette ds temp,arg1,temp ; 8th divide step
1718 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1719 1.1 fredette ds temp,arg1,temp ; 9th divide step
1720 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1721 1.1 fredette ds temp,arg1,temp ; 10th divide step
1722 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1723 1.1 fredette ds temp,arg1,temp ; 11th divide step
1724 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1725 1.1 fredette ds temp,arg1,temp ; 12th divide step
1726 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1727 1.1 fredette ds temp,arg1,temp ; 13th divide step
1728 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1729 1.1 fredette ds temp,arg1,temp ; 14th divide step
1730 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1731 1.1 fredette ds temp,arg1,temp ; 15th divide step
1732 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1733 1.1 fredette ds temp,arg1,temp ; 16th divide step
1734 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1735 1.1 fredette ds temp,arg1,temp ; 17th divide step
1736 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1737 1.1 fredette ds temp,arg1,temp ; 18th divide step
1738 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1739 1.1 fredette ds temp,arg1,temp ; 19th divide step
1740 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1741 1.1 fredette ds temp,arg1,temp ; 20th divide step
1742 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1743 1.1 fredette ds temp,arg1,temp ; 21st divide step
1744 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1745 1.1 fredette ds temp,arg1,temp ; 22nd divide step
1746 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1747 1.1 fredette ds temp,arg1,temp ; 23rd divide step
1748 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1749 1.1 fredette ds temp,arg1,temp ; 24th divide step
1750 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1751 1.1 fredette ds temp,arg1,temp ; 25th divide step
1752 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1753 1.1 fredette ds temp,arg1,temp ; 26th divide step
1754 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1755 1.1 fredette ds temp,arg1,temp ; 27th divide step
1756 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1757 1.1 fredette ds temp,arg1,temp ; 28th divide step
1758 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1759 1.1 fredette ds temp,arg1,temp ; 29th divide step
1760 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1761 1.1 fredette ds temp,arg1,temp ; 30th divide step
1762 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1763 1.1 fredette ds temp,arg1,temp ; 31st divide step
1764 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry
1765 1.1 fredette ds temp,arg1,temp ; 32nd divide step,
1766 1.1 fredette addc retreg,retreg,retreg ; shift last retreg bit into retreg
1767 1.1 fredette xor,>= arg0,arg1,0 ; get correct sign of quotient
1768 1.1 fredette sub 0,retreg,retreg ; based on operand signs
1769 1.1 fredette bv,n 0(r31)
1770 1.1 fredette nop
1771 1.1 fredette ;______________________________________________________________________
1772 1.1 fredette small_divisor:
1773 1.1 fredette blr,n arg1,r0
1774 1.1 fredette nop
1775 1.1 fredette ; table for divisor == 0,1, ... ,15
1776 1.1 fredette addit,= 0,arg1,r0 ; trap if divisor == 0
1777 1.1 fredette nop
1778 1.1 fredette bv 0(r31) ; divisor == 1
1779 1.1 fredette copy arg0,retreg
1780 1.1 fredette b,n $$divI_2 ; divisor == 2
1781 1.1 fredette nop
1782 1.1 fredette b,n $$divI_3 ; divisor == 3
1783 1.1 fredette nop
1784 1.1 fredette b,n $$divI_4 ; divisor == 4
1785 1.1 fredette nop
1786 1.1 fredette b,n $$divI_5 ; divisor == 5
1787 1.1 fredette nop
1788 1.1 fredette b,n $$divI_6 ; divisor == 6
1789 1.1 fredette nop
1790 1.1 fredette b,n $$divI_7 ; divisor == 7
1791 1.1 fredette nop
1792 1.1 fredette b,n $$divI_8 ; divisor == 8
1793 1.1 fredette nop
1794 1.1 fredette b,n $$divI_9 ; divisor == 9
1795 1.1 fredette nop
1796 1.1 fredette b,n $$divI_10 ; divisor == 10
1797 1.1 fredette nop
1798 1.1 fredette b normal1 ; divisor == 11
1799 1.1 fredette add,>= 0,arg0,retreg
1800 1.1 fredette b,n $$divI_12 ; divisor == 12
1801 1.1 fredette nop
1802 1.1 fredette b normal1 ; divisor == 13
1803 1.1 fredette add,>= 0,arg0,retreg
1804 1.1 fredette b,n $$divI_14 ; divisor == 14
1805 1.1 fredette nop
1806 1.1 fredette b,n $$divI_15 ; divisor == 15
1807 1.1 fredette nop
1808 1.1 fredette ;______________________________________________________________________
1809 1.1 fredette negative1:
1810 1.1 fredette sub 0,arg0,retreg ; result is negation of dividend
1811 1.1 fredette bv 0(r31)
1812 1.1 fredette addo arg0,arg1,r0 ; trap iff dividend==0x80000000 && divisor==-1
1813 1.1 fredette .procend
1814 1.1 fredette .end
1815