diff --git a/math32.tal b/math32.tal index 0e05df6..0ad09c3 100644 --- a/math32.tal +++ b/math32.tal @@ -48,17 +48,21 @@ ( equality ) +( x == y ) @eq32 ( xhi* xlo* yhi* ylo* -> bool^ ) ROT2 EQU2 STH EQU2 STHr AND RTN -@is-zero32 ( x** -> bool^ ) - ORA2 #0000 EQU2 RTN - +( x != y ) @ne32 ( xhi* xlo* yhi* ylo* -> bool^ ) ROT2 NEQ2 STH NEQ2 STHr ORA RTN +( x == 0 ) +@is-zero32 ( x** -> bool^ ) + ORA2 #0000 EQU2 RTN + +( x != 0 ) @non-zero32 ( x** -> bool^ ) ORA2 #0000 NEQ2 RTN @@ -98,15 +102,19 @@ ( bitwise operations ) +( x & y ) @and32 ( xhi* xlo* yhi* ylo* -> xhi|yhi* xlo|ylo* ) ROT2 AND2 STH2 AND2 STH2r RTN +( x | y ) @or32 ( xhi* xlo* yhi* ylo* -> xhi|yhi* xlo|ylo* ) ROT2 ORA2 STH2 ORA2 STH2r RTN +( x ^ y ) @xor32 ( xhi* xlo* yhi* ylo* -> xhi|yhi* xlo|ylo* ) ROT2 EOR2 STH2 EOR2 STH2r RTN +( ~x ) @complement32 ( x** -> ~x** ) COMPLEMENT32 RTN @@ -119,7 +127,7 @@ ( bit shifting ) -( shift right, i.e. >> ) +( x >> n ) @right-shift ( x** n^ -> x< x< zhi* zlo* ) ;sh/y2 STA2 ;sh/y0 STA2 ( save ylo, yhi ) ;sh/x2 STA2 ;sh/x0 STA2 ( save xlo, xhi ) @@ -231,7 +239,7 @@ ;sh/z0 LDA2 ;sh/z2 LDA2 RTN -( negation, i.e. unary - ) +( -x ) @negate32 ( x** -> -x** ) COMPLEMENT32 INC2 ( ~xhi -xlo ) @@ -241,7 +249,7 @@ &done RTN -( subtraction, i.e. binary - ) +( x - y ) @sub32 ( x** y** -> z** ) ;negate32 JSR2 ;add32 JSR2 RTN @@ -270,7 +278,7 @@ ;add32 JSR2 RTN -( multiplication, i.e. * ) +( x * y ) @mul32 ( x** y** -> z** ) ,&y1 STR2 ,&y0 STR2 ( save ylo, yhi ) ,&x1 STR2 ,&x0 STR2 ( save xlo, xhi ) @@ -287,7 +295,7 @@ &y0 $2 &y1 $2 &z0 $2 &z1 $2 ] -( division, i.e. / ) +( x / y ) @div32 ( x** y** -> q** ) ( store y and x for repeated use ) ;div32/div1 STA2 ;div32/div0 STA2 ( y -> div )