about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-02-17 15:26:49 -0800
committerKartik Agaram <vc@akkartik.com>2020-02-17 15:26:49 -0800
commit6323661c2c588c4fed280f55f20ca3bbc92edb27 (patch)
treee6735da9e44c1322c76c9db4b2950729d398e1db
parentcb9a1f0331bbb648982cfb551f5384b6c2df0e57 (diff)
downloadmu-6323661c2c588c4fed280f55f20ca3bbc92edb27.tar.gz
6014
-rw-r--r--052kernel-string-equal.subx4
-rw-r--r--067parse-hex.subx2
-rw-r--r--071read-line.subx4
-rw-r--r--apps/braces.subx4
-rw-r--r--apps/ex10.subx4
-rw-r--r--apps/ex11.subx4
-rw-r--r--apps/ex8.subx2
-rw-r--r--apps/hex.subx4
-rw-r--r--apps/mu.subx116
-rw-r--r--apps/mulisp.subx2
-rw-r--r--apps/survey.subx4
11 files changed, 75 insertions, 75 deletions
diff --git a/052kernel-string-equal.subx b/052kernel-string-equal.subx
index 369fee90..dca4d399 100644
--- a/052kernel-string-equal.subx
+++ b/052kernel-string-equal.subx
@@ -84,7 +84,7 @@ $kernel-string-equal?:loop:
     # c2 = *s2
     8a/copy-byte                    0/mod/indirect  6/rm32/esi    .           .             .           3/r32/BL    .               .                 # copy byte at *esi to BL
     # if (c1 == 0) return false
-    3d/compare-eax-and  0/imm32
+    3d/compare-eax-and  0/imm32/null
     74/jump-if-=  $kernel-string-equal?:false/disp8
     # if (c1 != c2) return false
     39/compare                      3/mod/direct    0/rm32/eax    .           .             .           3/r32/ebx   .               .                 # compare eax and ebx
@@ -99,7 +99,7 @@ $kernel-string-equal?:loop:
 $kernel-string-equal?:break:
     # return *s1 == 0
     8a/copy-byte                    0/mod/indirect  7/rm32/edi    .           .             .           0/r32/AL    .               .                 # copy byte at *edi to AL
-    3d/compare-eax-and  0/imm32
+    3d/compare-eax-and  0/imm32/null
     75/jump-if-!=  $kernel-string-equal?:false/disp8
 $kernel-string-equal?:true:
     b8/copy-to-eax  1/imm32
diff --git a/067parse-hex.subx b/067parse-hex.subx
index c56cf253..5c8d4334 100644
--- a/067parse-hex.subx
+++ b/067parse-hex.subx
@@ -65,7 +65,7 @@ $is-hex-int?:loop:
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
     # if (eax == false) return false
-    3d/compare-eax-and  0/imm32
+    3d/compare-eax-and  0/imm32/false
     74/jump-if-=  $is-hex-int?:end/disp8
     # ++curr
     41/increment-ecx
diff --git a/071read-line.subx b/071read-line.subx
index e5440dcb..d4fe9e68 100644
--- a/071read-line.subx
+++ b/071read-line.subx
@@ -75,7 +75,7 @@ $read-line-buffered:from-stream:
     # ++s->write
     42/increment-edx
     # if (AL == '\n') return
-    3d/compare-eax-and  0xa/imm32
+    3d/compare-eax-and  0xa/imm32/newline
     75/jump-if-!=  $read-line-buffered:loop/disp8
 $read-line-buffered:end:
     # save f->read
@@ -260,7 +260,7 @@ $read-line:loop:
     # ++s->write
     42/increment-edx
     # if (AL == '\n') return
-    3d/compare-eax-and  0xa/imm32
+    3d/compare-eax-and  0xa/imm32/newline
     0f 85/jump-if-!=  $read-line:loop/disp32
 $read-line:end:
     # save f->read
diff --git a/apps/braces.subx b/apps/braces.subx
index 894a954d..789037e7 100644
--- a/apps/braces.subx
+++ b/apps/braces.subx
@@ -60,7 +60,7 @@ Entry:  # run tests if necessary, a REPL if not
     7e/jump-if-<= $subx-braces-main:interactive/disp8
     # if (argv[1] != "test")) goto interactive
     (kernel-string-equal? *(ebp+8) "test")  # => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     74/jump-if-= $subx-braces-main:interactive/disp8
     #
     (run-tests)
