duskos

dusk os fork
git clone git://git.alexwennerberg.com/duskos
Log | Files | Refs | README | LICENSE

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:
Mfs/asm.fs | 2++
Mfs/cc/gen.fs | 5+++--
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