1// Copyright 2014 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "src/v8.h"
6
7#include "src/assembler.h"
8#include "src/code-stubs.h"
9#include "src/compiler/linkage.h"
10#include "src/compiler/linkage-impl.h"
11#include "src/zone.h"
12
13namespace v8 {
14namespace internal {
15namespace compiler {
16
17struct Arm64LinkageHelperTraits {
18  static Register ReturnValueReg() { return x0; }
19  static Register ReturnValue2Reg() { return x1; }
20  static Register JSCallFunctionReg() { return x1; }
21  static Register ContextReg() { return cp; }
22  static Register RuntimeCallFunctionReg() { return x1; }
23  static Register RuntimeCallArgCountReg() { return x0; }
24  static RegList CCalleeSaveRegisters() {
25    // TODO(dcarney): correct callee saved registers.
26    return 0;
27  }
28  static Register CRegisterParameter(int i) {
29    static Register register_parameters[] = {x0, x1, x2, x3, x4, x5, x6, x7};
30    return register_parameters[i];
31  }
32  static int CRegisterParametersLength() { return 8; }
33};
34
35
36typedef LinkageHelper<Arm64LinkageHelperTraits> LH;
37
38CallDescriptor* Linkage::GetJSCallDescriptor(int parameter_count, Zone* zone) {
39  return LH::GetJSCallDescriptor(zone, parameter_count);
40}
41
42
43CallDescriptor* Linkage::GetRuntimeCallDescriptor(
44    Runtime::FunctionId function, int parameter_count,
45    Operator::Properties properties, Zone* zone) {
46  return LH::GetRuntimeCallDescriptor(zone, function, parameter_count,
47                                      properties);
48}
49
50
51CallDescriptor* Linkage::GetStubCallDescriptor(
52    CallInterfaceDescriptor descriptor, int stack_parameter_count,
53    CallDescriptor::Flags flags, Zone* zone) {
54  return LH::GetStubCallDescriptor(zone, descriptor, stack_parameter_count,
55                                   flags);
56}
57
58
59CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone,
60                                                  MachineSignature* sig) {
61  return LH::GetSimplifiedCDescriptor(zone, sig);
62}
63
64}  // namespace compiler
65}  // namespace internal
66}  // namespace v8
67