From fa56ecf59d991a279d4a0987db51a1f56f44415b Mon Sep 17 00:00:00 2001 From: Brad Nelson Date: Sat, 11 Nov 2023 14:46:27 -0800 Subject: [PATCH] Adding U<. --- common/base_tests.fs | 9 +++++++++ common/forth_namespace_tests.fs | 1 + common/tier0_opcodes.h | 1 + web/fuse_web.js | 1 + 4 files changed, 12 insertions(+) diff --git a/common/base_tests.fs b/common/base_tests.fs index 6c59a1a..175fdd1 100644 --- a/common/base_tests.fs +++ b/common/base_tests.fs @@ -217,3 +217,12 @@ e: test-/cell -10 cells cell/ -10 =assert -10 cells 1- cell/ -11 =assert ;e + +e: test-u< + 1 3 u< assert + 3 1 u< 0= assert + 0 -1 u< assert + -1 0 u< 0= assert + 0 0 u< 0= assert + -1 -1 u< 0= assert +;e diff --git a/common/forth_namespace_tests.fs b/common/forth_namespace_tests.fs index c4ea266..68b5718 100644 --- a/common/forth_namespace_tests.fs +++ b/common/forth_namespace_tests.fs @@ -227,6 +227,7 @@ e: check-tier0-opcodes out: literal out: 0= out: 0< + out: U< out: + out: U/MOD out: */MOD diff --git a/common/tier0_opcodes.h b/common/tier0_opcodes.h index c4447c4..f174f4f 100644 --- a/common/tier0_opcodes.h +++ b/common/tier0_opcodes.h @@ -106,6 +106,7 @@ typedef struct { YV(internals, NOP, ) \ X("0=", ZEQUAL, tos = !tos ? -1 : 0) \ X("0<", ZLESS, tos = (tos|0) < 0 ? -1 : 0) \ + X("U<", ULESS, tos = ((ucell_t) *sp) < ((ucell_t) tos) ? -1 : 0; --sp) \ X("+", PLUS, tos += *sp--) \ X("U/MOD", USMOD, w = *sp; *sp = (ucell_t) w % (ucell_t) tos; \ tos = (ucell_t) w / (ucell_t) tos) \ diff --git a/web/fuse_web.js b/web/fuse_web.js index 73ac0fe..a656380 100755 --- a/web/fuse_web.js +++ b/web/fuse_web.js @@ -43,6 +43,7 @@ cases = ReplaceAll(cases, 'tos *= sizeof(cell_t)', 'tos = (tos * 4)|0'); cases = ReplaceAll(cases, 'tos += *sp--', 'tos = (tos + *sp)|0; --sp'); cases = ReplaceAll(cases, 'tos = (*sp--) - tos', 'tos = (*sp - tos)|0; --sp'); cases = ReplaceAll(cases, 'tos *= *sp--', 'tos = imul(tos, *sp); --sp'); +cases = ReplaceAll(cases, '((ucell_t) *sp)', '(i32[sp>>2]>>>0)'); cases = ReplaceAll(cases, '(((ucell_t) *sp) >> tos)', 'i32[sp>>2]>>>tos'); cases = ReplaceAll(cases, '*((cell_t *) tos) += *sp--', 'i32[tos>>2] = ((i32[tos>>2]|0) + (i32[sp>>2]|0))|0; --sp');