xref: /netbsd-src/sys/lib/libkern/arch/hppa/milli.S (revision 8ad5b80d68d873dc6c6c6a6f22d0308ac3eb8dbf)
1*8ad5b80dSskrll;	$NetBSD: milli.S,v 1.3 2022/06/13 16:00:05 skrll Exp $
2e978777bSfredette;
3e978777bSfredette;	$OpenBSD: milli.S,v 1.5 2001/03/29 04:08:20 mickey Exp $
4e978777bSfredette;
5e978777bSfredette;  (c) Copyright 1986 HEWLETT-PACKARD COMPANY
6e978777bSfredette;
7e978777bSfredette;  To anyone who acknowledges that this file is provided "AS IS"
8e978777bSfredette;  without any express or implied warranty:
9e978777bSfredette;      permission to use, copy, modify, and distribute this file
10e978777bSfredette;  for any purpose is hereby granted without fee, provided that
11e978777bSfredette;  the above copyright notice and this notice appears in all
12e978777bSfredette;  copies, and that the name of Hewlett-Packard Company not be
13e978777bSfredette;  used in advertising or publicity pertaining to distribution
14e978777bSfredette;  of the software without specific, written prior permission.
15e978777bSfredette;  Hewlett-Packard Company makes no representations about the
16e978777bSfredette;  suitability of this software for any purpose.
17e978777bSfredette;
18e978777bSfredette
19e978777bSfredette; Standard Hardware Register Definitions for Use with Assembler
20e978777bSfredette; version A.08.06
21e978777bSfredette;	- fr16-31 added at Utah
22e978777bSfredette;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23e978777bSfredette; Hardware General Registers
24e978777bSfredetter0: .equ	0
25e978777bSfredette
26e978777bSfredetter1: .equ	1
27e978777bSfredette
28e978777bSfredetter2: .equ	2
29e978777bSfredette
30e978777bSfredetter3: .equ	3
31e978777bSfredette
32e978777bSfredetter4: .equ	4
33e978777bSfredette
34e978777bSfredetter5: .equ	5
35e978777bSfredette
36e978777bSfredetter6: .equ	6
37e978777bSfredette
38e978777bSfredetter7: .equ	7
39e978777bSfredette
40e978777bSfredetter8: .equ	8
41e978777bSfredette
42e978777bSfredetter9: .equ	9
43e978777bSfredette
44e978777bSfredetter10: .equ	10
45e978777bSfredette
46e978777bSfredetter11: .equ	11
47e978777bSfredette
48e978777bSfredetter12: .equ	12
49e978777bSfredette
50e978777bSfredetter13: .equ	13
51e978777bSfredette
52e978777bSfredetter14: .equ	14
53e978777bSfredette
54e978777bSfredetter15: .equ	15
55e978777bSfredette
56e978777bSfredetter16: .equ	16
57e978777bSfredette
58e978777bSfredetter17: .equ	17
59e978777bSfredette
60e978777bSfredetter18: .equ	18
61e978777bSfredette
62e978777bSfredetter19: .equ	19
63e978777bSfredette
64e978777bSfredetter20: .equ	20
65e978777bSfredette
66e978777bSfredetter21: .equ	21
67e978777bSfredette
68e978777bSfredetter22: .equ	22
69e978777bSfredette
70e978777bSfredetter23: .equ	23
71e978777bSfredette
72e978777bSfredetter24: .equ	24
73e978777bSfredette
74e978777bSfredetter25: .equ	25
75e978777bSfredette
76e978777bSfredetter26: .equ	26
77e978777bSfredette
78e978777bSfredetter27: .equ	27
79e978777bSfredette
80e978777bSfredetter28: .equ	28
81e978777bSfredette
82e978777bSfredetter29: .equ	29
83e978777bSfredette
84e978777bSfredetter30: .equ	30
85e978777bSfredette
86e978777bSfredetter31: .equ	31
87e978777bSfredette
88e978777bSfredette; Hardware Space Registers
89e978777bSfredettesr0: .equ	0
90e978777bSfredette
91e978777bSfredettesr1: .equ	1
92e978777bSfredette
93e978777bSfredettesr2: .equ	2
94e978777bSfredette
95e978777bSfredettesr3: .equ	3
96e978777bSfredette
97e978777bSfredettesr4: .equ	4
98e978777bSfredette
99e978777bSfredettesr5: .equ	5
100e978777bSfredette
101e978777bSfredettesr6: .equ	6
102e978777bSfredette
103e978777bSfredettesr7: .equ	7
104e978777bSfredette
105e978777bSfredette; Hardware Floating Point Registers
106e978777bSfredettefr0: .equ	0
107e978777bSfredette
108e978777bSfredettefr1: .equ	1
109e978777bSfredette
110e978777bSfredettefr2: .equ	2
111e978777bSfredette
112e978777bSfredettefr3: .equ	3
113e978777bSfredette
114e978777bSfredettefr4: .equ	4
115e978777bSfredette
116e978777bSfredettefr5: .equ	5
117e978777bSfredette
118e978777bSfredettefr6: .equ	6
119e978777bSfredette
120e978777bSfredettefr7: .equ	7
121e978777bSfredette
122e978777bSfredettefr8: .equ	8
123e978777bSfredette
124e978777bSfredettefr9: .equ	9
125e978777bSfredette
126e978777bSfredettefr10: .equ	10
127e978777bSfredette
128e978777bSfredettefr11: .equ	11
129e978777bSfredette
130e978777bSfredettefr12: .equ	12
131e978777bSfredette
132e978777bSfredettefr13: .equ	13
133e978777bSfredette
134e978777bSfredettefr14: .equ	14
135e978777bSfredette
136e978777bSfredettefr15: .equ	15
137e978777bSfredette
138e978777bSfredettefr16: .equ	16
139e978777bSfredette
140e978777bSfredettefr17: .equ	17
141e978777bSfredette
142e978777bSfredettefr18: .equ	18
143e978777bSfredette
144e978777bSfredettefr19: .equ	19
145e978777bSfredette
146e978777bSfredettefr20: .equ	20
147e978777bSfredette
148e978777bSfredettefr21: .equ	21
149e978777bSfredette
150e978777bSfredettefr22: .equ	22
151e978777bSfredette
152e978777bSfredettefr23: .equ	23
153e978777bSfredette
154e978777bSfredettefr24: .equ	24
155e978777bSfredette
156e978777bSfredettefr25: .equ	25
157e978777bSfredette
158e978777bSfredettefr26: .equ	26
159e978777bSfredette
160e978777bSfredettefr27: .equ	27
161e978777bSfredette
162e978777bSfredettefr28: .equ	28
163e978777bSfredette
164e978777bSfredettefr29: .equ	29
165e978777bSfredette
166e978777bSfredettefr30: .equ	30
167e978777bSfredette
168e978777bSfredettefr31: .equ	31
169e978777bSfredette
170e978777bSfredette; Hardware Control Registers
171e978777bSfredettecr0: .equ	0
172e978777bSfredette
173e978777bSfredetterctr: .equ	0			; Recovery Counter Register
174e978777bSfredette
175e978777bSfredettecr8: .equ	8			; Protection ID 1
176e978777bSfredette
177e978777bSfredettepidr1: .equ	8
178e978777bSfredette
179e978777bSfredettecr9: .equ	9			; Protection ID 2
180e978777bSfredette
181e978777bSfredettepidr2: .equ	9
182e978777bSfredette
183e978777bSfredettecr10: .equ	10
184e978777bSfredette
1852e0bf311Sandvarccr: .equ	10			; Coprocessor Configuration Register
186e978777bSfredette
187e978777bSfredettecr11: .equ	11
188e978777bSfredette
189e978777bSfredettesar: .equ	11			; Shift Amount Register
190e978777bSfredette
191e978777bSfredettecr12: .equ	12
192e978777bSfredette
193e978777bSfredettepidr3: .equ	12			; Protection ID 3
194e978777bSfredette
195e978777bSfredettecr13: .equ	13
196e978777bSfredette
197e978777bSfredettepidr4: .equ	13			; Protection ID 4
198e978777bSfredette
199e978777bSfredettecr14: .equ	14
200e978777bSfredette
201e978777bSfredetteiva: .equ	14			; Interrupt Vector Address
202e978777bSfredette
203e978777bSfredettecr15: .equ	15
204e978777bSfredette
205e978777bSfredetteeiem: .equ	15			; External Interrupt Enable Mask
206e978777bSfredette
207e978777bSfredettecr16: .equ	16
208e978777bSfredette
209e978777bSfredetteitmr: .equ	16			; Interval Timer
210e978777bSfredette
211e978777bSfredettecr17: .equ	17
212e978777bSfredette
213e978777bSfredettepcsq: .equ	17			; Program Counter Space queue
214e978777bSfredette
215e978777bSfredettecr18: .equ	18
216e978777bSfredette
217e978777bSfredettepcoq: .equ	18			; Program Counter Offset queue
218e978777bSfredette
219e978777bSfredettecr19: .equ	19
220e978777bSfredette
221e978777bSfredetteiir: .equ	19			; Interruption Instruction Register
222e978777bSfredette
223e978777bSfredettecr20: .equ	20
224e978777bSfredette
225e978777bSfredetteisr: .equ	20			; Interruption Space Register
226e978777bSfredette
227e978777bSfredettecr21: .equ	21
228e978777bSfredette
229e978777bSfredetteior: .equ	21			; Interruption Offset Register
230e978777bSfredette
231e978777bSfredettecr22: .equ	22
232e978777bSfredette
2332e0bf311Sandvaripsw: .equ	22			; Interruption Processor Status Word
234e978777bSfredette
235e978777bSfredettecr23: .equ	23
236e978777bSfredette
237e978777bSfredetteeirr: .equ	23			; External Interrupt Request
238e978777bSfredette
239e978777bSfredettecr24: .equ	24
240e978777bSfredette
2412e0bf311Sandvarppda: .equ	24			; Physical Page Directory Address
242e978777bSfredette
243e978777bSfredettetr0: .equ	24			; Temporary register 0
244e978777bSfredette
245e978777bSfredettecr25: .equ	25
246e978777bSfredette
247e978777bSfredettehta: .equ	25			; Hash Table Address
248e978777bSfredette
249e978777bSfredettetr1: .equ	25			; Temporary register 1
250e978777bSfredette
251e978777bSfredettecr26: .equ	26
252e978777bSfredette
253e978777bSfredettetr2: .equ	26			; Temporary register 2
254e978777bSfredette
255e978777bSfredettecr27: .equ	27
256e978777bSfredette
257e978777bSfredettetr3: .equ	27			; Temporary register 3
258e978777bSfredette
259e978777bSfredettecr28: .equ	28
260e978777bSfredette
261e978777bSfredettetr4: .equ	28			; Temporary register 4
262e978777bSfredette
263e978777bSfredettecr29: .equ	29
264e978777bSfredette
265e978777bSfredettetr5: .equ	29			; Temporary register 5
266e978777bSfredette
267e978777bSfredettecr30: .equ	30
268e978777bSfredette
269e978777bSfredettetr6: .equ	30			; Temporary register 6
270e978777bSfredette
271e978777bSfredettecr31: .equ	31
272e978777bSfredette
273e978777bSfredettetr7: .equ	31			; Temporary register 7
274e978777bSfredette
275e978777bSfredette;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
276e978777bSfredette; Procedure Call Convention						~
277e978777bSfredette; Register Definitions for Use with Assembler				~
278e978777bSfredette; version A.08.06							~
279e978777bSfredette;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
280e978777bSfredette; Software Architecture General Registers
281e978777bSfredetterp: .equ	r2	; return pointer
282e978777bSfredette
283e978777bSfredettemrp: .equ	r31	; millicode return pointer
284e978777bSfredette
285e978777bSfredetteret0: .equ	r28	; return value
286e978777bSfredette
287e978777bSfredetteret1: .equ	r29	; return value (high part of double)
288e978777bSfredette
289e978777bSfredettesl: .equ	r29	; static link
290e978777bSfredette
291e978777bSfredettesp: .equ	r30	; stack pointer
292e978777bSfredette
293e978777bSfredettedp: .equ	r27	; data pointer
294e978777bSfredette
295e978777bSfredettearg0: .equ	r26	; argument
296e978777bSfredette
297e978777bSfredettearg1: .equ	r25	; argument or high part of double argument
298e978777bSfredette
299e978777bSfredettearg2: .equ	r24	; argument
300e978777bSfredette
301e978777bSfredettearg3: .equ	r23	; argument or high part of double argument
302e978777bSfredette
303e978777bSfredette;_____________________________________________________________________________
304e978777bSfredette; Software Architecture Space Registers
305e978777bSfredette;		sr0	; return link form BLE
306e978777bSfredettesret: .equ	sr1	; return value
307e978777bSfredette
308e978777bSfredettesarg: .equ	sr1	; argument
309e978777bSfredette
310e978777bSfredette;		sr4	; PC SPACE tracker
311e978777bSfredette;		sr5	; process private data
312e978777bSfredette;_____________________________________________________________________________
313e978777bSfredette; Software Architecture Pseudo Registers
314e978777bSfredetteprevious_sp: .equ	64	; old stack pointer (locates previous frame)
315e978777bSfredette
316e978777bSfredette;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
317e978777bSfredette; Standard space and subspace definitions.  version A.08.06
318e978777bSfredette; These are generally suitable for programs on HP_UX and HPE.
319e978777bSfredette; Statements commented out are used when building such things as operating
320e978777bSfredette; system kernels.
321e978777bSfredette;;;;;;;;;;;;;;;;
322e978777bSfredette; Additional code subspaces should have ALIGN=8 for an interspace BV
323e978777bSfredette; and should have SORT=24.
324e978777bSfredette;
325e978777bSfredette; For an incomplete executable (program bound to shared libraries),
326e978777bSfredette; sort keys $GLOBAL$ -1 and $GLOBAL$ -2 are reserved for the $DLT$
327e978777bSfredette; and $PLT$ subspaces respectively.
328e978777bSfredette;;;;;;;;;;;;;;;
329e978777bSfredette
330e978777bSfredette	.text
331e978777bSfredette	.EXPORT $$remI,millicode
332e978777bSfredette;	.IMPORT	cerror
333e978777bSfredette$$remI:
334e978777bSfredette	.PROC
335e978777bSfredette	.CALLINFO NO_CALLS
336e978777bSfredette	.ENTRY
337e978777bSfredette	addit,= 0,arg1,r0
338e978777bSfredette	add,>= r0,arg0,ret1
339e978777bSfredette	sub r0,ret1,ret1
340e978777bSfredette	sub r0,arg1,r1
341e978777bSfredette	ds r0,r1,r0
342e978777bSfredette	or r0,r0,r1
343e978777bSfredette	add ret1,ret1,ret1
344e978777bSfredette	ds r1,arg1,r1
345e978777bSfredette	addc ret1,ret1,ret1
346e978777bSfredette	ds r1,arg1,r1
347e978777bSfredette	addc ret1,ret1,ret1
348e978777bSfredette	ds r1,arg1,r1
349e978777bSfredette	addc ret1,ret1,ret1
350e978777bSfredette	ds r1,arg1,r1
351e978777bSfredette	addc ret1,ret1,ret1
352e978777bSfredette	ds r1,arg1,r1
353e978777bSfredette	addc ret1,ret1,ret1
354e978777bSfredette	ds r1,arg1,r1
355e978777bSfredette	addc ret1,ret1,ret1
356e978777bSfredette	ds r1,arg1,r1
357e978777bSfredette	addc ret1,ret1,ret1
358e978777bSfredette	ds r1,arg1,r1
359e978777bSfredette	addc ret1,ret1,ret1
360e978777bSfredette	ds r1,arg1,r1
361e978777bSfredette	addc ret1,ret1,ret1
362e978777bSfredette	ds r1,arg1,r1
363e978777bSfredette	addc ret1,ret1,ret1
364e978777bSfredette	ds r1,arg1,r1
365e978777bSfredette	addc ret1,ret1,ret1
366e978777bSfredette	ds r1,arg1,r1
367e978777bSfredette	addc ret1,ret1,ret1
368e978777bSfredette	ds r1,arg1,r1
369e978777bSfredette	addc ret1,ret1,ret1
370e978777bSfredette	ds r1,arg1,r1
371e978777bSfredette	addc ret1,ret1,ret1
372e978777bSfredette	ds r1,arg1,r1
373e978777bSfredette	addc ret1,ret1,ret1
374e978777bSfredette	ds r1,arg1,r1
375e978777bSfredette	addc ret1,ret1,ret1
376e978777bSfredette	ds r1,arg1,r1
377e978777bSfredette	addc ret1,ret1,ret1
378e978777bSfredette	ds r1,arg1,r1
379e978777bSfredette	addc ret1,ret1,ret1
380e978777bSfredette	ds r1,arg1,r1
381e978777bSfredette	addc ret1,ret1,ret1
382e978777bSfredette	ds r1,arg1,r1
383e978777bSfredette	addc ret1,ret1,ret1
384e978777bSfredette	ds r1,arg1,r1
385e978777bSfredette	addc ret1,ret1,ret1
386e978777bSfredette	ds r1,arg1,r1
387e978777bSfredette	addc ret1,ret1,ret1
388e978777bSfredette	ds r1,arg1,r1
389e978777bSfredette	addc ret1,ret1,ret1
390e978777bSfredette	ds r1,arg1,r1
391e978777bSfredette	addc ret1,ret1,ret1
392e978777bSfredette	ds r1,arg1,r1
393e978777bSfredette	addc ret1,ret1,ret1
394e978777bSfredette	ds r1,arg1,r1
395e978777bSfredette	addc ret1,ret1,ret1
396e978777bSfredette	ds r1,arg1,r1
397e978777bSfredette	addc ret1,ret1,ret1
398e978777bSfredette	ds r1,arg1,r1
399e978777bSfredette	addc ret1,ret1,ret1
400e978777bSfredette	ds r1,arg1,r1
401e978777bSfredette	addc ret1,ret1,ret1
402e978777bSfredette	ds r1,arg1,r1
403e978777bSfredette	addc ret1,ret1,ret1
404e978777bSfredette	ds r1,arg1,r1
405e978777bSfredette	addc ret1,ret1,ret1
406e978777bSfredette	ds r1,arg1,r1
407e978777bSfredette	addc ret1,ret1,ret1
408e978777bSfredette	movb,>=,n r1,ret1,remI300
409e978777bSfredette	add,< arg1,r0,r0
410e978777bSfredette	add,tr r1,arg1,ret1
411e978777bSfredette	sub r1,arg1,ret1
412e978777bSfredetteremI300: add,>= arg0,r0,r0
413e978777bSfredette
414e978777bSfredette	sub r0,ret1,ret1
415e978777bSfredette	bv r0(r31)
416e978777bSfredette	nop
417e978777bSfredette	.EXIT
418e978777bSfredette	.PROCEND
419e978777bSfredette
420e978777bSfredettebit1:  .equ 1
421e978777bSfredette
422e978777bSfredettebit30: .equ 30
423e978777bSfredettebit31: .equ 31
424e978777bSfredette
425e978777bSfredettelen2:  .equ 2
426e978777bSfredette
427e978777bSfredettelen4:  .equ 4
428e978777bSfredette
429e978777bSfredette#if 0
430e978777bSfredette$$dyncall:
431e978777bSfredette	.proc
432e978777bSfredette	.callinfo NO_CALLS
433e978777bSfredette	.export $$dyncall,MILLICODE
434e978777bSfredette
435e978777bSfredette	bb,>=,n	22,bit30,noshlibs
436e978777bSfredette
437e978777bSfredette	depi	0,bit31,len2,22
438e978777bSfredette	ldw	4(22),19
439e978777bSfredette	ldw	0(22),22
440e978777bSfredettenoshlibs:
441e978777bSfredette	ldsid	(22),r1
442e978777bSfredette	mtsp	r1,sr0
443e978777bSfredette	be	0(sr0,r22)
444e978777bSfredette	stw	rp,-24(sp)
445e978777bSfredette	.procend
446e978777bSfredette
447e978777bSfredette$$sh_func_adrs:
448e978777bSfredette	.proc
449e978777bSfredette	.callinfo NO_CALLS
450e978777bSfredette	.export $$sh_func_adrs, millicode
451e978777bSfredette	ldo	0(r26),ret1
452e978777bSfredette	dep	r0,30,1,r26
453e978777bSfredette	probew	(r26),r31,r22
454e978777bSfredette	extru,=	r22,31,1,r22
455e978777bSfredette	bv	r0(r31)
456e978777bSfredette	ldws	0(r26),ret1
457e978777bSfredette	.procend
458*8ad5b80dSskrll#endif
459e978777bSfredette
460e978777bSfredettetemp: .EQU	r1
461e978777bSfredette
462e978777bSfredetteretreg: .EQU	ret1	; r29
463e978777bSfredette
464e978777bSfredette	.export $$divU,millicode
465e978777bSfredette	.import $$divU_3,millicode
466e978777bSfredette	.import $$divU_5,millicode
467e978777bSfredette	.import $$divU_6,millicode
468e978777bSfredette	.import $$divU_7,millicode
469e978777bSfredette	.import $$divU_9,millicode
470e978777bSfredette	.import $$divU_10,millicode
471e978777bSfredette	.import $$divU_12,millicode
472e978777bSfredette	.import $$divU_14,millicode
473e978777bSfredette	.import $$divU_15,millicode
474e978777bSfredette$$divU:
475e978777bSfredette	.proc
476e978777bSfredette	.callinfo NO_CALLS
477e978777bSfredette; The subtract is not nullified since it does no harm and can be used
478e978777bSfredette; by the two cases that branch back to "normal".
479e978777bSfredette	comib,>=  15,arg1,special_divisor
480e978777bSfredette	sub	r0,arg1,temp		; clear carry, negate the divisor
481e978777bSfredette	ds	r0,temp,r0		; set V-bit to 1
482e978777bSfredettenormal:
483e978777bSfredette	add	arg0,arg0,retreg	; shift msb bit into carry
484e978777bSfredette	ds	r0,arg1,temp		; 1st divide step, if no carry
485e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
486e978777bSfredette	ds	temp,arg1,temp		; 2nd divide step
487e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
488e978777bSfredette	ds	temp,arg1,temp		; 3rd divide step
489e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
490e978777bSfredette	ds	temp,arg1,temp		; 4th divide step
491e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
492e978777bSfredette	ds	temp,arg1,temp		; 5th divide step
493e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
494e978777bSfredette	ds	temp,arg1,temp		; 6th divide step
495e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
496e978777bSfredette	ds	temp,arg1,temp		; 7th divide step
497e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
498e978777bSfredette	ds	temp,arg1,temp		; 8th divide step
499e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
500e978777bSfredette	ds	temp,arg1,temp		; 9th divide step
501e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
502e978777bSfredette	ds	temp,arg1,temp		; 10th divide step
503e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
504e978777bSfredette	ds	temp,arg1,temp		; 11th divide step
505e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
506e978777bSfredette	ds	temp,arg1,temp		; 12th divide step
507e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
508e978777bSfredette	ds	temp,arg1,temp		; 13th divide step
509e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
510e978777bSfredette	ds	temp,arg1,temp		; 14th divide step
511e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
512e978777bSfredette	ds	temp,arg1,temp		; 15th divide step
513e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
514e978777bSfredette	ds	temp,arg1,temp		; 16th divide step
515e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
516e978777bSfredette	ds	temp,arg1,temp		; 17th divide step
517e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
518e978777bSfredette	ds	temp,arg1,temp		; 18th divide step
519e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
520e978777bSfredette	ds	temp,arg1,temp		; 19th divide step
521e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
522e978777bSfredette	ds	temp,arg1,temp		; 20th divide step
523e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
524e978777bSfredette	ds	temp,arg1,temp		; 21st divide step
525e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
526e978777bSfredette	ds	temp,arg1,temp		; 22nd divide step
527e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
528e978777bSfredette	ds	temp,arg1,temp		; 23rd divide step
529e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
530e978777bSfredette	ds	temp,arg1,temp		; 24th divide step
531e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
532e978777bSfredette	ds	temp,arg1,temp		; 25th divide step
533e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
534e978777bSfredette	ds	temp,arg1,temp		; 26th divide step
535e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
536e978777bSfredette	ds	temp,arg1,temp		; 27th divide step
537e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
538e978777bSfredette	ds	temp,arg1,temp		; 28th divide step
539e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
540e978777bSfredette	ds	temp,arg1,temp		; 29th divide step
541e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
542e978777bSfredette	ds	temp,arg1,temp		; 30th divide step
543e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
544e978777bSfredette	ds	temp,arg1,temp		; 31st divide step
545e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
546e978777bSfredette	ds	temp,arg1,temp		; 32nd divide step,
547e978777bSfredette	bv	0(r31)
548e978777bSfredette	addc	retreg,retreg,retreg	; shift last retreg bit into retreg
549e978777bSfredette;_____________________________________________________________________________
550e978777bSfredette; handle the cases where divisor is a small constant or has high bit on
551e978777bSfredettespecial_divisor:
552e978777bSfredette	blr	arg1,r0
553e978777bSfredette	comib,>,n  0,arg1,big_divisor	; nullify previous instruction
554e978777bSfredettezero_divisor: ; this label is here to provide external visibility
555e978777bSfredette
556e978777bSfredette	addit,=	0,arg1,0		; trap for zero dvr
557e978777bSfredette	nop
558e978777bSfredette	bv	0(r31)			; divisor == 1
559e978777bSfredette	copy	arg0,retreg
560e978777bSfredette	bv	0(r31)			; divisor == 2
561e978777bSfredette	extru	arg0,30,31,retreg
562e978777bSfredette	 b,n	$$divU_3		; divisor == 3
563e978777bSfredette	nop
564e978777bSfredette	bv	0(r31)			; divisor == 4
565e978777bSfredette	extru	arg0,29,30,retreg
566e978777bSfredette	 b,n	$$divU_5		; divisor == 5
567e978777bSfredette	nop
568e978777bSfredette	 b,n	$$divU_6		; divisor == 6
569e978777bSfredette	nop
570e978777bSfredette	 b,n	$$divU_7		; divisor == 7
571e978777bSfredette	nop
572e978777bSfredette	bv	0(r31)			; divisor == 8
573e978777bSfredette	extru	arg0,28,29,retreg
574e978777bSfredette	 b,n	$$divU_9		; divisor == 9
575e978777bSfredette	nop
576e978777bSfredette	 b,n	$$divU_10		; divisor == 10
577e978777bSfredette	nop
578e978777bSfredette	b	normal			; divisor == 11
579e978777bSfredette	ds	r0,temp,r0		; set V-bit to 1
580e978777bSfredette	 b,n	$$divU_12		; divisor == 12
581e978777bSfredette	nop
582e978777bSfredette	b	normal			; divisor == 13
583e978777bSfredette	ds	r0,temp,r0		; set V-bit to 1
584e978777bSfredette	 b,n	$$divU_14		; divisor == 14
585e978777bSfredette	nop
586e978777bSfredette	 b,n	$$divU_15		; divisor == 15
587e978777bSfredette	nop
588e978777bSfredette;_____________________________________________________________________________
589e978777bSfredette; Handle the case where the high bit is on in the divisor.
590e978777bSfredette; Compute:	if( dividend>=divisor) quotient=1; else quotient=0;
591e978777bSfredette; Note:		dividend>==divisor iff dividend-divisor does not borrow
592e978777bSfredette; and		not borrow iff carry
593e978777bSfredettebig_divisor:
594e978777bSfredette	sub	arg0,arg1,r0
595e978777bSfredette	bv	0(r31)
596e978777bSfredette	addc	r0,r0,retreg
597e978777bSfredette	.procend
598e978777bSfredette	.end
599e978777bSfredette
600e978777bSfredettet2: .EQU	r1
601e978777bSfredette
602e978777bSfredette; x2	.EQU	arg0	; r26
603e978777bSfredettet1: .EQU	arg1	; r25
604e978777bSfredette
605e978777bSfredette; x1	.EQU	ret1	; r29
606e978777bSfredette;_____________________________________________________________________________
607e978777bSfredette
608e978777bSfredette$$divide_by_constant:
609e978777bSfredette	.PROC
610e978777bSfredette	.CALLINFO NO_CALLS
611e978777bSfredette	.export $$divide_by_constant,millicode
612e978777bSfredette; Provides a "nice" label for the code covered by the unwind descriptor
613e978777bSfredette; for things like gprof.
614e978777bSfredette
615e978777bSfredette$$divI_2:
616e978777bSfredette	.EXPORT	$$divI_2,MILLICODE
617e978777bSfredette	COMCLR,>=	arg0,0,0
618e978777bSfredette	ADDI		1,arg0,arg0
619e978777bSfredette	bv		0(r31)
620e978777bSfredette	EXTRS		arg0,30,31,ret1
621e978777bSfredette
622e978777bSfredette$$divI_4:
623e978777bSfredette	.EXPORT		$$divI_4,MILLICODE
624e978777bSfredette	COMCLR,>=	arg0,0,0
625e978777bSfredette	ADDI		3,arg0,arg0
626e978777bSfredette	bv		0(r31)
627e978777bSfredette	EXTRS		arg0,29,30,ret1
628e978777bSfredette
629e978777bSfredette$$divI_8:
630e978777bSfredette	.EXPORT		$$divI_8,MILLICODE
631e978777bSfredette	COMCLR,>=	arg0,0,0
632e978777bSfredette	ADDI		7,arg0,arg0
633e978777bSfredette	bv		0(r31)
634e978777bSfredette	EXTRS		arg0,28,29,ret1
635e978777bSfredette
636e978777bSfredette$$divI_16:
637e978777bSfredette	.EXPORT		$$divI_16,MILLICODE
638e978777bSfredette	COMCLR,>=	arg0,0,0
639e978777bSfredette	ADDI		15,arg0,arg0
640e978777bSfredette	bv		0(r31)
641e978777bSfredette	EXTRS		arg0,27,28,ret1
642e978777bSfredette
643e978777bSfredette$$divI_3:
644e978777bSfredette	.EXPORT		$$divI_3,MILLICODE
645e978777bSfredette	COMB,<,N	arg0,0,$neg3
646e978777bSfredette
647e978777bSfredette	ADDI		1,arg0,arg0
648e978777bSfredette	EXTRU		arg0,1,2,ret1
649e978777bSfredette	SH2ADD		arg0,arg0,arg0
650e978777bSfredette	B		$pos
651e978777bSfredette	ADDC		ret1,0,ret1
652e978777bSfredette
653e978777bSfredette$neg3:
654e978777bSfredette	SUBI		1,arg0,arg0
655e978777bSfredette	EXTRU		arg0,1,2,ret1
656e978777bSfredette	SH2ADD		arg0,arg0,arg0
657e978777bSfredette	B		$neg
658e978777bSfredette	ADDC		ret1,0,ret1
659e978777bSfredette
660e978777bSfredette$$divU_3:
661e978777bSfredette	.EXPORT		$$divU_3,MILLICODE
662e978777bSfredette	ADDI		1,arg0,arg0
663e978777bSfredette	ADDC		0,0,ret1
664e978777bSfredette	SHD		ret1,arg0,30,t1
665e978777bSfredette	SH2ADD		arg0,arg0,arg0
666e978777bSfredette	B		$pos
667e978777bSfredette	ADDC		ret1,t1,ret1
668e978777bSfredette
669e978777bSfredette$$divI_5:
670e978777bSfredette	.EXPORT		$$divI_5,MILLICODE
671e978777bSfredette	COMB,<,N	arg0,0,$neg5
672e978777bSfredette	ADDI		3,arg0,t1
673e978777bSfredette	SH1ADD		arg0,t1,arg0
674e978777bSfredette	B		$pos
675e978777bSfredette	ADDC		0,0,ret1
676e978777bSfredette
677e978777bSfredette$neg5:
678e978777bSfredette	SUB		0,arg0,arg0
679e978777bSfredette	ADDI		1,arg0,arg0
680e978777bSfredette	SHD		0,arg0,31,ret1
681e978777bSfredette	SH1ADD		arg0,arg0,arg0
682e978777bSfredette	B		$neg
683e978777bSfredette	ADDC		ret1,0,ret1
684e978777bSfredette
685e978777bSfredette$$divU_5:
686e978777bSfredette	.EXPORT		$$divU_5,MILLICODE
687e978777bSfredette	ADDI		1,arg0,arg0
688e978777bSfredette	ADDC		0,0,ret1
689e978777bSfredette	SHD		ret1,arg0,31,t1
690e978777bSfredette	SH1ADD		arg0,arg0,arg0
691e978777bSfredette	B		$pos
692e978777bSfredette	ADDC		t1,ret1,ret1
693e978777bSfredette
694e978777bSfredette$$divI_6:
695e978777bSfredette	.EXPORT		$$divI_6,MILLICODE
696e978777bSfredette	COMB,<,N	arg0,0,$neg6
697e978777bSfredette	EXTRU		arg0,30,31,arg0
698e978777bSfredette	ADDI		5,arg0,t1
699e978777bSfredette	SH2ADD		arg0,t1,arg0
700e978777bSfredette	B		$pos
701e978777bSfredette	ADDC		0,0,ret1
702e978777bSfredette
703e978777bSfredette$neg6:
704e978777bSfredette	SUBI		2,arg0,arg0
705e978777bSfredette	EXTRU		arg0,30,31,arg0
706e978777bSfredette	SHD		0,arg0,30,ret1
707e978777bSfredette	SH2ADD		arg0,arg0,arg0
708e978777bSfredette	B		$neg
709e978777bSfredette	ADDC		ret1,0,ret1
710e978777bSfredette
711e978777bSfredette$$divU_6:
712e978777bSfredette	.EXPORT		$$divU_6,MILLICODE
713e978777bSfredette	EXTRU		arg0,30,31,arg0
714e978777bSfredette	ADDI		1,arg0,arg0
715e978777bSfredette	SHD		0,arg0,30,ret1
716e978777bSfredette	SH2ADD		arg0,arg0,arg0
717e978777bSfredette	B		$pos
718e978777bSfredette	ADDC		ret1,0,ret1
719e978777bSfredette
720e978777bSfredette$$divU_10:
721e978777bSfredette	.EXPORT		$$divU_10,MILLICODE
722e978777bSfredette	EXTRU		arg0,30,31,arg0
723e978777bSfredette	ADDI		3,arg0,t1
724e978777bSfredette	SH1ADD		arg0,t1,arg0
725e978777bSfredette	ADDC		0,0,ret1
726e978777bSfredette$pos:
727e978777bSfredette	SHD		ret1,arg0,28,t1
728e978777bSfredette	SHD		arg0,0,28,t2
729e978777bSfredette	ADD		arg0,t2,arg0
730e978777bSfredette	ADDC		ret1,t1,ret1
731e978777bSfredette$pos_for_17:
732e978777bSfredette	SHD		ret1,arg0,24,t1
733e978777bSfredette	SHD		arg0,0,24,t2
734e978777bSfredette	ADD		arg0,t2,arg0
735e978777bSfredette	ADDC		ret1,t1,ret1
736e978777bSfredette
737e978777bSfredette	SHD		ret1,arg0,16,t1
738e978777bSfredette	SHD		arg0,0,16,t2
739e978777bSfredette	ADD		arg0,t2,arg0
740e978777bSfredette	bv		0(r31)
741e978777bSfredette	ADDC		ret1,t1,ret1
742e978777bSfredette
743e978777bSfredette$$divI_10:
744e978777bSfredette	.EXPORT		$$divI_10,MILLICODE
745e978777bSfredette	COMB,<		arg0,0,$neg10
746e978777bSfredette	COPY		0,ret1
747e978777bSfredette	EXTRU		arg0,30,31,arg0
748e978777bSfredette	ADDIB,TR	1,arg0,$pos
749e978777bSfredette	SH1ADD		arg0,arg0,arg0
750e978777bSfredette
751e978777bSfredette$neg10:
752e978777bSfredette	SUBI		2,arg0,arg0
753e978777bSfredette	EXTRU		arg0,30,31,arg0
754e978777bSfredette	SH1ADD		arg0,arg0,arg0
755e978777bSfredette$neg:
756e978777bSfredette	SHD		ret1,arg0,28,t1
757e978777bSfredette	SHD		arg0,0,28,t2
758e978777bSfredette	ADD		arg0,t2,arg0
759e978777bSfredette	ADDC		ret1,t1,ret1
760e978777bSfredette$neg_for_17:
761e978777bSfredette	SHD		ret1,arg0,24,t1
762e978777bSfredette	SHD		arg0,0,24,t2
763e978777bSfredette	ADD		arg0,t2,arg0
764e978777bSfredette	ADDC		ret1,t1,ret1
765e978777bSfredette
766e978777bSfredette	SHD		ret1,arg0,16,t1
767e978777bSfredette	SHD		arg0,0,16,t2
768e978777bSfredette	ADD		arg0,t2,arg0
769e978777bSfredette	ADDC		ret1,t1,ret1
770e978777bSfredette	bv		0(r31)
771e978777bSfredette	SUB		0,ret1,ret1
772e978777bSfredette
773e978777bSfredette$$divI_12:
774e978777bSfredette	.EXPORT		$$divI_12,MILLICODE
775e978777bSfredette	COMB,<		arg0,0,$neg12
776e978777bSfredette	COPY		0,ret1
777e978777bSfredette	EXTRU		arg0,29,30,arg0
778e978777bSfredette	ADDIB,TR	1,arg0,$pos
779e978777bSfredette	SH2ADD		arg0,arg0,arg0
780e978777bSfredette
781e978777bSfredette$neg12:
782e978777bSfredette	SUBI		4,arg0,arg0
783e978777bSfredette	EXTRU		arg0,29,30,arg0
784e978777bSfredette	B		$neg
785e978777bSfredette	SH2ADD		arg0,arg0,arg0
786e978777bSfredette
787e978777bSfredette$$divU_12:
788e978777bSfredette	.EXPORT		$$divU_12,MILLICODE
789e978777bSfredette	EXTRU		arg0,29,30,arg0
790e978777bSfredette	ADDI		5,arg0,t1
791e978777bSfredette	SH2ADD		arg0,t1,arg0
792e978777bSfredette	B		$pos
793e978777bSfredette	ADDC		0,0,ret1
794e978777bSfredette
795e978777bSfredette$$divI_15:
796e978777bSfredette	.EXPORT		$$divI_15,MILLICODE
797e978777bSfredette	COMB,<		arg0,0,$neg15
798e978777bSfredette	COPY		0,ret1
799e978777bSfredette	ADDIB,TR	1,arg0,$pos+4
800e978777bSfredette	SHD		ret1,arg0,28,t1
801e978777bSfredette
802e978777bSfredette$neg15:
803e978777bSfredette	B		$neg
804e978777bSfredette	SUBI		1,arg0,arg0
805e978777bSfredette
806e978777bSfredette$$divU_15:
807e978777bSfredette	.EXPORT		$$divU_15,MILLICODE
808e978777bSfredette	ADDI		1,arg0,arg0
809e978777bSfredette	B		$pos
810e978777bSfredette	ADDC		0,0,ret1
811e978777bSfredette
812e978777bSfredette$$divI_17:
813e978777bSfredette	.EXPORT		$$divI_17,MILLICODE
814e978777bSfredette	COMB,<,N	arg0,0,$neg17
815e978777bSfredette	ADDI		1,arg0,arg0
816e978777bSfredette	SHD		0,arg0,28,t1
817e978777bSfredette	SHD		arg0,0,28,t2
818e978777bSfredette	SUB		t2,arg0,arg0
819e978777bSfredette	B		$pos_for_17
820e978777bSfredette	SUBB		t1,0,ret1
821e978777bSfredette
822e978777bSfredette$neg17:
823e978777bSfredette	SUBI		1,arg0,arg0
824e978777bSfredette	SHD		0,arg0,28,t1
825e978777bSfredette	SHD		arg0,0,28,t2
826e978777bSfredette	SUB		t2,arg0,arg0
827e978777bSfredette	B		$neg_for_17
828e978777bSfredette	SUBB		t1,0,ret1
829e978777bSfredette
830e978777bSfredette$$divU_17:
831e978777bSfredette	.EXPORT		$$divU_17,MILLICODE
832e978777bSfredette	ADDI		1,arg0,arg0
833e978777bSfredette	ADDC		0,0,ret1
834e978777bSfredette	SHD		ret1,arg0,28,t1
835e978777bSfredette$u17:
836e978777bSfredette	SHD		arg0,0,28,t2
837e978777bSfredette	SUB		t2,arg0,arg0
838e978777bSfredette	B		$pos_for_17
839e978777bSfredette	SUBB		t1,ret1,ret1
840e978777bSfredette
841e978777bSfredette$$divI_7:
842e978777bSfredette	.EXPORT		$$divI_7,MILLICODE
843e978777bSfredette	COMB,<,N	arg0,0,$neg7
844e978777bSfredette$7:
845e978777bSfredette	ADDI		1,arg0,arg0
846e978777bSfredette	SHD		0,arg0,29,ret1
847e978777bSfredette	SH3ADD		arg0,arg0,arg0
848e978777bSfredette	ADDC		ret1,0,ret1
849e978777bSfredette$pos7:
850e978777bSfredette	SHD		ret1,arg0,26,t1
851e978777bSfredette	SHD		arg0,0,26,t2
852e978777bSfredette	ADD		arg0,t2,arg0
853e978777bSfredette	ADDC		ret1,t1,ret1
854e978777bSfredette
855e978777bSfredette	SHD		ret1,arg0,20,t1
856e978777bSfredette	SHD		arg0,0,20,t2
857e978777bSfredette	ADD		arg0,t2,arg0
858e978777bSfredette	ADDC		ret1,t1,t1
859e978777bSfredette
860e978777bSfredette	COPY		0,ret1
861e978777bSfredette	SHD,=		t1,arg0,24,t1
862e978777bSfredette$1:
863e978777bSfredette	ADDB,TR		t1,ret1,$2
864e978777bSfredette	EXTRU		arg0,31,24,arg0
865e978777bSfredette
866e978777bSfredette	bv,n  0(r31)
867e978777bSfredette
868e978777bSfredette$2:
869e978777bSfredette	ADDB,TR		t1,arg0,$1
870e978777bSfredette	EXTRU,=		arg0,7,8,t1
871e978777bSfredette
872e978777bSfredette$neg7:
873e978777bSfredette	SUBI		1,arg0,arg0
874e978777bSfredette$8:
875e978777bSfredette	SHD		0,arg0,29,ret1
876e978777bSfredette	SH3ADD		arg0,arg0,arg0
877e978777bSfredette	ADDC		ret1,0,ret1
878e978777bSfredette
879e978777bSfredette$neg7_shift:
880e978777bSfredette	SHD		ret1,arg0,26,t1
881e978777bSfredette	SHD		arg0,0,26,t2
882e978777bSfredette	ADD		arg0,t2,arg0
883e978777bSfredette	ADDC		ret1,t1,ret1
884e978777bSfredette
885e978777bSfredette	SHD		ret1,arg0,20,t1
886e978777bSfredette	SHD		arg0,0,20,t2
887e978777bSfredette	ADD		arg0,t2,arg0
888e978777bSfredette	ADDC		ret1,t1,t1
889e978777bSfredette
890e978777bSfredette	COPY		0,ret1
891e978777bSfredette	SHD,=		t1,arg0,24,t1
892e978777bSfredette$3:
893e978777bSfredette	ADDB,TR		t1,ret1,$4
894e978777bSfredette	EXTRU		arg0,31,24,arg0
895e978777bSfredette
896e978777bSfredette	bv		0(r31)
897e978777bSfredette	SUB		0,ret1,ret1
898e978777bSfredette
899e978777bSfredette$4:
900e978777bSfredette	ADDB,TR		t1,arg0,$3
901e978777bSfredette	EXTRU,=		arg0,7,8,t1
902e978777bSfredette
903e978777bSfredette$$divU_7:
904e978777bSfredette	.EXPORT		$$divU_7,MILLICODE
905e978777bSfredette	ADDI		1,arg0,arg0
906e978777bSfredette	ADDC		0,0,ret1
907e978777bSfredette	SHD		ret1,arg0,29,t1
908e978777bSfredette	SH3ADD		arg0,arg0,arg0
909e978777bSfredette	B		$pos7
910e978777bSfredette	ADDC		t1,ret1,ret1
911e978777bSfredette
912e978777bSfredette$$divI_9:
913e978777bSfredette	.EXPORT		$$divI_9,MILLICODE
914e978777bSfredette	COMB,<,N	arg0,0,$neg9
915e978777bSfredette	ADDI		1,arg0,arg0
916e978777bSfredette	SHD		0,arg0,29,t1
917e978777bSfredette	SHD		arg0,0,29,t2
918e978777bSfredette	SUB		t2,arg0,arg0
919e978777bSfredette	B		$pos7
920e978777bSfredette	SUBB		t1,0,ret1
921e978777bSfredette
922e978777bSfredette$neg9:
923e978777bSfredette	SUBI		1,arg0,arg0
924e978777bSfredette	SHD		0,arg0,29,t1
925e978777bSfredette	SHD		arg0,0,29,t2
926e978777bSfredette	SUB		t2,arg0,arg0
927e978777bSfredette	B		$neg7_shift
928e978777bSfredette	SUBB		t1,0,ret1
929e978777bSfredette
930e978777bSfredette$$divU_9:
931e978777bSfredette	.EXPORT		$$divU_9,MILLICODE
932e978777bSfredette	ADDI		1,arg0,arg0
933e978777bSfredette	ADDC		0,0,ret1
934e978777bSfredette	SHD		ret1,arg0,29,t1
935e978777bSfredette	SHD		arg0,0,29,t2
936e978777bSfredette	SUB		t2,arg0,arg0
937e978777bSfredette	B		$pos7
938e978777bSfredette	SUBB		t1,ret1,ret1
939e978777bSfredette
940e978777bSfredette$$divI_14:
941e978777bSfredette	.EXPORT		$$divI_14,MILLICODE
942e978777bSfredette	COMB,<,N	arg0,0,$neg14
943e978777bSfredette$$divU_14:
944e978777bSfredette	.EXPORT		$$divU_14,MILLICODE
945e978777bSfredette	B		$7
946e978777bSfredette	EXTRU		arg0,30,31,arg0
947e978777bSfredette
948e978777bSfredette$neg14:
949e978777bSfredette	SUBI		2,arg0,arg0
950e978777bSfredette	B		$8
951e978777bSfredette	EXTRU		arg0,30,31,arg0
952e978777bSfredette
953e978777bSfredette	.PROCEND
954e978777bSfredette	.END
955e978777bSfredette
956e978777bSfredettermndr: .EQU	ret1	; r29
957e978777bSfredette
958e978777bSfredette	.export $$remU,millicode
959e978777bSfredette$$remU:
960e978777bSfredette	.proc
961e978777bSfredette	.callinfo NO_CALLS
962e978777bSfredette	.entry
963e978777bSfredette
964e978777bSfredette	comib,>=,n  0,arg1,special_case
965e978777bSfredette	sub	r0,arg1,rmndr		; clear carry, negate the divisor
966e978777bSfredette	ds	r0,rmndr,r0		; set V-bit to 1
967e978777bSfredette	add	arg0,arg0,temp		; shift msb bit into carry
968e978777bSfredette	ds	r0,arg1,rmndr		; 1st divide step, if no carry
969e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
970e978777bSfredette	ds	rmndr,arg1,rmndr		; 2nd divide step
971e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
972e978777bSfredette	ds	rmndr,arg1,rmndr		; 3rd divide step
973e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
974e978777bSfredette	ds	rmndr,arg1,rmndr		; 4th divide step
975e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
976e978777bSfredette	ds	rmndr,arg1,rmndr		; 5th divide step
977e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
978e978777bSfredette	ds	rmndr,arg1,rmndr		; 6th divide step
979e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
980e978777bSfredette	ds	rmndr,arg1,rmndr		; 7th divide step
981e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
982e978777bSfredette	ds	rmndr,arg1,rmndr		; 8th divide step
983e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
984e978777bSfredette	ds	rmndr,arg1,rmndr		; 9th divide step
985e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
986e978777bSfredette	ds	rmndr,arg1,rmndr		; 10th divide step
987e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
988e978777bSfredette	ds	rmndr,arg1,rmndr		; 11th divide step
989e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
990e978777bSfredette	ds	rmndr,arg1,rmndr		; 12th divide step
991e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
992e978777bSfredette	ds	rmndr,arg1,rmndr		; 13th divide step
993e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
994e978777bSfredette	ds	rmndr,arg1,rmndr		; 14th divide step
995e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
996e978777bSfredette	ds	rmndr,arg1,rmndr		; 15th divide step
997e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
998e978777bSfredette	ds	rmndr,arg1,rmndr		; 16th divide step
999e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1000e978777bSfredette	ds	rmndr,arg1,rmndr		; 17th divide step
1001e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1002e978777bSfredette	ds	rmndr,arg1,rmndr		; 18th divide step
1003e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1004e978777bSfredette	ds	rmndr,arg1,rmndr		; 19th divide step
1005e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1006e978777bSfredette	ds	rmndr,arg1,rmndr		; 20th divide step
1007e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1008e978777bSfredette	ds	rmndr,arg1,rmndr		; 21st divide step
1009e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1010e978777bSfredette	ds	rmndr,arg1,rmndr		; 22nd divide step
1011e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1012e978777bSfredette	ds	rmndr,arg1,rmndr		; 23rd divide step
1013e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1014e978777bSfredette	ds	rmndr,arg1,rmndr		; 24th divide step
1015e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1016e978777bSfredette	ds	rmndr,arg1,rmndr		; 25th divide step
1017e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1018e978777bSfredette	ds	rmndr,arg1,rmndr		; 26th divide step
1019e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1020e978777bSfredette	ds	rmndr,arg1,rmndr		; 27th divide step
1021e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1022e978777bSfredette	ds	rmndr,arg1,rmndr		; 28th divide step
1023e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1024e978777bSfredette	ds	rmndr,arg1,rmndr		; 29th divide step
1025e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1026e978777bSfredette	ds	rmndr,arg1,rmndr		; 30th divide step
1027e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1028e978777bSfredette	ds	rmndr,arg1,rmndr		; 31st divide step
1029e978777bSfredette	addc	temp,temp,temp		; shift temp with/into carry
1030e978777bSfredette	ds	rmndr,arg1,rmndr		; 32nd divide step,
1031e978777bSfredette	comiclr,<= 0,rmndr,r0
1032e978777bSfredette	  add	rmndr,arg1,rmndr	; correction
1033e978777bSfredette;	.exit
1034e978777bSfredette	bv,n  0(r31)
1035e978777bSfredette	nop
1036e978777bSfredette; Putting >= on the last DS and deleting COMICLR does not work!
1037e978777bSfredette;_____________________________________________________________________________
1038e978777bSfredettespecial_case:
1039e978777bSfredette	addit,=	0,arg1,r0		; trap on div by zero
1040e978777bSfredette	sub,>>=	arg0,arg1,rmndr
1041e978777bSfredette	  copy	arg0,rmndr
1042e978777bSfredette	.exit
1043e978777bSfredette	bv,n  0(r31)
1044e978777bSfredette	nop
1045e978777bSfredette	.procend
1046e978777bSfredette	.end
1047e978777bSfredette
1048e978777bSfredette; Use bv  0(r31) and bv,n  0(r31) instead.
1049e978777bSfredette; #define	return		bv	0(%mrp)
1050e978777bSfredette; #define	return_n	bv,n	0(%mrp)
1051e978777bSfredette
1052e978777bSfredette	.align 16
1053e978777bSfredette$$mulI:
1054e978777bSfredette
1055e978777bSfredette	.proc
1056e978777bSfredette	.callinfo NO_CALLS
1057e978777bSfredette	.export $$mulI, millicode
1058e978777bSfredette	combt,<<=	%r25,%r26,l4	; swap args if unsigned %r25>%r26
1059e978777bSfredette	copy		0,%r29		; zero out the result
1060e978777bSfredette	xor		%r26,%r25,%r26	; swap %r26 & %r25 using the
1061e978777bSfredette	xor		%r26,%r25,%r25	;  old xor trick
1062e978777bSfredette	xor		%r26,%r25,%r26
1063e978777bSfredettel4: combt,<=	0,%r26,l3		; if %r26>=0 then proceed like unsigned
1064e978777bSfredette
1065e978777bSfredette	zdep		%r25,30,8,%r1	; %r1 = (%r25&0xff)<<1 *********
1066e978777bSfredette	sub,>		0,%r25,%r1		; otherwise negate both and
1067e978777bSfredette	combt,<=,n	%r26,%r1,l2	;  swap back if |%r26|<|%r25|
1068e978777bSfredette	sub		0,%r26,%r25
1069e978777bSfredette	movb,tr,n	%r1,%r26,l2	; 10th inst.
1070e978777bSfredette
1071e978777bSfredettel0:	add	%r29,%r1,%r29				; add in this partial product
1072e978777bSfredette
1073e978777bSfredettel1: zdep	%r26,23,24,%r26			; %r26 <<= 8 ******************
1074e978777bSfredette
1075e978777bSfredettel2: zdep		%r25,30,8,%r1	; %r1 = (%r25&0xff)<<1 *********
1076e978777bSfredette
1077e978777bSfredettel3: blr		%r1,0		; case on these 8 bits ******
1078e978777bSfredette
1079e978777bSfredette	extru		%r25,23,24,%r25	; %r25 >>= 8 ******************
1080e978777bSfredette
1081e978777bSfredette;16 insts before this.
1082e978777bSfredette;			  %r26 <<= 8 **************************
1083e978777bSfredettex0: comb,<>	%r25,0,l2	! zdep	%r26,23,24,%r26	! bv,n  0(r31)	! nop
1084e978777bSfredette
1085e978777bSfredettex1: comb,<>	%r25,0,l1	!	add	%r29,%r26,%r29	! bv,n  0(r31)	! nop
1086e978777bSfredette
1087e978777bSfredettex2: comb,<>	%r25,0,l1	! sh1add	%r26,%r29,%r29	! bv,n  0(r31)	! nop
1088e978777bSfredette
1089e978777bSfredettex3: comb,<>	%r25,0,l0	!	sh1add	%r26,%r26,%r1	! bv	0(r31)	!	add	%r29,%r1,%r29
1090e978777bSfredette
1091e978777bSfredettex4: comb,<>	%r25,0,l1	! sh2add	%r26,%r29,%r29	! bv,n  0(r31)	! nop
1092e978777bSfredette
1093e978777bSfredettex5: comb,<>	%r25,0,l0	!	sh2add	%r26,%r26,%r1	! bv	0(r31)	!	add	%r29,%r1,%r29
1094e978777bSfredette
1095e978777bSfredettex6:	sh1add	%r26,%r26,%r1		! comb,<>	%r25,0,l1	! sh1add	%r1,%r29,%r29	! bv,n  0(r31)
1096e978777bSfredette
1097e978777bSfredettex7:	sh1add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	! sh2add	%r26,%r29,%r29	! b,n	ret_t0
1098e978777bSfredette
1099e978777bSfredettex8: comb,<>	%r25,0,l1	! sh3add	%r26,%r29,%r29	! bv,n  0(r31)	! nop
1100e978777bSfredette
1101e978777bSfredettex9: comb,<>	%r25,0,l0	!	sh3add	%r26,%r26,%r1	! bv	0(r31)	!	add	%r29,%r1,%r29
1102e978777bSfredette
1103e978777bSfredettex10:	sh2add	%r26,%r26,%r1		! comb,<>	%r25,0,l1	! sh1add	%r1,%r29,%r29	! bv,n  0(r31)
1104e978777bSfredette
1105e978777bSfredettex11:	sh1add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	! sh3add	%r26,%r29,%r29	! b,n	ret_t0
1106e978777bSfredette
1107e978777bSfredettex12:	sh1add	%r26,%r26,%r1		! comb,<>	%r25,0,l1	! sh2add	%r1,%r29,%r29	! bv,n  0(r31)
1108e978777bSfredette
1109e978777bSfredettex13:	sh2add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	! sh3add	%r26,%r29,%r29	! b,n	ret_t0
1110e978777bSfredette
1111e978777bSfredettex14:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1112e978777bSfredette
1113e978777bSfredettex15:	sh2add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	!	sh1add	%r1,%r1,%r1	! b,n	ret_t0
1114e978777bSfredette
1115e978777bSfredettex16: zdep	%r26,27,28,%r1	! comb,<>	%r25,0,l1	!	add	%r29,%r1,%r29	! bv,n  0(r31)
1116e978777bSfredette
1117e978777bSfredettex17:	sh3add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	! sh3add	%r26,%r1,%r1	! b,n	ret_t0
1118e978777bSfredette
1119e978777bSfredettex18:	sh3add	%r26,%r26,%r1		! comb,<>	%r25,0,l1	! sh1add	%r1,%r29,%r29	! bv,n  0(r31)
1120e978777bSfredette
1121e978777bSfredettex19:	sh3add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	! sh1add	%r1,%r26,%r1	! b,n	ret_t0
1122e978777bSfredette
1123e978777bSfredettex20:	sh2add	%r26,%r26,%r1		! comb,<>	%r25,0,l1	! sh2add	%r1,%r29,%r29	! bv,n  0(r31)
1124e978777bSfredette
1125e978777bSfredettex21:	sh2add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	! sh2add	%r1,%r26,%r1	! b,n	ret_t0
1126e978777bSfredette
1127e978777bSfredettex22:	sh2add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1128e978777bSfredette
1129e978777bSfredettex23:	sh2add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1130e978777bSfredette
1131e978777bSfredettex24:	sh1add	%r26,%r26,%r1		! comb,<>	%r25,0,l1	! sh3add	%r1,%r29,%r29	! bv,n  0(r31)
1132e978777bSfredette
1133e978777bSfredettex25:	sh2add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	!	sh2add	%r1,%r1,%r1	! b,n	ret_t0
1134e978777bSfredette
1135e978777bSfredettex26:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1136e978777bSfredette
1137e978777bSfredettex27:	sh1add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	!	sh3add	%r1,%r1,%r1	! b,n	ret_t0
1138e978777bSfredette
1139e978777bSfredettex28:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1140e978777bSfredette
1141e978777bSfredettex29:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1142e978777bSfredette
1143e978777bSfredettex30:	sh2add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1144e978777bSfredette
1145e978777bSfredettex31: zdep	%r26,26,27,%r1	! comb,<>	%r25,0,l0	! sub	%r1,%r26,%r1	! b,n	ret_t0
1146e978777bSfredette
1147e978777bSfredettex32: zdep	%r26,26,27,%r1	! comb,<>	%r25,0,l1	!	add	%r29,%r1,%r29	! bv,n  0(r31)
1148e978777bSfredette
1149e978777bSfredettex33:	sh3add	%r26,0,%r1		! comb,<>	%r25,0,l0	! sh2add	%r1,%r26,%r1	! b,n	ret_t0
1150e978777bSfredette
1151e978777bSfredettex34: zdep	%r26,27,28,%r1	! add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1152e978777bSfredette
1153e978777bSfredettex35:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sh3add	%r26,%r1,%r1
1154e978777bSfredette
1155e978777bSfredettex36:	sh3add	%r26,%r26,%r1		! comb,<>	%r25,0,l1	! sh2add	%r1,%r29,%r29	! bv,n  0(r31)
1156e978777bSfredette
1157e978777bSfredettex37:	sh3add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	! sh2add	%r1,%r26,%r1	! b,n	ret_t0
1158e978777bSfredette
1159e978777bSfredettex38:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1160e978777bSfredette
1161e978777bSfredettex39:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1162e978777bSfredette
1163e978777bSfredettex40:	sh2add	%r26,%r26,%r1		! comb,<>	%r25,0,l1	! sh3add	%r1,%r29,%r29	! bv,n  0(r31)
1164e978777bSfredette
1165e978777bSfredettex41:	sh2add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	! sh3add	%r1,%r26,%r1	! b,n	ret_t0
1166e978777bSfredette
1167e978777bSfredettex42:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1168e978777bSfredette
1169e978777bSfredettex43:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1170e978777bSfredette
1171e978777bSfredettex44:	sh2add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1172e978777bSfredette
1173e978777bSfredettex45:	sh3add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	!	sh2add	%r1,%r1,%r1	! b,n	ret_t0
1174e978777bSfredette
1175e978777bSfredettex46:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	! add	%r1,%r26,%r1
1176e978777bSfredette
1177e978777bSfredettex47:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	! sh1add	%r26,%r1,%r1
1178e978777bSfredette
1179e978777bSfredettex48:	sh1add	%r26,%r26,%r1		! comb,<>	%r25,0,l0	! zdep	%r1,27,28,%r1	! b,n	ret_t0
1180e978777bSfredette
1181e978777bSfredettex49:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	! sh2add	%r26,%r1,%r1
1182e978777bSfredette
1183e978777bSfredettex50:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1184e978777bSfredette
1185e978777bSfredettex51:	sh3add	%r26,%r26,%r1		! sh3add	%r26,%r1,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1186e978777bSfredette
1187e978777bSfredettex52:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1188e978777bSfredette
1189e978777bSfredettex53:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1190e978777bSfredette
1191e978777bSfredettex54:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1192e978777bSfredette
1193e978777bSfredettex55:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1194e978777bSfredette
1195e978777bSfredettex56:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1196e978777bSfredette
1197e978777bSfredettex57:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1198e978777bSfredette
1199e978777bSfredettex58:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_2t0	! sh2add	%r1,%r26,%r1
1200e978777bSfredette
1201e978777bSfredettex59:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_t02a0	!	sh1add	%r1,%r1,%r1
1202e978777bSfredette
1203e978777bSfredettex60:	sh2add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1204e978777bSfredette
1205e978777bSfredettex61:	sh2add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1206e978777bSfredette
1207e978777bSfredettex62: zdep	%r26,26,27,%r1	! sub	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1208e978777bSfredette
1209e978777bSfredettex63: zdep	%r26,25,26,%r1	! comb,<>	%r25,0,l0	! sub	%r1,%r26,%r1	! b,n	ret_t0
1210e978777bSfredette
1211e978777bSfredettex64: zdep	%r26,25,26,%r1	! comb,<>	%r25,0,l1	!	add	%r29,%r1,%r29	! bv,n  0(r31)
1212e978777bSfredette
1213e978777bSfredettex65:	sh3add	%r26,0,%r1		! comb,<>	%r25,0,l0	! sh3add	%r1,%r26,%r1	! b,n	ret_t0
1214e978777bSfredette
1215e978777bSfredettex66: zdep	%r26,26,27,%r1	! add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1216e978777bSfredette
1217e978777bSfredettex67:	sh3add	%r26,0,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1218e978777bSfredette
1219e978777bSfredettex68:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1220e978777bSfredette
1221e978777bSfredettex69:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1222e978777bSfredette
1223e978777bSfredettex70: zdep	%r26,25,26,%r1	! sh2add	%r26,%r1,%r1	!	b	e_t0	! sh1add	%r26,%r1,%r1
1224e978777bSfredette
1225e978777bSfredettex71:	sh3add	%r26,%r26,%r1		!	sh3add	%r1,0,%r1	!	b	e_t0	! sub	%r1,%r26,%r1
1226e978777bSfredette
1227e978777bSfredettex72:	sh3add	%r26,%r26,%r1		! comb,<>	%r25,0,l1	! sh3add	%r1,%r29,%r29	! bv,n  0(r31)
1228e978777bSfredette
1229e978777bSfredettex73:	sh3add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	! b	e_shift	!	add	%r29,%r1,%r29
1230e978777bSfredette
1231e978777bSfredettex74:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1232e978777bSfredette
1233e978777bSfredettex75:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1234e978777bSfredette
1235e978777bSfredettex76:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1236e978777bSfredette
1237e978777bSfredettex77:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1238e978777bSfredette
1239e978777bSfredettex78:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_2t0	! sh1add	%r1,%r26,%r1
1240e978777bSfredette
1241e978777bSfredettex79: zdep	%r26,27,28,%r1	!	sh2add	%r1,%r1,%r1	!	b	e_t0	! sub	%r1,%r26,%r1
1242e978777bSfredette
1243e978777bSfredettex80: zdep	%r26,27,28,%r1	!	sh2add	%r1,%r1,%r1	! b	e_shift	!	add	%r29,%r1,%r29
1244e978777bSfredette
1245e978777bSfredettex81:	sh3add	%r26,%r26,%r1		!	sh3add	%r1,%r1,%r1	! b	e_shift	!	add	%r29,%r1,%r29
1246e978777bSfredette
1247e978777bSfredettex82:	sh2add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1248e978777bSfredette
1249e978777bSfredettex83:	sh2add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1250e978777bSfredette
1251e978777bSfredettex84:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1252e978777bSfredette
1253e978777bSfredettex85:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1254e978777bSfredette
1255e978777bSfredettex86:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_2t0	! sh1add	%r1,%r26,%r1
1256e978777bSfredette
1257e978777bSfredettex87:	sh3add	%r26,%r26,%r1		!	sh3add	%r1,%r1,%r1	! b	e_t02a0	! sh2add	%r26,%r1,%r1
1258e978777bSfredette
1259e978777bSfredettex88:	sh2add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1260e978777bSfredette
1261e978777bSfredettex89:	sh2add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	! sh3add	%r1,%r26,%r1
1262e978777bSfredette
1263e978777bSfredettex90:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1264e978777bSfredette
1265e978777bSfredettex91:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1266e978777bSfredette
1267e978777bSfredettex92:	sh2add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_4t0	! sh1add	%r1,%r26,%r1
1268e978777bSfredette
1269e978777bSfredettex93: zdep	%r26,26,27,%r1	! sub	%r1,%r26,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1270e978777bSfredette
1271e978777bSfredettex94:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_2t0	! sh1add	%r26,%r1,%r1
1272e978777bSfredette
1273e978777bSfredettex95:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1274e978777bSfredette
1275e978777bSfredettex96:	sh3add	%r26,0,%r1		!	sh1add	%r1,%r1,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1276e978777bSfredette
1277e978777bSfredettex97:	sh3add	%r26,0,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1278e978777bSfredette
1279e978777bSfredettex98: zdep	%r26,26,27,%r1	!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sh1add	%r26,%r1,%r1
1280e978777bSfredette
1281e978777bSfredettex99:	sh3add	%r26,0,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1282e978777bSfredette
1283e978777bSfredettex100:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1284e978777bSfredette
1285e978777bSfredettex101:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1286e978777bSfredette
1287e978777bSfredettex102: zdep	%r26,26,27,%r1	! sh1add	%r26,%r1,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1288e978777bSfredette
1289e978777bSfredettex103:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_t02a0	! sh2add	%r1,%r26,%r1
1290e978777bSfredette
1291e978777bSfredettex104:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1292e978777bSfredette
1293e978777bSfredettex105:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1294e978777bSfredette
1295e978777bSfredettex106:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_2t0	! sh2add	%r1,%r26,%r1
1296e978777bSfredette
1297e978777bSfredettex107:	sh3add	%r26,%r26,%r1		! sh2add	%r26,%r1,%r1	! b	e_t02a0	! sh3add	%r1,%r26,%r1
1298e978777bSfredette
1299e978777bSfredettex108:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1300e978777bSfredette
1301e978777bSfredettex109:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1302e978777bSfredette
1303e978777bSfredettex110:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_2t0	! sh1add	%r1,%r26,%r1
1304e978777bSfredette
1305e978777bSfredettex111:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1306e978777bSfredette
1307e978777bSfredettex112:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	! zdep	%r1,27,28,%r1
1308e978777bSfredette
1309e978777bSfredettex113:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_t02a0	!	sh1add	%r1,%r1,%r1
1310e978777bSfredette
1311e978777bSfredettex114:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_2t0	!	sh1add	%r1,%r1,%r1
1312e978777bSfredette
1313e978777bSfredettex115:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_2t0a0	!	sh1add	%r1,%r1,%r1
1314e978777bSfredette
1315e978777bSfredettex116:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_4t0	! sh2add	%r1,%r26,%r1
1316e978777bSfredette
1317e978777bSfredettex117:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	!	sh3add	%r1,%r1,%r1
1318e978777bSfredette
1319e978777bSfredettex118:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_t0a0	!	sh3add	%r1,%r1,%r1
1320e978777bSfredette
1321e978777bSfredettex119:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_t02a0	!	sh3add	%r1,%r1,%r1
1322e978777bSfredette
1323e978777bSfredettex120:	sh2add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1324e978777bSfredette
1325e978777bSfredettex121:	sh2add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sh3add	%r1,%r26,%r1
1326e978777bSfredette
1327e978777bSfredettex122:	sh2add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_2t0	! sh2add	%r1,%r26,%r1
1328e978777bSfredette
1329e978777bSfredettex123:	sh2add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1330e978777bSfredette
1331e978777bSfredettex124: zdep	%r26,26,27,%r1	! sub	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1332e978777bSfredette
1333e978777bSfredettex125:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1334e978777bSfredette
1335e978777bSfredettex126: zdep	%r26,25,26,%r1	! sub	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1336e978777bSfredette
1337e978777bSfredettex127: zdep	%r26,24,25,%r1	! comb,<>	%r25,0,l0	! sub	%r1,%r26,%r1	! b,n	ret_t0
1338e978777bSfredette
1339e978777bSfredettex128: zdep	%r26,24,25,%r1	! comb,<>	%r25,0,l1	!	add	%r29,%r1,%r29	! bv,n  0(r31)
1340e978777bSfredette
1341e978777bSfredettex129: zdep	%r26,24,25,%r1	! comb,<>	%r25,0,l0	! add	%r1,%r26,%r1	! b,n	ret_t0
1342e978777bSfredette
1343e978777bSfredettex130: zdep	%r26,25,26,%r1	! add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1344e978777bSfredette
1345e978777bSfredettex131:	sh3add	%r26,0,%r1		! sh3add	%r1,%r26,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1346e978777bSfredette
1347e978777bSfredettex132:	sh3add	%r26,0,%r1		! sh2add	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1348e978777bSfredette
1349e978777bSfredettex133:	sh3add	%r26,0,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1350e978777bSfredette
1351e978777bSfredettex134:	sh3add	%r26,0,%r1		! sh2add	%r1,%r26,%r1	!	b	e_2t0	! sh1add	%r1,%r26,%r1
1352e978777bSfredette
1353e978777bSfredettex135:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1354e978777bSfredette
1355e978777bSfredettex136:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1356e978777bSfredette
1357e978777bSfredettex137:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	! sh3add	%r1,%r26,%r1
1358e978777bSfredette
1359e978777bSfredettex138:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	!	b	e_2t0	! sh2add	%r1,%r26,%r1
1360e978777bSfredette
1361e978777bSfredettex139:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	! b	e_2t0a0	! sh2add	%r1,%r26,%r1
1362e978777bSfredette
1363e978777bSfredettex140:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_4t0	!	sh2add	%r1,%r1,%r1
1364e978777bSfredette
1365e978777bSfredettex141:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	! b	e_4t0a0	! sh1add	%r1,%r26,%r1
1366e978777bSfredette
1367e978777bSfredettex142:	sh3add	%r26,%r26,%r1		!	sh3add	%r1,0,%r1	!	b	e_2t0	! sub	%r1,%r26,%r1
1368e978777bSfredette
1369e978777bSfredettex143: zdep	%r26,27,28,%r1	!	sh3add	%r1,%r1,%r1	!	b	e_t0	! sub	%r1,%r26,%r1
1370e978777bSfredette
1371e978777bSfredettex144:	sh3add	%r26,%r26,%r1		!	sh3add	%r1,0,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1372e978777bSfredette
1373e978777bSfredettex145:	sh3add	%r26,%r26,%r1		!	sh3add	%r1,0,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1374e978777bSfredette
1375e978777bSfredettex146:	sh3add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1376e978777bSfredette
1377e978777bSfredettex147:	sh3add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1378e978777bSfredette
1379e978777bSfredettex148:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1380e978777bSfredette
1381e978777bSfredettex149:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1382e978777bSfredette
1383e978777bSfredettex150:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_2t0	! sh1add	%r1,%r26,%r1
1384e978777bSfredette
1385e978777bSfredettex151:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_2t0a0	! sh1add	%r1,%r26,%r1
1386e978777bSfredette
1387e978777bSfredettex152:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1388e978777bSfredette
1389e978777bSfredettex153:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	! sh3add	%r1,%r26,%r1
1390e978777bSfredette
1391e978777bSfredettex154:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_2t0	! sh2add	%r1,%r26,%r1
1392e978777bSfredette
1393e978777bSfredettex155: zdep	%r26,26,27,%r1	! sub	%r1,%r26,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1394e978777bSfredette
1395e978777bSfredettex156:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_4t0	! sh1add	%r1,%r26,%r1
1396e978777bSfredette
1397e978777bSfredettex157: zdep	%r26,26,27,%r1	! sub	%r1,%r26,%r1	! b	e_t02a0	!	sh2add	%r1,%r1,%r1
1398e978777bSfredette
1399e978777bSfredettex158: zdep	%r26,27,28,%r1	!	sh2add	%r1,%r1,%r1	!	b	e_2t0	! sub	%r1,%r26,%r1
1400e978777bSfredette
1401e978777bSfredettex159: zdep	%r26,26,27,%r1	!	sh2add	%r1,%r1,%r1	!	b	e_t0	! sub	%r1,%r26,%r1
1402e978777bSfredette
1403e978777bSfredettex160:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,0,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1404e978777bSfredette
1405e978777bSfredettex161:	sh3add	%r26,0,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1406e978777bSfredette
1407e978777bSfredettex162:	sh3add	%r26,%r26,%r1		!	sh3add	%r1,%r1,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1408e978777bSfredette
1409e978777bSfredettex163:	sh3add	%r26,%r26,%r1		!	sh3add	%r1,%r1,%r1	!	b	e_t0	! sh1add	%r1,%r26,%r1
1410e978777bSfredette
1411e978777bSfredettex164:	sh2add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1412e978777bSfredette
1413e978777bSfredettex165:	sh3add	%r26,0,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1414e978777bSfredette
1415e978777bSfredettex166:	sh2add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	!	b	e_2t0	! sh1add	%r1,%r26,%r1
1416e978777bSfredette
1417e978777bSfredettex167:	sh2add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	! b	e_2t0a0	! sh1add	%r1,%r26,%r1
1418e978777bSfredette
1419e978777bSfredettex168:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1420e978777bSfredette
1421e978777bSfredettex169:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	! sh3add	%r1,%r26,%r1
1422e978777bSfredette
1423e978777bSfredettex170: zdep	%r26,26,27,%r1	! sh1add	%r26,%r1,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1424e978777bSfredette
1425e978777bSfredettex171:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_t0	!	sh3add	%r1,%r1,%r1
1426e978777bSfredette
1427e978777bSfredettex172:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_4t0	! sh1add	%r1,%r26,%r1
1428e978777bSfredette
1429e978777bSfredettex173:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_t02a0	!	sh3add	%r1,%r1,%r1
1430e978777bSfredette
1431e978777bSfredettex174: zdep	%r26,26,27,%r1	! sh1add	%r26,%r1,%r1	! b	e_t04a0	!	sh2add	%r1,%r1,%r1
1432e978777bSfredette
1433e978777bSfredettex175:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	!	b	e_5t0	! sh1add	%r1,%r26,%r1
1434e978777bSfredette
1435e978777bSfredettex176:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_8t0	! add	%r1,%r26,%r1
1436e978777bSfredette
1437e978777bSfredettex177:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_8t0a0	! add	%r1,%r26,%r1
1438e978777bSfredette
1439e978777bSfredettex178:	sh2add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_2t0	! sh3add	%r1,%r26,%r1
1440e978777bSfredette
1441e978777bSfredettex179:	sh2add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_2t0a0	! sh3add	%r1,%r26,%r1
1442e978777bSfredette
1443e978777bSfredettex180:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1444e978777bSfredette
1445e978777bSfredettex181:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1446e978777bSfredette
1447e978777bSfredettex182:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_2t0	! sh1add	%r1,%r26,%r1
1448e978777bSfredette
1449e978777bSfredettex183:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_2t0a0	! sh1add	%r1,%r26,%r1
1450e978777bSfredette
1451e978777bSfredettex184:	sh2add	%r26,%r26,%r1		!	sh3add	%r1,%r1,%r1	!	b	e_4t0	! add	%r1,%r26,%r1
1452e978777bSfredette
1453e978777bSfredettex185:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1454e978777bSfredette
1455e978777bSfredettex186: zdep	%r26,26,27,%r1	! sub	%r1,%r26,%r1	!	b	e_2t0	!	sh1add	%r1,%r1,%r1
1456e978777bSfredette
1457e978777bSfredettex187:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_t02a0	!	sh2add	%r1,%r1,%r1
1458e978777bSfredette
1459e978777bSfredettex188:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_4t0	! sh1add	%r26,%r1,%r1
1460e978777bSfredette
1461e978777bSfredettex189:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_t0	!	sh3add	%r1,%r1,%r1
1462e978777bSfredette
1463e978777bSfredettex190:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_2t0	!	sh2add	%r1,%r1,%r1
1464e978777bSfredette
1465e978777bSfredettex191: zdep	%r26,25,26,%r1	!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sub	%r1,%r26,%r1
1466e978777bSfredette
1467e978777bSfredettex192:	sh3add	%r26,0,%r1		!	sh1add	%r1,%r1,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1468e978777bSfredette
1469e978777bSfredettex193:	sh3add	%r26,0,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sh3add	%r1,%r26,%r1
1470e978777bSfredette
1471e978777bSfredettex194:	sh3add	%r26,0,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_2t0	! sh2add	%r1,%r26,%r1
1472e978777bSfredette
1473e978777bSfredettex195:	sh3add	%r26,0,%r1		! sh3add	%r1,%r26,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1474e978777bSfredette
1475e978777bSfredettex196:	sh3add	%r26,0,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_4t0	! sh1add	%r1,%r26,%r1
1476e978777bSfredette
1477e978777bSfredettex197:	sh3add	%r26,0,%r1		!	sh1add	%r1,%r1,%r1	! b	e_4t0a0	! sh1add	%r1,%r26,%r1
1478e978777bSfredette
1479e978777bSfredettex198: zdep	%r26,25,26,%r1	! sh1add	%r26,%r1,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1480e978777bSfredette
1481e978777bSfredettex199:	sh3add	%r26,0,%r1		! sh2add	%r1,%r26,%r1	! b	e_2t0a0	!	sh1add	%r1,%r1,%r1
1482e978777bSfredette
1483e978777bSfredettex200:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1484e978777bSfredette
1485e978777bSfredettex201:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	! sh3add	%r1,%r26,%r1
1486e978777bSfredette
1487e978777bSfredettex202:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_2t0	! sh2add	%r1,%r26,%r1
1488e978777bSfredette
1489e978777bSfredettex203:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_2t0a0	! sh2add	%r1,%r26,%r1
1490e978777bSfredette
1491e978777bSfredettex204:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	!	b	e_4t0	!	sh1add	%r1,%r1,%r1
1492e978777bSfredette
1493e978777bSfredettex205:	sh2add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1494e978777bSfredette
1495e978777bSfredettex206: zdep	%r26,25,26,%r1	! sh2add	%r26,%r1,%r1	! b	e_t02a0	!	sh1add	%r1,%r1,%r1
1496e978777bSfredette
1497e978777bSfredettex207:	sh3add	%r26,0,%r1		! sh1add	%r1,%r26,%r1	!	b	e_3t0	! sh2add	%r1,%r26,%r1
1498e978777bSfredette
1499e978777bSfredettex208:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_8t0	! add	%r1,%r26,%r1
1500e978777bSfredette
1501e978777bSfredettex209:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_8t0a0	! add	%r1,%r26,%r1
1502e978777bSfredette
1503e978777bSfredettex210:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_2t0	!	sh2add	%r1,%r1,%r1
1504e978777bSfredette
1505e978777bSfredettex211:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_2t0a0	!	sh2add	%r1,%r1,%r1
1506e978777bSfredette
1507e978777bSfredettex212:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_4t0	! sh2add	%r1,%r26,%r1
1508e978777bSfredette
1509e978777bSfredettex213:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_4t0a0	! sh2add	%r1,%r26,%r1
1510e978777bSfredette
1511e978777bSfredettex214:	sh3add	%r26,%r26,%r1		! sh2add	%r26,%r1,%r1	! b	e2t04a0	! sh3add	%r1,%r26,%r1
1512e978777bSfredette
1513e978777bSfredettex215:	sh2add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_5t0	! sh1add	%r1,%r26,%r1
1514e978777bSfredette
1515e978777bSfredettex216:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1516e978777bSfredette
1517e978777bSfredettex217:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_t0	! sh3add	%r1,%r26,%r1
1518e978777bSfredette
1519e978777bSfredettex218:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_2t0	! sh2add	%r1,%r26,%r1
1520e978777bSfredette
1521e978777bSfredettex219:	sh3add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1522e978777bSfredette
1523e978777bSfredettex220:	sh1add	%r26,%r26,%r1		!	sh3add	%r1,%r1,%r1	!	b	e_4t0	! sh1add	%r1,%r26,%r1
1524e978777bSfredette
1525e978777bSfredettex221:	sh1add	%r26,%r26,%r1		!	sh3add	%r1,%r1,%r1	! b	e_4t0a0	! sh1add	%r1,%r26,%r1
1526e978777bSfredette
1527e978777bSfredettex222:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_2t0	!	sh1add	%r1,%r1,%r1
1528e978777bSfredette
1529e978777bSfredettex223:	sh3add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_2t0a0	!	sh1add	%r1,%r1,%r1
1530e978777bSfredette
1531e978777bSfredettex224:	sh3add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_8t0	! add	%r1,%r26,%r1
1532e978777bSfredette
1533e978777bSfredettex225:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_t0	!	sh2add	%r1,%r1,%r1
1534e978777bSfredette
1535e978777bSfredettex226:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_t02a0	! zdep	%r1,26,27,%r1
1536e978777bSfredette
1537e978777bSfredettex227:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_t02a0	!	sh2add	%r1,%r1,%r1
1538e978777bSfredette
1539e978777bSfredettex228:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_4t0	!	sh1add	%r1,%r1,%r1
1540e978777bSfredette
1541e978777bSfredettex229:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_4t0a0	!	sh1add	%r1,%r1,%r1
1542e978777bSfredette
1543e978777bSfredettex230:	sh3add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_5t0	! add	%r1,%r26,%r1
1544e978777bSfredette
1545e978777bSfredettex231:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_3t0	! sh2add	%r1,%r26,%r1
1546e978777bSfredette
1547e978777bSfredettex232:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	!	b	e_8t0	! sh2add	%r1,%r26,%r1
1548e978777bSfredette
1549e978777bSfredettex233:	sh1add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e_8t0a0	! sh2add	%r1,%r26,%r1
1550e978777bSfredette
1551e978777bSfredettex234:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	!	b	e_2t0	!	sh3add	%r1,%r1,%r1
1552e978777bSfredette
1553e978777bSfredettex235:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e_2t0a0	!	sh3add	%r1,%r1,%r1
1554e978777bSfredette
1555e978777bSfredettex236:	sh3add	%r26,%r26,%r1		! sh1add	%r1,%r26,%r1	! b	e4t08a0	!	sh1add	%r1,%r1,%r1
1556e978777bSfredette
1557e978777bSfredettex237: zdep	%r26,27,28,%r1	!	sh2add	%r1,%r1,%r1	!	b	e_3t0	! sub	%r1,%r26,%r1
1558e978777bSfredette
1559e978777bSfredettex238:	sh1add	%r26,%r26,%r1		! sh2add	%r1,%r26,%r1	! b	e2t04a0	!	sh3add	%r1,%r1,%r1
1560e978777bSfredette
1561e978777bSfredettex239: zdep	%r26,27,28,%r1	!	sh2add	%r1,%r1,%r1	! b	e_t0ma0	!	sh1add	%r1,%r1,%r1
1562e978777bSfredette
1563e978777bSfredettex240:	sh3add	%r26,%r26,%r1		! add	%r1,%r26,%r1	!	b	e_8t0	!	sh1add	%r1,%r1,%r1
1564e978777bSfredette
1565e978777bSfredettex241:	sh3add	%r26,%r26,%r1		! add	%r1,%r26,%r1	! b	e_8t0a0	!	sh1add	%r1,%r1,%r1
1566e978777bSfredette
1567e978777bSfredettex242:	sh2add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_2t0	! sh3add	%r1,%r26,%r1
1568e978777bSfredette
1569e978777bSfredettex243:	sh3add	%r26,%r26,%r1		!	sh3add	%r1,%r1,%r1	!	b	e_t0	!	sh1add	%r1,%r1,%r1
1570e978777bSfredette
1571e978777bSfredettex244:	sh2add	%r26,%r26,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_4t0	! sh2add	%r1,%r26,%r1
1572e978777bSfredette
1573e978777bSfredettex245:	sh3add	%r26,0,%r1		!	sh1add	%r1,%r1,%r1	!	b	e_5t0	! sh1add	%r1,%r26,%r1
1574e978777bSfredette
1575e978777bSfredettex246:	sh2add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	!	b	e_2t0	!	sh1add	%r1,%r1,%r1
1576e978777bSfredette
1577e978777bSfredettex247:	sh2add	%r26,%r26,%r1		! sh3add	%r1,%r26,%r1	! b	e_2t0a0	!	sh1add	%r1,%r1,%r1
1578e978777bSfredette
1579e978777bSfredettex248: zdep	%r26,26,27,%r1	! sub	%r1,%r26,%r1	! b	e_shift	! sh3add	%r1,%r29,%r29
1580e978777bSfredette
1581e978777bSfredettex249: zdep	%r26,26,27,%r1	! sub	%r1,%r26,%r1	!	b	e_t0	! sh3add	%r1,%r26,%r1
1582e978777bSfredette
1583e978777bSfredettex250:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	!	b	e_2t0	!	sh2add	%r1,%r1,%r1
1584e978777bSfredette
1585e978777bSfredettex251:	sh2add	%r26,%r26,%r1		!	sh2add	%r1,%r1,%r1	! b	e_2t0a0	!	sh2add	%r1,%r1,%r1
1586e978777bSfredette
1587e978777bSfredettex252: zdep	%r26,25,26,%r1	! sub	%r1,%r26,%r1	! b	e_shift	! sh2add	%r1,%r29,%r29
1588e978777bSfredette
1589e978777bSfredettex253: zdep	%r26,25,26,%r1	! sub	%r1,%r26,%r1	!	b	e_t0	! sh2add	%r1,%r26,%r1
1590e978777bSfredette
1591e978777bSfredettex254: zdep	%r26,24,25,%r1	! sub	%r1,%r26,%r1	! b	e_shift	! sh1add	%r1,%r29,%r29
1592e978777bSfredette
1593e978777bSfredettex255: zdep	%r26,23,24,%r1	! comb,<>	%r25,0,l0	! sub	%r1,%r26,%r1	! b,n	ret_t0
1594e978777bSfredette
1595e978777bSfredette;1040 insts before this.
1596e978777bSfredetteret_t0: bv	0(r31)
1597e978777bSfredette
1598e978777bSfredettee_t0:	add	%r29,%r1,%r29
1599e978777bSfredette
1600e978777bSfredettee_shift: comb,<>	%r25,0,l2
1601e978777bSfredette
1602e978777bSfredette	zdep	%r26,23,24,%r26	; %r26 <<= 8 ***********
1603e978777bSfredette	bv,n  0(r31)
1604e978777bSfredettee_t0ma0: comb,<>	%r25,0,l0
1605e978777bSfredette
1606e978777bSfredette	sub	%r1,%r26,%r1
1607e978777bSfredette	bv	0(r31)
1608e978777bSfredette	add	%r29,%r1,%r29
1609e978777bSfredettee_t0a0: comb,<>	%r25,0,l0
1610e978777bSfredette
1611e978777bSfredette	add	%r1,%r26,%r1
1612e978777bSfredette	bv	0(r31)
1613e978777bSfredette	add	%r29,%r1,%r29
1614e978777bSfredettee_t02a0: comb,<>	%r25,0,l0
1615e978777bSfredette
1616e978777bSfredette	sh1add	%r26,%r1,%r1
1617e978777bSfredette	bv	0(r31)
1618e978777bSfredette	add	%r29,%r1,%r29
1619e978777bSfredettee_t04a0: comb,<>	%r25,0,l0
1620e978777bSfredette
1621e978777bSfredette	sh2add	%r26,%r1,%r1
1622e978777bSfredette	bv	0(r31)
1623e978777bSfredette	add	%r29,%r1,%r29
1624e978777bSfredettee_2t0: comb,<>	%r25,0,l1
1625e978777bSfredette
1626e978777bSfredette	sh1add	%r1,%r29,%r29
1627e978777bSfredette	bv,n  0(r31)
1628e978777bSfredettee_2t0a0: comb,<>	%r25,0,l0
1629e978777bSfredette
1630e978777bSfredette	sh1add	%r1,%r26,%r1
1631e978777bSfredette	bv	0(r31)
1632e978777bSfredette	add	%r29,%r1,%r29
1633e978777bSfredettee2t04a0: sh1add	%r26,%r1,%r1
1634e978777bSfredette
1635e978777bSfredette	comb,<>	%r25,0,l1
1636e978777bSfredette	sh1add	%r1,%r29,%r29
1637e978777bSfredette	bv,n  0(r31)
1638e978777bSfredettee_3t0: comb,<>	%r25,0,l0
1639e978777bSfredette
1640e978777bSfredette	sh1add	%r1,%r1,%r1
1641e978777bSfredette	bv	0(r31)
1642e978777bSfredette	add	%r29,%r1,%r29
1643e978777bSfredettee_4t0: comb,<>	%r25,0,l1
1644e978777bSfredette
1645e978777bSfredette	sh2add	%r1,%r29,%r29
1646e978777bSfredette	bv,n  0(r31)
1647e978777bSfredettee_4t0a0: comb,<>	%r25,0,l0
1648e978777bSfredette
1649e978777bSfredette	sh2add	%r1,%r26,%r1
1650e978777bSfredette	bv	0(r31)
1651e978777bSfredette	add	%r29,%r1,%r29
1652e978777bSfredettee4t08a0: sh1add	%r26,%r1,%r1
1653e978777bSfredette
1654e978777bSfredette	comb,<>	%r25,0,l1
1655e978777bSfredette	sh2add	%r1,%r29,%r29
1656e978777bSfredette	bv,n  0(r31)
1657e978777bSfredettee_5t0: comb,<>	%r25,0,l0
1658e978777bSfredette
1659e978777bSfredette	sh2add	%r1,%r1,%r1
1660e978777bSfredette	bv	0(r31)
1661e978777bSfredette	add	%r29,%r1,%r29
1662e978777bSfredettee_8t0: comb,<>	%r25,0,l1
1663e978777bSfredette
1664e978777bSfredette	sh3add	%r1,%r29,%r29
1665e978777bSfredette	bv,n  0(r31)
1666e978777bSfredettee_8t0a0: comb,<>	%r25,0,l0
1667e978777bSfredette
1668e978777bSfredette	sh3add	%r1,%r26,%r1
1669e978777bSfredette	bv	0(r31)
1670e978777bSfredette	add	%r29,%r1,%r29
1671e978777bSfredette
1672e978777bSfredette	.procend
1673e978777bSfredette	.end
1674e978777bSfredette
1675e978777bSfredette	.import $$divI_2,millicode
1676e978777bSfredette	.import $$divI_3,millicode
1677e978777bSfredette	.import $$divI_4,millicode
1678e978777bSfredette	.import $$divI_5,millicode
1679e978777bSfredette	.import $$divI_6,millicode
1680e978777bSfredette	.import $$divI_7,millicode
1681e978777bSfredette	.import $$divI_8,millicode
1682e978777bSfredette	.import $$divI_9,millicode
1683e978777bSfredette	.import $$divI_10,millicode
1684e978777bSfredette	.import $$divI_12,millicode
1685e978777bSfredette	.import $$divI_14,millicode
1686e978777bSfredette	.import $$divI_15,millicode
1687e978777bSfredette	.export $$divI,millicode
1688e978777bSfredette	.export	$$divoI,millicode
1689e978777bSfredette$$divoI:
1690e978777bSfredette	.proc
1691e978777bSfredette	.callinfo	NO_CALLS
1692e978777bSfredette	comib,=,n  -1,arg1,negative1	; when divisor == -1
1693e978777bSfredette$$divI:
1694e978777bSfredette	comib,>>=,n 15,arg1,small_divisor
1695e978777bSfredette	add,>=	0,arg0,retreg		; move dividend, if retreg < 0,
1696e978777bSfredettenormal1:
1697e978777bSfredette	  sub	0,retreg,retreg		;   make it positive
1698e978777bSfredette	sub	0,arg1,temp		; clear carry,
1699e978777bSfredette					;   negate the divisor
1700e978777bSfredette	ds	0,temp,0		; set V-bit to the comple-
1701e978777bSfredette					;   ment of the divisor sign
1702e978777bSfredette	add	retreg,retreg,retreg	; shift msb bit into carry
1703e978777bSfredette	ds	r0,arg1,temp		; 1st divide step, if no carry
1704e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1705e978777bSfredette	ds	temp,arg1,temp		; 2nd divide step
1706e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1707e978777bSfredette	ds	temp,arg1,temp		; 3rd divide step
1708e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1709e978777bSfredette	ds	temp,arg1,temp		; 4th divide step
1710e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1711e978777bSfredette	ds	temp,arg1,temp		; 5th divide step
1712e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1713e978777bSfredette	ds	temp,arg1,temp		; 6th divide step
1714e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1715e978777bSfredette	ds	temp,arg1,temp		; 7th divide step
1716e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1717e978777bSfredette	ds	temp,arg1,temp		; 8th divide step
1718e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1719e978777bSfredette	ds	temp,arg1,temp		; 9th divide step
1720e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1721e978777bSfredette	ds	temp,arg1,temp		; 10th divide step
1722e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1723e978777bSfredette	ds	temp,arg1,temp		; 11th divide step
1724e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1725e978777bSfredette	ds	temp,arg1,temp		; 12th divide step
1726e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1727e978777bSfredette	ds	temp,arg1,temp		; 13th divide step
1728e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1729e978777bSfredette	ds	temp,arg1,temp		; 14th divide step
1730e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1731e978777bSfredette	ds	temp,arg1,temp		; 15th divide step
1732e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1733e978777bSfredette	ds	temp,arg1,temp		; 16th divide step
1734e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1735e978777bSfredette	ds	temp,arg1,temp		; 17th divide step
1736e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1737e978777bSfredette	ds	temp,arg1,temp		; 18th divide step
1738e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1739e978777bSfredette	ds	temp,arg1,temp		; 19th divide step
1740e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1741e978777bSfredette	ds	temp,arg1,temp		; 20th divide step
1742e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1743e978777bSfredette	ds	temp,arg1,temp		; 21st divide step
1744e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1745e978777bSfredette	ds	temp,arg1,temp		; 22nd divide step
1746e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1747e978777bSfredette	ds	temp,arg1,temp		; 23rd divide step
1748e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1749e978777bSfredette	ds	temp,arg1,temp		; 24th divide step
1750e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1751e978777bSfredette	ds	temp,arg1,temp		; 25th divide step
1752e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1753e978777bSfredette	ds	temp,arg1,temp		; 26th divide step
1754e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1755e978777bSfredette	ds	temp,arg1,temp		; 27th divide step
1756e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1757e978777bSfredette	ds	temp,arg1,temp		; 28th divide step
1758e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1759e978777bSfredette	ds	temp,arg1,temp		; 29th divide step
1760e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1761e978777bSfredette	ds	temp,arg1,temp		; 30th divide step
1762e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1763e978777bSfredette	ds	temp,arg1,temp		; 31st divide step
1764e978777bSfredette	addc	retreg,retreg,retreg	; shift retreg with/into carry
1765e978777bSfredette	ds	temp,arg1,temp		; 32nd divide step,
1766e978777bSfredette	addc	retreg,retreg,retreg	; shift last retreg bit into retreg
1767e978777bSfredette	xor,>=	arg0,arg1,0		; get correct sign of quotient
1768e978777bSfredette	  sub	0,retreg,retreg		;   based on operand signs
1769e978777bSfredette	bv,n  0(r31)
1770e978777bSfredette	nop
1771e978777bSfredette;______________________________________________________________________
1772e978777bSfredettesmall_divisor:
1773e978777bSfredette	blr,n	arg1,r0
1774e978777bSfredette	nop
1775e978777bSfredette; table for divisor == 0,1, ... ,15
1776e978777bSfredette	addit,=	0,arg1,r0	; trap if divisor == 0
1777e978777bSfredette	nop
1778e978777bSfredette	bv	0(r31)		; divisor == 1
1779e978777bSfredette	copy	arg0,retreg
1780e978777bSfredette	 b,n	$$divI_2	; divisor == 2
1781e978777bSfredette	nop
1782e978777bSfredette	 b,n	$$divI_3	; divisor == 3
1783e978777bSfredette	nop
1784e978777bSfredette	 b,n	$$divI_4	; divisor == 4
1785e978777bSfredette	nop
1786e978777bSfredette	 b,n	$$divI_5	; divisor == 5
1787e978777bSfredette	nop
1788e978777bSfredette	 b,n	$$divI_6	; divisor == 6
1789e978777bSfredette	nop
1790e978777bSfredette	 b,n	$$divI_7	; divisor == 7
1791e978777bSfredette	nop
1792e978777bSfredette	 b,n	$$divI_8	; divisor == 8
1793e978777bSfredette	nop
1794e978777bSfredette	 b,n	$$divI_9	; divisor == 9
1795e978777bSfredette	nop
1796e978777bSfredette	 b,n	$$divI_10	; divisor == 10
1797e978777bSfredette	nop
1798e978777bSfredette	b	normal1		; divisor == 11
1799e978777bSfredette	add,>=	0,arg0,retreg
1800e978777bSfredette	 b,n	$$divI_12	; divisor == 12
1801e978777bSfredette	nop
1802e978777bSfredette	b	normal1		; divisor == 13
1803e978777bSfredette	add,>=	0,arg0,retreg
1804e978777bSfredette	 b,n	$$divI_14	; divisor == 14
1805e978777bSfredette	nop
1806e978777bSfredette	 b,n	$$divI_15	; divisor == 15
1807e978777bSfredette	nop
1808e978777bSfredette;______________________________________________________________________
1809e978777bSfredettenegative1:
1810e978777bSfredette	sub	0,arg0,retreg	; result is negation of dividend
1811e978777bSfredette	bv	0(r31)
1812e978777bSfredette	addo	arg0,arg1,r0	; trap iff dividend==0x80000000 && divisor==-1
1813e978777bSfredette	.procend
1814e978777bSfredette	.end
1815