| Index: src/ia32/lithium-codegen-ia32.cc
|
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
|
| index 36e876dc22c19841d27f87bdadb9adf8df6c2f14..aa9088684b52de0a64f9942724e786aa8f928023 100644
|
| --- a/src/ia32/lithium-codegen-ia32.cc
|
| +++ b/src/ia32/lithium-codegen-ia32.cc
|
| @@ -2633,8 +2633,8 @@ void LCodeGen::DoCompareMinusZeroAndBranch(LCompareMinusZeroAndBranch* instr) {
|
| Handle<Map> map = masm()->isolate()->factory()->heap_number_map();
|
| __ CheckMap(value, map, instr->FalseLabel(chunk()), DO_SMI_CHECK);
|
| __ cmp(FieldOperand(value, HeapNumber::kExponentOffset),
|
| - Immediate(0x80000000));
|
| - EmitFalseBranch(instr, not_equal);
|
| + Immediate(0x1));
|
| + EmitFalseBranch(instr, no_overflow);
|
| __ cmp(FieldOperand(value, HeapNumber::kMantissaOffset),
|
| Immediate(0x00000000));
|
| EmitBranch(instr, equal);
|
| @@ -3934,8 +3934,8 @@ void LCodeGen::DoMathFloor(LMathFloor* instr) {
|
| __ roundsd(xmm_scratch, input_reg, Assembler::kRoundDown);
|
| __ cvttsd2si(output_reg, Operand(xmm_scratch));
|
| // Overflow is signalled with minint.
|
| - __ cmp(output_reg, 0x80000000u);
|
| - DeoptimizeIf(equal, instr->environment());
|
| + __ cmp(output_reg, 0x1);
|
| + DeoptimizeIf(overflow, instr->environment());
|
| } else {
|
| Label negative_sign, done;
|
| // Deoptimize on unordered.
|
| @@ -3959,8 +3959,8 @@ void LCodeGen::DoMathFloor(LMathFloor* instr) {
|
| // Use truncating instruction (OK because input is positive).
|
| __ cvttsd2si(output_reg, Operand(input_reg));
|
| // Overflow is signalled with minint.
|
| - __ cmp(output_reg, 0x80000000u);
|
| - DeoptimizeIf(equal, instr->environment());
|
| + __ cmp(output_reg, 0x1);
|
| + DeoptimizeIf(overflow, instr->environment());
|
| __ jmp(&done, Label::kNear);
|
|
|
| // Non-zero negative reaches here.
|
| @@ -3999,9 +3999,9 @@ void LCodeGen::DoMathRound(LMathRound* instr) {
|
| __ addsd(xmm_scratch, input_reg);
|
| __ cvttsd2si(output_reg, Operand(xmm_scratch));
|
| // Overflow is signalled with minint.
|
| - __ cmp(output_reg, 0x80000000u);
|
| + __ cmp(output_reg, 0x1);
|
| __ RecordComment("D2I conversion overflow");
|
| - DeoptimizeIf(equal, instr->environment());
|
| + DeoptimizeIf(overflow, instr->environment());
|
| __ jmp(&done, dist);
|
|
|
| __ bind(&below_one_half);
|
| @@ -4015,9 +4015,9 @@ void LCodeGen::DoMathRound(LMathRound* instr) {
|
| __ subsd(input_temp, xmm_scratch);
|
| __ cvttsd2si(output_reg, Operand(input_temp));
|
| // Catch minint due to overflow, and to prevent overflow when compensating.
|
| - __ cmp(output_reg, 0x80000000u);
|
| + __ cmp(output_reg, 0x1);
|
| __ RecordComment("D2I conversion overflow");
|
| - DeoptimizeIf(equal, instr->environment());
|
| + DeoptimizeIf(overflow, instr->environment());
|
|
|
| __ Cvtsi2sd(xmm_scratch, output_reg);
|
| __ ucomisd(xmm_scratch, input_temp);
|
|
|