From dd20822ee11e38f77f1075122dfb73a3c543a0cc Mon Sep 17 00:00:00 2001 From: PleegWat Date: Sat, 5 Sep 2026 16:41:52 +0200 Subject: [PATCH] Use all unsigned compares --- isa/test.isa | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/isa/test.isa b/isa/test.isa index a994441..45b78ec 100644 --- a/isa/test.isa +++ b/isa/test.isa @@ -334,11 +334,11 @@ li %r(register), %a:S33(immediate | label) ; assert(%a <= 0xffffffff, "%a is too high") %s = trailing_zeros(%a) %sa = %a >> %s -%nota = %a ^ 0xffffffff ; Needs xor; ~ operator does not generate leading high bits -when %a <=u 0xffff : 00110001 %r[3:0]0000 %a[15:0] ; First 64k -when %nota <= 0xffff: 00110001 %r[3:0]0000 %nota[15:0] 00100011 %r[3:0]0000 0000%r[3:0] 00000000 ; Last 64k -when %sa <= 0xffff : 00110001 %r[3:0]0000 %sa[15:0] 00110111 %r[3:0]%r[3:0] 00000000 %s[7:0] ; Aligned -00110001 %r[3:0]0000 %a[31:16] 00110111 %r[3:0]%r[3:0] 00000000 00010000 00110001 %r[3:0]%r[3:0] %a[15:0] ; Any 32-bit +%nota = %a ^ 0xffffffff +when %a <=u 0xffff : 00110001 %r[3:0]0000 %a[15:0] ; First 64k +when %nota <=u 0xffff: 00110001 %r[3:0]0000 %nota[15:0] 00100011 %r[3:0]0000 0000%r[3:0] 00000000 ; Last 64k +when %sa <=u 0xffff : 00110001 %r[3:0]0000 %sa[15:0] 00110111 %r[3:0]%r[3:0] 00000000 %s[7:0] ; Aligned +00110001 %r[3:0]0000 %a[31:16] 00110111 %r[3:0]%r[3:0] 00000000 00010000 00110001 %r[3:0]%r[3:0] %a[15:0] ; Any 32-bit # Load 32-bit immediate %a into %r qcall %a:U32(label) @@ -348,13 +348,14 @@ qcall %a:U32(label) %f = 15 %s = trailing_zeros(%a) %sa = %a >> %s -%nota = %a ^ 0xffffffff ; Needs xor; ~ operator does not generate leading high bits -when %a <=u 0xffff : 01011000 %r[3:0]ffff %a[15:0] ; First 64k -when %nota <= 0xffff: 00110001 %r[3:0]0000 %nota[15:0] 00100011 %r[3:0]0000 0000%r[3:0] 00000000 01001000 %r[3:0]ffff 0000%r[3:0] 00000000 ; Last 64k -when %sa <= 0xffff : 00110001 %r[3:0]0000 %sa[15:0] 00110111 %r[3:0]%r[3:0] 00000000 %s[7:0] 01001000 %r[3:0]ffff 0000%r[3:0] 00000000 ; Aligned +%nota = %a ^ 0xffffffff +when %a <=u 0xffff : 01011000 %r[3:0]ffff %a[15:0] ; First 64k +when %nota <=u 0xffff: 00110001 %r[3:0]0000 %nota[15:0] 00100011 %r[3:0]0000 0000%r[3:0] 00000000 01001000 %r[3:0]ffff 0000%r[3:0] 00000000 ; Last 64k +when %sa <=u 0xffff : 00110001 %r[3:0]0000 %sa[15:0] 00110111 %r[3:0]%r[3:0] 00000000 %s[7:0] 01001000 %r[3:0]ffff 0000%r[3:0] 00000000 ; Aligned 00110001 %r[3:0]0000 %a[31:16] 00110111 %r[3:0]%r[3:0] 00000000 00010000 00110001 %r[3:0]%r[3:0] %a[15:0] 01001000 %r[3:0]ffff 0000%r[3:0] 00000000 ; Any 32-bit # Jump and link to 32-bit label halt%c(condition) 1000cccc 00001111 00000000 00000000 # Halt on condition %c +