| Index: src/x64/lithium-codegen-x64.cc
|
| diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc
|
| index d8a218106893cba7a3ca978e1508853033710afc..c242874c52b61b31e2c6cc20d686dbcb27911f01 100644
|
| --- a/src/x64/lithium-codegen-x64.cc
|
| +++ b/src/x64/lithium-codegen-x64.cc
|
| @@ -1111,7 +1111,7 @@ void LCodeGen::DoConstantD(LConstantD* instr) {
|
| // Use xor to produce +0.0 in a fast and compact way, but avoid to
|
| // do so if the constant is -0.0.
|
| if (int_val == 0) {
|
| - __ xorpd(res, res);
|
| + __ xorps(res, res);
|
| } else {
|
| Register tmp = ToRegister(instr->TempAt(0));
|
| __ Set(tmp, int_val);
|
| @@ -1223,12 +1223,12 @@ void LCodeGen::DoArithmeticD(LArithmeticD* instr) {
|
| break;
|
| case Token::MOD:
|
| __ PrepareCallCFunction(2);
|
| - __ movsd(xmm0, left);
|
| + __ movaps(xmm0, left);
|
| ASSERT(right.is(xmm1));
|
| __ CallCFunction(
|
| ExternalReference::double_fp_operation(Token::MOD, isolate()), 2);
|
| __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
|
| - __ movsd(result, xmm0);
|
| + __ movaps(result, xmm0);
|
| break;
|
| default:
|
| UNREACHABLE();
|
| @@ -1287,7 +1287,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
|
| EmitBranch(true_block, false_block, not_zero);
|
| } else if (r.IsDouble()) {
|
| XMMRegister reg = ToDoubleRegister(instr->InputAt(0));
|
| - __ xorpd(xmm0, xmm0);
|
| + __ xorps(xmm0, xmm0);
|
| __ ucomisd(reg, xmm0);
|
| EmitBranch(true_block, false_block, not_equal);
|
| } else {
|
| @@ -1322,7 +1322,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
|
|
|
| // HeapNumber => false iff +0, -0, or NaN. These three cases set the
|
| // zero flag when compared to zero using ucomisd.
|
| - __ xorpd(xmm0, xmm0);
|
| + __ xorps(xmm0, xmm0);
|
| __ ucomisd(xmm0, FieldOperand(reg, HeapNumber::kValueOffset));
|
| __ j(zero, false_label);
|
| __ jmp(true_label);
|
| @@ -2671,7 +2671,7 @@ void LCodeGen::DoMathAbs(LUnaryMathOperation* instr) {
|
| if (r.IsDouble()) {
|
| XMMRegister scratch = xmm0;
|
| XMMRegister input_reg = ToDoubleRegister(instr->InputAt(0));
|
| - __ xorpd(scratch, scratch);
|
| + __ xorps(scratch, scratch);
|
| __ subsd(scratch, input_reg);
|
| __ andpd(input_reg, scratch);
|
| } else if (r.IsInteger32()) {
|
| @@ -2708,7 +2708,7 @@ void LCodeGen::DoMathFloor(LUnaryMathOperation* instr) {
|
| __ cmpl(output_reg, Immediate(0x80000000));
|
| DeoptimizeIf(equal, instr->environment());
|
| } else {
|
| - __ xorpd(xmm_scratch, xmm_scratch); // Zero the register.
|
| + __ xorps(xmm_scratch, xmm_scratch); // Zero the register.
|
| __ ucomisd(input_reg, xmm_scratch);
|
|
|
| if (instr->hydrogen()->CheckFlag(HValue::kBailoutOnMinusZero)) {
|
| @@ -2784,7 +2784,7 @@ void LCodeGen::DoMathPowHalf(LUnaryMathOperation* instr) {
|
| XMMRegister xmm_scratch = xmm0;
|
| XMMRegister input_reg = ToDoubleRegister(instr->InputAt(0));
|
| ASSERT(ToDoubleRegister(instr->result()).is(input_reg));
|
| - __ xorpd(xmm_scratch, xmm_scratch);
|
| + __ xorps(xmm_scratch, xmm_scratch);
|
| __ addsd(input_reg, xmm_scratch); // Convert -0 to +0.
|
| __ sqrtsd(input_reg, input_reg);
|
| }
|
| @@ -2800,7 +2800,7 @@ void LCodeGen::DoPower(LPower* instr) {
|
| if (exponent_type.IsDouble()) {
|
| __ PrepareCallCFunction(2);
|
| // Move arguments to correct registers
|
| - __ movsd(xmm0, left_reg);
|
| + __ movaps(xmm0, left_reg);
|
| ASSERT(ToDoubleRegister(right).is(xmm1));
|
| __ CallCFunction(
|
| ExternalReference::power_double_double_function(isolate()), 2);
|
| @@ -2808,7 +2808,7 @@ void LCodeGen::DoPower(LPower* instr) {
|
| __ PrepareCallCFunction(2);
|
| // Move arguments to correct registers: xmm0 and edi (not rdi).
|
| // On Windows, the registers are xmm0 and edx.
|
| - __ movsd(xmm0, left_reg);
|
| + __ movaps(xmm0, left_reg);
|
| #ifdef _WIN64
|
| ASSERT(ToRegister(right).is(rdx));
|
| #else
|
| @@ -2834,13 +2834,13 @@ void LCodeGen::DoPower(LPower* instr) {
|
| __ bind(&call);
|
| __ PrepareCallCFunction(2);
|
| // Move arguments to correct registers xmm0 and xmm1.
|
| - __ movsd(xmm0, left_reg);
|
| + __ movaps(xmm0, left_reg);
|
| // Right argument is already in xmm1.
|
| __ CallCFunction(
|
| ExternalReference::power_double_double_function(isolate()), 2);
|
| }
|
| // Return value is in xmm0.
|
| - __ movsd(result_reg, xmm0);
|
| + __ movaps(result_reg, xmm0);
|
| // Restore context register.
|
| __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
|
| }
|
| @@ -3422,7 +3422,7 @@ void LCodeGen::EmitNumberUntagD(Register input_reg,
|
| DeoptimizeIf(not_equal, env);
|
|
|
| // Convert undefined to NaN. Compute NaN as 0/0.
|
| - __ xorpd(result_reg, result_reg);
|
| + __ xorps(result_reg, result_reg);
|
| __ divsd(result_reg, result_reg);
|
| __ jmp(&done);
|
|
|
|
|