source: rtems/c/src/lib/libcpu/hppa1.1/milli/milli.S @ 072d56b6

4.104.114.84.95
Last change on this file since 072d56b6 was 0162910, checked in by Joel Sherrill <joel.sherrill@…>, on 12/14/98 at 23:15:38

Patch from Ralf Corsepius <corsepiu@…> to rename all
.s files to .S in conformance with GNU conventions. This is a
minor step along the way to supporting automake.

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