about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2019-06-30 22:28:19 -0700
committerKartik Agaram <vc@akkartik.com>2019-07-01 23:09:58 -0700
commit51c311d5f9bf028c7a3967525062a96bd4b13b40 (patch)
tree6be0d67968844070b868241912d03375f28a2f6e
parent954133e200df32415bbfd435ebe6d01a0c3c0c03 (diff)
downloadmu-51c311d5f9bf028c7a3967525062a96bd4b13b40.tar.gz
unsigned comparison for addresses in more places
-rw-r--r--subx/054string-equal.subx2
-rw-r--r--subx/055stream.subx2
-rw-r--r--subx/056trace.subx17
-rw-r--r--subx/058stream-equal.subx6
-rw-r--r--subx/060read.subx4
-rw-r--r--subx/065hex.subx10
-rw-r--r--subx/066write-buffered.subx2
-rw-r--r--subx/072slice.subx4
-rw-r--r--subx/073next-token.subx4
-rw-r--r--subx/074print-int-decimal.subx2
-rw-r--r--subx/075array-equal.subx8
-rwxr-xr-xsubx/apps/assortbin28146 -> 28140 bytes
-rwxr-xr-xsubx/apps/crenshaw2-1bin22990 -> 22984 bytes
-rwxr-xr-xsubx/apps/crenshaw2-1bbin23549 -> 23543 bytes
-rwxr-xr-xsubx/apps/factorialbin21906 -> 21900 bytes
-rwxr-xr-xsubx/apps/handlebin22712 -> 22706 bytes
-rwxr-xr-xsubx/apps/hexbin25999 -> 25993 bytes
-rwxr-xr-xsubx/apps/packbin43060 -> 43054 bytes
-rw-r--r--subx/apps/subx-common.subx4
-rwxr-xr-xsubx/apps/surveybin28481 -> 28475 bytes
20 files changed, 32 insertions, 33 deletions
diff --git a/subx/054string-equal.subx b/subx/054string-equal.subx
index daaaa936..9784e2ad 100644
--- a/subx/054string-equal.subx
+++ b/subx/054string-equal.subx
@@ -63,7 +63,7 @@ $string-equal?:lengths:
 $string-equal?:loop:
     # if (currs >= maxs) return true
     39/compare                      3/mod/direct    6/rm32/ESI    .           .             .           1/r32/ECX   .               .                 # compare ESI with ECX
-    7d/jump-if-greater-or-equal  $string-equal?:true/disp8
+    73/jump-if-greater-or-equal-unsigned  $string-equal?:true/disp8
     # c1 = *currs
     8a/copy-byte                    0/mod/indirect  6/rm32/ESI    .           .             .           0/r32/AL    .               .                 # copy byte at *ESI to AL
     # c2 = *currb
diff --git a/subx/055stream.subx b/subx/055stream.subx
index 92049634..f2969861 100644
--- a/subx/055stream.subx
+++ b/subx/055stream.subx
@@ -37,7 +37,7 @@ clear-stream:  # f : (address stream) -> <void>
 $clear-stream:loop:
     # if (EAX >= ECX) break
     39/compare                      3/mod/direct    0/rm32/EAX    .           .             .           1/r32/ECX   .               .                 # compare EAX with ECX
-    7d/jump-if-greater-or-equal  $clear-stream:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $clear-stream:end/disp8
     # *EAX = 0
     c6          0/subop/copy        0/mod/direct    0/rm32/EAX    .           .             .           .           .               0/imm8            # copy byte to *EAX
     # ++EAX
diff --git a/subx/056trace.subx b/subx/056trace.subx
index 3b665a82..b984a447 100644
--- a/subx/056trace.subx
+++ b/subx/056trace.subx
@@ -263,14 +263,13 @@ check-trace-scans-to:  # line : (address string), msg : (address string)
     89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
     # . save registers
     50/push-EAX
