ref: 48d806f9e0757baedb656b43a28dbb9af6e14b0b
parent: e58eace5b4c5f50e1e1a9b6dd0f8e04122478512
parent: 15a4c1e063cbd875ee6582e89671e5a79377b7a4
author: Lennart Augustsson <lennart@augustsson.net>
date: Wed Jan 31 05:28:21 EST 2024
Merge pull request #33 from jmaessen/remove-indirs Remove indirections
--- a/generated/mhs.c
+++ b/generated/mhs.c
@@ -4660,7 +4660,7 @@
75,32,64,32,64,32,64,32,75,32,64,32,64,32,110,111,77,97,116,99,
104,32,102,114,111,109,85,84,70,56,32,34,115,114,99,47,77,105,99,114,
111,72,115,47,84,121,112,101,67,104,101,99,107,46,104,115,34,32,64,32,
-64,32,35,49,50,48,52,32,64,32,35,50,53,32,64,32,64,32,64,32,
+64,32,35,49,50,48,51,32,64,32,35,50,53,32,64,32,64,32,64,32,
64,32,64,32,64,32,66,32,95,49,48,55,53,32,64,32,95,53,57,32,
95,56,49,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,
32,95,52,56,54,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,
@@ -4673,7 +4673,7 @@
64,32,64,32,64,32,65,32,64,32,64,32,110,111,77,97,116,99,104,32,
102,114,111,109,85,84,70,56,32,34,115,114,99,47,77,105,99,114,111,72,
115,47,84,121,112,101,67,104,101,99,107,46,104,115,34,32,64,32,64,32,
-35,49,50,48,51,32,64,32,35,50,53,32,64,32,64,32,64,32,64,32,
+35,49,50,48,50,32,64,32,35,50,53,32,64,32,64,32,64,32,64,32,
64,32,64,32,64,32,95,50,55,52,32,83,32,80,32,75,50,32,75,32,
64,32,64,32,75,50,32,75,32,64,32,64,32,64,32,90,32,90,32,67,
32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,
@@ -5269,7 +5269,7 @@
64,32,64,32,90,32,75,32,64,32,64,32,64,32,75,32,64,32,64,32,
110,111,77,97,116,99,104,32,102,114,111,109,85,84,70,56,32,34,115,114,
99,47,77,105,99,114,111,72,115,47,84,121,112,101,67,104,101,99,107,46,
-104,115,34,32,64,32,64,32,35,49,48,56,54,32,64,32,35,50,53,32,
+104,115,34,32,64,32,64,32,35,49,48,56,53,32,64,32,35,50,53,32,
64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,95,49,48,55,53,
32,64,32,95,53,57,32,95,56,49,49,32,64,32,64,32,64,32,64,32,
64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,95,50,
@@ -6870,7 +6870,7 @@
64,32,35,50,49,32,64,32,64,32,110,111,77,97,116,99,104,32,102,114,
111,109,85,84,70,56,32,34,115,114,99,47,77,105,99,114,111,72,115,47,
84,121,112,101,67,104,101,99,107,46,104,115,34,32,64,32,64,32,35,49,
-56,54,51,32,64,32,35,49,55,32,64,32,64,32,64,32,64,32,64,32,
+56,54,50,32,64,32,35,49,55,32,64,32,64,32,64,32,64,32,64,32,
64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,
66,32,67,39,32,83,39,32,95,48,32,95,52,57,57,32,64,32,64,32,
64,32,95,56,51,55,32,64,32,64,32,64,32,64,32,66,32,66,32,66,
--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -1908,10 +1908,12 @@
/* Follow indirections */
static INLINE NODEPTR
-indir(NODEPTR n)
+indir(NODEPTR *np)
{+ NODEPTR n = *np;
while (GETTAG(n) == T_IND)
n = INDIR(n);
+ *np = n;
return n;
}
@@ -1978,7 +1980,7 @@
n = evali(n);
if (GETTAG(n) == T_K) /* Nil */
break;
- else if (GETTAG(n) == T_AP && GETTAG(x = indir(FUN(n))) == T_AP && GETTAG(indir(FUN(x))) == T_O) { /* Cons */+ else if (GETTAG(n) == T_AP && GETTAG(x = indir(&FUN(n))) == T_AP && GETTAG(indir(&FUN(x))) == T_O) { /* Cons */PUSH(n); /* protect from GC */
c = (uvalue_t)evalint(ARG(x));
n = POPTOP();
@@ -2298,7 +2300,8 @@
FREE(msg);
POP(1);
n = TOP(-1);
- GOIND(mkFlt(xd));
+ SETDBL(n, xd);
+ RET;
case T_FSHOW:
CHECK(1);
@@ -2309,7 +2312,7 @@
#endif /* WANT_FLOAT */
/* Retag a word sized value, keeping the value bits */
-#define CONV(t) do { CHECK(1); x = evali(ARG(TOP(0))); GCCHECK(1); y = alloc_node(t); SETVALUE(y, GETVALUE(x)); POP(1); n = TOP(-1); GOIND(y); } while(0)+#define CONV(t) do { CHECK(1); x = evali(ARG(TOP(0))); n = POPTOP(); SETTAG(n, t); SETVALUE(n, GETVALUE(x)); RET; } while(0)case T_TODBL: CONV(T_DBL);
case T_TOINT: CONV(T_INT);
case T_TOPTR: CONV(T_PTR);
@@ -2543,8 +2546,8 @@
//ppmsg("n before = ", ARG(FUN(top)));n = evali(ARG(FUN(top))); /* eval(n) */
//ppmsg("n after = ", n);- if (GETTAG(n) == T_AP && GETTAG(top1 = indir(FUN(n))) == T_AP) {- switch (GETTAG(indir(FUN(top1)))) {+ if (GETTAG(n) == T_AP && GETTAG(top1 = indir(&FUN(n))) == T_AP) {+ switch (GETTAG(indir(&FUN(top1)))) {case T_IO_BIND:
GCCHECKSAVE(n, 2);
s = ARG(n);
--
⑨