diff --git a/math32.tal b/math32.tal index 3f412a2..67507c7 100644 --- a/math32.tal +++ b/math32.tal @@ -296,16 +296,16 @@ RTN @mul32 ( x** y** -> z** ) - ,&y2 STR2 ,&y0 STR2 ( save ylo, yhi ) - ,&x2 STR2 ,&x0 STR2 ( save xlo, xhi ) - ,&y2 LDR2 ,&x2 LDR2 ;mul16 JSR2 ( [x2*y2] ) - ,&z2 STR2 ,&z0 STR2 ( sum = x2*y2, save zlo, zhi ) + ;sh/y2 STA2 ;sh/y0 STA2 ( save ylo, yhi ) + ;sh/x2 STA2 ;sh/x0 STA2 ( save xlo, xhi ) + ;sh/y2 LDA2 ;sh/x2 LDA2 ;mul16 JSR2 ( [x2*y2] ) + ;sh/z2 STA2 ;sh/z0 STA2 ( sum = x2*y2, save zlo, zhi ) - ,&y2 LDR2 ,&x0 LDR2 MUL2 ( [x0*y2]<<16 ) - ,&y0 LDR2 ,&x2 LDR2 MUL2 ( [x2*y0]<<16 ) + ;sh/y2 LDA2 ;sh/x0 LDA2 MUL2 ( [x0*y2]<<16 ) + ;sh/y0 LDA2 ;sh/x2 LDA2 MUL2 ( [x2*y0]<<16 ) ( [x0*y0]<<32 will completely overflow ) - ADD2 ,&z0 LDR2 ADD2 ( sum += x0*y2<<16 + x2*y0<<16 ) - ,&z2 LDR2 + ADD2 ;sh/z0 LDA2 ADD2 ( sum += x0*y2<<16 + x2*y0<<16 ) + ;sh/z2 LDA2 RTN [ &x0 $2 &x2 $2 ] [ &y0 $2 &y2 $2 ]