Changeset 12847
- Timestamp:
- Sep 16, 2009, 7:33:22 PM (10 years ago)
- Location:
- trunk/source/level-0
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/level-0/PPC/PPC64/ppc64-bignum.lisp
r11112 r12847 73 73 (blr))) 74 74 75 (defppclapfunction %multiply-and-add-loop64 76 ((x 8) (y 0) (r arg_x) (idx arg_y) (ylen arg_z)) 77 (let ((i imm0) 78 (j imm1) 79 (xx imm2) 80 (yy imm3) 81 (rr imm4) 82 (dd imm5) 83 (cc nargs)) 84 (ld temp0 x vsp) 85 (la i ppc64::misc-data-offset idx) 86 (ldx xx temp0 i) ;x[i] 87 (rotldi xx xx 32) 88 (ld temp0 y vsp) 89 (li cc 0) 90 (li j ppc64::misc-data-offset) 91 @loop 92 (ldx yy temp0 j) ;y[j] 93 (rotldi yy yy 32) 94 (mulld dd xx yy) ;low 95 (ldx rr r i) ;r[i] 96 (rotldi rr rr 32) 97 (addc rr rr dd) ;r[i] = r[i] + low 98 (mulhdu dd xx yy) ;high 99 (addze dd dd) ;carry from addding in low 100 (addc rr rr cc) ;add in carry digit 101 (addze cc dd) 102 (rotldi rr rr 32) 103 (stdx rr r i) ;update r[i] 104 (cmpdi ylen '1) 105 (la i 8 i) 106 (la j 8 j) 107 (subi ylen ylen '1) 108 (bne @loop) 109 (rotldi cc cc 32) 110 (stdx cc r i) 111 (set-nargs 0) 112 (la vsp 16 vsp) 113 (blr))) 114 75 115 ;;; Multiply the (32-bit) digits X and Y, producing a 64-bit result. 76 116 ;;; Add the 32-bit "prev" digit and the 32-bit carry-in digit to that 64-bit -
trunk/source/level-0/l0-bignum64.lisp
r12839 r12847 821 821 res))) 822 822 (let* ((res (with-negated-bignum-buffers a b 823 #-x86-target824 multiply-unsigned-bignums825 #+x86-target826 823 multiply-unsigned-bignums64))) 827 824 (if signs-differ (negate-bignum-in-place res))
Note: See TracChangeset
for help on using the changeset viewer.