about summary refs log tree commit diff stats
path: root/apps/mu.subx
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-02-20 11:54:19 -0800
committerKartik Agaram <vc@akkartik.com>2020-02-20 11:54:19 -0800
commit5d1d61012dc1449feb8928bbf516532afe1c4965 (patch)
treef09185ac77013c7dbffc6e0faa23eafa53197fd1 /apps/mu.subx
parent227c1eaf57331d89dad84dbadd02f0bf27253f48 (diff)
downloadmu-5d1d61012dc1449feb8928bbf516532afe1c4965.tar.gz
6030
Diffstat (limited to 'apps/mu.subx')
-rw-r--r--apps/mu.subx20
1 files changed, 9 insertions, 11 deletions
diff --git a/apps/mu.subx b/apps/mu.subx
index 811be37c..30b9db93 100644
--- a/apps/mu.subx
+++ b/apps/mu.subx
@@ -7411,24 +7411,22 @@ operand-matches-primitive?:  # var: (handle var), prim-var: (handle var) -> resu
     74/jump-if-= $operand-matches-primitive?:end/disp8
     # return false if var->register doesn't match prim-var->register
     {
-      # if addresses are equal, don't return here
-      8b/-> *(esi+0x10) 0/r32/eax
-      39/compare *(edi+0x10) 0/r32/eax
+      # if register addresses are equal, it's a match
+      8b/-> *(esi+0x10) 0/r32/eax  # Var-register
+      39/compare *(edi+0x10) 0/r32/eax  # Var-register
       74/jump-if-= break/disp8
       # if either address is 0, return false
       3d/compare-eax-and 0/imm32
       74/jump-if-=  $operand-matches-primitive?:end/disp8  # eax goes from meaning var->register to result
-      81 7/subop/compare *(edi+0x10) 0/imm32
+      81 7/subop/compare *(edi+0x10) 0/imm32  # Var-register
       74/jump-if-=  $operand-matches-primitive?:end/disp8  # eax goes from meaning var->register to result
-      # if prim-var->register is wildcard, return true
-      (string-equal? *(edi+0x10) Any-register)  # Var-register
+      # if prim-var->register is wildcard, it's a match
+      (string-equal? *(edi+0x10) Any-register)  # Var-register => eax
       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
+      75/jump-if-!= break/disp8
+      # if string contents aren't equal, return false
+      (string-equal? *(esi+0x10) *(edi+0x10))  # Var-register Var-register => eax
       3d/compare-eax-and 0/imm32/false
-      b8/copy-to-eax 0/imm32/false
       74/jump-if-= $operand-matches-primitive?:end/disp8
     }
     # return true