Fix CmpHoleAndBranch on no-sse2

R=danno@chromium.org

Review URL: https://chromiumcodereview.appspot.com/22810005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16192 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
verwaest@chromium.org 2013-08-14 15:50:23 +00:00
parent 051a196723
commit ea14c000bc

View File

@ -2236,8 +2236,12 @@ void LCodeGen::EmitBranch(InstrType instr, Condition cc) {
template<class InstrType>
void LCodeGen::EmitFalseBranch(InstrType instr, Condition cc) {
int false_block = instr->FalseDestination(chunk_);
if (cc == no_condition) {
__ jmp(chunk_->GetAssemblyLabel(false_block));
} else {
__ j(cc, chunk_->GetAssemblyLabel(false_block));
}
}
void LCodeGen::DoIsNumberAndBranch(LIsNumberAndBranch* instr) {
@ -2503,6 +2507,7 @@ void LCodeGen::DoCmpHoleAndBranch(LCmpHoleAndBranch* instr) {
CpuFeatureScope scope(masm(), SSE2);
XMMRegister input_reg = ToDoubleRegister(instr->object());
__ ucomisd(input_reg, input_reg);
EmitFalseBranch(instr, parity_odd);
} else {
// Put the value to the top of stack
X87Register src = ToX87Register(instr->object());
@ -2510,9 +2515,13 @@ void LCodeGen::DoCmpHoleAndBranch(LCmpHoleAndBranch* instr) {
__ fld(0);
__ fld(0);
__ FCmp();
Label ok;
__ j(parity_even, &ok);
__ fstp(0);
EmitFalseBranch(instr, no_condition);
__ bind(&ok);
}
EmitFalseBranch(instr, parity_odd);
__ sub(esp, Immediate(kDoubleSize));
if (use_sse2) {
@ -2520,7 +2529,6 @@ void LCodeGen::DoCmpHoleAndBranch(LCmpHoleAndBranch* instr) {
XMMRegister input_reg = ToDoubleRegister(instr->object());
__ movdbl(MemOperand(esp, 0), input_reg);
} else {
__ fld(0);
__ fstp_d(MemOperand(esp, 0));
}