[turbofan] Factor C call descriptor building into compiler/c-linkage.cc.
authortitzer <titzer@chromium.org>
Thu, 30 Jul 2015 12:36:15 +0000 (05:36 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 30 Jul 2015 12:36:29 +0000 (12:36 +0000)
This is the first step in cutting the Gordian linkage/linkage-impl knot.

This basically changes the axis along which we organize call descriptor
building logic from having platform-specific files dedicated to all call
descriptor types to having call-descriptor-type-specific files that have

The next step is to factor the JS, code stub, and runtime call descriptors
similarly, dumping them into:
  compiler/js-linkage.cc
  compiler/runtime-linkage.cc
  compiler/code-stub-linkage.cc

 or, alternatively, all of them just into compiler/js-linkage.cc.

This also anticipates a wasm-linkage.cc file in the future.

R=bmeurer@chromium.org,danno@chromium.org
BUG=

Review URL: https://codereview.chromium.org/1266603002

Cr-Commit-Position: refs/heads/master@{#29931}

12 files changed:
src/compiler/arm/linkage-arm.cc
src/compiler/arm64/linkage-arm64.cc
src/compiler/c-linkage.cc [new file with mode: 0644]
src/compiler/ia32/linkage-ia32.cc
src/compiler/linkage-impl.h
src/compiler/linkage.cc
src/compiler/mips/linkage-mips.cc
src/compiler/mips64/linkage-mips64.cc
src/compiler/ppc/linkage-ppc.cc
src/compiler/x64/linkage-x64.cc
src/compiler/x87/linkage-x87.cc
tools/gyp/v8.gyp

index 8617436..c15d1d2 100644 (file)
@@ -28,21 +28,6 @@ struct ArmLinkageHelperTraits {
   }
   static Register RuntimeCallFunctionReg() { return r1; }
   static Register RuntimeCallArgCountReg() { return r0; }
-  static RegList CCalleeSaveRegisters() {
-    return r4.bit() | r5.bit() | r6.bit() | r7.bit() | r8.bit() | r9.bit() |
-           r10.bit();
-  }
-  static RegList CCalleeSaveFPRegisters() {
-    return (1 << d8.code()) | (1 << d9.code()) | (1 << d10.code()) |
-           (1 << d11.code()) | (1 << d12.code()) | (1 << d13.code()) |
-           (1 << d14.code()) | (1 << d15.code());
-  }
-  static Register CRegisterParameter(int i) {
-    static Register register_parameters[] = {r0, r1, r2, r3};
-    return register_parameters[i];
-  }
-  static int CRegisterParametersLength() { return 4; }
-  static int CStackBackingStoreLength() { return 0; }
 };
 
 
@@ -73,12 +58,6 @@ CallDescriptor* Linkage::GetStubCallDescriptor(
 }
 
 
-CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
-                                                  const MachineSignature* sig) {
-  return LH::GetSimplifiedCDescriptor(zone, sig);
-}
-
-
 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) {
   return LH::GetInterpreterDispatchDescriptor(zone);
 }
index 99d2d56..4dfa3f1 100644 (file)
@@ -28,23 +28,6 @@ struct Arm64LinkageHelperTraits {
   }
   static Register RuntimeCallFunctionReg() { return x1; }
   static Register RuntimeCallArgCountReg() { return x0; }
-  static RegList CCalleeSaveRegisters() {
-    return (1 << x19.code()) | (1 << x20.code()) | (1 << x21.code()) |
-           (1 << x22.code()) | (1 << x23.code()) | (1 << x24.code()) |
-           (1 << x25.code()) | (1 << x26.code()) | (1 << x27.code()) |
-           (1 << x28.code()) | (1 << x29.code()) | (1 << x30.code());
-  }
-  static RegList CCalleeSaveFPRegisters() {
-    return (1 << d8.code()) | (1 << d9.code()) | (1 << d10.code()) |
-           (1 << d11.code()) | (1 << d12.code()) | (1 << d13.code()) |
-           (1 << d14.code()) | (1 << d15.code());
-  }
-  static Register CRegisterParameter(int i) {
-    static Register register_parameters[] = {x0, x1, x2, x3, x4, x5, x6, x7};
-    return register_parameters[i];
-  }
-  static int CRegisterParametersLength() { return 8; }
-  static int CStackBackingStoreLength() { return 0; }
 };
 
 
