Bug 839367 - Add branchTestValue(Condition, Address, ValueOperand, Label) method. r=mjrosenb

This commit is contained in:
Kannan Vijayan 2013-02-08 12:03:20 -05:00
parent 89b9fabf30
commit 3e1f40de8b
5 changed files with 29 additions and 0 deletions

View File

@ -2259,6 +2259,19 @@ MacroAssemblerARMCompat::branchTestValue(Condition cond, const ValueOperand &val
ma_b(label, cond);
}
void
MacroAssemblerARMCompat::branchTestValue(Condition cond, const Address &valaddr,
const ValueOperand &value, Label *label)
{
JS_ASSERT(cond == Equal || cond == NotEqual);
ma_ldr(tagOf(valaddr), ScratchRegister);
branchPtr(cond, ScratchRegister, value.typeReg(), label);
ma_ldr(payloadOf(valaddr), ScratchRegister);
branchPtr(cond, ScratchRegister, value.payloadReg(), label);
}
// unboxing code
void
MacroAssemblerARMCompat::unboxInt32(const ValueOperand &operand, const Register &dest)

View File

@ -578,6 +578,8 @@ class MacroAssemblerARMCompat : public MacroAssemblerARM
}
void branchTestValue(Condition cond, const ValueOperand &value, const Value &v, Label *label);
void branchTestValue(Condition cond, const Address &valaddr, const ValueOperand &value,
Label *label);
// unboxing code
void unboxInt32(const ValueOperand &operand, const Register &dest);

View File

@ -652,6 +652,12 @@ class MacroAssemblerX64 : public MacroAssemblerX86Shared
cmpq(value.valueReg(), ScratchReg);
j(cond, label);
}
void branchTestValue(Condition cond, const Address &valaddr, const ValueOperand &value,
Label *label)
{
JS_ASSERT(cond == Equal || cond == NotEqual);
branchPtr(cond, valaddr, value.valueReg(), label);
}
void boxDouble(const FloatRegister &src, const ValueOperand &dest) {
movqsd(src, dest.valueReg());

View File

@ -190,6 +190,7 @@ MacroAssemblerX86::branchTestValue(Condition cond, const ValueOperand &value, co
}
}
Assembler::Condition
MacroAssemblerX86::testNegativeZero(const FloatRegister &reg, const Register &scratch)
{

View File

@ -328,6 +328,13 @@ class MacroAssemblerX86 : public MacroAssemblerX86Shared
}
void branchTestValue(Condition cond, const ValueOperand &value, const Value &v, Label *label);
void branchTestValue(Condition cond, const Address &valaddr, const ValueOperand &value,
Label *label)
{
JS_ASSERT(cond == Equal || cond == NotEqual);
branchPtr(cond, tagOf(valaddr), value.typeReg(), label);
branchPtr(cond, payloadOf(valaddr), value.payloadReg(), label);
}
void cmpPtr(Register lhs, const ImmWord rhs) {
cmpl(lhs, Imm32(rhs.value));