From b9c2a4501f92213d378e4dcb2258da2776feee48 Mon Sep 17 00:00:00 2001 From: d_m Date: Tue, 17 Sep 2024 22:34:34 -0400 Subject: [PATCH] fix32: additional conversions --- fix32.tal | 7 +++++++ test-fix32.tal | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/fix32.tal b/fix32.tal index e2a82f9..5fabefd 100644 --- a/fix32.tal +++ b/fix32.tal @@ -86,6 +86,13 @@ @x32-from-u32 ( x** -> x/** ) DENOM32 !u32-mul +@x32-from-s8 ( x^ -> x/** ) + DUP #80 AND #07 SFT #ff MUL SWP ( >> ) +@x32-from-s16 ( x* -> x/** ) + DUP2 #8000 AND2 #0f SFT2 #ffff MUL2 SWP2 ( >> ) +@x32-from-s32 ( x** -> x/** ) + DENOM32 !u32-mul + @x32-signed-op ( x** y** f* -> f[x,y]** ) STH2 LIT2r 0001 ( x** y** [f* 0^ 1^] ) OVR2 #8000 LTH2 ?{ u32-negate SWPr } ( x** y** [f* ab*] ) diff --git a/test-fix32.tal b/test-fix32.tal index f4f310c..7647d3b 100644 --- a/test-fix32.tal +++ b/test-fix32.tal @@ -15,6 +15,10 @@ #7fff x32-from-u16 x32-emit #0a18 DEO ( 32767.0 ) #8000 x32-from-u16 x32-emit #0a18 DEO ( 32768.0 ) #ffff x32-from-u16 x32-emit #0a18 DEO ( 65535.0 ) + #01 x32-from-s8 x32-emit #0a18 DEO ( 10.0 ) + #0a x32-from-s8 x32-emit #0a18 DEO ( 10.0 ) + #80 x32-from-s8 x32-emit #0a18 DEO ( -128.0 ) + #ff x32-from-s8 x32-emit #0a18 DEO ( -1.0 ) #0a18 DEO #0000 #03e8 #0000 #07d0 LIT "+ ;x32-add #0000 #0bb8 test-binop ( 1 + 2 = 3 ) #ffff #fc18 #ffff #fc18 LIT "+ ;x32-add #ffff #f830 test-binop ( -1 + -1 = -2 )