about summary refs log tree commit diff stats
path: root/subx/apps/pack.subx
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2019-07-08 00:42:50 -0700
committerKartik Agaram <vc@akkartik.com>2019-07-08 00:59:35 -0700
commite5cffe30ed38fbbdc74c63d0a94ab2a93713e43d (patch)
treeb719f3cd55c4b1fbfb3515479cf69cd9fb31879d /subx/apps/pack.subx
parentfc07ee4f54b4596f41d47f663ee1370e07cf0847 (diff)
downloadmu-e5cffe30ed38fbbdc74c63d0a94ab2a93713e43d.tar.gz
.
Move test slice variables out of the data segment and close to their
usages. Makes tests a little easier to read even if we spend a few more
instructions each time.
Diffstat (limited to 'subx/apps/pack.subx')
-rw-r--r--subx/apps/pack.subx161
1 files changed, 96 insertions, 65 deletions
diff --git a/subx/apps/pack.subx b/subx/apps/pack.subx
index 1e6c1fbc..7c12115a 100644
--- a/subx/apps/pack.subx
+++ b/subx/apps/pack.subx
@@ -5948,9 +5948,14 @@ test-emit-number:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               4/imm32           # add to ESP
-    # var slice/ECX = "30"
-    68/push  _test-slice-three-zero-end/imm32/end
-    68/push  _test-slice-three-zero/imm32/start
+    # (EAX..ECX) = "30"
+    b8/copy-to-EAX  "30"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # emit(_test-output-buffered-file, slice, 1)
     # . . push args
@@ -6004,9 +6009,14 @@ test-emit-negative-number:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               4/imm32           # add to ESP
-    # var slice/ECX = "-2"
-    68/push  _test-slice-negative-two-end/imm32/end
-    68/push  _test-slice-negative-two/imm32/start
+    # (EAX..ECX) = "-2"
+    b8/copy-to-EAX  "-2"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # emit(_test-output-buffered-file, slice, 2)
     # . . push args
@@ -6059,9 +6069,14 @@ test-emit-number-with-metadata:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               4/imm32           # add to ESP
-    # var slice/ECX = "-2/foo"
-    68/push  _test-slice-negative-two-metadata-end/imm32/end
-    68/push  _test-slice-negative-two/imm32/start
+    # (EAX..ECX) = "-2/foo"
+    b8/copy-to-EAX  "-2/foo"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # emit(_test-output-buffered-file, slice, 2)
     # . . push args
@@ -6115,9 +6130,14 @@ test-emit-non-number:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               4/imm32           # add to ESP
-    # var slice/ECX = "xyz"
-    68/push  _test-slice-non-number-word-end/imm32/end
-    68/push  _test-slice-non-number-word/imm32/start
+    # (EAX..ECX) = "xyz"
+    b8/copy-to-EAX  "xyz"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # emit(_test-output-buffered-file, slice, 2)
     # . . push args
@@ -6170,9 +6190,14 @@ test-emit-non-number-with-metadata:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               4/imm32           # add to ESP
-    # var slice/ECX = "xyz/"
-    68/push  _test-slice-non-number-word-metadata-end/imm32/end
-    68/push  _test-slice-non-number-word/imm32/start
+    # (EAX..ECX) = "xyz/"
+    b8/copy-to-EAX  "xyz/"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # emit(_test-output-buffered-file, slice, 2)
     # . . push args
@@ -6225,9 +6250,14 @@ test-emit-non-number-with-all-hex-digits-and-metadata:
     e8/call  clear-stream/disp32
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               4/imm32           # add to ESP
-    # var slice/ECX = "abcd/xyz"
-    68/push  _test-slice-hexlike-non-number-word-metadata-end/imm32/end
-    68/push  _test-slice-hexlike-non-number-word/imm32/start
+    # (EAX..ECX) = "abcd/xyz"
+    b8/copy-to-EAX  "abcd/xyz"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # emit(_test-output-buffered-file, slice, 2)
     # . . push args
@@ -6351,9 +6381,14 @@ test-is-valid-name-digit-prefix:
     # . prolog
     55/push-EBP
     89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
