Bug 473880 - TM: Add a way to keep stack values alive without emitting guard code. r=gal.

This commit is contained in:
David Anderson 2009-01-23 15:21:55 -06:00
parent c9961fe054
commit 0e4418db16
4 changed files with 7 additions and 4 deletions

View File

@ -1030,7 +1030,7 @@ namespace nanojit
default:
NanoAssertMsgf(false, "unsupported LIR instruction: %d (~0x40: %d)", op, op&~LIR64);
break;
case LIR_live: {
countlir_live();
pending_lives.add(ins->oprnd1());
@ -1329,7 +1329,9 @@ namespace nanojit
verbose_only( if (_verbose) { outputAddr=true; asm_output("[%s]", _thisfrag->lirbuf->names->formatRef(ins)); } )
break;
}
case LIR_xbarrier: {
break;
}
case LIR_xt:
case LIR_xf:
{

View File

@ -1882,6 +1882,7 @@ namespace nanojit
case LIR_x:
case LIR_xt:
case LIR_xf:
case LIR_xbarrier:
formatGuard(i, s);
break;

View File

@ -140,7 +140,7 @@ namespace nanojit
};
inline bool isGuard(LOpcode op) {
return op==LIR_x || op==LIR_xf || op==LIR_xt || op==LIR_loop;
return op == LIR_x || op == LIR_xf || op == LIR_xt || op == LIR_loop || op == LIR_xbarrier;
}
inline bool isCall(LOpcode op) {

View File

@ -176,7 +176,7 @@ OPDEF(uge, 63, 2) // 0x3F 0011 1111
OPDEF64(2, 0, 2) // wraps a pair of refs
OPDEF64(file, 1, 2)
OPDEF64(line, 2, 2)
OPDEF64(unused3_64, 3, 2)
OPDEF64(xbarrier, 3, 1) // memory barrier (dummy guard)
OPDEF64(unused4_64, 4, 2)
OPDEF64(unused5_64, 5, 2)