Drop um/mod in favor of u/mod
This commit is contained in:
@ -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 ;
|
||||
|
||||
@ -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) \
|
||||
|
||||
@ -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; });
|
||||
|
||||
@ -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() {},
|
||||
|
||||
@ -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" \
|
||||
|
||||
Reference in New Issue
Block a user