-    # var slice/ECX = "34"
-    68/push  _test-slice-hex-int-end/imm32
-    68/push  _test-slice-hex-int/imm32
+    # (EAX..ECX) = "34"
+    b8/copy-to-EAX  "34"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # EAX = is-valid-name?(slice)
     # . . push args
@@ -6380,9 +6415,14 @@ test-is-valid-name-negative-prefix:
     # . prolog
     55/push-EBP
     89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
-    # var slice/ECX = "-0x34"
-    68/push  _test-slice-hex-int-with-0x-prefix-end/imm32
-    68/push  _test-slice-hex-int-with-0x-prefix-negative/imm32
+    # (EAX..ECX) = "-0x34"
+    b8/copy-to-EAX  "-0x34"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # EAX = is-valid-name?(slice)
     # . . push args
@@ -6409,9 +6449,14 @@ test-is-valid-name-0x-prefix:
     # . prolog
     55/push-EBP
     89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
-    # var slice/ECX = "0x34"
-    68/push  _test-slice-hex-int-with-0x-prefix-end/imm32
-    68/push  _test-slice-hex-int-with-0x-prefix/imm32
+    # (EAX..ECX) = "0x34"
+    b8/copy-to-EAX  "0x34"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # EAX = is-valid-name?(slice)
     # . . push args
@@ -6438,9 +6483,14 @@ test-is-valid-name-starts-with-pre-digit:
     # . prolog
     55/push-EBP
     89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
-    # var slice/ECX = "/03"
-    68/push  _test-slice-with-slash-prefix-end/imm32
-    68/push  _test-slice-with-slash-prefix/imm32
+    # (EAX..ECX) = "/03"
+    b8/copy-to-EAX  "/03"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # EAX = is-valid-name?(slice)
     # . . push args
@@ -6467,9 +6517,14 @@ test-is-valid-name-starts-with-post-digit:
     # . prolog
     55/push-EBP
     89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
-    # var slice/ECX = "q34"
-    68/push  _test-slice-char-and-digits-end/imm32
-    68/push  _test-slice-char-and-digits/imm32
+    # (EAX..ECX) = "q34"
+    b8/copy-to-EAX  "q34"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # EAX = is-valid-name?(slice)
     # . . push args
@@ -6496,9 +6551,14 @@ test-is-valid-name-starts-with-digit:
     # . prolog
     55/push-EBP
     89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
-    # var slice/ECX = "0x34"
-    68/push  _test-slice-hex-int-with-0x-prefix-end/imm32
-    68/push  _test-slice-hex-int-with-0x-prefix/imm32
+    # (EAX..ECX) = "0x34"
+    b8/copy-to-EAX  "0x34"/imm32
+    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
+    05/add-to-EAX  4/imm32
+    # var slice/ECX = {EAX, ECX}
+    51/push-ECX
+    50/push-EAX
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           4/r32/ESP   .               .                 # copy ESP to ECX
     # EAX = is-valid-name?(slice)
     # . . push args
@@ -6806,33 +6866,4 @@ $parse-datum-of-word:end:
     5d/pop-to-EBP
     c3/return
 
-== data
-
-_test-slice-negative-two:
-    2d/- 32/2
-_test-slice-negative-two-end:
-    2f/slash 66/f 6f/o 6f/o
-_test-slice-negative-two-metadata-end:
-
-_test-slice-three-zero:
-    33/3 30/0
-_test-slice-three-zero-end:
-
-_test-slice-non-number-word:
-    78/x 79/y 7a/z
-_test-slice-non-number-word-end:
-    2f/slash
-_test-slice-non-number-word-metadata-end:
-
-_test-slice-hexlike-non-number-word:
-    61/a 62/b 63/c 64/d
-_test-slice-hexlike-non-number-word-end:
-    2f/slash
-    78/x 79/y 7a/z
-_test-slice-hexlike-non-number-word-metadata-end:
-
-_test-slice-with-slash-prefix:
-  2f/slash 30/0 33/3
-_test-slice-with-slash-prefix-end:
-
 # . . vim:nowrap:textwidth=0