diff --git a/ueforth/common/boot.fs b/ueforth/common/boot.fs index 6f9a919..8a1b090 100644 --- a/ueforth/common/boot.fs +++ b/ueforth/common/boot.fs @@ -137,7 +137,7 @@ defer bye variable hld : pad ( -- a ) here 80 + ; : digit ( u -- c ) 9 over < 7 and + 48 + ; -: extract ( n base -- n c ) 0 swap um/mod swap digit ; +: extract ( n base -- n c ) u/mod swap digit ; : <# ( -- ) pad hld ! ; : hold ( c -- ) hld @ 1 - dup hld ! c! ; : # ( u -- u ) base @ extract hold ; diff --git a/ueforth/common/opcodes.h b/ueforth/common/opcodes.h index c611d8e..f8c3ad9 100644 --- a/ueforth/common/opcodes.h +++ b/ueforth/common/opcodes.h @@ -19,10 +19,7 @@ typedef uint64_t udcell_t; #define COMMA(n) *g_sys.heap++ = (n) #define IMMEDIATE() g_sys.last[-1] |= 1 #define DOES(ip) *g_sys.last = (cell_t) && OP_DODOES; g_sys.last[1] = (cell_t) ip -#ifndef UMSMOD_FUNC -#define UMSMOD_FUNC udcell_t ud = *(udcell_t *) &sp[-1]; \ - --sp; *sp = (cell_t) (ud % tos); \ - tos = (cell_t) (ud / tos) +#ifndef SSMOD_FUNC #define SSMOD_FUNC dcell_t d = (dcell_t) *sp * (dcell_t) sp[-1]; \ --sp; *sp = (cell_t) (((udcell_t) d) % tos); \ tos = (cell_t) (d < 0 ? ~(~d / tos) : d / tos) @@ -33,7 +30,8 @@ typedef uint64_t udcell_t; X("0=", ZEQUAL, tos = !tos ? -1 : 0) \ X("0<", ZLESS, tos = (tos|0) < 0 ? -1 : 0) \ X("+", PLUS, tos = (tos + *sp) | 0; --sp) \ - X("UM/MOD", UMSMOD, UMSMOD_FUNC) \ + X("U/MOD", USMOD, w = *sp; *sp = (uintptr_t) w % (uintptr_t) tos; \ + tos = (uintptr_t) w / tos) \ X("*/MOD", SSMOD, SSMOD_FUNC) \ X("AND", AND, tos = tos & *sp; --sp) \ X("OR", OR, tos = tos | *sp; --sp) \ diff --git a/ueforth/web/fuse_web.js b/ueforth/web/fuse_web.js index 544c2f2..06e5430 100755 --- a/ueforth/web/fuse_web.js +++ b/ueforth/web/fuse_web.js @@ -43,7 +43,6 @@ cases = ReplaceAll(cases, '&g_sys', 'g_sys'); cases = ReplaceAll(cases, '&& OP_DOCOLON', '0'); cases = ReplaceAll(cases, '&& OP_DOCREATE', '1'); cases = ReplaceAll(cases, 'goto **(void **) w', 'break decode'); -cases = ReplaceAll(cases, 'UMSMOD', ''); cases = ReplaceAll(cases, 'SSMOD', ''); code = code.replace('{{boot}}', function() { return boot; }); diff --git a/ueforth/web/web.template.js b/ueforth/web/web.template.js index f342d12..4c2d1b4 100644 --- a/ueforth/web/web.template.js +++ b/ueforth/web/web.template.js @@ -42,7 +42,6 @@ function VM(stdlib, foreign, heap) { var imul = stdlib.Math.imul; - var UMSMOD = foreign.UMSMOD; var SSMOD = foreign.SSMOD; var Call = foreign.Call; var COMMA = foreign.COMMA; @@ -102,7 +101,6 @@ var ffi = { create: function() {}, parse: function() {}, COMMA: function() {}, - UMSMOD: function() {}, SSMOD: function() {}, DOES: function() {}, IMMEDIATE: function() {}, diff --git a/ueforth/windows/windows_main.c b/ueforth/windows/windows_main.c index eb3b844..086c8e7 100644 --- a/ueforth/windows/windows_main.c +++ b/ueforth/windows/windows_main.c @@ -2,11 +2,6 @@ #define CALLTYPE WINAPI -# define UMSMOD_FUNC \ - asm("div %2" \ - : "=a" (tos), "=d" (sp[-1]) \ - : "r" (tos), "a" (sp[-1]), "d" (*sp)); --sp - # define SSMOD_FUNC \ w = tos; asm("imul %4\n\t" \ "idiv %2" \