nxu/fix32.tal

69 lines
1.6 KiB
Tal

( fix32.tal )
%POP4 { POP2 POP2 }
%POP8 { POP2 POP2 POP2 POP2 }
%DENOM16 { #03e8 }
%DENOM32 { #0000 #03e8 }
@x32-eq ( x/** y/** -> bool^ ) !eq32
@x32-ne ( x/** y/** -> bool^ ) !ne32
@x32-is-zero ( x/** -> bool^ ) !is-zero32
@x32-non-zero ( x/** -> bool^ ) !non-zero32
@x32-is-positive ( x/** -> bool^ ) POP2 #8000 LTH2 JMP2r
@x32-is-negative ( x/** -> bool^ ) POP2 #7fff GTH2 JMP2r
@x32-from-u8 ( x^ -> x/** )
#0000 ROT OVR SWP DENOM32 !mul32
@x32-from-u16 ( x* -> x/** )
#0000 SWP2 DENOM32 !mul32
@x32-from-u32 ( x** -> x/** )
DENOM32 !mul32
@x32-prepare-cmp ( x/** y/** -> x/** y/** xp^ yp^ )
OVR2 #8000 LTH2 ,&yp STR STH2 STH2
OVR2 #8000 LTH2 ,&xp STR STH2r STH2r
LIT2 [ &xp $1 &yp $1 ] JMP2r
@x32-lt ( x/** y/** -> bool^ )
x32-prepare-cmp NEQk ?{ POP2 !lt32 } LTH STH POP8 STHr JMP2r
@x32-gt ( x/** y/** -> bool^ )
x32-prepare-cmp NEQk ?{ POP2 !gt32 } GTH STH POP8 STHr JMP2r
@x32-lteq ( x/** y/** -> bool^ )
x32-prepare-cmp NEQk ?{ POP2 !lteq32 } LTH STH POP8 STHr JMP2r
@x32-gteq ( x/** y/** -> bool^ )
x32-prepare-cmp NEQk ?{ POP2 !gteq32 } GTH STH POP8 STHr JMP2r
@x32-add ( x/** y/** -> z/** )
!add32
@x32-sub ( x/** y/** -> z/** )
!sub32
@x32-negate ( x/** y/** -> z/** )
!negate32
( multiply a fixed point number by an unsigned integer )
@x32-scaled-mul32 ( x/** y** -> z/** )
!mul32
( multiply a fixed point number by an unsigned integer )
@x32-scaled-mul16 ( x/** y* -> z/** )
!mul16
@x32-scaled-div32 ( x/** y** -> z/** )
!div32
( TODO )
@x32-mul ( x/** y/** -> z/** )
( TODO )
@x32-div ( x/** y/** -> z/** )
~math32.tal