Drop um/mod in favor of u/mod

This commit is contained in:
Brad Nelson
2021-01-10 09:31:04 -08:00
parent 45f49434f3
commit 517e8f5a7b
5 changed files with 4 additions and 14 deletions

View File

@ -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 ;

View File

@ -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) \

View File

@ -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; });

View File

@ -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() {},

View File

@ -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" \