| Index: src/ppc/codegen-ppc.cc
|
| diff --git a/src/ppc/codegen-ppc.cc b/src/ppc/codegen-ppc.cc
|
| index 2139d871db5d37d23bde27d4b1f685c40659cbc5..8f2f1cd902f4f3a56630b4a00d4c30f7e23757df 100644
|
| --- a/src/ppc/codegen-ppc.cc
|
| +++ b/src/ppc/codegen-ppc.cc
|
| @@ -16,62 +16,6 @@ namespace internal {
|
|
|
| #define __ masm.
|
|
|
| -
|
| -#if defined(USE_SIMULATOR)
|
| -byte* fast_exp_ppc_machine_code = nullptr;
|
| -double fast_exp_simulator(double x, Isolate* isolate) {
|
| - return Simulator::current(isolate)
|
| - ->CallFPReturnsDouble(fast_exp_ppc_machine_code, x, 0);
|
| -}
|
| -#endif
|
| -
|
| -
|
| -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);
|
| -
|
| - {
|
| - DoubleRegister input = d1;
|
| - DoubleRegister result = d2;
|
| - DoubleRegister double_scratch1 = d3;
|
| - DoubleRegister double_scratch2 = d4;
|
| - Register temp1 = r7;
|
| - Register temp2 = r8;
|
| - Register temp3 = r9;
|
| -
|
| -// Called from C
|
| - __ function_descriptor();
|
| -
|
| - __ Push(temp3, temp2, temp1);
|
| - MathExpGenerator::EmitMathExp(&masm, input, result, double_scratch1,
|
| - double_scratch2, temp1, temp2, temp3);
|
| - __ Pop(temp3, temp2, temp1);
|
| - __ fmr(d1, result);
|
| - __ Ret();
|
| - }
|
| -
|
| - CodeDesc desc;
|
| - masm.GetCode(&desc);
|
| - DCHECK(ABI_USES_FUNCTION_DESCRIPTORS || !RelocInfo::RequiresRelocation(desc));
|
| -
|
| - Assembler::FlushICache(isolate, buffer, actual_size);
|
| - base::OS::ProtectCode(buffer, actual_size);
|
| -
|
| -#if !defined(USE_SIMULATOR)
|
| - return FUNCTION_CAST<UnaryMathFunctionWithIsolate>(buffer);
|
| -#else
|
| - fast_exp_ppc_machine_code = buffer;
|
| - return &fast_exp_simulator;
|
| -#endif
|
| -}
|
| -
|
| -
|
| UnaryMathFunctionWithIsolate CreateSqrtFunction(Isolate* isolate) {
|
| #if defined(USE_SIMULATOR)
|
| return nullptr;
|
| @@ -513,96 +457,6 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm, Register string,
|
| __ bind(&done);
|
| }
|
|
|
| -
|
| -static MemOperand ExpConstant(int index, Register base) {
|
| - return MemOperand(base, index * kDoubleSize);
|
| -}
|
| -
|
| -
|
| -void MathExpGenerator::EmitMathExp(MacroAssembler* masm, DoubleRegister input,
|
| - DoubleRegister result,
|
| - DoubleRegister double_scratch1,
|
| - DoubleRegister double_scratch2,
|
| - Register temp1, Register temp2,
|
| - Register temp3) {
|
| - DCHECK(!input.is(result));
|
| - DCHECK(!input.is(double_scratch1));
|
| - DCHECK(!input.is(double_scratch2));
|
| - DCHECK(!result.is(double_scratch1));
|
| - DCHECK(!result.is(double_scratch2));
|
| - DCHECK(!double_scratch1.is(double_scratch2));
|
| - DCHECK(!temp1.is(temp2));
|
| - DCHECK(!temp1.is(temp3));
|
| - DCHECK(!temp2.is(temp3));
|
| - DCHECK(ExternalReference::math_exp_constants(0).address() != NULL);
|
| - DCHECK(!masm->serializer_enabled()); // External references not serializable.
|
| -
|
| - Label zero, infinity, done;
|
| -
|
| - __ mov(temp3, Operand(ExternalReference::math_exp_constants(0)));
|
| -
|
| - __ lfd(double_scratch1, ExpConstant(0, temp3));
|
| - __ fcmpu(double_scratch1, input);
|
| - __ fmr(result, input);
|
| - __ bunordered(&done);
|
| - __ bge(&zero);
|
| -
|
| - __ lfd(double_scratch2, ExpConstant(1, temp3));
|
| - __ fcmpu(input, double_scratch2);
|
| - __ bge(&infinity);
|
| -
|
| - __ lfd(double_scratch1, ExpConstant(3, temp3));
|
| - __ lfd(result, ExpConstant(4, temp3));
|
| - __ fmul(double_scratch1, double_scratch1, input);
|
| - __ fadd(double_scratch1, double_scratch1, result);
|
| - __ MovDoubleLowToInt(temp2, double_scratch1);
|
| - __ fsub(double_scratch1, double_scratch1, result);
|
| - __ lfd(result, ExpConstant(6, temp3));
|
| - __ lfd(double_scratch2, ExpConstant(5, temp3));
|
| - __ fmul(double_scratch1, double_scratch1, double_scratch2);
|
| - __ fsub(double_scratch1, double_scratch1, input);
|
| - __ fsub(result, result, double_scratch1);
|
| - __ fmul(double_scratch2, double_scratch1, double_scratch1);
|
| - __ fmul(result, result, double_scratch2);
|
| - __ lfd(double_scratch2, ExpConstant(7, temp3));
|
| - __ fmul(result, result, double_scratch2);
|
| - __ fsub(result, result, double_scratch1);
|
| - __ lfd(double_scratch2, ExpConstant(8, temp3));
|
| - __ fadd(result, result, double_scratch2);
|
| - __ srwi(temp1, temp2, Operand(11));
|
| - __ andi(temp2, temp2, Operand(0x7ff));
|
| - __ addi(temp1, temp1, Operand(0x3ff));
|
| -
|
| - // Must not call ExpConstant() after overwriting temp3!
|
| - __ mov(temp3, Operand(ExternalReference::math_exp_log_table()));
|
| - __ slwi(temp2, temp2, Operand(3));
|
| -#if V8_TARGET_ARCH_PPC64
|
| - __ ldx(temp2, MemOperand(temp3, temp2));
|
| - __ sldi(temp1, temp1, Operand(52));
|
| - __ orx(temp2, temp1, temp2);
|
| - __ MovInt64ToDouble(double_scratch1, temp2);
|
| -#else
|
| - __ add(ip, temp3, temp2);
|
| - __ lwz(temp3, MemOperand(ip, Register::kExponentOffset));
|
| - __ lwz(temp2, MemOperand(ip, Register::kMantissaOffset));
|
| - __ slwi(temp1, temp1, Operand(20));
|
| - __ orx(temp3, temp1, temp3);
|
| - __ MovInt64ToDouble(double_scratch1, temp3, temp2);
|
| -#endif
|
| -
|
| - __ fmul(result, result, double_scratch1);
|
| - __ b(&done);
|
| -
|
| - __ bind(&zero);
|
| - __ fmr(result, kDoubleRegZero);
|
| - __ b(&done);
|
| -
|
| - __ bind(&infinity);
|
| - __ lfd(result, ExpConstant(2, temp3));
|
| -
|
| - __ bind(&done);
|
| -}
|
| -
|
| #undef __
|
|
|
| CodeAgingHelper::CodeAgingHelper(Isolate* isolate) {
|
|
|