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

Reply via email to