Revision: 10909
Author: [email protected]
Date: Fri Mar 2 07:00:52 2012
Log: Revert r10908 due to flakiness and crashes.
BUG=
TEST=
Review URL: https://chromiumcodereview.appspot.com/9580007
http://code.google.com/p/v8/source/detail?r=10909
Deleted:
/branches/bleeding_edge/test/mjsunit/regress/regress-transcendental.js
Modified:
/branches/bleeding_edge/src/arm/codegen-arm.cc
/branches/bleeding_edge/src/arm/lithium-arm.cc
/branches/bleeding_edge/src/codegen.h
/branches/bleeding_edge/src/heap-inl.h
/branches/bleeding_edge/src/hydrogen-instructions.h
/branches/bleeding_edge/src/hydrogen.cc
/branches/bleeding_edge/src/ia32/code-stubs-ia32.cc
/branches/bleeding_edge/src/ia32/code-stubs-ia32.h
/branches/bleeding_edge/src/ia32/codegen-ia32.cc
/branches/bleeding_edge/src/ia32/lithium-ia32.cc
/branches/bleeding_edge/src/mips/codegen-mips.cc
/branches/bleeding_edge/src/mips/lithium-mips.cc
/branches/bleeding_edge/src/platform-nullos.cc
/branches/bleeding_edge/src/platform-posix.cc
/branches/bleeding_edge/src/platform-win32.cc
/branches/bleeding_edge/src/platform.h
/branches/bleeding_edge/src/x64/code-stubs-x64.cc
/branches/bleeding_edge/src/x64/code-stubs-x64.h
/branches/bleeding_edge/src/x64/codegen-x64.cc
/branches/bleeding_edge/src/x64/lithium-x64.cc
=======================================
--- /branches/bleeding_edge/test/mjsunit/regress/regress-transcendental.js
Fri Mar 2 06:33:15 2012
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2012 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Flags: --expose-gc
-
-// Test whether the runtime implementation and generated code of
-// sine and tangens return the same results.
-
-function test(f, x, name) {
- // Reset transcendental cache.
- gc();
- // Initializing cache leads to a runtime call.
- var runtime_result = f(x);
- // Flush transcendental cache.
- for (var i = 0; i < 100000; i++) f(i);
- // Calculate using generated code.
- var gencode_result = f(x);
- print(name + " runtime function: " + runtime_result);
- print(name + " generated code : " + gencode_result);
- assertEquals(gencode_result, runtime_result);
-}
-
-test(Math.tan, -1.57079632679489660000, "Math.tan");
-test(Math.sin, 6.283185307179586, "Math.sin");
=======================================
--- /branches/bleeding_edge/src/arm/codegen-arm.cc Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/arm/codegen-arm.cc Fri Mar 2 07:00:52 2012
@@ -37,19 +37,6 @@
#define __ ACCESS_MASM(masm)
-TranscendentalFunction CreateTranscendentalFunction(
- TranscendentalCache::Type type) {
- switch (type) {
- case TranscendentalCache::SIN: return &sin;
- case TranscendentalCache::COS: return &cos;
- case TranscendentalCache::TAN: return &tan;
- case TranscendentalCache::LOG: return &log;
- default: UNIMPLEMENTED();
- }
- return NULL;
-}
-
-
//
-------------------------------------------------------------------------
// Platform-specific RuntimeCallHelper functions.
=======================================
--- /branches/bleeding_edge/src/arm/lithium-arm.cc Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/arm/lithium-arm.cc Fri Mar 2 07:00:52 2012
@@ -1170,7 +1170,7 @@
LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation*
instr) {
BuiltinFunctionId op = instr->op();
- if (op == kMathLog || op == kMathSin || op == kMathCos || op ==
kMathTan) {
+ if (op == kMathLog || op == kMathSin || op == kMathCos) {
LOperand* input = UseFixedDouble(instr->value(), d2);
LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(input,
NULL);
return MarkAsCall(DefineFixedDouble(result, d2), instr);
=======================================
--- /branches/bleeding_edge/src/codegen.h Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/codegen.h Fri Mar 2 07:00:52 2012
@@ -84,15 +84,6 @@
namespace v8 {
namespace internal {
-// Results of the library implementation of transcendental functions may
differ
-// from the one we use in our generated code. Therefore we use the same
-// generated code both in runtime and compiled code.
-typedef double (*TranscendentalFunction)(double x);
-
-TranscendentalFunction CreateTranscendentalFunction(
- TranscendentalCache::Type type);
-
-
class ElementsTransitionGenerator : public AllStatic {
public:
static void GenerateSmiOnlyToObject(MacroAssembler* masm);
=======================================
--- /branches/bleeding_edge/src/heap-inl.h Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/heap-inl.h Fri Mar 2 07:00:52 2012
@@ -32,7 +32,6 @@
#include "isolate.h"
#include "list-inl.h"
#include "objects.h"
-#include "platform.h"
#include "v8-counters.h"
#include "store-buffer.h"
#include "store-buffer-inl.h"
@@ -659,15 +658,15 @@
case ATAN:
return atan(input);
case COS:
- return fast_cos(input);
+ return cos(input);
case EXP:
return exp(input);
case LOG:
- return fast_log(input);
+ return log(input);
case SIN:
- return fast_sin(input);
+ return sin(input);
case TAN:
- return fast_tan(input);
+ return tan(input);
default:
return 0.0; // Never happens.
}
=======================================
--- /branches/bleeding_edge/src/hydrogen-instructions.h Fri Mar 2 06:33:15
2012
+++ /branches/bleeding_edge/src/hydrogen-instructions.h Fri Mar 2 07:00:52
2012
@@ -1886,7 +1886,6 @@
case kMathLog:
case kMathSin:
case kMathCos:
- case kMathTan:
set_representation(Representation::Double());
break;
default:
@@ -1917,7 +1916,6 @@
case kMathLog:
case kMathSin:
case kMathCos:
- case kMathTan:
return Representation::Double();
case kMathAbs:
return representation();
=======================================
--- /branches/bleeding_edge/src/hydrogen.cc Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/hydrogen.cc Fri Mar 2 07:00:52 2012
@@ -5420,7 +5420,6 @@
case kMathLog:
case kMathSin:
case kMathCos:
- case kMathTan:
if (expr->arguments()->length() == 1) {
HValue* argument = Pop();
HValue* context = environment()->LookupContext();
@@ -5481,7 +5480,6 @@
case kMathLog:
case kMathSin:
case kMathCos:
- case kMathTan:
if (argument_count == 2 && check_type == RECEIVER_MAP_CHECK) {
AddCheckConstantFunction(expr, receiver, receiver_map, true);
HValue* argument = Pop();
=======================================
--- /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Fri Mar 2 06:33:15
2012
+++ /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Fri Mar 2 07:00:52
2012
@@ -2510,7 +2510,7 @@
__ fld_d(Operand(esp, 0));
__ add(esp, Immediate(kDoubleSize));
}
- GenerateOperation(masm, type_);
+ GenerateOperation(masm);
__ mov(Operand(ecx, 0), ebx);
__ mov(Operand(ecx, kIntSize), edx);
__ mov(Operand(ecx, 2 * kIntSize), eax);
@@ -2526,7 +2526,7 @@
__ sub(esp, Immediate(kDoubleSize));
__ movdbl(Operand(esp, 0), xmm1);
__ fld_d(Operand(esp, 0));
- GenerateOperation(masm, type_);
+ GenerateOperation(masm);
__ fstp_d(Operand(esp, 0));
__ movdbl(xmm1, Operand(esp, 0));
__ add(esp, Immediate(kDoubleSize));
@@ -2578,15 +2578,14 @@
}
-void TranscendentalCacheStub::GenerateOperation(
- MacroAssembler* masm, TranscendentalCache::Type type) {
+void TranscendentalCacheStub::GenerateOperation(MacroAssembler* masm) {
// Only free register is edi.
// Input value is on FP stack, and also in ebx/edx.
// Input value is possibly in xmm1.
// Address of result (a newly allocated HeapNumber) may be in eax.
- if (type == TranscendentalCache::SIN ||
- type == TranscendentalCache::COS ||
- type == TranscendentalCache::TAN) {
+ if (type_ == TranscendentalCache::SIN ||
+ type_ == TranscendentalCache::COS ||
+ type_ == TranscendentalCache::TAN) {
// Both fsin and fcos require arguments in the range +/-2^63 and
// return NaN for infinities and NaN. They can share all code except
// the actual fsin/fcos operation.
@@ -2650,7 +2649,7 @@
// FPU Stack: input % 2*pi
__ bind(&in_range);
- switch (type) {
+ switch (type_) {
case TranscendentalCache::SIN:
__ fsin();
break;
@@ -2668,7 +2667,7 @@
}
__ bind(&done);
} else {
- ASSERT(type == TranscendentalCache::LOG);
+ ASSERT(type_ == TranscendentalCache::LOG);
__ fldln2();
__ fxch();
__ fyl2x();
=======================================
--- /branches/bleeding_edge/src/ia32/code-stubs-ia32.h Fri Mar 2 06:33:15
2012
+++ /branches/bleeding_edge/src/ia32/code-stubs-ia32.h Fri Mar 2 07:00:52
2012
@@ -49,8 +49,6 @@
ArgumentType argument_type)
: type_(type), argument_type_(argument_type) {}
void Generate(MacroAssembler* masm);
- static void GenerateOperation(MacroAssembler* masm,
- TranscendentalCache::Type type);
private:
TranscendentalCache::Type type_;
ArgumentType argument_type_;
@@ -58,6 +56,7 @@
Major MajorKey() { return TranscendentalCache; }
int MinorKey() { return type_ | argument_type_; }
Runtime::FunctionId RuntimeFunction();
+ void GenerateOperation(MacroAssembler* masm);
};
=======================================
--- /branches/bleeding_edge/src/ia32/codegen-ia32.cc Fri Mar 2 06:33:15
2012
+++ /branches/bleeding_edge/src/ia32/codegen-ia32.cc Fri Mar 2 07:00:52
2012
@@ -30,7 +30,6 @@
#if defined(V8_TARGET_ARCH_IA32)
#include "codegen.h"
-#include "heap.h"
#include "macro-assembler.h"
namespace v8 {
@@ -56,52 +55,6 @@
#define __ masm.
-
-TranscendentalFunction CreateTranscendentalFunction(
- TranscendentalCache::Type type) {
- size_t actual_size;
- // Allocate buffer in executable space.
- byte* buffer = static_cast<byte*>(OS::Allocate(1 * KB,
- &actual_size,
- true));
- if (buffer == NULL) {
- // Fallback to library function if function cannot be created.
- switch (type) {
- case TranscendentalCache::SIN: return &sin;
- case TranscendentalCache::COS: return &cos;
- case TranscendentalCache::TAN: return &tan;
- case TranscendentalCache::LOG: return &log;
- default: UNIMPLEMENTED();
- }
- }
-
- MacroAssembler masm(NULL, buffer, static_cast<int>(actual_size));
- // esp[1 * kPointerSize]: raw double input
- // esp[0 * kPointerSize]: return address
- // Move double input into registers.
- __ fld_d(Operand(esp, kPointerSize));
- __ push(ebx);
- __ push(edx);
- __ push(edi);
- __ mov(ebx, Operand(esp, kPointerSize));
- __ mov(edx, Operand(esp, 2* kPointerSize));
- TranscendentalCacheStub::GenerateOperation(&masm, type);
- // The return value is expected to be on ST(0) of the FPU stack.
- __ pop(edi);
- __ pop(edx);
- __ pop(ebx);
- __ Ret();
-
- CodeDesc desc;
- masm.GetCode(&desc);
- ASSERT(desc.reloc_size == 0);
-
- CPU::FlushICache(buffer, actual_size);
- OS::ProtectCode(buffer, actual_size);
- return FUNCTION_CAST<TranscendentalFunction>(buffer);
-}
-
-
static void MemCopyWrapper(void* dest, const void* src, size_t size) {
memcpy(dest, src, size);
}
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-ia32.cc Fri Mar 2 06:33:15
2012
+++ /branches/bleeding_edge/src/ia32/lithium-ia32.cc Fri Mar 2 07:00:52
2012
@@ -1195,7 +1195,7 @@
LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(context,
input);
return DefineSameAsFirst(result);
- } else if (op == kMathSin || op == kMathCos || op == kMathTan) {
+ } else if (op == kMathSin || op == kMathCos) {
LOperand* context = UseFixed(instr->context(), esi);
LOperand* input = UseFixedDouble(instr->value(), xmm1);
LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(context,
=======================================
--- /branches/bleeding_edge/src/mips/codegen-mips.cc Fri Mar 2 06:33:15
2012
+++ /branches/bleeding_edge/src/mips/codegen-mips.cc Fri Mar 2 07:00:52
2012
@@ -37,19 +37,6 @@
#define __ ACCESS_MASM(masm)
-TranscendentalFunction CreateTranscendentalFunction(
- TranscendentalCache::Type type) {
- switch (type) {
- case TranscendentalCache::SIN: return &sin;
- case TranscendentalCache::COS: return &cos;
- case TranscendentalCache::TAN: return &tan;
- case TranscendentalCache::LOG: return &log;
- default: UNIMPLEMENTED();
- }
- return NULL;
-}
-
-
//
-------------------------------------------------------------------------
// Platform-specific RuntimeCallHelper functions.
=======================================
--- /branches/bleeding_edge/src/mips/lithium-mips.cc Fri Mar 2 06:33:15
2012
+++ /branches/bleeding_edge/src/mips/lithium-mips.cc Fri Mar 2 07:00:52
2012
@@ -1169,7 +1169,7 @@
LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation*
instr) {
BuiltinFunctionId op = instr->op();
- if (op == kMathLog || op == kMathSin || op == kMathCos || op ==
kMathTan) {
+ if (op == kMathLog || op == kMathSin || op == kMathCos) {
LOperand* input = UseFixedDouble(instr->value(), f4);
LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(input,
NULL);
return MarkAsCall(DefineFixedDouble(result, f4), instr);
=======================================
--- /branches/bleeding_edge/src/platform-nullos.cc Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/platform-nullos.cc Fri Mar 2 07:00:52 2012
@@ -53,30 +53,6 @@
UNIMPLEMENTED();
return 0;
}
-
-
-double fast_sin(double x) {
- UNIMPLEMENTED();
- return 0;
-}
-
-
-double fast_cos(double x) {
- UNIMPLEMENTED();
- return 0;
-}
-
-
-double fast_tan(double x) {
- UNIMPLEMENTED();
- return 0;
-}
-
-
-double fast_log(double x) {
- UNIMPLEMENTED();
- return 0;
-}
// Initialize OS class early in the V8 startup.
=======================================
--- /branches/bleeding_edge/src/platform-posix.cc Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/platform-posix.cc Fri Mar 2 07:00:52 2012
@@ -53,7 +53,6 @@
#include "v8.h"
-#include "codegen.h"
#include "platform.h"
namespace v8 {
@@ -125,29 +124,6 @@
double modulo(double x, double y) {
return fmod(x, y);
}
-
-
-static Mutex* transcendental_function_mutex = OS::CreateMutex();
-
-#define TRANSCENDENTAL_FUNCTION(name, type) \
-static TranscendentalFunction fast_##name##_function = NULL; \
-double fast_##name(double x) { \
- if (fast_##name##_function == NULL) { \
- ScopedLock lock(transcendental_function_mutex); \
- TranscendentalFunction temp = \
- CreateTranscendentalFunction(type); \
- MemoryBarrier(); \
- fast_##name##_function = temp; \
- } \
- return (*fast_##name##_function)(x); \
-}
-
-TRANSCENDENTAL_FUNCTION(sin, TranscendentalCache::SIN)
-TRANSCENDENTAL_FUNCTION(cos, TranscendentalCache::COS)
-TRANSCENDENTAL_FUNCTION(tan, TranscendentalCache::TAN)
-TRANSCENDENTAL_FUNCTION(log, TranscendentalCache::LOG)
-
-#undef TRANSCENDENTAL_FUNCTION
double OS::nan_value() {
=======================================
--- /branches/bleeding_edge/src/platform-win32.cc Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/platform-win32.cc Fri Mar 2 07:00:52 2012
@@ -32,7 +32,6 @@
#include "v8.h"
-#include "codegen.h"
#include "platform.h"
#include "vm-state-inl.h"
@@ -202,30 +201,6 @@
#endif // _WIN64
-
-static Mutex* transcendental_function_mutex = OS::CreateMutex();
-
-#define TRANSCENDENTAL_FUNCTION(name, type) \
-static TranscendentalFunction fast_##name##_function = NULL; \
-double fast_##name(double x) { \
- if (fast_##name##_function == NULL) { \
- ScopedLock lock(transcendental_function_mutex); \
- TranscendentalFunction temp = \
- CreateTranscendentalFunction(type); \
- MemoryBarrier(); \
- fast_##name##_function = temp; \
- } \
- return (*fast_##name##_function)(x); \
-}
-
-TRANSCENDENTAL_FUNCTION(sin, TranscendentalCache::SIN)
-TRANSCENDENTAL_FUNCTION(cos, TranscendentalCache::COS)
-TRANSCENDENTAL_FUNCTION(tan, TranscendentalCache::TAN)
-TRANSCENDENTAL_FUNCTION(log, TranscendentalCache::LOG)
-
-#undef TRANSCENDENTAL_FUNCTION
-
-
//
----------------------------------------------------------------------------
// The Time class represents time on win32. A timestamp is represented as
// a 64-bit integer in 100 nanoseconds since January 1, 1601 (UTC).
JavaScript
=======================================
--- /branches/bleeding_edge/src/platform.h Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/platform.h Fri Mar 2 07:00:52 2012
@@ -96,12 +96,6 @@
double ceiling(double x);
double modulo(double x, double y);
-// Custom implementation of sin, cos, tan and log.
-double fast_sin(double input);
-double fast_cos(double input);
-double fast_tan(double input);
-double fast_log(double input);
-
// Forward declarations.
class Socket;
=======================================
--- /branches/bleeding_edge/src/x64/code-stubs-x64.cc Fri Mar 2 06:33:15
2012
+++ /branches/bleeding_edge/src/x64/code-stubs-x64.cc Fri Mar 2 07:00:52
2012
@@ -1628,7 +1628,7 @@
__ movsd(FieldOperand(rax, HeapNumber::kValueOffset), xmm1);
__ fld_d(FieldOperand(rax, HeapNumber::kValueOffset));
}
- GenerateOperation(masm, type_);
+ GenerateOperation(masm);
__ movq(Operand(rcx, 0), rbx);
__ movq(Operand(rcx, 2 * kIntSize), rax);
__ fstp_d(FieldOperand(rax, HeapNumber::kValueOffset));
@@ -1643,7 +1643,7 @@
__ subq(rsp, Immediate(kDoubleSize));
__ movsd(Operand(rsp, 0), xmm1);
__ fld_d(Operand(rsp, 0));
- GenerateOperation(masm, type_);
+ GenerateOperation(masm);
__ fstp_d(Operand(rsp, 0));
__ movsd(xmm1, Operand(rsp, 0));
__ addq(rsp, Immediate(kDoubleSize));
@@ -1695,17 +1695,16 @@
}
-void TranscendentalCacheStub::GenerateOperation(
- MacroAssembler* masm, TranscendentalCache::Type type) {
+void TranscendentalCacheStub::GenerateOperation(MacroAssembler* masm) {
// Registers:
// rax: Newly allocated HeapNumber, which must be preserved.
// rbx: Bits of input double. Must be preserved.
// rcx: Pointer to cache entry. Must be preserved.
// st(0): Input double
Label done;
- if (type == TranscendentalCache::SIN ||
- type == TranscendentalCache::COS ||
- type == TranscendentalCache::TAN) {
+ if (type_ == TranscendentalCache::SIN ||
+ type_ == TranscendentalCache::COS ||
+ type_ == TranscendentalCache::TAN) {
// Both fsin and fcos require arguments in the range +/-2^63 and
// return NaN for infinities and NaN. They can share all code except
// the actual fsin/fcos operation.
@@ -1768,7 +1767,7 @@
// FPU Stack: input % 2*pi
__ movq(rax, rdi); // Restore rax, pointer to the new HeapNumber.
__ bind(&in_range);
- switch (type) {
+ switch (type_) {
case TranscendentalCache::SIN:
__ fsin();
break;
@@ -1786,7 +1785,7 @@
}
__ bind(&done);
} else {
- ASSERT(type == TranscendentalCache::LOG);
+ ASSERT(type_ == TranscendentalCache::LOG);
__ fldln2();
__ fxch();
__ fyl2x();
=======================================
--- /branches/bleeding_edge/src/x64/code-stubs-x64.h Fri Mar 2 06:33:15
2012
+++ /branches/bleeding_edge/src/x64/code-stubs-x64.h Fri Mar 2 07:00:52
2012
@@ -48,8 +48,6 @@
ArgumentType argument_type)
: type_(type), argument_type_(argument_type) {}
void Generate(MacroAssembler* masm);
- static void GenerateOperation(MacroAssembler* masm,
- TranscendentalCache::Type type);
private:
TranscendentalCache::Type type_;
ArgumentType argument_type_;
@@ -57,6 +55,7 @@
Major MajorKey() { return TranscendentalCache; }
int MinorKey() { return type_ | argument_type_; }
Runtime::FunctionId RuntimeFunction();
+ void GenerateOperation(MacroAssembler* masm);
};
=======================================
--- /branches/bleeding_edge/src/x64/codegen-x64.cc Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/x64/codegen-x64.cc Fri Mar 2 07:00:52 2012
@@ -54,52 +54,6 @@
#define __ masm.
-
-TranscendentalFunction CreateTranscendentalFunction(
- TranscendentalCache::Type type) {
- size_t actual_size;
- // Allocate buffer in executable space.
- byte* buffer = static_cast<byte*>(OS::Allocate(1 * KB,
- &actual_size,
- true));
- if (buffer == NULL) {
- // Fallback to library function if function cannot be created.
- switch (type) {
- case TranscendentalCache::SIN: return &sin;
- case TranscendentalCache::COS: return &cos;
- case TranscendentalCache::TAN: return &tan;
- case TranscendentalCache::LOG: return &log;
- default: UNIMPLEMENTED();
- }
- }
-
- MacroAssembler masm(NULL, buffer, static_cast<int>(actual_size));
- // xmm0: raw double input.
- // Move double input into registers.
- __ push(rbx);
- __ push(rdi);
- __ movq(rbx, xmm0);
- __ push(rbx);
- __ fld_d(Operand(rsp, 0));
- TranscendentalCacheStub::GenerateOperation(&masm, type);
- // The return value is expected to be in xmm0.
- __ fstp_d(Operand(rsp, 0));
- __ pop(rbx);
- __ movq(xmm0, rbx);
- __ pop(rdi);
- __ pop(rbx);
- __ Ret();
-
- CodeDesc desc;
- masm.GetCode(&desc);
- ASSERT(desc.reloc_size == 0);
-
- CPU::FlushICache(buffer, actual_size);
- OS::ProtectCode(buffer, actual_size);
- return FUNCTION_CAST<TranscendentalFunction>(buffer);
-}
-
-
#ifdef _WIN64
typedef double (*ModuloFunction)(double, double);
// Define custom fmod implementation.
=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.cc Fri Mar 2 06:33:15 2012
+++ /branches/bleeding_edge/src/x64/lithium-x64.cc Fri Mar 2 07:00:52 2012
@@ -1163,7 +1163,7 @@
LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation*
instr) {
BuiltinFunctionId op = instr->op();
- if (op == kMathLog || op == kMathSin || op == kMathCos || op ==
kMathTan) {
+ if (op == kMathLog || op == kMathSin || op == kMathCos) {
LOperand* input = UseFixedDouble(instr->value(), xmm1);
LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(input);
return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev