]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
ARM: Reorder type/value tests to silence Valgrind.
authorMike Pall <mike>
Thu, 26 Apr 2012 21:31:10 +0000 (23:31 +0200)
committerMike Pall <mike>
Thu, 26 Apr 2012 21:33:20 +0000 (23:33 +0200)
src/buildvm_arm.dasc
src/buildvm_arm.h
src/lj_asm_arm.h

index 2e0914a11869b0345fc3c6bc8a84f367a5c2cfd4..dd4b7c8931f80bf8bb5a952e5b46f609ab9eba6e 100644 (file)
@@ -935,8 +935,8 @@ static void build_subroutines(BuildCtx *ctx)
   |  ldrd CARG34, NODE:INS->key  // STALL: early NODE:INS.
   |   ldrd CARG12, NODE:INS->val
   |    ldr NODE:INS, NODE:INS->next
-  |  cmp CARG3, STR:RC
-  |  checktpeq CARG4, LJ_TSTR
+  |  checktp CARG4, LJ_TSTR
+  |  cmpeq CARG3, STR:RC
   |  beq >5
   |  cmp NODE:INS, #0
   |  bne <3
@@ -3111,8 +3111,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  ldrd CARG12, NODE:INS->key  // STALL: early NODE:INS.
     |   ldrd CARG34, NODE:INS->val
     |    ldr NODE:INS, NODE:INS->next
-    |  cmp CARG1, STR:RC
-    |  checktpeq CARG2, LJ_TSTR
+    |  checktp CARG2, LJ_TSTR
+    |  cmpeq CARG1, STR:RC
     |  bne >4
     |   checktp CARG4, LJ_TNIL
     |   beq >5
@@ -3242,8 +3242,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  ldrd CARG12, NODE:INS->key
     |   ldr CARG4, NODE:INS->val.it
     |    ldr NODE:CARG3, NODE:INS->next
-    |  cmp CARG1, STR:RC
-    |  checktpeq CARG2, LJ_TSTR
+    |  checktp CARG2, LJ_TSTR
+    |  cmpeq CARG1, STR:RC
     |  bne >5
     |  ldrb CARG2, TAB:RB->marked
     |   checktp CARG4, LJ_TNIL         // Key found, but nil value?
index 2c97cee0ec52551d7f93d3e9d5f0a2aeea3d254a..812291810a1890b69a91c798f9c4fe32df80ab4f 100644 (file)
@@ -796,9 +796,9 @@ static const unsigned int build_actionlist[5777] = {
 0x000c8100,
 0xe51ee000,
 0x000d8180,
-0xe152000b,
-0x03730000,
+0xe3730000,
 0x000a0000,
+0x0152000b,
 0x0a000000,
 0x00050005,
 0xe35e0000,
@@ -4613,9 +4613,9 @@ static const unsigned int build_actionlist[5777] = {
 0x000c8100,
 0xe51ee000,
 0x000d8180,
-0xe150000b,
-0x03710000,
+0xe3710000,
 0x000a0000,
+0x0150000b,
 0x1a000000,
 0x00050004,
 0xe3730000,
@@ -4807,9 +4807,9 @@ static const unsigned int build_actionlist[5777] = {
 0x000d8180,
 0xe51e2000,
 0x000d8180,
-0xe150000b,
-0x03710000,
+0xe3710000,
 0x000a0000,
+0x0150000b,
 0x1a000000,
 0x00050005,
 0xe55c1000,
index a618c8a91ec6e739dd48fb755aaeab4289a9fed8..77751ca9ffa9d80ae9688c0a9732cac2c88caaf1 100644 (file)
@@ -584,8 +584,8 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
   else
     emit_branch(as, ARMF_CC(ARMI_B, CC_EQ), l_end);
   if (!irt_ispri(kt)) {
-    emit_nm(as, ARMF_CC(ARMI_CMP, CC_EQ)^khi, tmp+1, keyhi);
-    emit_nm(as, ARMI_CMP^k, tmp, key);
+    emit_nm(as, ARMF_CC(ARMI_CMP, CC_EQ)^k, tmp, key);
+    emit_nm(as, ARMI_CMP^khi, tmp+1, keyhi);
     emit_lsox(as, ARMI_LDRD, tmp, dest, (int32_t)offsetof(Node, key));
   } else {
     emit_n(as, ARMI_CMP^khi, tmp);
@@ -674,10 +674,9 @@ static void asm_hrefk(ASMState *as, IRIns *ir)
             (int32_t)ir_knum(irkey)->u32.hi, allow);
     emit_opk(as, ARMI_CMP, 0, key,
             (int32_t)ir_knum(irkey)->u32.lo, allow);
-  } else if (ra_hasreg(key)) {
-    emit_n(as, ARMF_CC(ARMI_CMN, CC_EQ)|ARMI_K12|-irt_toitype(irkey->t), type);
-    emit_opk(as, ARMI_CMP, 0, key, irkey->i, allow);
   } else {
+    if (ra_hasreg(key))
+      emit_opk(as, ARMF_CC(ARMI_CMP, CC_EQ), 0, key, irkey->i, allow);
     emit_n(as, ARMI_CMN|ARMI_K12|-irt_toitype(irkey->t), type);
   }
   emit_lso(as, ARMI_LDR, type, idx, kofs+4);