Drop um/mod in favor of u/mod
This commit is contained in:
@ -137,7 +137,7 @@ defer bye
|
|||||||
variable hld
|
variable hld
|
||||||
: pad ( -- a ) here 80 + ;
|
: pad ( -- a ) here 80 + ;
|
||||||
: digit ( u -- c ) 9 over < 7 and + 48 + ;
|
: 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 ! ;
|
: <# ( -- ) pad hld ! ;
|
||||||
: hold ( c -- ) hld @ 1 - dup hld ! c! ;
|
: hold ( c -- ) hld @ 1 - dup hld ! c! ;
|
||||||
: # ( u -- u ) base @ extract hold ;
|
: # ( u -- u ) base @ extract hold ;
|
||||||
|
|||||||
@ -19,10 +19,7 @@ typedef uint64_t udcell_t;
|
|||||||
#define COMMA(n) *g_sys.heap++ = (n)
|
#define COMMA(n) *g_sys.heap++ = (n)
|
||||||
#define IMMEDIATE() g_sys.last[-1] |= 1
|
#define IMMEDIATE() g_sys.last[-1] |= 1
|
||||||
#define DOES(ip) *g_sys.last = (cell_t) && OP_DODOES; g_sys.last[1] = (cell_t) ip
|
#define DOES(ip) *g_sys.last = (cell_t) && OP_DODOES; g_sys.last[1] = (cell_t) ip
|
||||||
#ifndef UMSMOD_FUNC
|
#ifndef SSMOD_FUNC
|
||||||
#define UMSMOD_FUNC udcell_t ud = *(udcell_t *) &sp[-1]; \
|
|
||||||
--sp; *sp = (cell_t) (ud % tos); \
|
|
||||||
tos = (cell_t) (ud / tos)
|
|
||||||
#define SSMOD_FUNC dcell_t d = (dcell_t) *sp * (dcell_t) sp[-1]; \
|
#define SSMOD_FUNC dcell_t d = (dcell_t) *sp * (dcell_t) sp[-1]; \
|
||||||
--sp; *sp = (cell_t) (((udcell_t) d) % tos); \
|
--sp; *sp = (cell_t) (((udcell_t) d) % tos); \
|
||||||
tos = (cell_t) (d < 0 ? ~(~d / tos) : 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=", ZEQUAL, tos = !tos ? -1 : 0) \
|
||||||
X("0<", ZLESS, tos = (tos|0) < 0 ? -1 : 0) \
|
X("0<", ZLESS, tos = (tos|0) < 0 ? -1 : 0) \
|
||||||
X("+", PLUS, tos = (tos + *sp) | 0; --sp) \
|
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("*/MOD", SSMOD, SSMOD_FUNC) \
|
||||||
X("AND", AND, tos = tos & *sp; --sp) \
|
X("AND", AND, tos = tos & *sp; --sp) \
|
||||||
X("OR", OR, 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_DOCOLON', '0');
|
||||||
cases = ReplaceAll(cases, '&& OP_DOCREATE', '1');
|
cases = ReplaceAll(cases, '&& OP_DOCREATE', '1');
|
||||||
cases = ReplaceAll(cases, 'goto **(void **) w', 'break decode');
|
cases = ReplaceAll(cases, 'goto **(void **) w', 'break decode');
|
||||||
cases = ReplaceAll(cases, 'UMSMOD', '');
|
|
||||||
cases = ReplaceAll(cases, 'SSMOD', '');
|
cases = ReplaceAll(cases, 'SSMOD', '');
|
||||||
|
|
||||||
code = code.replace('{{boot}}', function() { return boot; });
|
code = code.replace('{{boot}}', function() { return boot; });
|
||||||
|
|||||||
@ -42,7 +42,6 @@ function VM(stdlib, foreign, heap) {
|
|||||||
|
|
||||||
var imul = stdlib.Math.imul;
|
var imul = stdlib.Math.imul;
|
||||||
|
|
||||||
var UMSMOD = foreign.UMSMOD;
|
|
||||||
var SSMOD = foreign.SSMOD;
|
var SSMOD = foreign.SSMOD;
|
||||||
var Call = foreign.Call;
|
var Call = foreign.Call;
|
||||||
var COMMA = foreign.COMMA;
|
var COMMA = foreign.COMMA;
|
||||||
@ -102,7 +101,6 @@ var ffi = {
|
|||||||
create: function() {},
|
create: function() {},
|
||||||
parse: function() {},
|
parse: function() {},
|
||||||
COMMA: function() {},
|
COMMA: function() {},
|
||||||
UMSMOD: function() {},
|
|
||||||
SSMOD: function() {},
|
SSMOD: function() {},
|
||||||
DOES: function() {},
|
DOES: function() {},
|
||||||
IMMEDIATE: function() {},
|
IMMEDIATE: function() {},
|
||||||
|
|||||||
@ -2,11 +2,6 @@
|
|||||||
|
|
||||||
#define CALLTYPE WINAPI
|
#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 \
|
# define SSMOD_FUNC \
|
||||||
w = tos; asm("imul %4\n\t" \
|
w = tos; asm("imul %4\n\t" \
|
||||||
"idiv %2" \
|
"idiv %2" \
|
||||||
|
|||||||
Reference in New Issue
Block a user