@@ -75,12 +58,6 @@ CallDescriptor* Linkage::GetStubCallDescriptor(
 }
 
 
-CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
-                                                  const MachineSignature* sig) {
-  return LH::GetSimplifiedCDescriptor(zone, sig);
-}
-
-
 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) {
   return LH::GetInterpreterDispatchDescriptor(zone);
 }
diff --git a/src/compiler/c-linkage.cc b/src/compiler/c-linkage.cc
new file mode 100644 (file)
index 0000000..7ec4976
--- /dev/null
@@ -0,0 +1,245 @@
+// Copyright 2015 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "src/assembler.h"
+#include "src/macro-assembler.h"
+
+#include "src/compiler/linkage.h"
+
+#include "src/zone.h"
+
+namespace v8 {
+namespace internal {
+namespace compiler {
+
+namespace {
+// Platform-specific configuration for C calling convention.
+LinkageLocation regloc(Register reg) {
+  return LinkageLocation(Register::ToAllocationIndex(reg));
+}
+
+
+LinkageLocation stackloc(int i) {
+  DCHECK_LT(i, 0);
+  return LinkageLocation(i);
+}
+
+
+#if V8_TARGET_ARCH_IA32
+// ===========================================================================
+// == ia32 ===================================================================
+// ===========================================================================
+#define RETURN_REGISTER_0 eax
+#define RETURN_REGISTER_1 edx
+#define CALLEE_SAVE_REGISTERS esi.bit() | edi.bit() | ebx.bit()
+
+#elif V8_TARGET_ARCH_X64
+// ===========================================================================
+// == x64 ====================================================================
+// ===========================================================================
+#define RETURN_REGISTER_0 rax
+#define RETURN_REGISTER_1 rdx
+
+#ifdef _WIN64
+// == x64 windows ============================================================
+#define STACK_SHADOW_WORDS 4
+#define PARAM_REGISTERS rcx, rdx, r8, r9
+#define CALLEE_SAVE_REGISTERS                                             \
+  rbx.bit() | rdi.bit() | rsi.bit() | r12.bit() | r13.bit() | r14.bit() | \
+      r15.bit()
+#define CALLEE_SAVE_FP_REGISTERS                                        \
+  (1 << xmm6.code()) | (1 << xmm7.code()) | (1 << xmm8.code()) |        \
+      (1 << xmm9.code()) | (1 << xmm10.code()) | (1 << xmm11.code()) |  \
+      (1 << xmm12.code()) | (1 << xmm13.code()) | (1 << xmm14.code()) | \
+      (1 << xmm15.code())
+#else
+// == x64 other ==============================================================
+#define PARAM_REGISTERS rdi, rsi, rdx, rcx, r8, r9
+#define CALLEE_SAVE_REGISTERS \
+  rbx.bit() | r12.bit() | r13.bit() | r14.bit() | r15.bit()
+#endif
+
+#elif V8_TARGET_ARCH_X87
+// ===========================================================================
+// == x87 ====================================================================
+// ===========================================================================
+#define RETURN_REGISTER_0 eax
+#define RETURN_REGISTER_1 edx
+#define CALLEE_SAVE_REGISTERS esi.bit() | edi.bit() | ebx.bit()
+
+#elif V8_TARGET_ARCH_ARM
+// ===========================================================================
+// == arm ====================================================================
+// ===========================================================================
+#define PARAM_REGISTERS r0, r1, r2, r3
+#define RETURN_REGISTER_0 r0
+#define RETURN_REGISTER_1 r1
+#define CALLEE_SAVE_REGISTERS \
+  r4.bit() | r5.bit() | r6.bit() | r7.bit() | r8.bit() | r9.bit() | r10.bit()
+#define CALLEE_SAVE_FP_REGISTERS                                  \
+  (1 << d8.code()) | (1 << d9.code()) | (1 << d10.code()) |       \
+      (1 << d11.code()) | (1 << d12.code()) | (1 << d13.code()) | \
+      (1 << d14.code()) | (1 << d15.code())
+
+
+#elif V8_TARGET_ARCH_ARM64
+// ===========================================================================
+// == arm64 ====================================================================
+// ===========================================================================
+#define PARAM_REGISTERS x0, x1, x2, x3, x4, x5, x6, x7
+#define RETURN_REGISTER_0 x0
+#define RETURN_REGISTER_1 x1
+#define CALLEE_SAVE_REGISTERS                                     \
+  (1 << x19.code()) | (1 << x20.code()) | (1 << x21.code()) |     \
+      (1 << x22.code()) | (1 << x23.code()) | (1 << x24.code()) | \
+      (1 << x25.code()) | (1 << x26.code()) | (1 << x27.code()) | \
+      (1 << x28.code()) | (1 << x29.code()) | (1 << x30.code())
+
+
+#define CALLEE_SAVE_FP_REGISTERS                                  \
+  (1 << d8.code()) | (1 << d9.code()) | (1 << d10.code()) |       \
+      (1 << d11.code()) | (1 << d12.code()) | (1 << d13.code()) | \
+      (1 << d14.code()) | (1 << d15.code())
+
+#elif V8_TARGET_ARCH_MIPS
+// ===========================================================================
+// == mips ===================================================================
+// ===========================================================================
+#define PARAM_REGISTERS a0, a1, a2, a3
+#define RETURN_REGISTER_0 v0
+#define RETURN_REGISTER_1 v1
+#define CALLEE_SAVE_REGISTERS                                                  \
+  s0.bit() | s1.bit() | s2.bit() | s3.bit() | s4.bit() | s5.bit() | s6.bit() | \
+      s7.bit()
+#define CALLEE_SAVE_FP_REGISTERS \
+  f20.bit() | f22.bit() | f24.bit() | f26.bit() | f28.bit() | f30.bit()
+
+#elif V8_TARGET_ARCH_MIPS64
+// ===========================================================================
+// == mips64 =================================================================
+// ===========================================================================
+#define PARAM_REGISTERS a0, a1, a2, a3, a4, a5, a6, a7
+#define RETURN_REGISTER_0 v0
+#define RETURN_REGISTER_1 v1
+#define CALLEE_SAVE_REGISTERS                                                  \
+  s0.bit() | s1.bit() | s2.bit() | s3.bit() | s4.bit() | s5.bit() | s6.bit() | \
+      s7.bit()
+#define CALLEE_SAVE_FP_REGISTERS \
+  f20.bit() | f22.bit() | f24.bit() | f26.bit() | f28.bit() | f30.bit()
+
+#elif V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64
+// ===========================================================================
+// == ppc & ppc64 ============================================================
+// ===========================================================================
+#define PARAM_REGISTERS r3, r4, r5, r6, r7, r8, r9, r10
+#define RETURN_REGISTER_0 r3
+#define RETURN_REGISTER_1 r4
+#define CALLEE_SAVE_REGISTERS                                                 \
+  r14.bit() | r15.bit() | r16.bit() | r17.bit() | r18.bit() | r19.bit() |     \
+      r20.bit() | r21.bit() | r22.bit() | r23.bit() | r24.bit() | r25.bit() | \
+      r26.bit() | r27.bit() | r28.bit() | r29.bit() | r30.bit() | fp.bit()
+
+#else
+// ===========================================================================
+// == unknown ================================================================
+// ===========================================================================
+// Don't define anything. The below code will dynamically fail.
+#endif
+}  // namespace
+
+
+// General code uses the above configuration data.
+CallDescriptor* Linkage::GetSimplifiedCDescriptor(
+    Zone* zone, const MachineSignature* msig) {
+  LocationSignature::Builder locations(zone, msig->return_count(),
+                                       msig->parameter_count());
+#if 0  // TODO(titzer): instruction selector tests break here.
+  // Check the types of the signature.
+  // Currently no floating point parameters or returns are allowed because
+  // on x87 and ia32, the FP top of stack is involved.
+
+  for (size_t i = 0; i < msig->return_count(); i++) {
+    MachineType type = RepresentationOf(msig->GetReturn(i));
+    CHECK(type != kRepFloat32 && type != kRepFloat64);
+  }
+  for (size_t i = 0; i < msig->parameter_count(); i++) {
+    MachineType type = RepresentationOf(msig->GetParam(i));
+    CHECK(type != kRepFloat32 && type != kRepFloat64);
+  }
+#endif
+
+#ifdef RETURN_REGISTER_0
+  // Add return location(s).
+  CHECK(locations.return_count_ <= 2);
+
+  if (locations.return_count_ > 0) {
+    locations.AddReturn(regloc(RETURN_REGISTER_0));
+  }
+  if (locations.return_count_ > 1) {
+    locations.AddReturn(regloc(RETURN_REGISTER_1));
+  }
+#else
+  // This method should not be called on unknown architectures.
+  V8_Fatal(__FILE__, __LINE__,
+           "requested C call descriptor on unsupported architecture");
+  return nullptr;
+#endif
+
+  const int parameter_count = static_cast<int>(msig->parameter_count());
+
+#ifdef PARAM_REGISTERS
+  static const Register kParamRegisters[] = {PARAM_REGISTERS};
+  static const int kParamRegisterCount =
+      static_cast<int>(arraysize(kParamRegisters));
+#else
+  static const Register* kParamRegisters = nullptr;
+  static const int kParamRegisterCount = 0;
+#endif
+
+#ifdef STACK_SHADOW_WORDS
+  int stack_offset = STACK_SHADOW_WORDS;
+#else
+  int stack_offset = 0;
+#endif
+  // Add register and/or stack parameter(s).
+  for (int i = 0; i < parameter_count; i++) {
+    if (i < kParamRegisterCount) {
+      locations.AddParam(regloc(kParamRegisters[i]));
+    } else {
+      locations.AddParam(stackloc(-1 - stack_offset));
+      stack_offset++;
+    }
+  }
+
+#ifdef CALLEE_SAVE_REGISTERS
+  const RegList kCalleeSaveRegisters = CALLEE_SAVE_REGISTERS;
+#else
+  const RegList kCalleeSaveRegisters = 0;
+#endif
+
+#ifdef CALLEE_SAVE_FP_REGISTERS
+  const RegList kCalleeSaveFPRegisters = CALLEE_SAVE_FP_REGISTERS;
+#else
+  const RegList kCalleeSaveFPRegisters = 0;
+#endif
+
+  // The target for C calls is always an address (i.e. machine pointer).
+  MachineType target_type = kMachPtr;
+  LinkageLocation target_loc = LinkageLocation::AnyRegister();
+  return new (zone) CallDescriptor(  // --
+      CallDescriptor::kCallAddress,  // kind
+      target_type,                   // target MachineType
+      target_loc,                    // target location
+      msig,                          // machine_sig
+      locations.Build(),             // location_sig
+      0,                             // js_parameter_count
+      Operator::kNoProperties,       // properties
+      kCalleeSaveRegisters,          // callee-saved registers
+      kCalleeSaveFPRegisters,        // callee-saved fp regs
+      CallDescriptor::kNoFlags,      // flags
+      "c-call");
+}
+}
+}
+}
index 02ad5a7..9de4ca0 100644 (file)
@@ -22,13 +22,6 @@ struct IA32LinkageHelperTraits {
   static Register InterpreterDispatchTableReg() { return ebx; }
   static Register RuntimeCallFunctionReg() { return ebx; }
   static Register RuntimeCallArgCountReg() { return eax; }
-  static RegList CCalleeSaveRegisters() {
-    return esi.bit() | edi.bit() | ebx.bit();
-  }
-  static RegList CCalleeSaveFPRegisters() { return 0; }
-  static Register CRegisterParameter(int i) { return no_reg; }
-  static int CRegisterParametersLength() { return 0; }
-  static int CStackBackingStoreLength() { return 0; }
 };
 
 typedef LinkageHelper<IA32LinkageHelperTraits> LH;
@@ -58,12 +51,6 @@ CallDescriptor* Linkage::GetStubCallDescriptor(
 }
 
 
-CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
-                                                  const MachineSignature* sig) {
-  return LH::GetSimplifiedCDescriptor(zone, sig);
-}
-
-
 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) {
   return LH::GetInterpreterDispatchDescriptor(zone);
 }
index e455223..e65ad9e 100644 (file)
@@ -197,42 +197,6 @@ class LinkageHelper {
         descriptor.DebugName(isolate));
   }
 
-  static CallDescriptor* GetSimplifiedCDescriptor(
-      Zone* zone, const MachineSignature* msig) {
-    LocationSignature::Builder locations(zone, msig->return_count(),
-                                         msig->parameter_count());
-    // Add return location(s).
-    AddReturnLocations(&locations);
-
-    // Add register and/or stack parameter(s).
-    const int parameter_count = static_cast<int>(msig->parameter_count());
-    int stack_offset = LinkageTraits::CStackBackingStoreLength();
-    for (int i = 0; i < parameter_count; i++) {
-      if (i < LinkageTraits::CRegisterParametersLength()) {
-        locations.AddParam(regloc(LinkageTraits::CRegisterParameter(i)));
-      } else {
-        locations.AddParam(stackloc(-1 - stack_offset));
-        stack_offset++;
-      }
-    }
-
-    // The target for C calls is always an address (i.e. machine pointer).
-    MachineType target_type = kMachPtr;
-    LinkageLocation target_loc = LinkageLocation::AnyRegister();
-    return new (zone) CallDescriptor(             // --
-        CallDescriptor::kCallAddress,             // kind
-        target_type,                              // target MachineType
-        target_loc,                               // target location
-        msig,                                     // machine_sig
-        locations.Build(),                        // location_sig
-        0,                                        // js_parameter_count
-        Operator::kNoProperties,                  // properties
-        LinkageTraits::CCalleeSaveRegisters(),    // callee-saved registers
-        LinkageTraits::CCalleeSaveFPRegisters(),  // callee-saved fp regs
-        CallDescriptor::kNoFlags,                 // flags
-        "c-call");
-  }
-
   static CallDescriptor* GetInterpreterDispatchDescriptor(Zone* zone) {
     MachineSignature::Builder types(zone, 0, 3);
     LocationSignature::Builder locations(zone, 0, 3);
index e71f823..b2e1aec 100644 (file)
@@ -282,11 +282,6 @@ CallDescriptor* Linkage::GetStubCallDescriptor(
 }
 
 
-CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
-                                                  const MachineSignature* sig) {
-  UNIMPLEMENTED();
-  return NULL;
-}
 #endif  // !V8_TURBOFAN_BACKEND
 }  // namespace compiler
 }  // namespace internal
