commit 2d16e13b89f2889aa5ab43d9d317c970c21aed8c
parent 407890c5b2cd62224b797a8c231f9a72290bb817
Author: Virgil Dupras <hsoft@hardcoded.net>
Date: Mon, 13 Jun 2022 19:16:18 -0400
cc: use EDI for lvalue effective address
I know, it's quite inefficient, but it's the simplest way forward for now.
Diffstat:
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/fs/asm.fs b/fs/asm.fs
@@ -45,8 +45,10 @@
: eax AX r! ; alias eax ax alias eax al
: ebx BX r! ; alias ebx bx alias ebx bl
: ebp BP r! ;
+: edi DI r! ;
: [eax] AX [r]! 0 to disp ;
: [ebp] BP [r]+8b! 0 to disp ;
+: [edi] DI [r]! ;
: [ebp]+ ( disp -- ) BP [r]+8b! to disp ;
: i32 IMM $400 or to src ;
diff --git a/fs/cc/gen.fs b/fs/cc/gen.fs
@@ -101,13 +101,14 @@ ASTIDCNT wordtbl gentbl ( node -- )
:w ( Constant ) eax data1 i32 mov, ;
:w ( Statements ) genchildren ;
'w genchildren ( ArgSpecs )
-:w ( LValue ) lvsfoff isleft if [ebp]+ eax mov, else eax [ebp]+ mov, then ;
+:w ( LValue )
+ edi ebp mov, edi lvsfoff i32 add, isleft not if eax [edi] mov, then ;
:w ( UnaryOp ) dup genchildren data1 uopgentbl swap wexec ;
:w ( Assign )
firstchild ?dup not if _err then ( lvnode )
dup nextsibling ?dup not if _err then ( lvnode exprnode )
0 to isleft gennode
- 1 to isleft gennode
+ 1 to isleft gennode [edi] eax mov,
0 to isleft ;
:w ( BinaryOp )
( node ) >r