V8 Project
codegen-x64.h
Go to the documentation of this file.
1 // Copyright 2011 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 #ifndef V8_X64_CODEGEN_X64_H_
6 #define V8_X64_CODEGEN_X64_H_
7 
8 #include "src/ast.h"
9 #include "src/macro-assembler.h"
10 
11 namespace v8 {
12 namespace internal {
13 
14 
16 
17 
18 class StringCharLoadGenerator : public AllStatic {
19  public:
20  // Generates the code for handling different string types and loading the
21  // indexed character into |result|. We expect |index| as untagged input and
22  // |result| as untagged output.
23  static void Generate(MacroAssembler* masm,
24  Register string,
25  Register index,
26  Register result,
27  Label* call_runtime);
28 
29  private:
31 };
32 
33 
34 class MathExpGenerator : public AllStatic {
35  public:
36  static void EmitMathExp(MacroAssembler* masm,
37  XMMRegister input,
38  XMMRegister result,
39  XMMRegister double_scratch,
40  Register temp1,
41  Register temp2);
42 
43  private:
45 };
46 
47 
51 };
52 
53 
54 class StackArgumentsAccessor BASE_EMBEDDED {
55  public:
57  Register base_reg,
58  int argument_count_immediate,
61  int extra_displacement_to_last_argument = 0)
62  : base_reg_(base_reg),
63  argument_count_reg_(no_reg),
64  argument_count_immediate_(argument_count_immediate),
65  receiver_mode_(receiver_mode),
66  extra_displacement_to_last_argument_(
67  extra_displacement_to_last_argument) { }
68 
70  Register base_reg,
71  Register argument_count_reg,
74  int extra_displacement_to_last_argument = 0)
75  : base_reg_(base_reg),
76  argument_count_reg_(argument_count_reg),
77  argument_count_immediate_(0),
78  receiver_mode_(receiver_mode),
79  extra_displacement_to_last_argument_(
80  extra_displacement_to_last_argument) { }
81 
83  Register base_reg,
84  const ParameterCount& parameter_count,
87  int extra_displacement_to_last_argument = 0)
88  : base_reg_(base_reg),
89  argument_count_reg_(parameter_count.is_reg() ?
90  parameter_count.reg() : no_reg),
91  argument_count_immediate_(parameter_count.is_immediate() ?
92  parameter_count.immediate() : 0),
93  receiver_mode_(receiver_mode),
94  extra_displacement_to_last_argument_(
95  extra_displacement_to_last_argument) { }
96 
99  DCHECK(receiver_mode_ == ARGUMENTS_CONTAIN_RECEIVER);
100  return GetArgumentOperand(0);
101  }
102 
103  private:
109 
110  DISALLOW_IMPLICIT_CONSTRUCTORS(StackArgumentsAccessor);
111 };
112 
113 
114 } } // namespace v8::internal
115 
116 #endif // V8_X64_CODEGEN_X64_H_
#define BASE_EMBEDDED
Definition: allocation.h:45
StackArgumentsAccessor(Register base_reg, int argument_count_immediate, StackArgumentsAccessorReceiverMode receiver_mode=ARGUMENTS_CONTAIN_RECEIVER, int extra_displacement_to_last_argument=0)
Definition: codegen-x64.h:56
const int extra_displacement_to_last_argument_
Definition: codegen-x64.h:108
const Register argument_count_reg_
Definition: codegen-x64.h:105
Operand GetArgumentOperand(int index)
DISALLOW_IMPLICIT_CONSTRUCTORS(StackArgumentsAccessor)
StackArgumentsAccessor(Register base_reg, const ParameterCount &parameter_count, StackArgumentsAccessorReceiverMode receiver_mode=ARGUMENTS_CONTAIN_RECEIVER, int extra_displacement_to_last_argument=0)
Definition: codegen-x64.h:82
const StackArgumentsAccessorReceiverMode receiver_mode_
Definition: codegen-x64.h:107
StackArgumentsAccessor(Register base_reg, Register argument_count_reg, StackArgumentsAccessorReceiverMode receiver_mode=ARGUMENTS_CONTAIN_RECEIVER, int extra_displacement_to_last_argument=0)
Definition: codegen-x64.h:69
DISALLOW_COPY_AND_ASSIGN(MathExpGenerator)
static void EmitMathExp(MacroAssembler *masm, XMMRegister input, XMMRegister result, XMMRegister double_scratch, Register temp1, Register temp2)
DISALLOW_COPY_AND_ASSIGN(StringCharLoadGenerator)
static void Generate(MacroAssembler *masm, Register string, Register index, Register result, Label *call_runtime)
#define DCHECK(condition)
Definition: logging.h:205
StackArgumentsAccessorReceiverMode
Definition: codegen-x64.h:48
@ ARGUMENTS_DONT_CONTAIN_RECEIVER
Definition: codegen-x64.h:50
@ ARGUMENTS_CONTAIN_RECEIVER
Definition: codegen-x64.h:49
const Register no_reg
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20