@@ -186,7 +186,7 @@ $subx-braces:word-loop:
 $subx-braces:check1:
     # if (slice-empty?(word-slice)) break
     (slice-empty? %edi)
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 85/jump-if-!= $subx-braces:next-line/disp32
 $subx-braces:check-for-comment:
     # if (slice-starts-with?(word-slice, "#")) continue
diff --git a/apps/ex10.subx b/apps/ex10.subx
index 7d821541..483f59d7 100644
--- a/apps/ex10.subx
+++ b/apps/ex10.subx
@@ -44,7 +44,7 @@ $argv-equal:loop:
     bb/copy-to-ebx  0/imm32
     8a/copy-byte                    0/mod/indirect  2/rm32/edx    .           .             .           3/r32/BL    .               .                 # copy byte at *edx to BL
     # if (c1 == 0) break
-    3d/compare-eax-and  0/imm32
+    3d/compare-eax-and  0/imm32/null
     74/jump-if-=  $argv-equal:break/disp8
     # if (c1 != c2) return false
     39/compare                      3/mod/direct    0/rm32/eax    .           .             .           3/r32/ebx   .               .                 # compare eax and ebx
@@ -56,7 +56,7 @@ $argv-equal:loop:
     eb/jump  $argv-equal:loop/disp8
 $argv-equal:break:
     # if (c2 == 0) return true
-    81          7/subop/compare     3/mod/direct    3/rm32/ebx    .           .             .           .           .               0/imm32           # compare ebx
+    81          7/subop/compare     3/mod/direct    3/rm32/ebx    .           .             .           .           .               0/imm32/null      # compare ebx
     75/jump-if-!=  $argv-equal:false/disp8
 $argv-equal:success:
     b8/copy-to-eax  1/imm32
diff --git a/apps/ex11.subx b/apps/ex11.subx
index 7e21b643..a1f5e6aa 100644
--- a/apps/ex11.subx
+++ b/apps/ex11.subx
@@ -79,7 +79,7 @@ $kernel-string-equal?:loop:
     # c2 = *s2
     8a/copy-byte                    0/mod/indirect  6/rm32/esi    .           .             .           3/r32/BL    .               .                 # copy byte at *esi to BL
     # if (c1 == 0) return false
-    3d/compare-eax-and  0/imm32
+    3d/compare-eax-and  0/imm32/null
     74/jump-if-=  $kernel-string-equal?:false/disp8
     # if (c1 != c2) return false
     39/compare                      3/mod/direct    0/rm32/eax    .           .             .           3/r32/ebx   .               .                 # compare eax and ebx
@@ -94,7 +94,7 @@ $kernel-string-equal?:loop:
 $kernel-string-equal?:break:
     # return *s1 == 0
     8a/copy-byte                    0/mod/indirect  7/rm32/edi    .           .             .           0/r32/AL    .               .                 # copy byte at *edi to AL
-    3d/compare-eax-and  0/imm32
+    3d/compare-eax-and  0/imm32/null
     75/jump-if-!=  $kernel-string-equal?:false/disp8
 $kernel-string-equal?:true:
     b8/copy-to-eax  1/imm32