index 610ebbb..67316a8 100644 (file)
@@ -28,20 +28,6 @@ struct MipsLinkageHelperTraits {
   }
   static Register RuntimeCallFunctionReg() { return a1; }
   static Register RuntimeCallArgCountReg() { return a0; }
-  static RegList CCalleeSaveRegisters() {
-    return s0.bit() | s1.bit() | s2.bit() | s3.bit() | s4.bit() | s5.bit() |
-           s6.bit() | s7.bit();
-  }
-  static RegList CCalleeSaveFPRegisters() {
-    return f20.bit() | f22.bit() | f24.bit() | f26.bit() | f28.bit() |
-           f30.bit();
-  }
-  static Register CRegisterParameter(int i) {
-    static Register register_parameters[] = {a0, a1, a2, a3};
-    return register_parameters[i];
-  }
-  static int CRegisterParametersLength() { return 4; }
-  static int CStackBackingStoreLength() { return 0; }
 };
 
 
@@ -72,12 +58,6 @@ CallDescriptor* Linkage::GetStubCallDescriptor(
 }
 
 
-CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
-                                                  const MachineSignature* sig) {
-  return LH::GetSimplifiedCDescriptor(zone, sig);
-}
-
-
 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) {
   return LH::GetInterpreterDispatchDescriptor(zone);
 }
