Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(434)

Unified Diff: src/crankshaft/ppc/lithium-codegen-ppc.cc

Issue 1650593002: PPC: Refactor checks for minus zero. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@patch05
Patch Set: Fix typos. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/full-codegen/ppc/full-codegen-ppc.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/crankshaft/ppc/lithium-codegen-ppc.cc
diff --git a/src/crankshaft/ppc/lithium-codegen-ppc.cc b/src/crankshaft/ppc/lithium-codegen-ppc.cc
index 9a7aa32aa76ae2a7178dcbbdd51c1413ff954d91..0082f7355e7c30d5563a37bbf24a743d3ec1784c 100644
--- a/src/crankshaft/ppc/lithium-codegen-ppc.cc
+++ b/src/crankshaft/ppc/lithium-codegen-ppc.cc
@@ -2390,32 +2390,13 @@ void LCodeGen::DoCompareMinusZeroAndBranch(LCompareMinusZeroAndBranch* instr) {
DoubleRegister value = ToDoubleRegister(instr->value());
__ fcmpu(value, kDoubleRegZero);
EmitFalseBranch(instr, ne);
-#if V8_TARGET_ARCH_PPC64
- __ MovDoubleToInt64(scratch, value);
-#else
- __ MovDoubleHighToInt(scratch, value);
-#endif
- __ cmpi(scratch, Operand::Zero());
+ __ TestDoubleSign(value, scratch);
EmitBranch(instr, lt);
} else {
Register value = ToRegister(instr->value());
__ CheckMap(value, scratch, Heap::kHeapNumberMapRootIndex,
instr->FalseLabel(chunk()), DO_SMI_CHECK);
-#if V8_TARGET_ARCH_PPC64
- __ LoadP(scratch, FieldMemOperand(value, HeapNumber::kValueOffset));
- __ li(ip, Operand(1));
- __ rotrdi(ip, ip, 1); // ip = 0x80000000_00000000
- __ cmp(scratch, ip);
-#else
- __ lwz(scratch, FieldMemOperand(value, HeapNumber::kExponentOffset));
- __ lwz(ip, FieldMemOperand(value, HeapNumber::kMantissaOffset));
- Label skip;
- __ lis(r0, Operand(SIGN_EXT_IMM16(0x8000)));
- __ cmp(scratch, r0);
- __ bne(&skip);
- __ cmpi(ip, Operand::Zero());
- __ bind(&skip);
-#endif
+ __ TestHeapNumberIsMinusZero(value, scratch, ip);
EmitBranch(instr, eq);
}
}
@@ -3700,13 +3681,8 @@ void LCodeGen::DoMathRound(LMathRound* instr) {
// If the input is +0.5, the result is 1.
__ bgt(&convert); // Out of [-0.5, +0.5].
if (instr->hydrogen()->CheckFlag(HValue::kBailoutOnMinusZero)) {
-#if V8_TARGET_ARCH_PPC64
- __ MovDoubleToInt64(scratch1, input);
-#else
- __ MovDoubleHighToInt(scratch1, input);
-#endif
- __ cmpi(scratch1, Operand::Zero());
- // [-0.5, -0].
+ // [-0.5, -0] (negative) yields minus zero.
+ __ TestDoubleSign(input, scratch1);
DeoptimizeIf(lt, instr, Deoptimizer::kMinusZero);
}
__ fcmpu(input, dot_five);
@@ -4920,17 +4896,7 @@ void LCodeGen::EmitNumberUntagD(LNumberUntagD* instr, Register input_reg,
// load heap number
__ lfd(result_reg, FieldMemOperand(input_reg, HeapNumber::kValueOffset));
if (deoptimize_on_minus_zero) {
-#if V8_TARGET_ARCH_PPC64
- __ MovDoubleToInt64(scratch, result_reg);
- // rotate left by one for simple compare.
- __ rldicl(scratch, scratch, 1, 0);
- __ cmpi(scratch, Operand(1));
-#else
- __ MovDoubleToInt64(scratch, ip, result_reg);
- __ cmpi(ip, Operand::Zero());
- __ bne(&done);
- __ Cmpi(scratch, Operand(HeapNumber::kSignMask), r0);
-#endif
+ __ TestDoubleIsMinusZero(result_reg, scratch, ip);
DeoptimizeIf(eq, instr, Deoptimizer::kMinusZero);
}
__ b(&done);
@@ -5019,10 +4985,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) {
if (instr->hydrogen()->CheckFlag(HValue::kBailoutOnMinusZero)) {
__ cmpi(input_reg, Operand::Zero());
__ bne(&done);
- __ lwz(scratch1,
- FieldMemOperand(scratch2, HeapNumber::kValueOffset +
- Register::kExponentOffset));
- __ cmpwi(scratch1, Operand::Zero());
+ __ TestHeapNumberSign(scratch2, scratch1);
DeoptimizeIf(lt, instr, Deoptimizer::kMinusZero);
}
}
@@ -5097,12 +5060,7 @@ void LCodeGen::DoDoubleToI(LDoubleToI* instr) {
Label done;
__ cmpi(result_reg, Operand::Zero());
__ bne(&done);
-#if V8_TARGET_ARCH_PPC64
- __ MovDoubleToInt64(scratch1, double_input);
-#else
- __ MovDoubleHighToInt(scratch1, double_input);
-#endif
- __ cmpi(scratch1, Operand::Zero());
+ __ TestDoubleSign(double_input, scratch1);
DeoptimizeIf(lt, instr, Deoptimizer::kMinusZero);
__ bind(&done);
}
@@ -5127,12 +5085,7 @@ void LCodeGen::DoDoubleToSmi(LDoubleToSmi* instr) {
Label done;
__ cmpi(result_reg, Operand::Zero());
__ bne(&done);
-#if V8_TARGET_ARCH_PPC64
- __ MovDoubleToInt64(scratch1, double_input);
-#else
- __ MovDoubleHighToInt(scratch1, double_input);
-#endif
- __ cmpi(scratch1, Operand::Zero());
+ __ TestDoubleSign(double_input, scratch1);
DeoptimizeIf(lt, instr, Deoptimizer::kMinusZero);
__ bind(&done);
}
« no previous file with comments | « no previous file | src/full-codegen/ppc/full-codegen-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698