1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission.
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #ifndef V8_X64_CODEGEN_X64_H_
29 #define V8_X64_CODEGEN_X64_H_
38 enum TypeofState { INSIDE_TYPEOF, NOT_INSIDE_TYPEOF };
41 class StringCharLoadGenerator : public AllStatic {
43 // Generates the code for handling different string types and loading the
44 // indexed character into |result|. We expect |index| as untagged input and
45 // |result| as untagged output.
46 static void Generate(MacroAssembler* masm,
53 DISALLOW_COPY_AND_ASSIGN(StringCharLoadGenerator);
57 class MathExpGenerator : public AllStatic {
59 static void EmitMathExp(MacroAssembler* masm,
62 XMMRegister double_scratch,
67 DISALLOW_COPY_AND_ASSIGN(MathExpGenerator);
71 enum StackArgumentsAccessorReceiverMode {
72 ARGUMENTS_CONTAIN_RECEIVER,
73 ARGUMENTS_DONT_CONTAIN_RECEIVER
77 class StackArgumentsAccessor BASE_EMBEDDED {
79 StackArgumentsAccessor(
81 int argument_count_immediate,
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_(no_reg),
87 argument_count_immediate_(argument_count_immediate),
88 receiver_mode_(receiver_mode),
89 extra_displacement_to_last_argument_(
90 extra_displacement_to_last_argument) { }
92 StackArgumentsAccessor(
94 Register argument_count_reg,
95 StackArgumentsAccessorReceiverMode receiver_mode =
96 ARGUMENTS_CONTAIN_RECEIVER,
97 int extra_displacement_to_last_argument = 0)
98 : base_reg_(base_reg),
99 argument_count_reg_(argument_count_reg),
100 argument_count_immediate_(0),
101 receiver_mode_(receiver_mode),
102 extra_displacement_to_last_argument_(
103 extra_displacement_to_last_argument) { }
105 StackArgumentsAccessor(
107 const ParameterCount& parameter_count,
108 StackArgumentsAccessorReceiverMode receiver_mode =
109 ARGUMENTS_CONTAIN_RECEIVER,
110 int extra_displacement_to_last_argument = 0)
111 : base_reg_(base_reg),
112 argument_count_reg_(parameter_count.is_reg() ?
113 parameter_count.reg() : no_reg),
114 argument_count_immediate_(parameter_count.is_immediate() ?
115 parameter_count.immediate() : 0),
116 receiver_mode_(receiver_mode),
117 extra_displacement_to_last_argument_(
118 extra_displacement_to_last_argument) { }
120 Operand GetArgumentOperand(int index);
121 Operand GetReceiverOperand() {
122 ASSERT(receiver_mode_ == ARGUMENTS_CONTAIN_RECEIVER);
123 return GetArgumentOperand(0);
127 const Register base_reg_;
128 const Register argument_count_reg_;
129 const int argument_count_immediate_;
130 const StackArgumentsAccessorReceiverMode receiver_mode_;
131 const int extra_displacement_to_last_argument_;
133 DISALLOW_IMPLICIT_CONSTRUCTORS(StackArgumentsAccessor);
137 } } // namespace v8::internal
139 #endif // V8_X64_CODEGEN_X64_H_