commit 09b26a0a50456b5eaf779fcc1d1322eef10732ab
parent ec816a9977f76e037f2b0c981790c82b1ec631b0
Author: erai <erai@omiltem.net>
Date: Sun, 9 Feb 2025 04:59:07 +0000
loadb storeb don't need rex
Diffstat:
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/as.om b/as.om
@@ -1110,6 +1110,9 @@ func as_rex(a: *assembler, op: int, r: int, i: int, b: int) {
w = 0x08;
if op == OP_LOADB || op == OP_STOREB {
w = 0;
+ if r < 8 && i < 8 && b < 8 {
+ return;
+ }
}
as_emit(a, 0x40 + w + ((r >> 1) & 4) + ((i >> 2) & 2) + ((b >> 3) & 1));
}
diff --git a/cc0.c b/cc0.c
@@ -1714,6 +1714,8 @@ u zas_rex(u va, u vop, u vr, u vi, u vb) {
u v8 = 0;
u v9 = 0;
u v10 = 0;
+ u v11 = 0;
+ u v12 = 0;
if (!*(u*)(va + 48)) goto b1;
return 0;
b1: vw = 8;
@@ -1721,11 +1723,23 @@ b1: vw = 8;
v6 = 1;
b10: if (!v6) goto b4;
vw = 0;
-b4: v7 = (u)zas_emit;
- v8 = va;
- v9 = 64 + vw + (vr >> 1 & 4) + (vi >> 2 & 2) + (vb >> 3 & 1);
- v10 = ((u(*)())v7)(v8, v9);
+ if ((s)vr >= (s)8) goto b16;
+ if ((s)vi >= (s)8) goto b20;
+ if ((s)vb >= (s)8) goto b20;
+ v8 = 1;
+b22: if (!v8) goto b16;
+ v7 = 1;
+b18: if (!v7) goto b4;
return 0;
+b4: v9 = (u)zas_emit;
+ v10 = va;
+ v11 = 64 + vw + (vr >> 1 & 4) + (vi >> 2 & 2) + (vb >> 3 & 1);
+ v12 = ((u(*)())v9)(v10, v11);
+ return 0;
+b16: v7 = 0;
+ goto b18;
+b20: v8 = 0;
+ goto b22;
b8: if (vop != 136) goto b11;
v6 = 1;
goto b10;