diff --git a/apps/ex8.subx b/apps/ex8.subx
index 45e49937..868aa743 100644
--- a/apps/ex8.subx
+++ b/apps/ex8.subx
@@ -43,7 +43,7 @@ $ascii-length:loop:
     # var c/ecx = *s
     8a/copy-byte                    0/mod/*         2/rm32/edx    .           .             .           1/r32/CL    .               .                 # copy byte at *edx to CL
     # if (c == '\0') break
-    81          7/subop/compare     3/mod/direct    1/rm32/ecx    .           .             .           .           .               0/imm32           # compare ecx
+    81          7/subop/compare     3/mod/direct    1/rm32/ecx    .           .             .           .           .               0/imm32/null      # compare ecx
     74/jump-if-=  $ascii-length:end/disp8
     # ++s
     42/increment-edx
diff --git a/apps/hex.subx b/apps/hex.subx
index 11107aef..84c6bda6 100644
--- a/apps/hex.subx
+++ b/apps/hex.subx
@@ -517,7 +517,7 @@ $scan-next-byte:loop:
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
     # . compare with 'false'
-    3d/compare-with-eax  0/imm32
+    3d/compare-with-eax  0/imm32/false
     # . restore eax (does not affect flags)
     58/pop-to-eax
     # . check whether to return
@@ -534,7 +534,7 @@ $scan-next-byte:check1:
     74/jump-if-=  $scan-next-byte:loop/disp8
 $scan-next-byte:check2:
     # if (eax == '#') skip-until-newline(in)
-    3d/compare-with-eax  0x23/imm32
+    3d/compare-with-eax  0x23/imm32/hash
     75/jump-if-!=  $scan-next-byte:check3/disp8
     # . skip-until-newline(in)
     # . . push args
diff --git a/apps/mu.subx b/apps/mu.subx
index c87fd16d..6690ecd4 100644
--- a/apps/mu.subx
+++ b/apps/mu.subx
@@ -366,7 +366,7 @@ Entry:
       7e/jump-if-<= break/disp8
       # if (argv[1] != "test") break
       (kernel-string-equal? *(ebp+8) "test")  # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       74/jump-if-= break/disp8
       #
       (run-tests)
@@ -1602,7 +1602,7 @@ $parse-mu:line-loop:
       (next-mu-token %ecx %edx)
       # if slice-empty?(word-slice) continue
       (slice-empty? %edx)
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= loop/disp32
       # if (*word-slice->start == "#") continue
       # . eax = *word-slice->start
@@ -1616,7 +1616,7 @@ $parse-mu:line-loop:
       {
 $parse-mu:fn:
         (slice-equal? %edx "fn")
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         0f 84/jump-if-= break/disp32
         # var new-function/eax: (handle function) = populate-mu-function(in, new-function, vars)
         (allocate Heap *Function-size)  # => eax
@@ -1737,15 +1737,15 @@ populate-mu-function-header:  # first-line: (addr stream byte), out: (handle fun
     # TODO: error if name starts with 'break' or 'loop'
     # if (word-slice == '{') abort
     (slice-equal? %ecx "{")   # => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
     # if (word-slice == '->') abort
     (slice-equal? %ecx "->")   # => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
     # if (word-slice == '}') abort
     (slice-equal? %ecx "}")   # => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
     # save function name
     (slice-to-string Heap %ecx)  # => eax
@@ -1758,15 +1758,15 @@ $populate-mu-function-header:check-for-inout:
       (next-mu-token *(ebp+8) %ecx)
       # if (word-slice == '{') goto done
       (slice-equal? %ecx "{")   # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= $populate-mu-function-header:done/disp32
       # if (word-slice == '->') break
       (slice-equal? %ecx "->")   # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= break/disp32
       # if (word-slice == '}') abort
       (slice-equal? %ecx "}")   # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
       # var v/ebx: (handle var) = parse-var-with-type(word-slice, first-line)
       (parse-var-with-type %ecx *(ebp+8))  # => eax
@@ -1793,15 +1793,15 @@ $populate-mu-function-header:check-for-out:
       (next-mu-token *(ebp+8) %ecx)
       # if (word-slice == '{') break
       (slice-equal? %ecx "{")   # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= break/disp32
       # if (word-slice == '->') abort
       (slice-equal? %ecx "->")   # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
       # if (word-slice == '}') abort
       (slice-equal? %ecx "}")   # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
       #
       (parse-var-with-type %ecx *(ebp+8))  # => eax
@@ -2164,23 +2164,23 @@ parse-type:  # ad: (address allocation-descriptor), in: (addr stream byte) -> re
 #?     (flush Stderr)
     # assert s != ""
     (slice-equal? %ecx "")
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 85/jump-if-!= $parse-type:abort/disp32
     # assert s != "{"
     (slice-equal? %ecx "{")
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 85/jump-if-!= $parse-type:abort/disp32
     # assert s != "}"
     (slice-equal? %ecx "}")
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 85/jump-if-!= $parse-type:abort/disp32
     # assert s != "->"
     (slice-equal? %ecx "->")
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 85/jump-if-!= $parse-type:abort/disp32
     # if (s == ")") return 0
     (slice-equal? %ecx ")")
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     b8/copy-to-eax 0/imm32
     0f 85/jump-if-!= $parse-type:end/disp32
     # var result/edx: (handle tree type-id)
@@ -2190,7 +2190,7 @@ parse-type:  # ad: (address allocation-descriptor), in: (addr stream byte) -> re
     {
       # if (s != "(") break
       (slice-equal? %ecx "(")
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       75/jump-if-!= break/disp8
       # result->left = pos-slice(Type-id, s)
       (pos-slice Type-id %ecx)
@@ -2487,7 +2487,7 @@ pos-slice:  # arr: (addr stream (handle array byte)), s: (addr slice) -> index/e
       73/jump-if-addr>= $pos-slice:end/disp8
       # if (slice-equal?(s, *curr)) break
       (slice-equal? *(ebp+0xc) *edx)  # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       75/jump-if-!= break/disp8
       # ++index
       41/increment-ecx
@@ -2703,7 +2703,7 @@ is-identifier?:  # in: (addr slice) -> result/eax: boolean
     89/<- %ebp 4/r32/esp
     # if (slice-empty?(in)) return false
     (slice-empty? *(ebp+8))  # => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     75/jump-if-!= $is-identifier?:false/disp8
     # var c/eax: byte = *in->start
     8b/-> *(ebp+8) 0/r32/eax
@@ -3125,7 +3125,7 @@ $parse-mu-block:line-loop:
 #?       (flush Stderr)
       # if slice-empty?(word-slice) continue
       (slice-empty? %edx)
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= loop/disp32
       # if (slice-starts-with?(word-slice, '#') continue
       # . eax = *word-slice->start
@@ -3139,7 +3139,7 @@ $parse-mu-block:line-loop:
       {
 $parse-mu-block:check-for-block:
         (slice-equal? %edx "{")
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         74/jump-if-= break/disp8
         (check-no-tokens-left %ecx)
         # parse new block and append
@@ -3150,7 +3150,7 @@ $parse-mu-block:check-for-block:
       # if slice-equal?(word-slice, "}") break
 $parse-mu-block:check-for-end:
       (slice-equal? %edx "}")
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= break/disp32
       # if slice-ends-with?(word-slice, ":") parse named block and append
       {
@@ -3176,7 +3176,7 @@ $parse-mu-block:check-for-named-block:
       {
 $parse-mu-block:check-for-var:
         (slice-equal? %edx "var")
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         74/jump-if-= break/disp8
         #
         (parse-mu-var-def %ecx *(ebp+0xc))  # => eax
@@ -3298,7 +3298,7 @@ check-no-tokens-left:  # line: (addr stream byte)
     (next-mu-token *(ebp+8) %ecx)
     # if slice-empty?(s) return
     (slice-empty? %ecx)
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     75/jump-if-!= $check-no-tokens-left:end/disp8
     # if (slice-starts-with?(s, '#') return
     # . eax = *s->start
@@ -3416,7 +3416,7 @@ parse-mu-var-def:  # line: (addr stream byte), vars: (addr stack (handle var)) -
       # ensure that the next word is '<-'
       (next-mu-token *(ebp+8) %ecx)
       (slice-equal? %ecx "<-")  # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       74/jump-if-= $parse-mu-var-def:abort/disp8
       #
       (new-regvardef Heap %edx)  # => eax
@@ -3544,7 +3544,7 @@ parse-mu-stmt:  # line: (addr stream byte), vars: (addr stack (handle var)), fn:
     c7 0/subop/copy *edi 1/imm32/stmt1  # Stmt-tag
     {
       (stmt-has-outputs? *(ebp+8))
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 84/jump-if-= break/disp32
       {
 $parse-mu-stmt:read-outputs:
@@ -3552,15 +3552,15 @@ $parse-mu-stmt:read-outputs:
         (next-mu-token *(ebp+8) %ecx)
         # if slice-empty?(word-slice) break
         (slice-empty? %ecx)
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         0f 85/jump-if-!= break/disp32
         # if (name == "<-") break
         (slice-equal? %ecx "<-")
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         75/jump-if-!= break/disp8
         # assert(is-identifier?(name))
         (is-identifier? %ecx)
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         0f 84/jump-if-= $parse-mu-stmt:abort/disp32
         #
         (lookup-or-define-var %ecx *(ebp+0xc) *(ebp+0x10))  # => eax
@@ -3626,11 +3626,11 @@ $add-operation-and-inputs-to-stmt:read-inouts:
       (next-mu-token *(ebp+0xc) %ecx)
       # if slice-empty?(word-slice) break
       (slice-empty? %ecx)  # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= break/disp32
       # if (name == "<-") abort
       (slice-equal? %ecx "<-")
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= $add-operation-and-inputs-to-stmt:abort/disp32
       #
       (lookup-var-or-literal %ecx *(ebp+0x10))  # => eax
@@ -3681,7 +3681,7 @@ stmt-has-outputs?:  # line: (addr stream byte) -> result/eax: boolean
       (next-mu-token *(ebp+8) %ecx)
       # if slice-empty?(word-slice) break
       (slice-empty? %ecx)
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       b8/copy-to-eax 0/imm32/false/result  # restore result (if we're here it's still false)
       0f 85/jump-if-!= break/disp32
       # if slice-starts-with?(word-slice, '#') break
@@ -3695,7 +3695,7 @@ stmt-has-outputs?:  # line: (addr stream byte) -> result/eax: boolean
       0f 84/jump-if-= break/disp32
       # if slice-equal?(word-slice, '<-') return true
       (slice-equal? %ecx "<-")
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       74/jump-if-= loop/disp8
       b8/copy-to-eax 1/imm32/true
     }
@@ -3723,7 +3723,7 @@ lookup-var-or-literal:  # name: (addr slice), vars: (addr stack (handle var)) ->
     8b/-> *(ebp+8) 6/r32/esi
     # if slice-empty?(name) abort
     (slice-empty? %esi)  # => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 85/jump-if-!= $lookup-var-or-literal:abort/disp32
     # var c/ecx: byte = *name->start
     8b/-> *esi 1/r32/ecx
@@ -3732,7 +3732,7 @@ lookup-var-or-literal:  # name: (addr slice), vars: (addr stack (handle var)) ->
     # if is-decimal-digit?(c) return new var(name)
     {
       (is-decimal-digit? %ecx)  # => eax
-      81 7/subop/compare %eax 0/imm32
+      81 7/subop/compare %eax 0/imm32/false
       74/jump-if-= break/disp8
       (new-literal-integer Heap %esi)  # => eax
       eb/jump $lookup-var-or-literal:end/disp8
@@ -3834,7 +3834,7 @@ lookup-var-helper:  # name: (addr array byte), vars: (addr stack (handle var)) -
       8b/-> *ebx 0/r32/eax
       # if (v->name == name) return v
       (string-equal? *eax *(ebp+8))  # Var-name
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       8b/-> *ebx 0/r32/eax
       75/jump-if-!= break/disp8
       # curr -= 4
@@ -3912,7 +3912,7 @@ find-in-function-outputs:  # fn: (handle function), name: (handle array byte) =>
       # if (curr->name == name) return curr
       50/push-eax
       (string-equal? *eax *(ebp+0xc))
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       58/pop-to-eax
       75/jump-if-!= $find-in-function-outputs:end/disp8
       # curr = curr->next
@@ -4062,7 +4062,7 @@ new-literal-integer:  # ad: (addr allocation-descriptor), name: (addr slice) ->
     51/push-ecx
     # if (!is-hex-int?(name)) abort
     (is-hex-int? *(ebp+0xc))  # => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     0f 84/jump-if-= $new-literal-integer:abort/disp32
     # var s/ecx: (addr array byte)
     (slice-to-string Heap *(ebp+0xc))  # => eax
@@ -4466,7 +4466,7 @@ $emit-subx-stmt-list:check-for-stmt:
 $emit-subx-stmt-list:stmt1:
         {
           (is-mu-branch? %ecx)  # => eax
-          3d/compare-eax-and 0/imm32
+          3d/compare-eax-and 0/imm32/false
           0f 84/jump-if-= break/disp32
 $emit-subx-stmt-list:branch-stmt:
           # if !var-seen? break
@@ -4477,7 +4477,7 @@ $emit-subx-stmt-list:branch-stmt-and-var-seen:
           {
             # if (!string-equal?(var->operation, "loop")) break
             (string-equal? *(ecx+4) "loop")  # Stmt1-operation => eax
-            3d/compare-eax-and 0/imm32
+            3d/compare-eax-and 0/imm32/false
             0f 84/jump-if-= break/disp32
             81 7/subop/compare *(ecx+8) 0/imm32  # Stmt1-inouts
             # simple unconditional loops without a target {{{
@@ -4519,12 +4519,12 @@ $emit-subx-stmt-list:zero-arg-branch:
             4b/decrement-ebx
             # emit jump to target block
             (string-starts-with? *(ecx+4) "break")
-            3d/compare-eax-and 0/imm32
+            3d/compare-eax-and 0/imm32/false
             {
               74/jump-if-= break/disp8
               (emit-unconditional-jump-to-depth *(ebp+8) *(ebp+0x10) %ebx "break")
             }
-            3d/compare-eax-and 0/imm32  # just in case the function call modified flags
+            3d/compare-eax-and 0/imm32/false  # just in case the function call modified flags
             {
               75/jump-if-!= break/disp8
               (emit-unconditional-jump-to-depth *(ebp+8) *(ebp+0x10) %ebx "loop")
@@ -4558,12 +4558,12 @@ $emit-subx-stmt-list:branch-with-target:
             (write-buffered *(ebp+8) "e9/jump ")
             (write-buffered *(ebp+8) %ebx)
             (string-starts-with? *(ecx+4) "break")
-            3d/compare-eax-and 0/imm32
+            3d/compare-eax-and 0/imm32/false
             {
               74/jump-if-= break/disp8
               (write-buffered *(ebp+8) ":break/disp32\n")
             }
-            3d/compare-eax-and 0/imm32  # just in case the function call modified flags
+            3d/compare-eax-and 0/imm32/false  # just in case the function call modified flags
             {
               75/jump-if-!= break/disp8
               (write-buffered *(ebp+8) ":loop/disp32\n")
@@ -4657,7 +4657,7 @@ is-mu-branch?:  # stmt: (addr stmt1) -> result/eax: boolean
     8b/-> *(ebp+8) 1/r32/ecx
     # if (stmt->operation starts with "loop") return true
     (string-starts-with? *(ecx+4) "loop")  # Stmt1-operation => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     75/jump-if-not-equal $is-mu-branch?:end/disp8
     # otherwise return (stmt->operation starts with "break")
     (string-starts-with? *(ecx+4) "break")  # Stmt1-operation => eax
@@ -4894,7 +4894,7 @@ $emit-cleanup-code-until-target:loop:
       8b/-> *edx 3/r32/ebx
       # if (v->name == until-block-label) break
       (string-equal? *ebx *(ebp+0x10))  # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       0f 85/jump-if-!= break/disp32
       # if v is in a register
       81 7/subop/compare *(ebx+0x10) 0/imm32  # Var-register
@@ -6629,14 +6629,14 @@ emit-subx-disp32:  # out: (addr buffered-file), l: arg-location, stmt: (handle s
     8b/-> *(eax+4) 1/r32/ecx
     {
       (string-starts-with? %ecx "break")  # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       74/jump-if-= break/disp8
       (write-buffered *(ebp+8) ":break")
     }
     # hack: if instruction operation starts with "loop", emit ":loop"
     {
       (string-starts-with? %ecx "loop")  # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       74/jump-if-= break/disp8
       (write-buffered *(ebp+8) ":loop")
     }
@@ -6823,7 +6823,7 @@ find-matching-function:  # functions: (addr function), stmt: (handle statement)
       # if match(stmt, curr) return curr
       {
         (mu-stmt-matches-function? *(ebp+0xc) %ecx)  # => eax
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         74/jump-if-= break/disp8
         89/<- %eax 1/r32/ecx
         eb/jump $find-matching-function:end/disp8
@@ -6864,7 +6864,7 @@ $find-matching-primitive:loop:
       # if match(curr, stmt) return curr
       {
         (mu-stmt-matches-primitive? *(ebp+0xc) %ecx)  # => eax
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         74/jump-if-= break/disp8
         89/<- %eax 1/r32/ecx
         eb/jump $find-matching-primitive:end/disp8
@@ -6925,7 +6925,7 @@ mu-stmt-matches-primitive?:  # stmt: (handle statement), primitive: (handle prim
 $mu-stmt-matches-primitive?:check-name:
       # if (primitive->name != stmt->operation) return false
       (string-equal? *(ecx+4) *edx)  # Stmt1-operation, Primitive-name => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       75/jump-if-!= break/disp8
       b8/copy-to-eax 0/imm32
       e9/jump $mu-stmt-matches-primitive?:end/disp32
@@ -6961,7 +6961,7 @@ $mu-stmt-matches-primitive?:prim-inout-is-null:
       # if (curr != curr2) return false
       {
         (operand-matches-primitive? *esi *edi)  # => eax
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         75/jump-if-!= break/disp8
         b8/copy-to-eax 0/imm32/false
         e9/jump $mu-stmt-matches-primitive?:end/disp32
@@ -7003,7 +7003,7 @@ $mu-stmt-matches-primitive?:check-output:
       # if (curr != curr2) return false
       {
         (operand-matches-primitive? *esi *edi)  # List-value List-value => eax
-        3d/compare-eax-and 0/imm32
+        3d/compare-eax-and 0/imm32/false
         75/jump-if-!= break/disp8
         b8/copy-to-eax 0/imm32
         e9/jump $mu-stmt-matches-primitive?:end/disp32
@@ -7041,7 +7041,7 @@ operand-matches-primitive?:  # var: (handle var), prim-var: (handle var) => resu
     8b/-> *(ebp+0xc) 7/r32/edi
     # if (var->type != prim-var->type) return false
     (type-equal? *(esi+4) *(edi+4))  # Var-type, Var-type => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     b8/copy-to-eax 0/imm32/false
     74/jump-if-= $operand-matches-primitive?:end/disp8
     # return false if var->register doesn't match prim-var->register
@@ -7057,12 +7057,12 @@ operand-matches-primitive?:  # var: (handle var), prim-var: (handle var) => resu
       74/jump-if-=  $operand-matches-primitive?:end/disp8  # eax goes from meaning var->register to result
       # if prim-var->register is "*", return true
       (string-equal? *(edi+0x10) "*")  # Var-register
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       b8/copy-to-eax 1/imm32/true
       75/jump-if-!= $operand-matches-primitive?:end/disp8
       # if string contents don't match, return false
       (string-equal? *(esi+0x10) *(edi+0x10))  # Var-register Var-register
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       b8/copy-to-eax 0/imm32/false
       74/jump-if-= $operand-matches-primitive?:end/disp8
     }
@@ -7103,7 +7103,7 @@ type-equal?:  # a: (handle tree type-id), b: (handle tree type-id) => result/eax
     72/jump-if-addr< $type-equal?:end/disp8
     # if (!type-equal?(a->left, b->left)) return false
     (type-equal? *ecx *edx)  # Tree-left, Tree-left => eax
-    3d/compare-eax-and 0/imm32
+    3d/compare-eax-and 0/imm32/false
     74/jump-if-= $type-equal?:end/disp8
     # return type-equal?(a->right, b->right)
     (type-equal? *(ecx+4) *(edx+4))  # Tree-right, Tree-right => eax
diff --git a/apps/mulisp.subx b/apps/mulisp.subx
index c2834021..3c85ad52 100644
--- a/apps/mulisp.subx
+++ b/apps/mulisp.subx
@@ -21,7 +21,7 @@ Entry:  # run tests if necessary, a REPL if not
       7e/jump-if-<= break/disp8
       # if (argv[1] != "test")) break
       (kernel-string-equal? *(ebp+8) "test")  # => eax
-      3d/compare-eax-and 0/imm32
+      3d/compare-eax-and 0/imm32/false
       74/jump-if-= break/disp8
       #
       (run-tests)
diff --git a/apps/survey.subx b/apps/survey.subx
index d996ba96..488b066f 100644
--- a/apps/survey.subx
+++ b/apps/survey.subx
@@ -2118,7 +2118,7 @@ $emit-segments:check-for-end-of-line:
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               4/imm32           # add to esp
     # . if (eax != 0) break
-    3d/compare-eax-and  0/imm32
+    3d/compare-eax-and  0/imm32/false
     0f 85/jump-if-!=  $emit-segments:next-line/disp32
 $emit-segments:check-for-comment:
     # if (slice-starts-with?(word-slice, "#")) break
@@ -2340,7 +2340,7 @@ $emit-segments:check-code-label-for-imm32:
     # . . discard args
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
     # . if (eax == false) goto next check
-    3d/compare-eax-and  0/imm32
+    3d/compare-eax-and  0/imm32/false
     74/jump-if-=  $emit-segments:check-code-label-for-disp8/disp8
 #?     # dump info->address {{{
 #?     # . write(2/stderr, "info->address: ")