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.
5 #ifndef V8_X64_CODEGEN_X64_H_
6 #define V8_X64_CODEGEN_X64_H_
9 #include "src/macro-assembler.h"
15 enum TypeofState { INSIDE_TYPEOF, NOT_INSIDE_TYPEOF };
18 class StringCharLoadGenerator : public AllStatic {
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,
30 DISALLOW_COPY_AND_ASSIGN(StringCharLoadGenerator);
34 class MathExpGenerator : public AllStatic {
36 static void EmitMathExp(MacroAssembler* masm,
39 XMMRegister double_scratch,
44 DISALLOW_COPY_AND_ASSIGN(MathExpGenerator);
48 enum StackArgumentsAccessorReceiverMode {
49 ARGUMENTS_CONTAIN_RECEIVER,
50 ARGUMENTS_DONT_CONTAIN_RECEIVER
54 class StackArgumentsAccessor BASE_EMBEDDED {
56 StackArgumentsAccessor(
58 int argument_count_immediate,
59 StackArgumentsAccessorReceiverMode receiver_mode =
60 ARGUMENTS_CONTAIN_RECEIVER,
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) { }
69 StackArgumentsAccessor(
71 Register argument_count_reg,
72 StackArgumentsAccessorReceiverMode receiver_mode =
73 ARGUMENTS_CONTAIN_RECEIVER,
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) { }
82 StackArgumentsAccessor(
84 const ParameterCount& parameter_count,
85 StackArgumentsAccessorReceiverMode receiver_mode =
86 ARGUMENTS_CONTAIN_RECEIVER,
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) { }
97 Operand GetArgumentOperand(int index);
98 Operand GetReceiverOperand() {
99 DCHECK(receiver_mode_ == ARGUMENTS_CONTAIN_RECEIVER);
100 return GetArgumentOperand(0);
104 const Register base_reg_;
105 const Register argument_count_reg_;
106 const int argument_count_immediate_;
107 const StackArgumentsAccessorReceiverMode receiver_mode_;
108 const int extra_displacement_to_last_argument_;
110 DISALLOW_IMPLICIT_CONSTRUCTORS(StackArgumentsAccessor);
114 } } // namespace v8::internal
116 #endif // V8_X64_CODEGEN_X64_H_