index 29cda7f..67316a8 100644 (file)
@@ -28,20 +28,6 @@ struct MipsLinkageHelperTraits {
   }
   static Register RuntimeCallFunctionReg() { return a1; }
   static Register RuntimeCallArgCountReg() { return a0; }
-  static RegList CCalleeSaveRegisters() {
-    return s0.bit() | s1.bit() | s2.bit() | s3.bit() | s4.bit() | s5.bit() |
-           s6.bit() | s7.bit();
-  }
-  static RegList CCalleeSaveFPRegisters() {
-    return f20.bit() | f22.bit() | f24.bit() | f26.bit() | f28.bit() |
-           f30.bit();
-  }
-  static Register CRegisterParameter(int i) {
-    static Register register_parameters[] = {a0, a1, a2, a3, a4, a5, a6, a7};
-    return register_parameters[i];
-  }
-  static int CRegisterParametersLength() { return 8; }
-  static int CStackBackingStoreLength() { return 0; }
 };
 
 
@@ -72,12 +58,6 @@ CallDescriptor* Linkage::GetStubCallDescriptor(
 }
 
 
-CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
-                                                  const MachineSignature* sig) {
-  return LH::GetSimplifiedCDescriptor(zone, sig);
-}
-
-
 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) {
   return LH::GetInterpreterDispatchDescriptor(zone);
 }
