Browse code

(uxn.c) Faster SET() macro

neauoire authored on 10/08/2023 02:31:33
Showing 1 changed files
... ...
@@ -17,34 +17,33 @@ WITH REGARD TO THIS SOFTWARE.
17 17
 [   L2   ][   N2   ][   T2   ] <
18 18
 */
19 19
 
20
-#define T *sp
21
-#define N *(sp-1)
22
-#define L *(sp-2)
23
-#define T2 PEEK2((sp-1))
24
-#define H2 PEEK2((sp-2))
25
-#define N2 PEEK2((sp-3))
26
-#define L2 PEEK2((sp-5))
20
+#define T *ptr
21
+#define N *(ptr-1)
22
+#define L *(ptr-2)
23
+#define T2 PEEK2((ptr-1))
24
+#define H2 PEEK2((ptr-2))
25
+#define N2 PEEK2((ptr-3))
26
+#define L2 PEEK2((ptr-5))
27 27
 
28 28
 #define HALT(c)    { return emu_halt(u, ins, c, pc - 1); }
29 29
 #define FLIP       { s = ins & 0x40 ? &u->wst : &u->rst; }
30
-#define SET(x, y)  { if(x > s->ptr) HALT(1) tmp = (x & k) + y + s->ptr; if(tmp > 254) HALT(2) s->ptr = tmp; sp = s->dat + tmp - 1; }
31
-#define PUT1(o, v) { *(sp - o) = v; }
32
-#define PUT2(o, v) { tmp = (v); POKE2(sp - 1 - o, tmp); }
30
+#define SET(x, y)  { r = s->ptr; if(x > r) HALT(1) r += (x & k) + y; if(r > 254) HALT(2) ptr = s->dat + r - 1; s->ptr = r; }
31
+#define PUT1(o, v) { *(ptr - o) = v; }
32
+#define PUT2(o, v) { r = (v); POKE2(ptr - 1 - o, r); }
33 33
 
34 34
 int
35 35
 uxn_eval(Uxn *u, Uint16 pc)
36 36
 {
37
-	int t, n, l, k, tmp, ins, opc;
38
-	Uint8 *ram = u->ram, *sp;
37
+	int t, n, l, k, r;
38
+	Uint8 *ram = u->ram, *ptr, ins;
39 39
 	Stack *s;
40 40
 	if(!pc || u->dev[0x0f]) return 0;
41 41
 	for(;;) {
42 42
 		ins = ram[pc++];
43 43
 		k = ins & 0x80 ? 0xff : 0;
44 44
 		s = ins & 0x40 ? &u->rst : &u->wst;
45
-		sp = s->dat + s->ptr - 1;
46
-		opc = !(ins & 0x1f) ? (0 - (ins >> 5)) & 0xff : ins & 0x3f;
47
-		switch(opc) {
45
+		ptr = s->dat + s->ptr - 1;
46
+		switch(!(ins & 0x1f) ? (0 - (ins >> 5)) & 0xff : ins & 0x3f) {
48 47
 			/* IMM */
49 48
 			case 0x00: /* BRK   */                          return 1;
50 49
 			case 0xff: /* JCI   */                          if(!s->dat[--s->ptr]) { pc += 2; break; }