69 lines
1.6 KiB
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
|