index af5a7df..ebdaaa0 100644 (file)
@@ -22,19 +22,6 @@ struct PPCLinkageHelperTraits {
   static Register InterpreterDispatchTableReg() { return r16; }
   static Register RuntimeCallFunctionReg() { return r4; }
   static Register RuntimeCallArgCountReg() { return r3; }
-  static RegList CCalleeSaveRegisters() {
-    return r14.bit() | r15.bit() | r16.bit() | r17.bit() | r18.bit() |
-           r19.bit() | r20.bit() | r21.bit() | r22.bit() | r23.bit() |
-           r24.bit() | r25.bit() | r26.bit() | r27.bit() | r28.bit() |
-           r29.bit() | r30.bit() | fp.bit();
-  }
-  static RegList CCalleeSaveFPRegisters() { return 0; }
-  static Register CRegisterParameter(int i) {
-    static Register register_parameters[] = {r3, r4, r5, r6, r7, r8, r9, r10};
-    return register_parameters[i];
-  }
-  static int CRegisterParametersLength() { return 8; }
-  static int CStackBackingStoreLength() { return 0; }
 };
 
 
@@ -65,12 +52,6 @@ CallDescriptor* Linkage::GetStubCallDescriptor(
 }
 
 
-CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
-                                                  const MachineSignature* sig) {
-  return LH::GetSimplifiedCDescriptor(zone, sig);
-}
-
-
 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) {
   return LH::GetInterpreterDispatchDescriptor(zone);
 }
