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

Unified Diff: src/x64/lithium-codegen-x64.cc

Issue 1406293003: [x64] Make use of vucomiss and vucomisd when AVX is enabled. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebaseline Created 5 years, 2 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 | « src/x64/codegen-x64.cc ('k') | src/x64/macro-assembler-x64.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/x64/lithium-codegen-x64.cc
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc
index b050f2a340fbdfba85eea1c66875a0b7158adcf7..a6fb86075782a8c85100ac0f38a349abba5772d7 100644
--- a/src/x64/lithium-codegen-x64.cc
+++ b/src/x64/lithium-codegen-x64.cc
@@ -1967,7 +1967,7 @@ void LCodeGen::DoMathMinMax(LMathMinMax* instr) {
Condition condition = (operation == HMathMinMax::kMathMin) ? below : above;
XMMRegister left_reg = ToDoubleRegister(left);
XMMRegister right_reg = ToDoubleRegister(right);
- __ ucomisd(left_reg, right_reg);
+ __ Ucomisd(left_reg, right_reg);
__ j(parity_even, &check_nan_left, Label::kNear); // At least one NaN.
__ j(equal, &check_zero, Label::kNear); // left == right.
__ j(condition, &return_left, Label::kNear);
@@ -1976,7 +1976,7 @@ void LCodeGen::DoMathMinMax(LMathMinMax* instr) {
__ bind(&check_zero);
XMMRegister xmm_scratch = double_scratch0();
__ Xorpd(xmm_scratch, xmm_scratch);
- __ ucomisd(left_reg, xmm_scratch);
+ __ Ucomisd(left_reg, xmm_scratch);
__ j(not_equal, &return_left, Label::kNear); // left == right != 0.
// At this point, both left and right are either 0 or -0.
if (operation == HMathMinMax::kMathMin) {
@@ -1988,7 +1988,7 @@ void LCodeGen::DoMathMinMax(LMathMinMax* instr) {
__ jmp(&return_left, Label::kNear);
__ bind(&check_nan_left);
- __ ucomisd(left_reg, left_reg); // NaN check.
+ __ Ucomisd(left_reg, left_reg); // NaN check.
__ j(parity_even, &return_left, Label::kNear);
__ bind(&return_right);
__ Movapd(left_reg, right_reg);
@@ -2129,7 +2129,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
XMMRegister reg = ToDoubleRegister(instr->value());
XMMRegister xmm_scratch = double_scratch0();
__ Xorpd(xmm_scratch, xmm_scratch);
- __ ucomisd(reg, xmm_scratch);
+ __ Ucomisd(reg, xmm_scratch);
EmitBranch(instr, not_equal);
} else {
DCHECK(r.IsTagged());
@@ -2150,7 +2150,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
DCHECK(!info()->IsStub());
XMMRegister xmm_scratch = double_scratch0();
__ Xorpd(xmm_scratch, xmm_scratch);
- __ ucomisd(xmm_scratch, FieldOperand(reg, HeapNumber::kValueOffset));
+ __ Ucomisd(xmm_scratch, FieldOperand(reg, HeapNumber::kValueOffset));
EmitBranch(instr, not_equal);
} else if (type.IsString()) {
DCHECK(!info()->IsStub());
@@ -2239,7 +2239,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
__ j(not_equal, &not_heap_number, Label::kNear);
XMMRegister xmm_scratch = double_scratch0();
__ Xorpd(xmm_scratch, xmm_scratch);
- __ ucomisd(xmm_scratch, FieldOperand(reg, HeapNumber::kValueOffset));
+ __ Ucomisd(xmm_scratch, FieldOperand(reg, HeapNumber::kValueOffset));
__ j(zero, instr->FalseLabel(chunk_));
__ jmp(instr->TrueLabel(chunk_));
__ bind(&not_heap_number);
@@ -2319,7 +2319,7 @@ void LCodeGen::DoCompareNumericAndBranch(LCompareNumericAndBranch* instr) {
if (instr->is_double()) {
// Don't base result on EFLAGS when a NaN is involved. Instead
// jump to the false block.
- __ ucomisd(ToDoubleRegister(left), ToDoubleRegister(right));
+ __ Ucomisd(ToDoubleRegister(left), ToDoubleRegister(right));
__ j(parity_even, instr->FalseLabel(chunk_));
} else {
int32_t value;
@@ -2387,7 +2387,7 @@ void LCodeGen::DoCmpHoleAndBranch(LCmpHoleAndBranch* instr) {
}
XMMRegister input_reg = ToDoubleRegister(instr->object());
- __ ucomisd(input_reg, input_reg);
+ __ Ucomisd(input_reg, input_reg);
EmitFalseBranch(instr, parity_odd);
__ subp(rsp, Immediate(kDoubleSize));
@@ -2408,7 +2408,7 @@ void LCodeGen::DoCompareMinusZeroAndBranch(LCompareMinusZeroAndBranch* instr) {
XMMRegister value = ToDoubleRegister(instr->value());
XMMRegister xmm_scratch = double_scratch0();
__ Xorpd(xmm_scratch, xmm_scratch);
- __ ucomisd(xmm_scratch, value);
+ __ Ucomisd(xmm_scratch, value);
EmitFalseBranch(instr, not_equal);
__ Movmskpd(kScratchRegister, value);
__ testl(kScratchRegister, Immediate(1));
@@ -3615,7 +3615,7 @@ void LCodeGen::DoMathFloor(LMathFloor* instr) {
Label negative_sign, done;
// Deoptimize on unordered.
__ Xorpd(xmm_scratch, xmm_scratch); // Zero the register.
- __ ucomisd(input_reg, xmm_scratch);
+ __ Ucomisd(input_reg, xmm_scratch);
DeoptimizeIf(parity_even, instr, Deoptimizer::kNaN);
__ j(below, &negative_sign, Label::kNear);
@@ -3643,7 +3643,7 @@ void LCodeGen::DoMathFloor(LMathFloor* instr) {
// Truncate, then compare and compensate.
__ Cvttsd2si(output_reg, input_reg);
__ Cvtlsi2sd(xmm_scratch, output_reg);
- __ ucomisd(input_reg, xmm_scratch);
+ __ Ucomisd(input_reg, xmm_scratch);
__ j(equal, &done, Label::kNear);
__ subl(output_reg, Immediate(1));
DeoptimizeIf(overflow, instr, Deoptimizer::kOverflow);
@@ -3665,7 +3665,7 @@ void LCodeGen::DoMathRound(LMathRound* instr) {
Label::Distance dist = DeoptEveryNTimes() ? Label::kFar : Label::kNear;
__ movq(kScratchRegister, one_half);
__ Movq(xmm_scratch, kScratchRegister);
- __ ucomisd(xmm_scratch, input_reg);
+ __ Ucomisd(xmm_scratch, input_reg);
__ j(above, &below_one_half, Label::kNear);
// CVTTSD2SI rounds towards zero, since 0.5 <= x, we use floor(0.5 + x).
@@ -3679,7 +3679,7 @@ void LCodeGen::DoMathRound(LMathRound* instr) {
__ bind(&below_one_half);
__ movq(kScratchRegister, minus_one_half);
__ Movq(xmm_scratch, kScratchRegister);
- __ ucomisd(xmm_scratch, input_reg);
+ __ Ucomisd(xmm_scratch, input_reg);
__ j(below_equal, &round_to_zero, Label::kNear);
// CVTTSD2SI rounds towards zero, we use ceil(x - (-0.5)) and then
@@ -3692,7 +3692,7 @@ void LCodeGen::DoMathRound(LMathRound* instr) {
DeoptimizeIf(overflow, instr, Deoptimizer::kOverflow);
__ Cvtlsi2sd(xmm_scratch, output_reg);
- __ ucomisd(xmm_scratch, input_temp);
+ __ Ucomisd(xmm_scratch, input_temp);
__ j(equal, &done, dist);
__ subl(output_reg, Immediate(1));
// No overflow because we already ruled out minint.
@@ -3744,7 +3744,7 @@ void LCodeGen::DoMathPowHalf(LMathPowHalf* instr) {
// -Infinity has the highest 12 bits set and the lowest 52 bits cleared.
__ movq(kScratchRegister, V8_INT64_C(0xFFF0000000000000));
__ Movq(xmm_scratch, kScratchRegister);
- __ ucomisd(xmm_scratch, input_reg);
+ __ Ucomisd(xmm_scratch, input_reg);
// Comparing -Infinity with NaN results in "unordered", which sets the
// zero flag as if both were equal. However, it also sets the carry flag.
__ j(not_equal, &sqrt, Label::kNear);
@@ -3815,7 +3815,7 @@ void LCodeGen::DoMathLog(LMathLog* instr) {
XMMRegister xmm_scratch = double_scratch0();
Label positive, done, zero;
__ Xorpd(xmm_scratch, xmm_scratch);
- __ ucomisd(input_reg, xmm_scratch);
+ __ Ucomisd(input_reg, xmm_scratch);
__ j(above, &positive, Label::kNear);
__ j(not_carry, &zero, Label::kNear);
__ pcmpeqd(input_reg, input_reg);
@@ -4924,7 +4924,7 @@ void LCodeGen::EmitNumberUntagD(LNumberUntagD* instr, Register input_reg,
if (deoptimize_on_minus_zero) {
XMMRegister xmm_scratch = double_scratch0();
__ Xorpd(xmm_scratch, xmm_scratch);
- __ ucomisd(xmm_scratch, result_reg);
+ __ Ucomisd(xmm_scratch, result_reg);
__ j(not_equal, &done, Label::kNear);
__ Movmskpd(kScratchRegister, result_reg);
__ testl(kScratchRegister, Immediate(1));
@@ -4995,7 +4995,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr, Label* done) {
__ Movsd(xmm0, FieldOperand(input_reg, HeapNumber::kValueOffset));
__ Cvttsd2si(input_reg, xmm0);
__ Cvtlsi2sd(scratch, input_reg);
- __ ucomisd(xmm0, scratch);
+ __ Ucomisd(xmm0, scratch);
DeoptimizeIf(not_equal, instr, Deoptimizer::kLostPrecision);
DeoptimizeIf(parity_even, instr, Deoptimizer::kNaN);
if (instr->hydrogen()->GetMinusZeroMode() == FAIL_ON_MINUS_ZERO) {
« no previous file with comments | « src/x64/codegen-x64.cc ('k') | src/x64/macro-assembler-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698