about summary refs log tree commit diff stats
path: root/subx/apps/subx-common.subx
diff options
context:
space:
mode:
Diffstat (limited to 'subx/apps/subx-common.subx')
-rw-r--r--subx/apps/subx-common.subx17
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