index 5201c3c..d5ae77e 100644 (file)
@@ -12,12 +12,6 @@ namespace v8 {
 namespace internal {
 namespace compiler {
 
-#ifdef _WIN64
-const bool kWin64 = true;
-#else
-const bool kWin64 = false;
-#endif
-
 struct X64LinkageHelperTraits {
   static Register ReturnValueReg() { return rax; }
   static Register ReturnValue2Reg() { return rdx; }
@@ -28,35 +22,6 @@ struct X64LinkageHelperTraits {
   static Register InterpreterDispatchTableReg() { return r15; }
   static Register RuntimeCallFunctionReg() { return rbx; }
   static Register RuntimeCallArgCountReg() { return rax; }
-  static RegList CCalleeSaveRegisters() {
-    if (kWin64) {
-      return rbx.bit() | rdi.bit() | rsi.bit() | r12.bit() | r13.bit() |
-             r14.bit() | r15.bit();
-    } else {
-      return rbx.bit() | r12.bit() | r13.bit() | r14.bit() | r15.bit();
-    }
-  }
-  static RegList CCalleeSaveFPRegisters() {
-    if (kWin64) {
-      return (1 << xmm6.code()) | (1 << xmm7.code()) | (1 << xmm8.code()) |
-             (1 << xmm9.code()) | (1 << xmm10.code()) | (1 << xmm11.code()) |
-             (1 << xmm12.code()) | (1 << xmm13.code()) | (1 << xmm14.code()) |
-             (1 << xmm15.code());
-    } else {
-      return 0;
-    }
-  }
-  static Register CRegisterParameter(int i) {
-    if (kWin64) {
-      static Register register_parameters[] = {rcx, rdx, r8, r9};
-      return register_parameters[i];
-    } else {
-      static Register register_parameters[] = {rdi, rsi, rdx, rcx, r8, r9};
-      return register_parameters[i];
-    }
-  }
-  static int CRegisterParametersLength() { return kWin64 ? 4 : 6; }
-  static int CStackBackingStoreLength() { return kWin64 ? 4 : 0; }
 };
 
 typedef LinkageHelper<X64LinkageHelperTraits> LH;
@@ -86,12 +51,6 @@ CallDescriptor* Linkage::GetStubCallDescriptor(
 }
 
 
-CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
-                                                  const MachineSignature* sig) {
-  return LH::GetSimplifiedCDescriptor(zone, sig);
-}
-
-
 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) {
   return LH::GetInterpreterDispatchDescriptor(zone);
 }
index 37bfd6d..1d20006 100644 (file)
@@ -21,13 +21,6 @@ struct X87LinkageHelperTraits {
   static Register InterpreterDispatchTableReg() { return ebx; }
   static Register RuntimeCallFunctionReg() { return ebx; }
   static Register RuntimeCallArgCountReg() { return eax; }
-  static RegList CCalleeSaveRegisters() {
-    return esi.bit() | edi.bit() | ebx.bit();
-  }
-  static RegList CCalleeSaveFPRegisters() { return 0; }
-  static Register CRegisterParameter(int i) { return no_reg; }
-  static int CRegisterParametersLength() { return 0; }
-  static int CStackBackingStoreLength() { return 0; }
 };
 
 typedef LinkageHelper<X87LinkageHelperTraits> LH;
@@ -57,12 +50,6 @@ CallDescriptor* Linkage::GetStubCallDescriptor(
 }
 
 
-CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
-                                                  const MachineSignature* sig) {
-  return LH::GetSimplifiedCDescriptor(zone, sig);
-}
-
-
 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) {
   return LH::GetInterpreterDispatchDescriptor(zone);
 }
index e7b6993..4879107 100644 (file)
         '../../src/compiler/basic-block-instrumentor.h',
         '../../src/compiler/change-lowering.cc',
         '../../src/compiler/change-lowering.h',
+        '../../src/compiler/c-linkage.cc',
         '../../src/compiler/coalesced-live-ranges.cc',
         '../../src/compiler/coalesced-live-ranges.h',
         '../../src/compiler/code-generator-impl.h',