Improving web.

This commit is contained in:
Brad Nelson
2021-01-04 22:53:18 -08:00
parent cdb4c663dd
commit 7691afaa90
2 changed files with 31 additions and 11 deletions

View File

@ -20,16 +20,16 @@ typedef uint64_t udcell_t;
#define OPCODE_LIST \
X("0=", OP_ZEQUAL, tos = !tos ? -1 : 0) \
X("0<", OP_ZLESS, tos = tos < 0 ? -1 : 0) \
X("+", OP_PLUS, tos += *sp--) \
X("+", OP_PLUS, tos += *sp; --sp) \
X("UM/MOD", OP_UMSMOD, ud = *(udcell_t *) &sp[-1]; \
*--sp = (cell_t) (ud % tos); \
--sp; *sp = (cell_t) (ud % tos); \
tos = (cell_t) (ud / tos)) \
X("*/MOD", OP_SSMOD, d = (dcell_t) *sp * (dcell_t) sp[-1]; \
*--sp = (cell_t) (d % tos); \
--sp; *sp = (cell_t) (d % tos); \
tos = (cell_t) (d / tos)) \
X("AND", OP_AND, tos &= *sp--) \
X("OR", OP_OR, tos |= *sp--) \
X("XOR", OP_XOR, tos ^= *sp--) \
X("AND", OP_AND, tos = tos & *sp; --sp) \
X("OR", OP_OR, tos = tos | *sp; --sp) \
X("XOR", OP_XOR, tos = tos ^ *sp; --sp) \
X("DUP", OP_DUP, DUP) \
X("SWAP", OP_SWAP, t = tos; tos = *sp; *sp = t) \
X("OVER", OP_OVER, DUP; tos = sp[-1]) \
@ -46,14 +46,14 @@ typedef uint64_t udcell_t;
X("SP!", OP_SPSTORE, sp = (cell_t *) tos; DROP) \
X("RP@", OP_RPAT, DUP; tos = (cell_t) rp) \
X("RP!", OP_RPSTORE, rp = (cell_t *) tos; DROP) \
X(">R", OP_TOR, *++rp = tos; DROP) \
X("R>", OP_FROMR, DUP; tos = *rp--) \
X(">R", OP_TOR, ++rp; *rp = tos; DROP) \
X("R>", OP_FROMR, DUP; tos = *rp; --rp) \
X("R@", OP_RAT, DUP; tos = *rp) \
X("EXECUTE", OP_EXECUTE, w = tos; DROP; goto **(void **) w) \
X("BRANCH", OP_BRANCH, ip = (cell_t *) *ip) \
X("0BRANCH", OP_ZBRANCH, if (!tos) ip = (cell_t *) *ip; else ++ip; DROP) \
X("DONEXT", OP_DONEXT, if ((*rp)--) ip = (cell_t *) *ip; else (--rp, ++ip)) \
X("DOLIT", OP_DOLIT, DUP; tos = *(cell_t *) ip++) \
X("DONEXT", OP_DONEXT, *rp = (*rp - 1) | 0; if (*rp) ip = (cell_t *) *ip; else (--rp, ++ip)) \
X("DOLIT", OP_DOLIT, DUP; tos = *(cell_t *) ip; ++ip) \
X("ALITERAL", OP_ALITERAL, *g_sys.heap++ = g_sys.DOLIT_XT; \
*g_sys.heap++ = tos; DROP) \
X("CELL", OP_CELL, DUP; tos = sizeof(cell_t)) \
@ -74,6 +74,6 @@ typedef uint64_t udcell_t;
X("EVALUATE1", OP_EVALUATE1, DUP; sp = evaluate1(sp, &tmp); \
DROP; if (tmp) (w = tmp); \
if (tmp) goto **(void **) w) \
X("EXIT", OP_EXIT, ip = (void *) *rp--) \
X("EXIT", OP_EXIT, ip = (void *) *rp; --rp) \
X(";", OP_SEMICOLON, *g_sys.heap++ = g_sys.DOEXIT_XT; g_sys.state = 0) \

View File

@ -16,6 +16,26 @@ function ReplaceAll(haystack, needle, replacement) {
}
}
cases = ReplaceAll(cases, 'DROP', 'tos = i32[sp>>2]; sp = (sp - 4) | 0');
cases = ReplaceAll(cases, 'DUP', 'sp = (sp + 4) | 0; i32[sp>>2] = tos');
cases = ReplaceAll(cases, '*(cell_t *) tos', 'i32[tos>>2]');
cases = ReplaceAll(cases, '*(int32_t *) tos', 'i32[tos>>2]');
cases = ReplaceAll(cases, '*(uint8_t *) tos', 'u8[tos]');
cases = ReplaceAll(cases, '*sp', 'i32[sp>>2]');
cases = ReplaceAll(cases, '*rp', 'i32[rp>>2]');
cases = ReplaceAll(cases, '*ip', 'i32[ip>>2]');
cases = ReplaceAll(cases, 'sp[-1]', 'i32[(sp - 4)>>2]');
cases = ReplaceAll(cases, '++ip', 'ip = (ip + 4) | 0');
cases = ReplaceAll(cases, '++sp', 'sp = (sp + 4) | 0');
cases = ReplaceAll(cases, '++rp', 'rp = (rp + 4) | 0');
cases = ReplaceAll(cases, '--sp', 'sp = (sp - 4) | 0');
cases = ReplaceAll(cases, '--rp', 'rp = (rp - 4) | 0');
cases = ReplaceAll(cases, 'sizeof(cell_t) ', '4');
cases = ReplaceAll(cases, '(void *) ', '');
cases = ReplaceAll(cases, '(const char *) ', '');
cases = ReplaceAll(cases, '(cell_t *) ', '');
cases = ReplaceAll(cases, '(cell_t) ', '');
code = code.replace('{{boot}}', function() { return boot; });
code = code.replace('{{dict}}', function() { return dict; });
code = code.replace('{{cases}}', function() { return cases; });