OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM | 7 #if V8_TARGET_ARCH_ARM |
8 | 8 |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
11 #include "src/codegen.h" | 11 #include "src/codegen.h" |
12 #include "src/ic/handler-compiler.h" | 12 #include "src/ic/handler-compiler.h" |
13 #include "src/isolate.h" | 13 #include "src/isolate.h" |
14 #include "src/jsregexp.h" | 14 #include "src/jsregexp.h" |
15 #include "src/regexp-macro-assembler.h" | 15 #include "src/regexp-macro-assembler.h" |
16 #include "src/runtime.h" | 16 #include "src/runtime.h" |
17 | 17 |
18 namespace v8 { | 18 namespace v8 { |
19 namespace internal { | 19 namespace internal { |
20 | 20 |
21 | 21 |
22 void FastNewClosureStub::InitializeInterfaceDescriptor( | 22 void FastNewClosureStub::InitializeInterfaceDescriptor( |
23 CodeStubInterfaceDescriptor* descriptor) { | 23 CodeStubInterfaceDescriptor* descriptor) { |
24 Register registers[] = { cp, r2 }; | 24 Register registers[] = { cp, r2 }; |
25 descriptor->Initialize( | 25 descriptor->Initialize( |
26 MajorKey(), ARRAY_SIZE(registers), registers, | 26 MajorKey(), arraysize(registers), registers, |
27 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry); | 27 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry); |
28 } | 28 } |
29 | 29 |
30 | 30 |
31 void FastNewContextStub::InitializeInterfaceDescriptor( | 31 void FastNewContextStub::InitializeInterfaceDescriptor( |
32 CodeStubInterfaceDescriptor* descriptor) { | 32 CodeStubInterfaceDescriptor* descriptor) { |
33 Register registers[] = { cp, r1 }; | 33 Register registers[] = { cp, r1 }; |
34 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers); | 34 descriptor->Initialize(MajorKey(), arraysize(registers), registers); |
35 } | 35 } |
36 | 36 |
37 | 37 |
38 void ToNumberStub::InitializeInterfaceDescriptor( | 38 void ToNumberStub::InitializeInterfaceDescriptor( |
39 CodeStubInterfaceDescriptor* descriptor) { | 39 CodeStubInterfaceDescriptor* descriptor) { |
40 Register registers[] = { cp, r0 }; | 40 Register registers[] = { cp, r0 }; |
41 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers); | 41 descriptor->Initialize(MajorKey(), arraysize(registers), registers); |
42 } | 42 } |
43 | 43 |
44 | 44 |
45 void NumberToStringStub::InitializeInterfaceDescriptor( | 45 void NumberToStringStub::InitializeInterfaceDescriptor( |
46 CodeStubInterfaceDescriptor* descriptor) { | 46 CodeStubInterfaceDescriptor* descriptor) { |
47 Register registers[] = { cp, r0 }; | 47 Register registers[] = { cp, r0 }; |
48 descriptor->Initialize( | 48 descriptor->Initialize( |
49 MajorKey(), ARRAY_SIZE(registers), registers, | 49 MajorKey(), arraysize(registers), registers, |
50 Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); | 50 Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); |
51 } | 51 } |
52 | 52 |
53 | 53 |
54 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( | 54 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( |
55 CodeStubInterfaceDescriptor* descriptor) { | 55 CodeStubInterfaceDescriptor* descriptor) { |
56 Register registers[] = { cp, r3, r2, r1 }; | 56 Register registers[] = { cp, r3, r2, r1 }; |
57 Representation representations[] = { | 57 Representation representations[] = { |
58 Representation::Tagged(), | 58 Representation::Tagged(), |
59 Representation::Tagged(), | 59 Representation::Tagged(), |
60 Representation::Smi(), | 60 Representation::Smi(), |
61 Representation::Tagged() }; | 61 Representation::Tagged() }; |
62 descriptor->Initialize( | 62 descriptor->Initialize( |
63 MajorKey(), ARRAY_SIZE(registers), registers, | 63 MajorKey(), arraysize(registers), registers, |
64 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry, | 64 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry, |
65 representations); | 65 representations); |
66 } | 66 } |
67 | 67 |
68 | 68 |
69 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( | 69 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( |
70 CodeStubInterfaceDescriptor* descriptor) { | 70 CodeStubInterfaceDescriptor* descriptor) { |
71 Register registers[] = { cp, r3, r2, r1, r0 }; | 71 Register registers[] = { cp, r3, r2, r1, r0 }; |
72 descriptor->Initialize( | 72 descriptor->Initialize( |
73 MajorKey(), ARRAY_SIZE(registers), registers, | 73 MajorKey(), arraysize(registers), registers, |
74 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry); | 74 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry); |
75 } | 75 } |
76 | 76 |
77 | 77 |
78 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( | 78 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( |
79 CodeStubInterfaceDescriptor* descriptor) { | 79 CodeStubInterfaceDescriptor* descriptor) { |
80 Register registers[] = { cp, r2, r3 }; | 80 Register registers[] = { cp, r2, r3 }; |
81 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers); | 81 descriptor->Initialize(MajorKey(), arraysize(registers), registers); |
82 } | 82 } |
83 | 83 |
84 | 84 |
85 void CallFunctionStub::InitializeInterfaceDescriptor( | 85 void CallFunctionStub::InitializeInterfaceDescriptor( |
86 CodeStubInterfaceDescriptor* descriptor) { | 86 CodeStubInterfaceDescriptor* descriptor) { |
87 // r1 function the function to call | 87 // r1 function the function to call |
88 Register registers[] = {cp, r1}; | 88 Register registers[] = {cp, r1}; |
89 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers); | 89 descriptor->Initialize(MajorKey(), arraysize(registers), registers); |
90 } | 90 } |
91 | 91 |
92 | 92 |
93 void CallConstructStub::InitializeInterfaceDescriptor( | 93 void CallConstructStub::InitializeInterfaceDescriptor( |
94 CodeStubInterfaceDescriptor* descriptor) { | 94 CodeStubInterfaceDescriptor* descriptor) { |
95 // r0 : number of arguments | 95 // r0 : number of arguments |
96 // r1 : the function to call | 96 // r1 : the function to call |
97 // r2 : feedback vector | 97 // r2 : feedback vector |
98 // r3 : (only if r2 is not the megamorphic symbol) slot in feedback | 98 // r3 : (only if r2 is not the megamorphic symbol) slot in feedback |
99 // vector (Smi) | 99 // vector (Smi) |
100 // TODO(turbofan): So far we don't gather type feedback and hence skip the | 100 // TODO(turbofan): So far we don't gather type feedback and hence skip the |
101 // slot parameter, but ArrayConstructStub needs the vector to be undefined. | 101 // slot parameter, but ArrayConstructStub needs the vector to be undefined. |
102 Register registers[] = {cp, r0, r1, r2}; | 102 Register registers[] = {cp, r0, r1, r2}; |
103 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers); | 103 descriptor->Initialize(MajorKey(), arraysize(registers), registers); |
104 } | 104 } |
105 | 105 |
106 | 106 |
107 void RegExpConstructResultStub::InitializeInterfaceDescriptor( | 107 void RegExpConstructResultStub::InitializeInterfaceDescriptor( |
108 CodeStubInterfaceDescriptor* descriptor) { | 108 CodeStubInterfaceDescriptor* descriptor) { |
109 Register registers[] = { cp, r2, r1, r0 }; | 109 Register registers[] = { cp, r2, r1, r0 }; |
110 descriptor->Initialize( | 110 descriptor->Initialize( |
111 MajorKey(), ARRAY_SIZE(registers), registers, | 111 MajorKey(), arraysize(registers), registers, |
112 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); | 112 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); |
113 } | 113 } |
114 | 114 |
115 | 115 |
116 void TransitionElementsKindStub::InitializeInterfaceDescriptor( | 116 void TransitionElementsKindStub::InitializeInterfaceDescriptor( |
117 CodeStubInterfaceDescriptor* descriptor) { | 117 CodeStubInterfaceDescriptor* descriptor) { |
118 Register registers[] = { cp, r0, r1 }; | 118 Register registers[] = { cp, r0, r1 }; |
119 Address entry = | 119 Address entry = |
120 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry; | 120 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry; |
121 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers, | 121 descriptor->Initialize(MajorKey(), arraysize(registers), registers, |
122 FUNCTION_ADDR(entry)); | 122 FUNCTION_ADDR(entry)); |
123 } | 123 } |
124 | 124 |
125 | 125 |
126 void CompareNilICStub::InitializeInterfaceDescriptor( | 126 void CompareNilICStub::InitializeInterfaceDescriptor( |
127 CodeStubInterfaceDescriptor* descriptor) { | 127 CodeStubInterfaceDescriptor* descriptor) { |
128 Register registers[] = { cp, r0 }; | 128 Register registers[] = { cp, r0 }; |
129 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers, | 129 descriptor->Initialize(MajorKey(), arraysize(registers), registers, |
130 FUNCTION_ADDR(CompareNilIC_Miss)); | 130 FUNCTION_ADDR(CompareNilIC_Miss)); |
131 descriptor->SetMissHandler( | 131 descriptor->SetMissHandler( |
132 ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); | 132 ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); |
133 } | 133 } |
134 | 134 |
135 | 135 |
136 const Register InterfaceDescriptor::ContextRegister() { return cp; } | 136 const Register InterfaceDescriptor::ContextRegister() { return cp; } |
137 | 137 |
138 | 138 |
139 static void InitializeArrayConstructorDescriptor( | 139 static void InitializeArrayConstructorDescriptor( |
140 CodeStub::Major major, CodeStubInterfaceDescriptor* descriptor, | 140 CodeStub::Major major, CodeStubInterfaceDescriptor* descriptor, |
141 int constant_stack_parameter_count) { | 141 int constant_stack_parameter_count) { |
142 // register state | 142 // register state |
143 // cp -- context | 143 // cp -- context |
144 // r0 -- number of arguments | 144 // r0 -- number of arguments |
145 // r1 -- function | 145 // r1 -- function |
146 // r2 -- allocation site with elements kind | 146 // r2 -- allocation site with elements kind |
147 Address deopt_handler = Runtime::FunctionForId( | 147 Address deopt_handler = Runtime::FunctionForId( |
148 Runtime::kArrayConstructor)->entry; | 148 Runtime::kArrayConstructor)->entry; |
149 | 149 |
150 if (constant_stack_parameter_count == 0) { | 150 if (constant_stack_parameter_count == 0) { |
151 Register registers[] = { cp, r1, r2 }; | 151 Register registers[] = { cp, r1, r2 }; |
152 descriptor->Initialize(major, ARRAY_SIZE(registers), registers, | 152 descriptor->Initialize(major, arraysize(registers), registers, |
153 deopt_handler, NULL, constant_stack_parameter_count, | 153 deopt_handler, NULL, constant_stack_parameter_count, |
154 JS_FUNCTION_STUB_MODE); | 154 JS_FUNCTION_STUB_MODE); |
155 } else { | 155 } else { |
156 // stack param count needs (constructor pointer, and single argument) | 156 // stack param count needs (constructor pointer, and single argument) |
157 Register registers[] = { cp, r1, r2, r0 }; | 157 Register registers[] = { cp, r1, r2, r0 }; |
158 Representation representations[] = { | 158 Representation representations[] = { |
159 Representation::Tagged(), | 159 Representation::Tagged(), |
160 Representation::Tagged(), | 160 Representation::Tagged(), |
161 Representation::Tagged(), | 161 Representation::Tagged(), |
162 Representation::Integer32() }; | 162 Representation::Integer32() }; |
163 descriptor->Initialize(major, ARRAY_SIZE(registers), registers, r0, | 163 descriptor->Initialize(major, arraysize(registers), registers, r0, |
164 deopt_handler, representations, | 164 deopt_handler, representations, |
165 constant_stack_parameter_count, | 165 constant_stack_parameter_count, |
166 JS_FUNCTION_STUB_MODE, PASS_ARGUMENTS); | 166 JS_FUNCTION_STUB_MODE, PASS_ARGUMENTS); |
167 } | 167 } |
168 } | 168 } |
169 | 169 |
170 | 170 |
171 static void InitializeInternalArrayConstructorDescriptor( | 171 static void InitializeInternalArrayConstructorDescriptor( |
172 CodeStub::Major major, CodeStubInterfaceDescriptor* descriptor, | 172 CodeStub::Major major, CodeStubInterfaceDescriptor* descriptor, |
173 int constant_stack_parameter_count) { | 173 int constant_stack_parameter_count) { |
174 // register state | 174 // register state |
175 // cp -- context | 175 // cp -- context |
176 // r0 -- number of arguments | 176 // r0 -- number of arguments |
177 // r1 -- constructor function | 177 // r1 -- constructor function |
178 Address deopt_handler = Runtime::FunctionForId( | 178 Address deopt_handler = Runtime::FunctionForId( |
179 Runtime::kInternalArrayConstructor)->entry; | 179 Runtime::kInternalArrayConstructor)->entry; |
180 | 180 |
181 if (constant_stack_parameter_count == 0) { | 181 if (constant_stack_parameter_count == 0) { |
182 Register registers[] = { cp, r1 }; | 182 Register registers[] = { cp, r1 }; |
183 descriptor->Initialize(major, ARRAY_SIZE(registers), registers, | 183 descriptor->Initialize(major, arraysize(registers), registers, |
184 deopt_handler, NULL, constant_stack_parameter_count, | 184 deopt_handler, NULL, constant_stack_parameter_count, |
185 JS_FUNCTION_STUB_MODE); | 185 JS_FUNCTION_STUB_MODE); |
186 } else { | 186 } else { |
187 // stack param count needs (constructor pointer, and single argument) | 187 // stack param count needs (constructor pointer, and single argument) |
188 Register registers[] = { cp, r1, r0 }; | 188 Register registers[] = { cp, r1, r0 }; |
189 Representation representations[] = { | 189 Representation representations[] = { |
190 Representation::Tagged(), | 190 Representation::Tagged(), |
191 Representation::Tagged(), | 191 Representation::Tagged(), |
192 Representation::Integer32() }; | 192 Representation::Integer32() }; |
193 descriptor->Initialize(major, ARRAY_SIZE(registers), registers, r0, | 193 descriptor->Initialize(major, arraysize(registers), registers, r0, |
194 deopt_handler, representations, | 194 deopt_handler, representations, |
195 constant_stack_parameter_count, | 195 constant_stack_parameter_count, |
196 JS_FUNCTION_STUB_MODE, PASS_ARGUMENTS); | 196 JS_FUNCTION_STUB_MODE, PASS_ARGUMENTS); |
197 } | 197 } |
198 } | 198 } |
199 | 199 |
200 | 200 |
201 void ArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor( | 201 void ArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor( |
202 CodeStubInterfaceDescriptor* descriptor) { | 202 CodeStubInterfaceDescriptor* descriptor) { |
203 InitializeArrayConstructorDescriptor(MajorKey(), descriptor, 0); | 203 InitializeArrayConstructorDescriptor(MajorKey(), descriptor, 0); |
204 } | 204 } |
205 | 205 |
206 | 206 |
207 void ArraySingleArgumentConstructorStub::InitializeInterfaceDescriptor( | 207 void ArraySingleArgumentConstructorStub::InitializeInterfaceDescriptor( |
208 CodeStubInterfaceDescriptor* descriptor) { | 208 CodeStubInterfaceDescriptor* descriptor) { |
209 InitializeArrayConstructorDescriptor(MajorKey(), descriptor, 1); | 209 InitializeArrayConstructorDescriptor(MajorKey(), descriptor, 1); |
210 } | 210 } |
211 | 211 |
212 | 212 |
213 void ArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( | 213 void ArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( |
214 CodeStubInterfaceDescriptor* descriptor) { | 214 CodeStubInterfaceDescriptor* descriptor) { |
215 InitializeArrayConstructorDescriptor(MajorKey(), descriptor, -1); | 215 InitializeArrayConstructorDescriptor(MajorKey(), descriptor, -1); |
216 } | 216 } |
217 | 217 |
218 | 218 |
219 void ToBooleanStub::InitializeInterfaceDescriptor( | 219 void ToBooleanStub::InitializeInterfaceDescriptor( |
220 CodeStubInterfaceDescriptor* descriptor) { | 220 CodeStubInterfaceDescriptor* descriptor) { |
221 Register registers[] = { cp, r0 }; | 221 Register registers[] = { cp, r0 }; |
222 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers, | 222 descriptor->Initialize(MajorKey(), arraysize(registers), registers, |
223 FUNCTION_ADDR(ToBooleanIC_Miss)); | 223 FUNCTION_ADDR(ToBooleanIC_Miss)); |
224 descriptor->SetMissHandler( | 224 descriptor->SetMissHandler( |
225 ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); | 225 ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); |
226 } | 226 } |
227 | 227 |
228 | 228 |
229 void InternalArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor( | 229 void InternalArrayNoArgumentConstructorStub::InitializeInterfaceDescriptor( |
230 CodeStubInterfaceDescriptor* descriptor) { | 230 CodeStubInterfaceDescriptor* descriptor) { |
231 InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, 0); | 231 InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, 0); |
232 } | 232 } |
233 | 233 |
234 | 234 |
235 void InternalArraySingleArgumentConstructorStub::InitializeInterfaceDescriptor( | 235 void InternalArraySingleArgumentConstructorStub::InitializeInterfaceDescriptor( |
236 CodeStubInterfaceDescriptor* descriptor) { | 236 CodeStubInterfaceDescriptor* descriptor) { |
237 InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, 1); | 237 InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, 1); |
238 } | 238 } |
239 | 239 |
240 | 240 |
241 void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( | 241 void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( |
242 CodeStubInterfaceDescriptor* descriptor) { | 242 CodeStubInterfaceDescriptor* descriptor) { |
243 InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, -1); | 243 InitializeInternalArrayConstructorDescriptor(MajorKey(), descriptor, -1); |
244 } | 244 } |
245 | 245 |
246 | 246 |
247 void BinaryOpICStub::InitializeInterfaceDescriptor( | 247 void BinaryOpICStub::InitializeInterfaceDescriptor( |
248 CodeStubInterfaceDescriptor* descriptor) { | 248 CodeStubInterfaceDescriptor* descriptor) { |
249 Register registers[] = { cp, r1, r0 }; | 249 Register registers[] = { cp, r1, r0 }; |
250 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers, | 250 descriptor->Initialize(MajorKey(), arraysize(registers), registers, |
251 FUNCTION_ADDR(BinaryOpIC_Miss)); | 251 FUNCTION_ADDR(BinaryOpIC_Miss)); |
252 descriptor->SetMissHandler( | 252 descriptor->SetMissHandler( |
253 ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); | 253 ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); |
254 } | 254 } |
255 | 255 |
256 | 256 |
257 void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( | 257 void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( |
258 CodeStubInterfaceDescriptor* descriptor) { | 258 CodeStubInterfaceDescriptor* descriptor) { |
259 Register registers[] = { cp, r2, r1, r0 }; | 259 Register registers[] = { cp, r2, r1, r0 }; |
260 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers, | 260 descriptor->Initialize(MajorKey(), arraysize(registers), registers, |
261 FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); | 261 FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); |
262 } | 262 } |
263 | 263 |
264 | 264 |
265 void StringAddStub::InitializeInterfaceDescriptor( | 265 void StringAddStub::InitializeInterfaceDescriptor( |
266 CodeStubInterfaceDescriptor* descriptor) { | 266 CodeStubInterfaceDescriptor* descriptor) { |
267 Register registers[] = { cp, r1, r0 }; | 267 Register registers[] = { cp, r1, r0 }; |
268 descriptor->Initialize(MajorKey(), ARRAY_SIZE(registers), registers, | 268 descriptor->Initialize(MajorKey(), arraysize(registers), registers, |
269 Runtime::FunctionForId(Runtime::kStringAdd)->entry); | 269 Runtime::FunctionForId(Runtime::kStringAdd)->entry); |
270 } | 270 } |
271 | 271 |
272 | 272 |
273 void CallDescriptors::InitializeForIsolate(Isolate* isolate) { | 273 void CallDescriptors::InitializeForIsolate(Isolate* isolate) { |
274 static PlatformInterfaceDescriptor default_descriptor = | 274 static PlatformInterfaceDescriptor default_descriptor = |
275 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS); | 275 PlatformInterfaceDescriptor(CAN_INLINE_TARGET_ADDRESS); |
276 | 276 |
277 static PlatformInterfaceDescriptor noInlineDescriptor = | 277 static PlatformInterfaceDescriptor noInlineDescriptor = |
278 PlatformInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS); | 278 PlatformInterfaceDescriptor(NEVER_INLINE_TARGET_ADDRESS); |
279 | 279 |
280 { | 280 { |
281 CallInterfaceDescriptor* descriptor = | 281 CallInterfaceDescriptor* descriptor = |
282 isolate->call_descriptor(Isolate::ArgumentAdaptorCall); | 282 isolate->call_descriptor(Isolate::ArgumentAdaptorCall); |
283 Register registers[] = { cp, // context | 283 Register registers[] = { cp, // context |
284 r1, // JSFunction | 284 r1, // JSFunction |
285 r0, // actual number of arguments | 285 r0, // actual number of arguments |
286 r2, // expected number of arguments | 286 r2, // expected number of arguments |
287 }; | 287 }; |
288 Representation representations[] = { | 288 Representation representations[] = { |
289 Representation::Tagged(), // context | 289 Representation::Tagged(), // context |
290 Representation::Tagged(), // JSFunction | 290 Representation::Tagged(), // JSFunction |
291 Representation::Integer32(), // actual number of arguments | 291 Representation::Integer32(), // actual number of arguments |
292 Representation::Integer32(), // expected number of arguments | 292 Representation::Integer32(), // expected number of arguments |
293 }; | 293 }; |
294 descriptor->Initialize(ARRAY_SIZE(registers), registers, | 294 descriptor->Initialize(arraysize(registers), registers, |
295 representations, &default_descriptor); | 295 representations, &default_descriptor); |
296 } | 296 } |
297 { | 297 { |
298 CallInterfaceDescriptor* descriptor = | 298 CallInterfaceDescriptor* descriptor = |
299 isolate->call_descriptor(Isolate::KeyedCall); | 299 isolate->call_descriptor(Isolate::KeyedCall); |
300 Register registers[] = { cp, // context | 300 Register registers[] = { cp, // context |
301 r2, // key | 301 r2, // key |
302 }; | 302 }; |
303 Representation representations[] = { | 303 Representation representations[] = { |
304 Representation::Tagged(), // context | 304 Representation::Tagged(), // context |
305 Representation::Tagged(), // key | 305 Representation::Tagged(), // key |
306 }; | 306 }; |
307 descriptor->Initialize(ARRAY_SIZE(registers), registers, | 307 descriptor->Initialize(arraysize(registers), registers, |
308 representations, &noInlineDescriptor); | 308 representations, &noInlineDescriptor); |
309 } | 309 } |
310 { | 310 { |
311 CallInterfaceDescriptor* descriptor = | 311 CallInterfaceDescriptor* descriptor = |
312 isolate->call_descriptor(Isolate::NamedCall); | 312 isolate->call_descriptor(Isolate::NamedCall); |
313 Register registers[] = { cp, // context | 313 Register registers[] = { cp, // context |
314 r2, // name | 314 r2, // name |
315 }; | 315 }; |
316 Representation representations[] = { | 316 Representation representations[] = { |
317 Representation::Tagged(), // context | 317 Representation::Tagged(), // context |
318 Representation::Tagged(), // name | 318 Representation::Tagged(), // name |
319 }; | 319 }; |
320 descriptor->Initialize(ARRAY_SIZE(registers), registers, | 320 descriptor->Initialize(arraysize(registers), registers, |
321 representations, &noInlineDescriptor); | 321 representations, &noInlineDescriptor); |
322 } | 322 } |
323 { | 323 { |
324 CallInterfaceDescriptor* descriptor = | 324 CallInterfaceDescriptor* descriptor = |
325 isolate->call_descriptor(Isolate::CallHandler); | 325 isolate->call_descriptor(Isolate::CallHandler); |
326 Register registers[] = { cp, // context | 326 Register registers[] = { cp, // context |
327 r0, // receiver | 327 r0, // receiver |
328 }; | 328 }; |
329 Representation representations[] = { | 329 Representation representations[] = { |
330 Representation::Tagged(), // context | 330 Representation::Tagged(), // context |
331 Representation::Tagged(), // receiver | 331 Representation::Tagged(), // receiver |
332 }; | 332 }; |
333 descriptor->Initialize(ARRAY_SIZE(registers), registers, | 333 descriptor->Initialize(arraysize(registers), registers, |
334 representations, &default_descriptor); | 334 representations, &default_descriptor); |
335 } | 335 } |
336 { | 336 { |
337 CallInterfaceDescriptor* descriptor = | 337 CallInterfaceDescriptor* descriptor = |
338 isolate->call_descriptor(Isolate::ApiFunctionCall); | 338 isolate->call_descriptor(Isolate::ApiFunctionCall); |
339 Register registers[] = { cp, // context | 339 Register registers[] = { cp, // context |
340 r0, // callee | 340 r0, // callee |
341 r4, // call_data | 341 r4, // call_data |
342 r2, // holder | 342 r2, // holder |
343 r1, // api_function_address | 343 r1, // api_function_address |
344 }; | 344 }; |
345 Representation representations[] = { | 345 Representation representations[] = { |
346 Representation::Tagged(), // context | 346 Representation::Tagged(), // context |
347 Representation::Tagged(), // callee | 347 Representation::Tagged(), // callee |
348 Representation::Tagged(), // call_data | 348 Representation::Tagged(), // call_data |
349 Representation::Tagged(), // holder | 349 Representation::Tagged(), // holder |
350 Representation::External(), // api_function_address | 350 Representation::External(), // api_function_address |
351 }; | 351 }; |
352 descriptor->Initialize(ARRAY_SIZE(registers), registers, | 352 descriptor->Initialize(arraysize(registers), registers, |
353 representations, &default_descriptor); | 353 representations, &default_descriptor); |
354 } | 354 } |
355 } | 355 } |
356 | 356 |
357 | 357 |
358 #define __ ACCESS_MASM(masm) | 358 #define __ ACCESS_MASM(masm) |
359 | 359 |
360 | 360 |
361 static void EmitIdenticalObjectComparison(MacroAssembler* masm, | 361 static void EmitIdenticalObjectComparison(MacroAssembler* masm, |
362 Label* slow, | 362 Label* slow, |
(...skipping 4733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5096 MemOperand(fp, 6 * kPointerSize), | 5096 MemOperand(fp, 6 * kPointerSize), |
5097 NULL); | 5097 NULL); |
5098 } | 5098 } |
5099 | 5099 |
5100 | 5100 |
5101 #undef __ | 5101 #undef __ |
5102 | 5102 |
5103 } } // namespace v8::internal | 5103 } } // namespace v8::internal |
5104 | 5104 |
5105 #endif // V8_TARGET_ARCH_ARM | 5105 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |