components/clisp/patches/arisparc64.d.patch
changeset 5260 e336bbbceb4f
parent 5259 165add577cba
child 5261 172253f94ecf
equal deleted inserted replaced
5259:165add577cba 5260:e336bbbceb4f
     1 --- src.orig/arisparc64.d	Thu Dec  6 00:06:32 2007
       
     2 +++ src/arisparc64.d	Mon Feb  2 15:35:22 2009
       
     3 @@ -75,9 +75,9 @@
       
     4  
       
     5  # extern struct { uint32 lo; uint32 hi; } mulu32_ (uint32 arg1, uint32 arg2);
       
     6  # 2^32*hi+lo := arg1*arg2.
       
     7 -C(mulu32_:) # Input in %o0,%o1, Output in %o0,%g1
       
     8 +C(mulu32_:) # Input in %o0,%o1, Output in %o0,%g3
       
     9          umul %o0,%o1,%o2
       
    10 -        rd %y,%g1
       
    11 +        rd %y,%g3
       
    12          retl
       
    13         _ srl %o2,0,%o0
       
    14  
       
    15 @@ -90,11 +90,11 @@
       
    16  
       
    17  # extern struct { uint32 q; uint32 r; } divu_6432_3232_ (uint32 xhi, uint32 xlo, uint32 y);
       
    18  # x = 2^32*xhi+xlo = q*y+r schreiben. Sei bekannt, dass 0 <= x < 2^32*y .
       
    19 -C(divu_6432_3232_:) # Input in %o0,%o1,%o2, Output in %o0,%g1
       
    20 +C(divu_6432_3232_:) # Input in %o0,%o1,%o2, Output in %o0,%g3
       
    21          wr %o0,%g0,%y
       
    22          udiv %o1,%o2,%o0        # x durch y dividieren, %o0 := q
       
    23 -        umul %o0,%o2,%g1        # %g1 := (q*y) mod 2^32
       
    24 -        sub %o1,%g1,%g1         # %g1 := (xlo-q*y) mod 2^32 = r
       
    25 +        umul %o0,%o2,%g3        # %g3 := (q*y) mod 2^32
       
    26 +        sub %o1,%g3,%g3         # %g3 := (xlo-q*y) mod 2^32 = r
       
    27          retl
       
    28         _ srl %o0,0,%o0
       
    29  
       
    30 @@ -104,13 +104,13 @@
       
    31          wr %g0,%g0,%y
       
    32          udiv %o0,%o1,%o2        # dividieren, Quotient nach %o2
       
    33  #if 0 # Who says that %y has some meaningful contents after `udiv' ??
       
    34 -        rd %y,%g1               # Rest aus %y
       
    35 +        rd %y,%g3               # Rest aus %y
       
    36  #else
       
    37 -        umul %o2,%o1,%g1        # %g1 := (q*y) mod 2^32
       
    38 -        sub %o0,%g1,%g1         # %g1 := (x-q*y) mod 2^32 = r
       
    39 +        umul %o2,%o1,%g3        # %g3 := (q*y) mod 2^32
       
    40 +        sub %o0,%g3,%g3         # %g3 := (x-q*y) mod 2^32 = r
       
    41  #endif
       
    42 -        sll %g1,16,%g1          # in die oberen 16 Bit schieben
       
    43 -        or %o2,%g1,%o0
       
    44 +        sll %g3,16,%g3          # in die oberen 16 Bit schieben
       
    45 +        or %o2,%g3,%o0
       
    46          retl
       
    47         _ srl %o0,0,%o0
       
    48  
       
    49 @@ -713,28 +713,28 @@
       
    50  #endif
       
    51  
       
    52  # extern uintD add_loop_down (uintD* sourceptr1, uintD* sourceptr2, uintD* destptr, uintC count);
       
    53 -C(add_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1, Output in %o0
       
    54 +C(add_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3, Output in %o0
       
    55  #if STANDARD_LOOPS
       
    56  #       srl %o3,0,%o3           # zero-extend %o3 = count
       
    57          brz,pn %o3,2f
       
    58 -       _ mov %g0,%g1            # Carry := 0
       
    59 +       _ mov %g0,%g3            # Carry := 0
       
    60  1:        sub %o0,4,%o0
       
    61            lduw [%o0],%o4        # source1-digit, zero-extend
       
    62            sub %o1,4,%o1
       
    63            lduw [%o1],%o5        # source2-digit, zero-extend
       
    64 -          add %g1,%o4,%g1       # zum Carry addieren
       
    65 -          add %g1,%o5,%g1       # zum Carry addieren
       
    66 -          st %g1,[%o2]          # Digit ablegen
       
    67 +          add %g3,%o4,%g3       # zum Carry addieren
       
    68 +          add %g3,%o5,%g3       # zum Carry addieren
       
    69 +          st %g3,[%o2]          # Digit ablegen
       
    70            subcc %o3,1,%o3
       
    71            bne,pt %xcc,1b
       
    72 -         _ srlx %g1,32,%g1      # neuer Carry
       
    73 +         _ srlx %g3,32,%g3      # neuer Carry
       
    74  2:      retl
       
    75 -       _ mov %g1,%o0
       
    76 +       _ mov %g3,%o0
       
    77  #endif
       
    78  #if COUNTER_LOOPS
       
    79  #       srl %o3,0,%o3           # zero-extend %o3 = count
       
    80          brz,pn %o3,2f
       
    81 -       _ mov %g0,%g1            # Carry := 0
       
    82 +       _ mov %g0,%g3            # Carry := 0
       
    83          sub %o0,4,%o0
       
    84          sub %o1,4,%o1
       
    85          sllx %o3,2,%o3          # %o3 = 4*count
       
    86 @@ -743,14 +743,14 @@
       
    87          sub %o2,%o3,%o2         # %o2 = &destptr[-count]
       
    88  1:        lduw [%o0+%o3],%o4    # source1-digit, zero-extend
       
    89            lduw [%o1+%o3],%o5    # source2-digit, zero-extend
       
    90 -          add %g1,%o4,%g1       # zum Carry addieren
       
    91 -          add %g1,%o5,%g1       # zum Carry addieren
       
    92 -          st %g1,[%o2+%o3]      # Digit ablegen
       
    93 +          add %g3,%o4,%g3       # zum Carry addieren
       
    94 +          add %g3,%o5,%g3       # zum Carry addieren
       
    95 +          st %g3,[%o2+%o3]      # Digit ablegen
       
    96            subcc %o3,4,%o3
       
    97            bne,pt %xcc,1b
       
    98 -         _ srlx %g1,32,%g1      # neuer Carry
       
    99 +         _ srlx %g3,32,%g3      # neuer Carry
       
   100  2:      retl
       
   101 -       _ mov %g1,%o0
       
   102 +       _ mov %g3,%o0
       
   103  #endif
       
   104  
       
   105  # extern uintD addto_loop_down (uintD* sourceptr, uintD* destptr, uintC count);
       
   106 @@ -831,28 +831,28 @@
       
   107  #endif
       
   108  
       
   109  # extern uintD sub_loop_down (uintD* sourceptr1, uintD* sourceptr2, uintD* destptr, uintC count);
       
   110 -C(sub_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1, Output in %o0
       
   111 +C(sub_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3, Output in %o0
       
   112  #if STANDARD_LOOPS
       
   113  #       srl %o3,0,%o3           # zero-extend %o3 = count
       
   114          brz,pn %o3,2f
       
   115 -       _ mov %g0,%g1            # Carry := 0
       
   116 +       _ mov %g0,%g3            # Carry := 0
       
   117  1:        sub %o0,4,%o0
       
   118            lduw [%o0],%o4        # source1-digit, zero-extend
       
   119            sub %o1,4,%o1
       
   120            lduw [%o1],%o5        # source2-digit, zero-extend
       
   121 -          add %g1,%o4,%g1       # zum Carry addieren
       
   122 -          sub %g1,%o5,%g1       # vom Carry subtrahieren
       
   123 -          st %g1,[%o2]          # Digit ablegen
       
   124 +          add %g3,%o4,%g3       # zum Carry addieren
       
   125 +          sub %g3,%o5,%g3       # vom Carry subtrahieren
       
   126 +          st %g3,[%o2]          # Digit ablegen
       
   127            subcc %o3,1,%o3
       
   128            bne,pt %xcc,1b
       
   129 -         _ srax %g1,32,%g1      # neuer Carry
       
   130 +         _ srax %g3,32,%g3      # neuer Carry
       
   131  2:      retl
       
   132 -       _ srl %g1,0,%o0
       
   133 +       _ srl %g3,0,%o0
       
   134  #endif
       
   135  #if COUNTER_LOOPS
       
   136  #       srl %o3,0,%o3           # zero-extend %o3 = count
       
   137          brz,pn %o3,2f
       
   138 -       _ mov %g0,%g1            # Carry := 0
       
   139 +       _ mov %g0,%g3            # Carry := 0
       
   140          sub %o0,4,%o0
       
   141          sub %o1,4,%o1
       
   142          sllx %o3,2,%o3          # %o3 = 4*count
       
   143 @@ -861,39 +861,39 @@
       
   144          sub %o2,%o3,%o2         # %o2 = &destptr[-count]
       
   145  1:        lduw [%o0+%o3],%o4    # source1-digit, zero-extend
       
   146            lduw [%o1+%o3],%o5    # source2-digit, zero-extend
       
   147 -          add %g1,%o4,%g1       # zum Carry addieren
       
   148 -          sub %g1,%o5,%g1       # vom Carry subtrahieren
       
   149 -          st %g1,[%o2+%o3]      # Digit ablegen
       
   150 +          add %g3,%o4,%g3       # zum Carry addieren
       
   151 +          sub %g3,%o5,%g3       # vom Carry subtrahieren
       
   152 +          st %g3,[%o2+%o3]      # Digit ablegen
       
   153            subcc %o3,4,%o3
       
   154            bne,pt %xcc,1b
       
   155 -         _ srax %g1,32,%g1      # neuer Carry
       
   156 +         _ srax %g3,32,%g3      # neuer Carry
       
   157  2:      retl
       
   158 -       _ srl %g1,0,%o0
       
   159 +       _ srl %g3,0,%o0
       
   160  #endif
       
   161  
       
   162  # extern uintD subx_loop_down (uintD* sourceptr1, uintD* sourceptr2, uintD* destptr, uintC count, uintD carry);
       
   163 -C(subx_loop_down:) # Input in %o0,%o1,%o2,%o3,%o4, verändert %g1, Output in %o0
       
   164 +C(subx_loop_down:) # Input in %o0,%o1,%o2,%o3,%o4, verändert %g3, Output in %o0
       
   165  #if STANDARD_LOOPS
       
   166  #       srl %o3,0,%o3           # zero-extend %o3 = count
       
   167          brz,pn %o3,2f
       
   168 -       _ sra %o4,0,%g1          # Carry, sign-extend
       
   169 +       _ sra %o4,0,%g3          # Carry, sign-extend
       
   170  1:        sub %o0,4,%o0
       
   171            lduw [%o0],%o4        # source1-digit, zero-extend
       
   172            sub %o1,4,%o1
       
   173            lduw [%o1],%o5        # source2-digit, zero-extend
       
   174 -          add %g1,%o4,%g1       # zum Carry addieren
       
   175 -          sub %g1,%o5,%g1       # vom Carry subtrahieren
       
   176 -          st %g1,[%o2]          # Digit ablegen
       
   177 +          add %g3,%o4,%g3       # zum Carry addieren
       
   178 +          sub %g3,%o5,%g3       # vom Carry subtrahieren
       
   179 +          st %g3,[%o2]          # Digit ablegen
       
   180            subcc %o3,1,%o3
       
   181            bne,pt %xcc,1b
       
   182 -         _ srax %g1,32,%g1      # neuer Carry
       
   183 +         _ srax %g3,32,%g3      # neuer Carry
       
   184  2:      retl
       
   185 -       _ srl %g1,0,%o0
       
   186 +       _ srl %g3,0,%o0
       
   187  #endif
       
   188  #if COUNTER_LOOPS
       
   189  #       srl %o3,0,%o3           # zero-extend %o3 = count
       
   190          brz,pn %o3,2f
       
   191 -       _ sra %o4,0,%g1          # Carry, sign-extend
       
   192 +       _ sra %o4,0,%g3          # Carry, sign-extend
       
   193          sub %o0,4,%o0
       
   194          sub %o1,4,%o1
       
   195          sllx %o3,2,%o3          # %o3 = 4*count
       
   196 @@ -902,14 +902,14 @@
       
   197          sub %o2,%o3,%o2         # %o2 = &destptr[-count]
       
   198  1:        lduw [%o0+%o3],%o4    # source1-digit, zero-extend
       
   199            lduw [%o1+%o3],%o5    # source2-digit, zero-extend
       
   200 -          add %g1,%o4,%g1       # zum Carry addieren
       
   201 -          sub %g1,%o5,%g1       # vom Carry subtrahieren
       
   202 -          st %g1,[%o2+%o3]      # Digit ablegen
       
   203 +          add %g3,%o4,%g3       # zum Carry addieren
       
   204 +          sub %g3,%o5,%g3       # vom Carry subtrahieren
       
   205 +          st %g3,[%o2+%o3]      # Digit ablegen
       
   206            subcc %o3,4,%o3
       
   207            bne,pt %xcc,1b
       
   208 -         _ srax %g1,32,%g1      # neuer Carry
       
   209 +         _ srax %g3,32,%g3      # neuer Carry
       
   210  2:      retl
       
   211 -       _ srl %g1,0,%o0
       
   212 +       _ srl %g3,0,%o0
       
   213  #endif
       
   214  
       
   215  # extern uintD subfrom_loop_down (uintD* sourceptr, uintD* destptr, uintC count);
       
   216 @@ -1135,16 +1135,16 @@
       
   217  #endif
       
   218  
       
   219  # extern uintD shiftright_loop_up (uintD* ptr, uintC count, uintC i);
       
   220 -C(shiftright_loop_up:) # Input in %o0,%o1,%o2, verändert %g1, Output in %o0
       
   221 +C(shiftright_loop_up:) # Input in %o0,%o1,%o2, verändert %g3, Output in %o0
       
   222  #ifdef SLOWER
       
   223  #       srl %o1,0,%o1           # zero-extend %o1 = count
       
   224          brz,pn %o1,2f
       
   225         _ or %g0,%g0,%o3         # Carry := 0
       
   226 -        mov 32,%g1
       
   227 -        sub %g1,%o2,%g1         # 32-i
       
   228 +        mov 32,%g3
       
   229 +        sub %g3,%o2,%g3         # 32-i
       
   230  1:        lduw [%o0],%o4        # Digit, zero-extend
       
   231            subcc %o1,1,%o1
       
   232 -          sllx %o4,%g1,%o4      # shiften
       
   233 +          sllx %o4,%g3,%o4      # shiften
       
   234            or %o3,%o4,%o3        # und mit altem Carry kombinieren
       
   235            srlx %o3,32,%o4
       
   236            st %o4,[%o0]          # und ablegen
       
   237 @@ -1157,13 +1157,13 @@
       
   238  #       srl %o1,0,%o1           # zero-extend %o1 = count
       
   239          brz,pn %o1,2f
       
   240         _ or %g0,%g0,%o3         # Carry := 0
       
   241 -        sub %g0,%o2,%g1         # 32-i (mod 32)
       
   242 +        sub %g0,%o2,%g3         # 32-i (mod 32)
       
   243  1:        ld [%o0],%o4          # Digit
       
   244            subcc %o1,1,%o1
       
   245            srl %o4,%o2,%o5       # shiften
       
   246            or %o3,%o5,%o5        # und mit altem Carry kombinieren
       
   247            st %o5,[%o0]          # und ablegen
       
   248 -          sll %o4,%g1,%o3       # neuer Carry
       
   249 +          sll %o4,%g3,%o3       # neuer Carry
       
   250            bne,pt %xcc,1b
       
   251           _ add %o0,4,%o0
       
   252  2:      retl
       
   253 @@ -1171,14 +1171,14 @@
       
   254  #endif
       
   255  
       
   256  # extern uintD shiftrightsigned_loop_up (uintD* ptr, uintC count, uintC i);
       
   257 -C(shiftrightsigned_loop_up:) # Input in %o0,%o1,%o2, verändert %g1, Output in %o0
       
   258 +C(shiftrightsigned_loop_up:) # Input in %o0,%o1,%o2, verändert %g3, Output in %o0
       
   259  #ifdef SLOWER
       
   260  #       srl %o1,0,%o1           # zero-extend %o1 = count
       
   261 -        mov 32,%g1
       
   262 -        sub %g1,%o2,%g1         # 32-i
       
   263 +        mov 32,%g3
       
   264 +        sub %g3,%o2,%g3         # 32-i
       
   265          ldsw [%o0],%o3          # erstes Digit, sign-extend
       
   266          subcc %o1,1,%o1
       
   267 -        sllx %o3,%g1,%o3        # shiften
       
   268 +        sllx %o3,%g3,%o3        # shiften
       
   269          srlx %o3,32,%o4
       
   270          st %o4,[%o0]            # und ablegen
       
   271          sllx %o3,32,%o3         # neuer Carry
       
   272 @@ -1186,7 +1186,7 @@
       
   273         _ add %o0,4,%o0
       
   274  1:        lduw [%o0],%o4        # Digit, zero-extend
       
   275            subcc %o1,1,%o1
       
   276 -          sllx %o4,%g1,%o4      # shiften
       
   277 +          sllx %o4,%g3,%o4      # shiften
       
   278            or %o3,%o4,%o3        # und mit altem Carry kombinieren
       
   279            srlx %o3,32,%o4
       
   280            st %o4,[%o0]          # und ablegen
       
   281 @@ -1198,10 +1198,10 @@
       
   282  #else
       
   283  #       srl %o1,0,%o1           # zero-extend %o1 = count
       
   284          ld [%o0],%o4            # erstes Digit
       
   285 -        sub %g0,%o2,%g1         # 32-i (mod 32)
       
   286 +        sub %g0,%o2,%g3         # 32-i (mod 32)
       
   287          sra %o4,%o2,%o5         # shiften
       
   288          st %o5,[%o0]            # und ablegen
       
   289 -        sll %o4,%g1,%o3         # neuer Carry
       
   290 +        sll %o4,%g3,%o3         # neuer Carry
       
   291          subcc %o1,1,%o1
       
   292          be,pn %xcc,2f
       
   293         _ add %o0,4,%o0
       
   294 @@ -1210,7 +1210,7 @@
       
   295            srl %o4,%o2,%o5       # shiften
       
   296            or %o3,%o5,%o5        # und mit altem Carry kombinieren
       
   297            st %o5,[%o0]          # und ablegen
       
   298 -          sll %o4,%g1,%o3       # neuer Carry
       
   299 +          sll %o4,%g3,%o3       # neuer Carry
       
   300            bne,pt %xcc,1b
       
   301           _ add %o0,4,%o0
       
   302  2:      retl
       
   303 @@ -1218,16 +1218,16 @@
       
   304  #endif
       
   305  
       
   306  # extern uintD shiftrightcopy_loop_up (uintD* sourceptr, uintD* destptr, uintC count, uintC i, uintD carry);
       
   307 -C(shiftrightcopy_loop_up:) # Input in %o0,%o1,%o2,%o3,%o4, verändert %g1,%g2, Output in %o0
       
   308 +C(shiftrightcopy_loop_up:) # Input in %o0,%o1,%o2,%o3,%o4, verändert %g3,%g2, Output in %o0
       
   309  #ifdef SLOWER
       
   310  #       srl %o2,0,%o2           # zero-extend %o2 = count
       
   311 -        sub %g0,%o3,%g1         # 64-i (mod 64)
       
   312 +        sub %g0,%o3,%g3         # 64-i (mod 64)
       
   313          brz,pn %o2,2f
       
   314 -       _ sllx %o4,%g1,%o4       # erster Carry
       
   315 -        add %g1,32,%g1          # 32-i
       
   316 +       _ sllx %o4,%g3,%o4       # erster Carry
       
   317 +        add %g3,32,%g3          # 32-i
       
   318  1:        lduw [%o0],%o5        # Digit, zero-extend
       
   319            add %o0,4,%o0
       
   320 -          sllx %o5,%g1,%o5      # shiften
       
   321 +          sllx %o5,%g3,%o5      # shiften
       
   322            or %o4,%o5,%o4        # und mit altem Carry kombinieren
       
   323            srlx %o4,32,%o5
       
   324            st %o5,[%o1]          # und ablegen
       
   325 @@ -1239,15 +1239,15 @@
       
   326         _ srlx %o4,32,%o0
       
   327  #else
       
   328  #       srl %o2,0,%o2           # zero-extend %o2 = count
       
   329 -        sub %g0,%o3,%g1         # 32-i (mod 32)
       
   330 +        sub %g0,%o3,%g3         # 32-i (mod 32)
       
   331          brz,pn %o2,2f
       
   332 -       _ sll %o4,%g1,%g2        # erster Carry
       
   333 +       _ sll %o4,%g3,%g2        # erster Carry
       
   334  1:        ld [%o0],%o4          # Digit
       
   335            add %o0,4,%o0
       
   336            srl %o4,%o3,%o5       # shiften
       
   337            or %g2,%o5,%o5        # und mit altem Carry kombinieren
       
   338            st %o5,[%o1]          # und ablegen
       
   339 -          sll %o4,%g1,%g2       # neuer Carry
       
   340 +          sll %o4,%g3,%g2       # neuer Carry
       
   341            subcc %o2,1,%o2
       
   342            bne,pt %xcc,1b
       
   343           _ add %o1,4,%o1
       
   344 @@ -1290,58 +1290,58 @@
       
   345         _ srl %o3,0,%o0
       
   346  
       
   347  # extern void mulu_loop_down (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
       
   348 -C(mulu_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1
       
   349 +C(mulu_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3
       
   350  #       srl %o3,0,%o3           # zero-extend %o3 = len
       
   351          mov 0,%o4               # Carry
       
   352  1:        sub %o1,4,%o1
       
   353 -          ld [%o1],%g1          # nächstes Digit
       
   354 +          ld [%o1],%g3          # nächstes Digit
       
   355            sub %o2,4,%o2
       
   356 -          # mit digit multiplizieren: %o0 * %g1 -> %o5|%g1
       
   357 -          umul %g1,%o0,%g1
       
   358 +          # mit digit multiplizieren: %o0 * %g3 -> %o5|%g3
       
   359 +          umul %g3,%o0,%g3
       
   360            rd %y,%o5
       
   361 -          addcc %o4,%g1,%g1     # und bisherigen Carry addieren
       
   362 +          addcc %o4,%g3,%g3     # und bisherigen Carry addieren
       
   363            addx %g0,%o5,%o4      # High-Digit gibt neuen Carry
       
   364            subcc %o3,1,%o3
       
   365            bne,pt %xcc,1b
       
   366 -         _ st %g1,[%o2]         # Low-Digit ablegen
       
   367 +         _ st %g3,[%o2]         # Low-Digit ablegen
       
   368          retl
       
   369         _ st %o4,[%o2-4]         # letzten Carry ablegen
       
   370  
       
   371  # extern uintD muluadd_loop_down (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
       
   372 -C(muluadd_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1,%g2, Output in %o0
       
   373 +C(muluadd_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3,%g2, Output in %o0
       
   374  #       srl %o3,0,%o3           # zero-extend %o3 = len
       
   375          mov 0,%o4               # Carry
       
   376  1:        sub %o1,4,%o1
       
   377            ld [%o1],%o5          # nächstes source-Digit
       
   378            sub %o2,4,%o2
       
   379 -          # mit digit multiplizieren: %o0 * %o5 -> %g2|%g1
       
   380 -          umul %o0,%o5,%g1
       
   381 +          # mit digit multiplizieren: %o0 * %o5 -> %g2|%g3
       
   382 +          umul %o0,%o5,%g3
       
   383            rd %y,%g2
       
   384            ld [%o2],%o5          # nächstes dest-digit
       
   385 -          addcc %o4,%g1,%g1     # und bisherigen Carry addieren
       
   386 +          addcc %o4,%g3,%g3     # und bisherigen Carry addieren
       
   387            addx %g0,%g2,%o4      # High-Digit gibt neuen Carry
       
   388 -          addcc %o5,%g1,%g1     # addieren
       
   389 +          addcc %o5,%g3,%g3     # addieren
       
   390            addx %g0,%o4,%o4
       
   391            subcc %o3,1,%o3
       
   392            bne,pt %xcc,1b
       
   393 -         _ st %g1,[%o2]         # Low-Digit ablegen
       
   394 +         _ st %g3,[%o2]         # Low-Digit ablegen
       
   395          retl
       
   396         _ srl %o4,0,%o0          # letzter Carry
       
   397  
       
   398  # extern uintD mulusub_loop_down (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
       
   399 -C(mulusub_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g1,%g2, Output in %o0
       
   400 +C(mulusub_loop_down:) # Input in %o0,%o1,%o2,%o3, verändert %g3,%g2, Output in %o0
       
   401  #       srl %o3,0,%o3           # zero-extend %o3 = len
       
   402          mov 0,%o4               # Carry
       
   403  1:        sub %o1,4,%o1
       
   404            ld [%o1],%o5          # nächstes source-Digit
       
   405            sub %o2,4,%o2
       
   406 -          # mit digit multiplizieren: %o0 * %o5 -> %g2|%g1
       
   407 -          umul %o0,%o5,%g1
       
   408 +          # mit digit multiplizieren: %o0 * %o5 -> %g2|%g3
       
   409 +          umul %o0,%o5,%g3
       
   410            rd %y,%g2
       
   411            ld [%o2],%o5          # nächstes dest-digit
       
   412 -          addcc %o4,%g1,%g1     # und bisherigen Carry addieren
       
   413 +          addcc %o4,%g3,%g3     # und bisherigen Carry addieren
       
   414            addx %g0,%g2,%o4      # High-Digit gibt neuen Carry
       
   415 -          subcc %o5,%g1,%o5     # davon das Low-Digit subtrahieren
       
   416 +          subcc %o5,%g3,%o5     # davon das Low-Digit subtrahieren
       
   417            addx %g0,%o4,%o4
       
   418            subcc %o3,1,%o3
       
   419            bne,pt %xcc,1b
       
   420 @@ -1350,7 +1350,7 @@
       
   421         _ srl %o4,0,%o0          # letzter Carry
       
   422  
       
   423  # extern uintD divu_loop_up (uintD digit, uintD* ptr, uintC len);
       
   424 -C(divu_loop_up:) # Input in %o0,%o1,%o2, verändert %g1, Output in %o0
       
   425 +C(divu_loop_up:) # Input in %o0,%o1,%o2, verändert %g3, Output in %o0
       
   426  #       srl %o2,0,%o2           # zero-extend %o2 = len
       
   427          brz,pn %o2,2f
       
   428         _ mov 0,%o3              # Rest
       
   429 @@ -1360,8 +1360,8 @@
       
   430            or %o3,%o4,%o3        # zusammen
       
   431            udivx %o3,%o0,%o4     # durch digit dividieren
       
   432            st %o4,[%o1]          # Quotient ablegen
       
   433 -          umul %o0,%o4,%g1
       
   434 -          sub %o3,%g1,%o3       # Rest in den unteren 32 Bit von %o3
       
   435 +          umul %o0,%o4,%g3
       
   436 +          sub %o3,%g3,%o3       # Rest in den unteren 32 Bit von %o3
       
   437            subcc %o2,1,%o2
       
   438            bne,pt %xcc,1b
       
   439           _ add %o1,4,%o1
       
   440 @@ -1369,7 +1369,7 @@
       
   441         _ srl %o3,0,%o0          # Rest als Ergebnis
       
   442  
       
   443  # extern uintD divucopy_loop_up (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
       
   444 -C(divucopy_loop_up:) # Input in %o0,%o1,%o2,%o3, verändert %g1, Output in %o0
       
   445 +C(divucopy_loop_up:) # Input in %o0,%o1,%o2,%o3, verändert %g3, Output in %o0
       
   446  #       srl %o3,0,%o3           # zero-extend %o3 = len
       
   447          brz,pn %o3,2f
       
   448         _ mov 0,%o4              # Rest
       
   449 @@ -1380,8 +1380,8 @@
       
   450            or %o4,%o5,%o4        # zusammen
       
   451            udivx %o4,%o0,%o5     # durch digit dividieren
       
   452            st %o5,[%o2]          # Quotient ablegen
       
   453 -          umul %o0,%o5,%g1
       
   454 -          sub %o4,%g1,%o4       # Rest in den unteren 32 Bit von %o4
       
   455 +          umul %o0,%o5,%g3
       
   456 +          sub %o4,%g3,%o4       # Rest in den unteren 32 Bit von %o4
       
   457            subcc %o3,1,%o3
       
   458            bne,pt %xcc,1b
       
   459           _ add %o2,4,%o2