os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

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:
Mas.om | 3+++
Mcc0.c | 22++++++++++++++++++----
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;