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 class StringCharLoadGenerator : public AllStatic {
17 // Generates the code for handling different string types and loading the
18 // indexed character into |result|. We expect |index| as untagged input and
19 // |result| as untagged output.
20 static void Generate(MacroAssembler* masm,
27 DISALLOW_COPY_AND_ASSIGN(StringCharLoadGenerator);
31 class MathExpGenerator : public AllStatic {
33 static void EmitMathExp(MacroAssembler* masm,
36 XMMRegister double_scratch,
41 DISALLOW_COPY_AND_ASSIGN(MathExpGenerator);
45 enum StackArgumentsAccessorReceiverMode {
46 ARGUMENTS_CONTAIN_RECEIVER,
47 ARGUMENTS_DONT_CONTAIN_RECEIVER
51 class StackArgumentsAccessor BASE_EMBEDDED {
53 StackArgumentsAccessor(
55 int argument_count_immediate,
56 StackArgumentsAccessorReceiverMode receiver_mode =
57 ARGUMENTS_CONTAIN_RECEIVER,
58 int extra_displacement_to_last_argument = 0)
59 : base_reg_(base_reg),
60 argument_count_reg_(no_reg),
61 argument_count_immediate_(argument_count_immediate),
62 receiver_mode_(receiver_mode),
63 extra_displacement_to_last_argument_(
64 extra_displacement_to_last_argument) { }
66 StackArgumentsAccessor(
68 Register argument_count_reg,
69 StackArgumentsAccessorReceiverMode receiver_mode =
70 ARGUMENTS_CONTAIN_RECEIVER,
71 int extra_displacement_to_last_argument = 0)
72 : base_reg_(base_reg),
73 argument_count_reg_(argument_count_reg),
74 argument_count_immediate_(0),
75 receiver_mode_(receiver_mode),
76 extra_displacement_to_last_argument_(
77 extra_displacement_to_last_argument) { }
79 StackArgumentsAccessor(
81 const ParameterCount& parameter_count,
82 StackArgumentsAccessorReceiverMode receiver_mode =
83 ARGUMENTS_CONTAIN_RECEIVER,
84 int extra_displacement_to_last_argument = 0)
85 : base_reg_(base_reg),
86 argument_count_reg_(parameter_count.is_reg() ?
87 parameter_count.reg() : no_reg),
88 argument_count_immediate_(parameter_count.is_immediate() ?
89 parameter_count.immediate() : 0),
90 receiver_mode_(receiver_mode),
91 extra_displacement_to_last_argument_(
92 extra_displacement_to_last_argument) { }
94 Operand GetArgumentOperand(int index);
95 Operand GetReceiverOperand() {
96 DCHECK(receiver_mode_ == ARGUMENTS_CONTAIN_RECEIVER);
97 return GetArgumentOperand(0);
101 const Register base_reg_;
102 const Register argument_count_reg_;
103 const int argument_count_immediate_;
104 const StackArgumentsAccessorReceiverMode receiver_mode_;
105 const int extra_displacement_to_last_argument_;
107 DISALLOW_IMPLICIT_CONSTRUCTORS(StackArgumentsAccessor);
111 } // namespace internal
114 #endif // V8_X64_CODEGEN_X64_H_