diff options
author | Mike Pall <mike> | 2011-05-22 17:01:06 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-05-22 17:13:16 +0200 |
commit | d0115c65f5ad80af2a113332906a0c5a010f9812 (patch) | |
tree | 9e20cc7c40cc6ac82bfc1cd0a6267bfce5394a60 /src/lj_asm_x86.h | |
parent | 919ba5fd745ef67357ae55568dd6a53d40eed160 (diff) | |
download | luajit-d0115c65f5ad80af2a113332906a0c5a010f9812.tar.gz luajit-d0115c65f5ad80af2a113332906a0c5a010f9812.tar.bz2 luajit-d0115c65f5ad80af2a113332906a0c5a010f9812.zip |
More portability cleanups for assembler backend.
Diffstat (limited to '')
-rw-r--r-- | src/lj_asm_x86.h | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index fb46b3ad..dfc853dd 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h | |||
@@ -2191,9 +2191,10 @@ static void asm_hiop(ASMState *as, IRIns *ir) | |||
2191 | 2191 | ||
2192 | /* Check Lua stack size for overflow. Use exit handler as fallback. */ | 2192 | /* Check Lua stack size for overflow. Use exit handler as fallback. */ |
2193 | static void asm_stack_check(ASMState *as, BCReg topslot, | 2193 | static void asm_stack_check(ASMState *as, BCReg topslot, |
2194 | Reg pbase, RegSet allow, ExitNo exitno) | 2194 | IRIns *irp, RegSet allow, ExitNo exitno) |
2195 | { | 2195 | { |
2196 | /* Try to get an unused temp. register, otherwise spill/restore eax. */ | 2196 | /* Try to get an unused temp. register, otherwise spill/restore eax. */ |
2197 | Reg pbase = irp ? irp->r : RID_BASE; | ||
2197 | Reg r = allow ? rset_pickbot(allow) : RID_EAX; | 2198 | Reg r = allow ? rset_pickbot(allow) : RID_EAX; |
2198 | emit_jcc(as, CC_B, exitstub_addr(as->J, exitno)); | 2199 | emit_jcc(as, CC_B, exitstub_addr(as->J, exitno)); |
2199 | if (allow == RSET_EMPTY) /* Restore temp. register. */ | 2200 | if (allow == RSET_EMPTY) /* Restore temp. register. */ |
@@ -2344,7 +2345,7 @@ static void asm_head_root_base(ASMState *as) | |||
2344 | } | 2345 | } |
2345 | 2346 | ||
2346 | /* Coalesce or reload BASE register for a side trace. */ | 2347 | /* Coalesce or reload BASE register for a side trace. */ |
2347 | static RegSet asm_head_side_base(ASMState *as, Reg pbase, RegSet allow) | 2348 | static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) |
2348 | { | 2349 | { |
2349 | IRIns *ir = IR(REF_BASE); | 2350 | IRIns *ir = IR(REF_BASE); |
2350 | Reg r = ir->r; | 2351 | Reg r = ir->r; |
@@ -2352,11 +2353,11 @@ static RegSet asm_head_side_base(ASMState *as, Reg pbase, RegSet allow) | |||
2352 | ra_free(as, r); | 2353 | ra_free(as, r); |
2353 | if (rset_test(as->modset, r)) | 2354 | if (rset_test(as->modset, r)) |
2354 | ir->r = RID_INIT; /* No inheritance for modified BASE register. */ | 2355 | ir->r = RID_INIT; /* No inheritance for modified BASE register. */ |
2355 | if (pbase == r) { | 2356 | if (irp->r == r) { |
2356 | rset_clear(allow, r); /* Mark same BASE register as coalesced. */ | 2357 | rset_clear(allow, r); /* Mark same BASE register as coalesced. */ |
2357 | } else if (ra_hasreg(pbase) && rset_test(as->freeset, pbase)) { | 2358 | } else if (ra_hasreg(irp->r) && rset_test(as->freeset, irp->r)) { |
2358 | rset_clear(allow, pbase); | 2359 | rset_clear(allow, irp->r); |
2359 | emit_rr(as, XO_MOV, r, pbase); /* Move from coalesced parent register. */ | 2360 | emit_rr(as, XO_MOV, r, irp->r); /* Move from coalesced parent reg. */ |
2360 | } else { | 2361 | } else { |
2361 | emit_getgl(as, r, jit_base); /* Otherwise reload BASE. */ | 2362 | emit_getgl(as, r, jit_base); /* Otherwise reload BASE. */ |
2362 | } | 2363 | } |