__ daddu(address, address, at);
__ lw(scratch_value, MemOperand(address));
__ Branch(&fast_double_without_map_check, ne, scratch_value,
- Operand(kHoleNanUpper32));
+ Operand(static_cast<int32_t>(kHoleNanUpper32)));
__ JumpIfDictionaryInPrototypeChain(receiver, elements_map, scratch_value,
slow);
Register scratch = scratch0();
__ FmoveHigh(scratch, input_reg);
- __ dsll32(scratch, scratch, 0); // FmoveHigh (mfhc1) sign-extends.
- __ dsrl32(scratch, scratch, 0); // Use only low 32-bits.
- EmitBranch(instr, eq, scratch, Operand(kHoleNanUpper32));
+ EmitBranch(instr, eq, scratch,
+ Operand(static_cast<int32_t>(kHoleNanUpper32)));
}
__ ldc1(result, MemOperand(scratch));
if (instr->hydrogen()->RequiresHoleCheck()) {
- __ lwu(scratch, MemOperand(scratch, sizeof(kHoleNanLower32)));
+ __ FmoveHigh(scratch, result);
DeoptimizeIf(eq, instr, Deoptimizer::kHole, scratch,
- Operand(kHoleNanUpper32));
+ Operand(static_cast<int32_t>(kHoleNanUpper32)));
}
}
DoubleRegister double_scratch = f2;
ldc1(double_result, FieldMemOperand(value_reg, HeapNumber::kValueOffset));
+ Branch(USE_DELAY_SLOT, &done); // Canonicalization is one instruction.
FPUCanonicalizeNaN(double_result, double_result);
- Branch(&done);
bind(&smi_value);
// scratch1 is now effective address of the double element.
// Untag and transfer.
- mthc1(value_reg, double_scratch);
+ dsrl32(at, value_reg, 0);
+ mtc1(at, double_scratch);
cvt_d_w(double_result, double_scratch);
bind(&done);