diff options
Diffstat (limited to 'subx/apps/subx-common.subx')
-rw-r--r-- | subx/apps/subx-common.subx | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/subx/apps/subx-common.subx b/subx/apps/subx-common.subx index 0ac143f3..1dac1c31 100644 --- a/subx/apps/subx-common.subx +++ b/subx/apps/subx-common.subx @@ -1142,47 +1142,38 @@ compute-width: # word : (address array byte) 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP # . save registers 51/push-ECX - # EAX = word 8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 0/r32/EAX 8/disp8 . # copy *(EBP+8) to ECX - # ECX = word + word->length 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . . # copy *EAX to ECX 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/EAX 1/index/ECX . 1/r32/ECX 4/disp8 . # copy EAX+ECX+4 to ECX # EAX = word->data 05/add-to-EAX 4/imm32 - # var in/ECX : (address slice) = {EAX, ECX} 51/push-ECX 50/push-EAX 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX - # if has-metadata?(word, "imm32") or has-metadata?(word, "disp32"): return 4 # . has-metadata?(word, "imm32") 68/push "imm32"/imm32 51/push-ECX - e8/call has-metadata?/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP - # . if EAX: return 4 3d/compare-EAX-and 1/imm32 b8/copy-to-EAX 4/imm32 # ZF is set, so we can overwrite EAX now 74/jump-if-equal $compute-width:end/disp8 - # . has-metadata?(word, "disp32") 68/push "disp32"/imm32 51/push-ECX e8/call has-metadata?/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP - # . if EAX: return 4 3d/compare-EAX-and 1/imm32 b8/copy-to-EAX 4/imm32 # ZF is set, so we can overwrite EAX now 74/jump-if-equal $compute-width:end/disp8 - # if has-metadata?(word, "imm16") or has-metadata?(word, "disp16"): return 2 # . has-metadata?(word, "imm16") 68/push "imm16"/imm32 @@ -1190,31 +1181,27 @@ compute-width: # word : (address array byte) e8/call has-metadata?/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP - # . if EAX: return 2 3d/compare-EAX-and 1/imm32 b8/copy-to-EAX 2/imm32 # ZF is set, so we can overwrite EAX now 74/jump-if-equal $compute-width:end/disp8 - # . has-metadata?(word, "disp16") 68/push "disp16"/imm32 51/push-ECX e8/call has-metadata?/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP - # . if EAX: return 2 3d/compare-EAX-and 1/imm32 b8/copy-to-EAX 2/imm32 # ZF is set, so we can overwrite EAX now 74/jump-if-equal $compute-width:end/disp8 - # else: return 1 b8/copy-to-EAX 1/imm32 - $compute-width:end: + # . discard locals + 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP # . restore registers 59/pop-to-ECX - # . epilog 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP 5d/pop-to-EBP |