ARM: Reorder type/value tests to silence Valgrind.

This commit is contained in:
Mike Pall 2012-04-26 23:31:10 +02:00
parent 5439631460
commit 904cc1facb
3 changed files with 16 additions and 17 deletions

View File

@ -935,8 +935,8 @@ static void build_subroutines(BuildCtx *ctx)
| ldrd CARG34, NODE:INS->key // STALL: early NODE:INS. | ldrd CARG34, NODE:INS->key // STALL: early NODE:INS.
| ldrd CARG12, NODE:INS->val | ldrd CARG12, NODE:INS->val
| ldr NODE:INS, NODE:INS->next | ldr NODE:INS, NODE:INS->next
| cmp CARG3, STR:RC | checktp CARG4, LJ_TSTR
| checktpeq CARG4, LJ_TSTR | cmpeq CARG3, STR:RC
| beq >5 | beq >5
| cmp NODE:INS, #0 | cmp NODE:INS, #0
| bne <3 | 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 CARG12, NODE:INS->key // STALL: early NODE:INS.
| ldrd CARG34, NODE:INS->val | ldrd CARG34, NODE:INS->val
| ldr NODE:INS, NODE:INS->next | ldr NODE:INS, NODE:INS->next
| cmp CARG1, STR:RC | checktp CARG2, LJ_TSTR
| checktpeq CARG2, LJ_TSTR | cmpeq CARG1, STR:RC
| bne >4 | bne >4
| checktp CARG4, LJ_TNIL | checktp CARG4, LJ_TNIL
| beq >5 | beq >5
@ -3242,8 +3242,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| ldrd CARG12, NODE:INS->key | ldrd CARG12, NODE:INS->key
| ldr CARG4, NODE:INS->val.it | ldr CARG4, NODE:INS->val.it
| ldr NODE:CARG3, NODE:INS->next | ldr NODE:CARG3, NODE:INS->next
| cmp CARG1, STR:RC | checktp CARG2, LJ_TSTR
| checktpeq CARG2, LJ_TSTR | cmpeq CARG1, STR:RC
| bne >5 | bne >5
| ldrb CARG2, TAB:RB->marked | ldrb CARG2, TAB:RB->marked
| checktp CARG4, LJ_TNIL // Key found, but nil value? | checktp CARG4, LJ_TNIL // Key found, but nil value?

View File

@ -796,9 +796,9 @@ static const unsigned int build_actionlist[5777] = {
0x000c8100, 0x000c8100,
0xe51ee000, 0xe51ee000,
0x000d8180, 0x000d8180,
0xe152000b, 0xe3730000,
0x03730000,
0x000a0000, 0x000a0000,
0x0152000b,
0x0a000000, 0x0a000000,
0x00050005, 0x00050005,
0xe35e0000, 0xe35e0000,
@ -4613,9 +4613,9 @@ static const unsigned int build_actionlist[5777] = {
0x000c8100, 0x000c8100,
0xe51ee000, 0xe51ee000,
0x000d8180, 0x000d8180,
0xe150000b, 0xe3710000,
0x03710000,
0x000a0000, 0x000a0000,
0x0150000b,
0x1a000000, 0x1a000000,
0x00050004, 0x00050004,
0xe3730000, 0xe3730000,
@ -4807,9 +4807,9 @@ static const unsigned int build_actionlist[5777] = {
0x000d8180, 0x000d8180,
0xe51e2000, 0xe51e2000,
0x000d8180, 0x000d8180,
0xe150000b, 0xe3710000,
0x03710000,
0x000a0000, 0x000a0000,
0x0150000b,
0x1a000000, 0x1a000000,
0x00050005, 0x00050005,
0xe55c1000, 0xe55c1000,

View File

@ -584,8 +584,8 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
else else
emit_branch(as, ARMF_CC(ARMI_B, CC_EQ), l_end); emit_branch(as, ARMF_CC(ARMI_B, CC_EQ), l_end);
if (!irt_ispri(kt)) { if (!irt_ispri(kt)) {
emit_nm(as, ARMF_CC(ARMI_CMP, CC_EQ)^khi, tmp+1, keyhi); emit_nm(as, ARMF_CC(ARMI_CMP, CC_EQ)^k, tmp, key);
emit_nm(as, ARMI_CMP^k, tmp, key); emit_nm(as, ARMI_CMP^khi, tmp+1, keyhi);
emit_lsox(as, ARMI_LDRD, tmp, dest, (int32_t)offsetof(Node, key)); emit_lsox(as, ARMI_LDRD, tmp, dest, (int32_t)offsetof(Node, key));
} else { } else {
emit_n(as, ARMI_CMP^khi, tmp); 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); (int32_t)ir_knum(irkey)->u32.hi, allow);
emit_opk(as, ARMI_CMP, 0, key, emit_opk(as, ARMI_CMP, 0, key,
(int32_t)ir_knum(irkey)->u32.lo, allow); (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 { } 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_n(as, ARMI_CMN|ARMI_K12|-irt_toitype(irkey->t), type);
} }
emit_lso(as, ARMI_LDR, type, idx, kofs+4); emit_lso(as, ARMI_LDR, type, idx, kofs+4);