Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/x64/codegen-x64.cc b/src/x64/codegen-x64.cc
index 114cbdc..911f3cb 100644
--- a/src/x64/codegen-x64.cc
+++ b/src/x64/codegen-x64.cc
@@ -32,38 +32,6 @@
#define __ masm.
-UnaryMathFunctionWithIsolate CreateExpFunction(Isolate* isolate) {
- size_t actual_size;
- byte* buffer =
- static_cast<byte*>(base::OS::Allocate(1 * KB, &actual_size, true));
- if (buffer == nullptr) return nullptr;
- ExternalReference::InitializeMathExpData();
-
- MacroAssembler masm(isolate, buffer, static_cast<int>(actual_size),
- CodeObjectRequired::kNo);
- // xmm0: raw double input.
- XMMRegister input = xmm0;
- XMMRegister result = xmm1;
- __ pushq(rax);
- __ pushq(rbx);
-
- MathExpGenerator::EmitMathExp(&masm, input, result, xmm2, rax, rbx);
-
- __ popq(rbx);
- __ popq(rax);
- __ Movsd(xmm0, result);
- __ Ret();
-
- CodeDesc desc;
- masm.GetCode(&desc);
- DCHECK(!RelocInfo::RequiresRelocation(desc));
-
- Assembler::FlushICache(isolate, buffer, actual_size);
- base::OS::ProtectCode(buffer, actual_size);
- return FUNCTION_CAST<UnaryMathFunctionWithIsolate>(buffer);
-}
-
-
UnaryMathFunctionWithIsolate CreateSqrtFunction(Isolate* isolate) {
size_t actual_size;
// Allocate buffer in executable space.
@@ -243,8 +211,9 @@
// rbx: current element (smi-tagged)
__ JumpIfNotSmi(rbx, &convert_hole);
__ SmiToInteger32(rbx, rbx);
- __ Cvtlsi2sd(xmm0, rbx);
- __ Movsd(FieldOperand(r14, r9, times_8, FixedDoubleArray::kHeaderSize), xmm0);
+ __ Cvtlsi2sd(kScratchDoubleReg, rbx);
+ __ Movsd(FieldOperand(r14, r9, times_8, FixedDoubleArray::kHeaderSize),
+ kScratchDoubleReg);
__ jmp(&entry);
__ bind(&convert_hole);
@@ -498,59 +467,6 @@
__ bind(&done);
}
-
-void MathExpGenerator::EmitMathExp(MacroAssembler* masm,
- XMMRegister input,
- XMMRegister result,
- XMMRegister double_scratch,
- Register temp1,
- Register temp2) {
- DCHECK(!input.is(result));
- DCHECK(!input.is(double_scratch));
- DCHECK(!result.is(double_scratch));
- DCHECK(!temp1.is(temp2));
- DCHECK(ExternalReference::math_exp_constants(0).address() != NULL);
- DCHECK(!masm->serializer_enabled()); // External references not serializable.
-
- Label done;
-
- __ Move(kScratchRegister, ExternalReference::math_exp_constants(0));
- __ Movsd(double_scratch, Operand(kScratchRegister, 0 * kDoubleSize));
- __ Xorpd(result, result);
- __ Ucomisd(double_scratch, input);
- __ j(above_equal, &done);
- __ Ucomisd(input, Operand(kScratchRegister, 1 * kDoubleSize));
- __ Movsd(result, Operand(kScratchRegister, 2 * kDoubleSize));
- __ j(above_equal, &done);
- __ Movsd(double_scratch, Operand(kScratchRegister, 3 * kDoubleSize));
- __ Movsd(result, Operand(kScratchRegister, 4 * kDoubleSize));
- __ Mulsd(double_scratch, input);
- __ Addsd(double_scratch, result);
- __ Movq(temp2, double_scratch);
- __ Subsd(double_scratch, result);
- __ Movsd(result, Operand(kScratchRegister, 6 * kDoubleSize));
- __ leaq(temp1, Operand(temp2, 0x1ff800));
- __ andq(temp2, Immediate(0x7ff));
- __ shrq(temp1, Immediate(11));
- __ Mulsd(double_scratch, Operand(kScratchRegister, 5 * kDoubleSize));
- __ Move(kScratchRegister, ExternalReference::math_exp_log_table());
- __ shlq(temp1, Immediate(52));
- __ orq(temp1, Operand(kScratchRegister, temp2, times_8, 0));
- __ Move(kScratchRegister, ExternalReference::math_exp_constants(0));
- __ Subsd(double_scratch, input);
- __ Movsd(input, double_scratch);
- __ Subsd(result, double_scratch);
- __ Mulsd(input, double_scratch);
- __ Mulsd(result, input);
- __ Movq(input, temp1);
- __ Mulsd(result, Operand(kScratchRegister, 7 * kDoubleSize));
- __ Subsd(result, double_scratch);
- __ Addsd(result, Operand(kScratchRegister, 8 * kDoubleSize));
- __ Mulsd(result, input);
-
- __ bind(&done);
-}
-
#undef __