-    # EAX = trace-scan(*Trace-stream, line)
+    # EAX = trace-scan(line)
     # . . push args
     ff          6/subop/push        1/mod/*+disp8   5/rm32/EBP    .           .             .           .           8/disp8         .                 # push *(EBP+8)
-    ff          6/subop/push        0/mod/indirect  5/rm32/.disp32            .             .           .           Trace-stream/disp32               # push *Trace-stream
     # . . call
     e8/call  trace-scan/disp32
     # . . discard args
-    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
+    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               4/imm32           # add to ESP
     # check-ints-equal(EAX, 1, msg)
     # . . push args
     ff          6/subop/push        1/mod/*+disp8   5/rm32/EBP    .           .             .           .           0xc/disp8       .                 # push *(EBP+12)
@@ -571,12 +570,12 @@ next-line-matches?:  # t : (address stream), line : (address string) -> result/E
 $next-line-matches?:loop:
     # if (currl/ESI >= maxl/ECX) break
     39/compare                      3/mod/direct    6/rm32/ESI    .           .             .           1/r32/ECX   .               .                 # compare ESI and ECX
-    7d/jump-if-greater-or-equal  $next-line-matches?:break/disp8
+    73/jump-if-greater-or-equal-unsigned  $next-line-matches?:break/disp8
     # if (currt/EDI >= maxt/EDX) return false
     # . EAX = false
     b8/copy-to-EAX  0/imm32/false
     39/compare                      3/mod/direct    7/rm32/EDI    .           .             .           2/r32/EDX   .               .                 # compare EDI and EDX
-    7d/jump-if-greater-or-equal  $next-line-matches?:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $next-line-matches?:end/disp8
     # if (*currt/EDI != *currl/ESI) return false
     31/xor                          3/mod/direct    0/rm32/EAX    .           .             .           0/r32/EAX   .               .                 # clear EAX
     31/xor                          3/mod/direct    3/rm32/EAX    .           .             .           3/r32/EAX   .               .                 # clear EBX
@@ -738,7 +737,7 @@ skip-next-line:  # t : (address stream)
 $skip-next-line:loop:
     # if (curr/ECX >= max/EBX) break
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           3/r32/EBX   .               .                 # compare ECX and EBX
-    7d/jump-if-greater-or-equal  $skip-next-line:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $skip-next-line:end/disp8
     # ++i/EDX
     42/increment-EDX
     # if (*curr/ECX == '\n') break
@@ -831,7 +830,7 @@ clear-trace-stream:
 $clear-trace-stream:loop:
     # if (EAX >= ECX) break
     39/compare                      3/mod/direct    0/rm32/EAX    .           .             .           1/r32/ECX   .               .                 # compare EAX with ECX
-    7d/jump-if-greater-or-equal  $clear-trace-stream:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $clear-trace-stream:end/disp8
     # *EAX = 0
     c7          0/subop/copy        0/mod/direct    0/rm32/EAX    .           .             .           .           .               0/imm32           # copy to *EAX
     # EAX += 4
@@ -904,10 +903,10 @@ _append-4:  # out : address, outend : address, in : address, inend : address ->
 $_append-4:loop:
     # if (in >= inend) break
     39/compare                      3/mod/direct    6/rm32/ESI    .           .             .           1/r32/ECX   .               .                 # compare ESI with ECX
-    7d/jump-if-greater-or-equal  $_append-4:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $_append-4:end/disp8
     # if (out >= outend) abort  # just to catch test failures fast
     39/compare                      3/mod/direct    7/rm32/EDI    .           .             .           2/r32/EDX   .               .                 # compare EDI with EDX
-    7d/jump-if-greater-or-equal  $_append-4:abort/disp8
+    73/jump-if-greater-or-equal-unsigned  $_append-4:abort/disp8
     # *out = *in
     8a/copy-byte                    0/mod/indirect  6/rm32/ESI    .           .             .           3/r32/BL    .               .                 # copy byte at *ESI to BL
     88/copy-byte                    0/mod/indirect  7/rm32/EDI    .           .             .           3/r32/BL    .               .                 # copy byte at BL to *EDI
diff --git a/subx/058stream-equal.subx b/subx/058stream-equal.subx
index b9ab889b..c65112cc 100644
--- a/subx/058stream-equal.subx
+++ b/subx/058stream-equal.subx
@@ -19,7 +19,7 @@ stream-data-equal?:  # f : (address stream), s : (address string) -> EAX : boole
     8b/copy                         1/mod/*+disp8   5/rm32/EBP    .           .             .           6/r32/ESI   8/disp8         .                 # copy *(EBP+8) to ESI
     # EAX = f->write
     8b/copy                         0/mod/indirect  6/rm32/ESI    .           .             .           0/r32/EAX   .               .                 # copy *ESI to EAX
-    # max/EDX = f->data + f->write
+    # maxf/EDX = f->data + f->write
     8d/copy-address                 1/mod/*+disp8   4/rm32/sib    6/base/ESI  0/index/EAX   .           2/r32/EDX   0xc/disp8       .                 # copy ESI+EAX+12 to EDX
     # currf/ESI = f->data
     81          0/subop/add         3/mod/direct    6/rm32/ESI    .           .             .           .           .               0xc/imm32         # add to ESI
@@ -34,9 +34,9 @@ stream-data-equal?:  # f : (address stream), s : (address string) -> EAX : boole
     31/xor                          3/mod/direct    0/rm32/EAX    .           .             .           0/r32/EAX   .               .                 # clear EAX
     31/xor                          3/mod/direct    1/rm32/ECX    .           .             .           1/r32/ECX   .               .                 # clear ECX
 $stream-data-equal?:loop:
-    # if (curr >= max) return true
+    # if (currf >= maxf) return true
     39/compare                      3/mod/direct    6/rm32/ESI    .           .             .           2/r32/EDX   .               .                 # compare ESI with EDX
-    7d/jump-if-greater-or-equal  $stream-data-equal?:true/disp8
+    73/jump-if-greater-or-equal-unsigned  $stream-data-equal?:true/disp8
     # AL = *currs
     8a/copy-byte                    0/mod/indirect  6/rm32/ESI    .           .             .           0/r32/AL    .               .                 # copy byte at *ESI to AL
     # CL = *curr
diff --git a/subx/060read.subx b/subx/060read.subx
index d377a1ad..61ee75b0 100644
--- a/subx/060read.subx
+++ b/subx/060read.subx
@@ -165,10 +165,10 @@ _buffer-4:  # out : address, outend : address, in : address, inend : address ->
 $_buffer-4:loop:
     # if (in >= inend) break
     39/compare                      3/mod/direct    6/rm32/ESI    .           .             .           1/r32/ECX   .               .                 # compare ESI with ECX
-    7d/jump-if-greater-or-equal  $_buffer-4:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $_buffer-4:end/disp8
     # if (out >= outend) break  # for now silently ignore filled up buffer
     39/compare                      3/mod/direct    7/rm32/EDI    .           .             .           2/r32/EDX   .               .                 # compare EDI with EDX
-    7d/jump-if-greater-or-equal  $_buffer-4:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $_buffer-4:end/disp8
     # *out = *in
     8a/copy-byte                    0/mod/indirect  6/rm32/ESI    .           .             .           3/r32/BL    .               .                 # copy byte at *ESI to BL
     88/copy-byte                    0/mod/indirect  7/rm32/EDI    .           .             .           3/r32/BL    .               .                 # copy byte at BL to *EDI
diff --git a/subx/065hex.subx b/subx/065hex.subx
index c888b520..374168db 100644
--- a/subx/065hex.subx
+++ b/subx/065hex.subx
@@ -23,7 +23,7 @@ is-hex-int?:  # in : (address slice) -> EAX : boolean
     # if s is empty return false
     b8/copy-to-EAX  0/imm32/false
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare ECX with EDX
-    7d/jump-if-greater-or-equal  $is-hex-int?:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $is-hex-int?:end/disp8
     # skip past leading '-'
     # . if (*curr == '-') ++curr
     31/xor                          3/mod/direct    3/rm32/EBX    .           .             .           3/r32/EBX   .               .                 # clear EBX
@@ -44,7 +44,7 @@ $is-hex-int?:initial-0:
 $is-hex-int?:initial-0x:
     # . if (curr >= in->end) return true
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare ECX with EDX
-    7d/jump-if-greater-or-equal  $is-hex-int?:true/disp8
+    73/jump-if-greater-or-equal-unsigned  $is-hex-int?:true/disp8
     # . if (*curr != 'x') jump to loop  # the previous '0' is still valid so doesn't need to be checked again
     31/xor                          3/mod/direct    3/rm32/EBX    .           .             .           3/r32/EBX   .               .                 # clear EBX
     8a/copy-byte                    0/mod/indirect  1/rm32/ECX    .           .             .           3/r32/BL    .               .                 # copy byte at *ECX to BL
@@ -55,7 +55,7 @@ $is-hex-int?:initial-0x:
 $is-hex-int?:loop:
     # if (curr >= in->end) return true
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare ECX with EDX
-    7d/jump-if-greater-or-equal  $is-hex-int?:true/disp8
+    73/jump-if-greater-or-equal-unsigned  $is-hex-int?:true/disp8
     # EAX = is-hex-digit?(*curr)
     # . . push args
     8a/copy-byte                    0/mod/indirect  1/rm32/ECX    .           .             .           0/r32/AL    .               .                 # copy byte at *ECX to AL
@@ -356,7 +356,7 @@ $parse-hex-int:initial-0:
 $parse-hex-int:initial-0x:
     # . if (curr >= in->end) return result
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare ECX with EDX
-    7d/jump-if-greater-or-equal  $parse-hex-int:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $parse-hex-int:end/disp8
     # . if (*curr != 'x') jump to loop  # the previous '0' is still valid so doesn't need to be checked again
     31/xor                          3/mod/direct    0/rm32/EAX    .           .             .           0/r32/EAX   .               .                 # clear EAX
     8a/copy-byte                    0/mod/indirect  1/rm32/ECX    .           .             .           0/r32/AL    .               .                 # copy byte at *ECX to AL
@@ -367,7 +367,7 @@ $parse-hex-int:initial-0x:
 $parse-hex-int:loop:
     # if (curr >= in->end) break
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare ECX with EDX
-    7d/jump-if-greater-or-equal  $parse-hex-int:negate/disp8
+    73/jump-if-greater-or-equal-unsigned  $parse-hex-int:negate/disp8
     # EAX = from-hex-char(*curr)
     # . . copy arg to EAX
     8a/copy-byte                    0/mod/indirect  1/rm32/ECX    .           .             .           0/r32/AL    .               .                 # copy byte at *ECX to AL
diff --git a/subx/066write-buffered.subx b/subx/066write-buffered.subx
index 3b7092c4..35f75199 100644
--- a/subx/066write-buffered.subx
+++ b/subx/066write-buffered.subx
@@ -52,7 +52,7 @@ write-buffered:  # f : (address buffered-file), msg : (address array byte) -> <v
 $write-buffered:loop:
     # if (in >= inend) break
     39/compare                      3/mod/direct    6/rm32/ESI    .           .             .           1/r32/ECX   .               .                 # compare ESI with ECX
-    7d/jump-if-greater-or-equal  $write-buffered:loop-end/disp8
+    73/jump-if-greater-or-equal-unsigned  $write-buffered:loop-end/disp8
     # if (f->write >= f->length) flush and clear f's stream
     39/compare                      3/mod/direct    3/rm32/EBX    .           .             .           2/r32/EDX   .               .                 # compare EBX with EDX
     7c/jump-if-lesser  $write-buffered:to-stream/disp8
diff --git a/subx/072slice.subx b/subx/072slice.subx
index abf88580..c9836429 100644
--- a/subx/072slice.subx
+++ b/subx/072slice.subx
@@ -147,7 +147,7 @@ $slice-equal?:nonnull-string:
 $slice-equal?:loop:
     # if (currs >= maxs) return true
     39/compare                      3/mod/direct    2/rm32/EDX    .           .             .           6/r32/ESI   .               .                 # compare EDX with ESI
-    7d/jump-if-greater-or-equal  $slice-equal?:true/disp8
+    73/jump-if-greater-or-equal-unsigned  $slice-equal?:true/disp8
     # AL = *currp
     8a/copy-byte                    0/mod/indirect  3/rm32/EBX    .           .             .           0/r32/AL    .               .                 # copy byte at *EBX to AL
     # CL = *currs
@@ -723,7 +723,7 @@ write-slice-buffered:  # out : (address buffered-file), s : (address slice)
 $write-slice-buffered:loop:
     # if (curr >= max) break
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           6/r32/ESI   .               .                 # compare ECX with ESI
-    7d/jump-if-greater-or-equal  $write-slice-buffered:loop-end/disp8
+    73/jump-if-greater-or-equal-unsigned  $write-slice-buffered:loop-end/disp8
     # if (out->write >= out->length) flush and clear out's stream
     39/compare                      3/mod/direct    3/rm32/EBX    .           .             .           2/r32/EDX   .               .                 # compare EBX with EDX
     7c/jump-if-lesser  $write-slice-buffered:to-stream/disp8
diff --git a/subx/073next-token.subx b/subx/073next-token.subx
index 7376c1d0..942d9878 100644
--- a/subx/073next-token.subx
+++ b/subx/073next-token.subx
@@ -693,7 +693,7 @@ skip-chars-matching-in-slice:  # curr : (address byte), end : (address byte), de
 $skip-chars-matching-in-slice:loop:
     # if (curr >= end) break
     39/compare                      3/mod/direct    0/rm32/EAX    .           .             .           1/r32/ECX   .               .                 # compare EAX with ECX
-    7d/jump-if-greater-or-equal  $skip-chars-matching-in-slice:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $skip-chars-matching-in-slice:end/disp8
     # if (*curr != delimiter) break
     8a/copy-byte                    0/mod/indirect  0/rm32/EAX    .           .             .           3/r32/BL    .               .                 # copy byte at *EAX to BL
     39/compare                      3/mod/direct    3/rm32/EBX    .           .             .           2/r32/EDX   .               .                 # compare EBX and EDX
@@ -789,7 +789,7 @@ skip-chars-not-matching-in-slice:  # curr : (address byte), end : (address byte)
 $skip-chars-not-matching-in-slice:loop:
     # if (curr >= end) break
     39/compare                      3/mod/direct    0/rm32/EAX    .           .             .           1/r32/ECX   .               .                 # compare EAX with ECX
-    7d/jump-if-greater-or-equal  $skip-chars-not-matching-in-slice:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $skip-chars-not-matching-in-slice:end/disp8
     # if (*curr == delimiter) break
     8a/copy-byte                    0/mod/indirect  0/rm32/EAX    .           .             .           3/r32/BL    .               .                 # copy byte at *EAX to BL
     39/compare                      3/mod/direct    3/rm32/EBX    .           .             .           2/r32/EDX   .               .                 # compare EBX and EDX
diff --git a/subx/074print-int-decimal.subx b/subx/074print-int-decimal.subx
index 04dcd1a5..57daad01 100644
--- a/subx/074print-int-decimal.subx
+++ b/subx/074print-int-decimal.subx
@@ -89,7 +89,7 @@ $print-int32-decimal:write-loop:
     74/jump-if-equal  $print-int32-decimal:write-break/disp8
     # if (curr >= max) abort
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           3/r32/EBX   .               .                 # compare ECX with EBX
-    7d/jump-if-greater-or-equal  $print-int32-decimal:abort/disp8
+    73/jump-if-greater-or-equal-unsigned  $print-int32-decimal:abort/disp8
 $print-int32-decimal:write-char:
     # *curr = AL
     88/copy-byte                    0/mod/indirect  1/rm32/ECX    .           .             .           0/r32/AL    .               .                 # copy AL to byte at *ECX
diff --git a/subx/075array-equal.subx b/subx/075array-equal.subx
index 8834d709..0623dab2 100644
--- a/subx/075array-equal.subx
+++ b/subx/075array-equal.subx
@@ -294,7 +294,7 @@ parse-array-of-ints:  # ad : (address allocation-descriptor), s : (address strin
 $parse-array-of-ints:loop1:
     # if (curr >= end) break
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare ECX with EDX
-    7d/jump-if-greater-or-equal  $parse-array-of-ints:break1/disp8
+    73/jump-if-greater-or-equal-unsigned  $parse-array-of-ints:break1/disp8
     # curr = skip-chars-matching-in-slice(curr, end, ' ')
     # . EAX = skip-chars-matching-in-slice(curr, end, ' ')
     # . . push args
@@ -309,7 +309,7 @@ $parse-array-of-ints:loop1:
     89/copy                         3/mod/direct    1/rm32/ECX    .           .             .           0/r32/EAX   .               .                 # copy EAX to ECX
     # if (curr >= end) break
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare ECX with EDX
-    7d/jump-if-greater-or-equal  $parse-array-of-ints:break1/disp8
+    73/jump-if-greater-or-equal-unsigned  $parse-array-of-ints:break1/disp8
     # curr = skip-chars-not-matching-in-slice(curr, end, ' ')
     # . EAX = skip-chars-not-matching-in-slice(curr, end, ' ')
     # . . push args
@@ -355,7 +355,7 @@ $parse-array-of-ints:pass2:
 $parse-array-of-ints:loop2:
     # if (slice->curr >= end) break
     39/compare                      0/mod/indirect  1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare *ECX with EDX
-    7d/jump-if-greater-or-equal  $parse-array-of-ints:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $parse-array-of-ints:end/disp8
     # slice->curr = skip-chars-matching-in-slice(slice->curr, end, ' ')
     # . EAX = skip-chars-matching-in-slice(slice->curr, end, ' ')
     # . . push args
@@ -370,7 +370,7 @@ $parse-array-of-ints:loop2:
     89/copy                         0/mod/indirect  1/rm32/ECX    .           .             .           0/r32/EAX   .               .                 # copy EAX to *ECX
     # if (slice->curr >= end) break
     39/compare                      0/mod/indirect  1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare *ECX with EDX
-    7d/jump-if-greater-or-equal  $parse-array-of-ints:end/disp8
+    73/jump-if-greater-or-equal-unsigned  $parse-array-of-ints:end/disp8
     # slice->end = skip-chars-not-matching-in-slice(slice->curr, end, ' ')
     # . EAX = skip-chars-not-matching-in-slice(curr, end, ' ')
     # . . push args
diff --git a/subx/apps/assort b/subx/apps/assort
index f35c0d85..22c3e183 100755
--- a/subx/apps/assort
+++ b/subx/apps/assort
Binary files differdiff --git a/subx/apps/crenshaw2-1 b/subx/apps/crenshaw2-1
index 997d2bb0..cbb8aa36 100755
--- a/subx/apps/crenshaw2-1
+++ b/subx/apps/crenshaw2-1
Binary files differdiff --git a/subx/apps/crenshaw2-1b b/subx/apps/crenshaw2-1b
index e59a4320..acb9285a 100755
--- a/subx/apps/crenshaw2-1b
+++ b/subx/apps/crenshaw2-1b
Binary files differdiff --git a/subx/apps/factorial b/subx/apps/factorial
index 1140b31e..d5953751 100755
--- a/subx/apps/factorial
+++ b/subx/apps/factorial
Binary files differdiff --git a/subx/apps/handle b/subx/apps/handle
index 5e1f2dca..dbc511df 100755
--- a/subx/apps/handle
+++ b/subx/apps/handle
Binary files differdiff --git a/subx/apps/hex b/subx/apps/hex
index dbaf0af4..78e7b899 100755
--- a/subx/apps/hex
+++ b/subx/apps/hex
Binary files differdiff --git a/subx/apps/pack b/subx/apps/pack
index e50a6843..936b691b 100755
--- a/subx/apps/pack
+++ b/subx/apps/pack
Binary files differdiff --git a/subx/apps/subx-common.subx b/subx/apps/subx-common.subx
index e37319dc..f4034e84 100644
--- a/subx/apps/subx-common.subx
+++ b/subx/apps/subx-common.subx
@@ -71,7 +71,7 @@ $get-or-insert:not-found:
     # if (table->write >= table->length) abort
     8b/copy                         0/mod/indirect  6/rm32/ESI    .           .             .           1/r32/ECX   .               .                 # copy *ESI to ECX
     3b/compare                      1/mod/*+disp8   6/rm32/ESI    .           .             .           1/r32/ECX   8/disp8         .                 # compare ECX with *(ESI+8)
-    7d/jump-if-greater-or-equal  $get-or-insert:abort/disp8
+    73/jump-if-greater-or-equal-unsigned  $get-or-insert:abort/disp8
     # *max = key
     # . EAX = key
     8b/copy                         1/mod/*+disp8   5/rm32/EBP    .           .             .           0/r32/EAX   0xc/disp8       .                 # copy *(EBP+12) to EAX
@@ -290,7 +290,7 @@ get-or-insert-slice:  # table : (address stream {string, _}), key : (address sli
 $get-or-insert-slice:search-loop:
     # if (curr >= max) break
     39/compare                      3/mod/direct    1/rm32/ECX    .           .             .           2/r32/EDX   .               .                 # compare ECX with EDX
-    7d/jump-if-greater-or-equal  $get-or-insert-slice:not-found/disp8
+    73/jump-if-greater-or-equal-unsigned  $get-or-insert-slice:not-found/disp8
     # if (slice-equal?(key, *curr)) return curr+4
     # . EAX = slice-equal?(key, *curr)
     # . . push args
diff --git a/subx/apps/survey b/subx/apps/survey
index e1d3185d..1d4c0914 100755
--- a/subx/apps/survey
+++ b/subx/apps/survey
Binary files differ