diff options
author | Kartik Agaram <vc@akkartik.com> | 2019-08-23 14:23:25 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2019-08-23 14:23:25 -0700 |
commit | 88469e78aeff2d3e81279a23084d0abd06ec6206 (patch) | |
tree | 33a62ebe0aa93ff58ed5738a39867d3ad39ceae1 /apps | |
parent | 4b296ceef993d2a668d2ff4e86ff6715be5e6bcd (diff) | |
download | mu-88469e78aeff2d3e81279a23084d0abd06ec6206.tar.gz |
.
Some reorg as I realize I may have painted myself into a corner in this function. I have no registers left for the actual parsing.
Diffstat (limited to 'apps')
-rwxr-xr-x | apps/desugar | bin | 39788 -> 40139 bytes | |||
-rw-r--r-- | apps/desugar.subx | 16 |
2 files changed, 12 insertions, 4 deletions
diff --git a/apps/desugar b/apps/desugar index 5a4ddfc3..7244b529 100755 --- a/apps/desugar +++ b/apps/desugar Binary files differdiff --git a/apps/desugar.subx b/apps/desugar.subx index c1b84688..ede6dbbc 100644 --- a/apps/desugar.subx +++ b/apps/desugar.subx @@ -1052,17 +1052,22 @@ parse-effective-address: # word : (address slice) -> base/EAX, index/ECX, scale 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP # . save registers 56/push-ESI + 57/push-EDI # ESI = word 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 6/r32/ESI 8/disp8 . # copy *(EBP+8) to ESI - # skip '*' + # ++word->start to skip '*' ff 0/subop/increment 0/mod/indirect 6/rm32/ESI . . . . . . # increment *ESI # initialize defaults - b8/copy-to-EAX 0/imm32 + # base is in EDI; we'll move it to EAX just before we return + bf/copy-to-EDI 0/imm32 b9/copy-to-ECX 4/imm32/no-index ba/copy-to-EDX 0/imm32/.scale bb/copy-to-EBX 0/imm32/disp # if (*word->start == '(') goto next check - 81 7/subop/compare 0/mod/indirect 6/rm32/ESI . . . . . 0x28/imm32/open-paren # compare *ESI + 8b/copy 0/mod/indirect 6/rm32/ESI . . . 0/r32/EAX . . # copy *ESI to EAX + 8a/copy-byte 0/mod/indirect 0/rm32/EAX . . . 0/r32/AL . . # copy byte at *EAX to AL + 81 4/subop/and 3/mod/direct 0/rm32/EAX . . . . . 0xff/imm32 # bitwise and of EAX + 3d/compare-EAX-and 0x28/imm32/open-paren 74/jump-if-equal $parse-effective-address:compound-expression/disp8 #? ff 0/subop/increment 0/mod/indirect 6/rm32/ESI . . . . . . # increment *ESI $parse-effective-address:simple-register: @@ -1078,12 +1083,15 @@ $parse-effective-address:simple-register: # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0x10/imm32 # add to ESP # . base = *EAX - 8b/copy 0/mod/indirect 0/rm32/EAX . . . 0/r32/EAX . . # copy *EAX to EAX + 8b/copy 0/mod/indirect 0/rm32/EAX . . . 7/r32/EDI . . # copy *EAX to EDI # return eb/jump $parse-effective-address:end/disp8 $parse-effective-address:compound-expression: $parse-effective-address:end: + # return base in EAX + 89/copy 3/mod/direct 0/rm32/EAX . . . 7/r32/EDI . . # copy EDI to EAX # . restore registers + 5f/pop-to-EDI 5e/pop-to-ESI # . epilog 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP |