Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1175)

Side by Side Diff: src/x64/interface-descriptors-x64.cc

Issue 1197703002: Use big-boy Types to annotate interface descriptor parameters (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Latest Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "src/interface-descriptors.h" 9 #include "src/interface-descriptors.h"
10 10
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 const Register MathPowIntegerDescriptor::exponent() { 58 const Register MathPowIntegerDescriptor::exponent() {
59 return MathPowTaggedDescriptor::exponent(); 59 return MathPowTaggedDescriptor::exponent();
60 } 60 }
61 61
62 62
63 const Register GrowArrayElementsDescriptor::ObjectRegister() { return rax; } 63 const Register GrowArrayElementsDescriptor::ObjectRegister() { return rax; }
64 const Register GrowArrayElementsDescriptor::KeyRegister() { return rbx; } 64 const Register GrowArrayElementsDescriptor::KeyRegister() { return rbx; }
65 65
66 66
67 void FastNewClosureDescriptor::Initialize(CallInterfaceDescriptorData* data) { 67 void FastNewClosureDescriptor::InitializePlatformSpecific(
68 CallInterfaceDescriptorData* data) {
68 Register registers[] = {rsi, rbx}; 69 Register registers[] = {rsi, rbx};
69 data->Initialize(arraysize(registers), registers, NULL); 70 data->InitializePlatformSpecific(arraysize(registers), registers);
70 } 71 }
71 72
72 73
73 void FastNewContextDescriptor::Initialize(CallInterfaceDescriptorData* data) { 74 void FastNewContextDescriptor::InitializePlatformSpecific(
75 CallInterfaceDescriptorData* data) {
74 Register registers[] = {rsi, rdi}; 76 Register registers[] = {rsi, rdi};
75 data->Initialize(arraysize(registers), registers, NULL); 77 data->InitializePlatformSpecific(arraysize(registers), registers);
76 } 78 }
77 79
78 80
79 void TypeofDescriptor::Initialize(CallInterfaceDescriptorData* data) { 81 void TypeofDescriptor::InitializePlatformSpecific(
82 CallInterfaceDescriptorData* data) {
80 Register registers[] = {rsi, rbx}; 83 Register registers[] = {rsi, rbx};
81 data->Initialize(arraysize(registers), registers, NULL); 84 data->InitializePlatformSpecific(arraysize(registers), registers);
82 } 85 }
83 86
84 87
85 void ToNumberDescriptor::Initialize(CallInterfaceDescriptorData* data) { 88 void ToNumberDescriptor::InitializePlatformSpecific(
89 CallInterfaceDescriptorData* data) {
86 // ToNumberStub invokes a function, and therefore needs a context. 90 // ToNumberStub invokes a function, and therefore needs a context.
87 Register registers[] = {rsi, rax}; 91 Register registers[] = {rsi, rax};
88 data->Initialize(arraysize(registers), registers, NULL); 92 data->InitializePlatformSpecific(arraysize(registers), registers);
89 } 93 }
90 94
91 95
92 void NumberToStringDescriptor::Initialize(CallInterfaceDescriptorData* data) { 96 void NumberToStringDescriptor::InitializePlatformSpecific(
97 CallInterfaceDescriptorData* data) {
93 Register registers[] = {rsi, rax}; 98 Register registers[] = {rsi, rax};
94 data->Initialize(arraysize(registers), registers, NULL); 99 data->InitializePlatformSpecific(arraysize(registers), registers);
95 } 100 }
96 101
97 102
98 void FastCloneShallowArrayDescriptor::Initialize( 103 void FastCloneShallowArrayDescriptor::InitializePlatformSpecific(
99 CallInterfaceDescriptorData* data) { 104 CallInterfaceDescriptorData* data) {
100 Register registers[] = {rsi, rax, rbx, rcx}; 105 Register registers[] = {rsi, rax, rbx, rcx};
101 Representation representations[] = { 106 data->InitializePlatformSpecific(arraysize(registers), registers);
102 Representation::Tagged(), Representation::Tagged(), Representation::Smi(),
103 Representation::Tagged()};
104 data->Initialize(arraysize(registers), registers, representations);
105 } 107 }
106 108
107 109
108 void FastCloneShallowObjectDescriptor::Initialize( 110 void FastCloneShallowObjectDescriptor::InitializePlatformSpecific(
109 CallInterfaceDescriptorData* data) { 111 CallInterfaceDescriptorData* data) {
110 Register registers[] = {rsi, rax, rbx, rcx, rdx}; 112 Register registers[] = {rsi, rax, rbx, rcx, rdx};
111 data->Initialize(arraysize(registers), registers, NULL); 113 data->InitializePlatformSpecific(arraysize(registers), registers);
112 } 114 }
113 115
114 116
115 void CreateAllocationSiteDescriptor::Initialize( 117 void CreateAllocationSiteDescriptor::InitializePlatformSpecific(
116 CallInterfaceDescriptorData* data) { 118 CallInterfaceDescriptorData* data) {
117 Register registers[] = {rsi, rbx, rdx}; 119 Register registers[] = {rsi, rbx, rdx};
118 Representation representations[] = {Representation::Tagged(), 120 data->InitializePlatformSpecific(arraysize(registers), registers);
119 Representation::Tagged(),
120 Representation::Smi()};
121 data->Initialize(arraysize(registers), registers, representations);
122 } 121 }
123 122
124 123
125 void CreateWeakCellDescriptor::Initialize(CallInterfaceDescriptorData* data) { 124 void CreateWeakCellDescriptor::InitializePlatformSpecific(
125 CallInterfaceDescriptorData* data) {
126 Register registers[] = {rsi, rbx, rdx, rdi}; 126 Register registers[] = {rsi, rbx, rdx, rdi};
127 Representation representations[] = { 127 data->InitializePlatformSpecific(arraysize(registers), registers);
128 Representation::Tagged(), Representation::Tagged(), Representation::Smi(),
129 Representation::Tagged()};
130 data->Initialize(arraysize(registers), registers, representations);
131 } 128 }
132 129
133 130
134 void StoreArrayLiteralElementDescriptor::Initialize( 131 void StoreArrayLiteralElementDescriptor::InitializePlatformSpecific(
135 CallInterfaceDescriptorData* data) { 132 CallInterfaceDescriptorData* data) {
136 Register registers[] = {rsi, rcx, rax}; 133 Register registers[] = {rsi, rcx, rax};
137 data->Initialize(arraysize(registers), registers, NULL); 134 data->InitializePlatformSpecific(arraysize(registers), registers);
138 } 135 }
139 136
140 137
141 void CallFunctionDescriptor::Initialize(CallInterfaceDescriptorData* data) { 138 void CallFunctionDescriptor::InitializePlatformSpecific(
139 CallInterfaceDescriptorData* data) {
142 Register registers[] = {rsi, rdi}; 140 Register registers[] = {rsi, rdi};
143 data->Initialize(arraysize(registers), registers, NULL); 141 data->InitializePlatformSpecific(arraysize(registers), registers);
144 } 142 }
145 143
146 144
147 void CallFunctionWithFeedbackDescriptor::Initialize( 145 void CallFunctionWithFeedbackDescriptor::InitializePlatformSpecific(
148 CallInterfaceDescriptorData* data) { 146 CallInterfaceDescriptorData* data) {
149 Register registers[] = {rsi, rdi, rdx}; 147 Register registers[] = {rsi, rdi, rdx};
150 Representation representations[] = {Representation::Tagged(), 148 data->InitializePlatformSpecific(arraysize(registers), registers);
151 Representation::Tagged(),
152 Representation::Smi()};
153 data->Initialize(arraysize(registers), registers, representations);
154 } 149 }
155 150
156 151
157 void CallFunctionWithFeedbackAndVectorDescriptor::Initialize( 152 void CallFunctionWithFeedbackAndVectorDescriptor::InitializePlatformSpecific(
158 CallInterfaceDescriptorData* data) { 153 CallInterfaceDescriptorData* data) {
159 Register registers[] = {rsi, rdi, rdx, rbx}; 154 Register registers[] = {rsi, rdi, rdx, rbx};
160 Representation representations[] = { 155 data->InitializePlatformSpecific(arraysize(registers), registers);
161 Representation::Tagged(), Representation::Tagged(), Representation::Smi(),
162 Representation::Tagged()};
163 data->Initialize(arraysize(registers), registers, representations);
164 } 156 }
165 157
166 158
167 void CallConstructDescriptor::Initialize(CallInterfaceDescriptorData* data) { 159 void CallConstructDescriptor::InitializePlatformSpecific(
160 CallInterfaceDescriptorData* data) {
168 // rax : number of arguments 161 // rax : number of arguments
169 // rbx : feedback vector 162 // rbx : feedback vector
170 // rdx : (only if rbx is not the megamorphic symbol) slot in feedback 163 // rdx : (only if rbx is not the megamorphic symbol) slot in feedback
171 // vector (Smi) 164 // vector (Smi)
172 // rdi : constructor function 165 // rdi : constructor function
173 // TODO(turbofan): So far we don't gather type feedback and hence skip the 166 // TODO(turbofan): So far we don't gather type feedback and hence skip the
174 // slot parameter, but ArrayConstructStub needs the vector to be undefined. 167 // slot parameter, but ArrayConstructStub needs the vector to be undefined.
175 Register registers[] = {rsi, rax, rdi, rbx}; 168 Register registers[] = {rsi, rax, rdi, rbx};
176 data->Initialize(arraysize(registers), registers, NULL); 169 data->InitializePlatformSpecific(arraysize(registers), registers);
177 } 170 }
178 171
179 172
180 void RegExpConstructResultDescriptor::Initialize( 173 void RegExpConstructResultDescriptor::InitializePlatformSpecific(
181 CallInterfaceDescriptorData* data) { 174 CallInterfaceDescriptorData* data) {
182 Register registers[] = {rsi, rcx, rbx, rax}; 175 Register registers[] = {rsi, rcx, rbx, rax};
183 data->Initialize(arraysize(registers), registers, NULL); 176 data->InitializePlatformSpecific(arraysize(registers), registers);
184 } 177 }
185 178
186 179
187 void TransitionElementsKindDescriptor::Initialize( 180 void TransitionElementsKindDescriptor::InitializePlatformSpecific(
188 CallInterfaceDescriptorData* data) { 181 CallInterfaceDescriptorData* data) {
189 Register registers[] = {rsi, rax, rbx}; 182 Register registers[] = {rsi, rax, rbx};
190 data->Initialize(arraysize(registers), registers, NULL); 183 data->InitializePlatformSpecific(arraysize(registers), registers);
191 } 184 }
192 185
193 186
194 void AllocateHeapNumberDescriptor::Initialize( 187 void AllocateHeapNumberDescriptor::InitializePlatformSpecific(
195 CallInterfaceDescriptorData* data) { 188 CallInterfaceDescriptorData* data) {
196 // register state 189 // register state
197 // rsi -- context 190 // rsi -- context
198 Register registers[] = {rsi}; 191 Register registers[] = {rsi};
199 data->Initialize(arraysize(registers), registers, nullptr); 192 data->InitializePlatformSpecific(arraysize(registers), registers, nullptr);
200 } 193 }
201 194
202 195
203 void ArrayConstructorConstantArgCountDescriptor::Initialize( 196 void ArrayConstructorConstantArgCountDescriptor::InitializePlatformSpecific(
204 CallInterfaceDescriptorData* data) { 197 CallInterfaceDescriptorData* data) {
205 // register state 198 // register state
206 // rax -- number of arguments 199 // rax -- number of arguments
207 // rdi -- function 200 // rdi -- function
208 // rbx -- allocation site with elements kind 201 // rbx -- allocation site with elements kind
209 Register registers[] = {rsi, rdi, rbx}; 202 Register registers[] = {rsi, rdi, rbx};
210 data->Initialize(arraysize(registers), registers, NULL); 203 data->InitializePlatformSpecific(arraysize(registers), registers);
211 } 204 }
212 205
213 206
214 void ArrayConstructorDescriptor::Initialize(CallInterfaceDescriptorData* data) { 207 void ArrayConstructorDescriptor::InitializePlatformSpecific(
208 CallInterfaceDescriptorData* data) {
215 // stack param count needs (constructor pointer, and single argument) 209 // stack param count needs (constructor pointer, and single argument)
216 Register registers[] = {rsi, rdi, rbx, rax}; 210 Register registers[] = {rsi, rdi, rbx, rax};
217 Representation representations[] = { 211 data->InitializePlatformSpecific(arraysize(registers), registers);
218 Representation::Tagged(), Representation::Tagged(),
219 Representation::Tagged(), Representation::Integer32()};
220 data->Initialize(arraysize(registers), registers, representations);
221 } 212 }
222 213
223 214
224 void InternalArrayConstructorConstantArgCountDescriptor::Initialize( 215 void InternalArrayConstructorConstantArgCountDescriptor::
225 CallInterfaceDescriptorData* data) { 216 InitializePlatformSpecific(CallInterfaceDescriptorData* data) {
226 // register state 217 // register state
227 // rsi -- context 218 // rsi -- context
228 // rax -- number of arguments 219 // rax -- number of arguments
229 // rdi -- constructor function 220 // rdi -- constructor function
230 Register registers[] = {rsi, rdi}; 221 Register registers[] = {rsi, rdi};
231 data->Initialize(arraysize(registers), registers, NULL); 222 data->InitializePlatformSpecific(arraysize(registers), registers);
232 } 223 }
233 224
234 225
235 void InternalArrayConstructorDescriptor::Initialize( 226 void InternalArrayConstructorDescriptor::InitializePlatformSpecific(
236 CallInterfaceDescriptorData* data) { 227 CallInterfaceDescriptorData* data) {
237 // stack param count needs (constructor pointer, and single argument) 228 // stack param count needs (constructor pointer, and single argument)
238 Register registers[] = {rsi, rdi, rax}; 229 Register registers[] = {rsi, rdi, rax};
239 Representation representations[] = {Representation::Tagged(), 230 data->InitializePlatformSpecific(arraysize(registers), registers);
240 Representation::Tagged(),
241 Representation::Integer32()};
242 data->Initialize(arraysize(registers), registers, representations);
243 } 231 }
244 232
245 233
246 void CompareDescriptor::Initialize(CallInterfaceDescriptorData* data) { 234 void CompareDescriptor::InitializePlatformSpecific(
235 CallInterfaceDescriptorData* data) {
247 Register registers[] = {rsi, rdx, rax}; 236 Register registers[] = {rsi, rdx, rax};
248 data->Initialize(arraysize(registers), registers, NULL); 237 data->InitializePlatformSpecific(arraysize(registers), registers);
249 } 238 }
250 239
251 240
252 void CompareNilDescriptor::Initialize(CallInterfaceDescriptorData* data) { 241 void CompareNilDescriptor::InitializePlatformSpecific(
242 CallInterfaceDescriptorData* data) {
253 Register registers[] = {rsi, rax}; 243 Register registers[] = {rsi, rax};
254 data->Initialize(arraysize(registers), registers, NULL); 244 data->InitializePlatformSpecific(arraysize(registers), registers);
255 } 245 }
256 246
257 247
258 void ToBooleanDescriptor::Initialize(CallInterfaceDescriptorData* data) { 248 void ToBooleanDescriptor::InitializePlatformSpecific(
249 CallInterfaceDescriptorData* data) {
259 Register registers[] = {rsi, rax}; 250 Register registers[] = {rsi, rax};
260 data->Initialize(arraysize(registers), registers, NULL); 251 data->InitializePlatformSpecific(arraysize(registers), registers);
261 } 252 }
262 253
263 254
264 void BinaryOpDescriptor::Initialize(CallInterfaceDescriptorData* data) { 255 void BinaryOpDescriptor::InitializePlatformSpecific(
256 CallInterfaceDescriptorData* data) {
265 Register registers[] = {rsi, rdx, rax}; 257 Register registers[] = {rsi, rdx, rax};
266 data->Initialize(arraysize(registers), registers, NULL); 258 data->InitializePlatformSpecific(arraysize(registers), registers);
267 } 259 }
268 260
269 261
270 void BinaryOpWithAllocationSiteDescriptor::Initialize( 262 void BinaryOpWithAllocationSiteDescriptor::InitializePlatformSpecific(
271 CallInterfaceDescriptorData* data) { 263 CallInterfaceDescriptorData* data) {
272 Register registers[] = {rsi, rcx, rdx, rax}; 264 Register registers[] = {rsi, rcx, rdx, rax};
273 data->Initialize(arraysize(registers), registers, NULL); 265 data->InitializePlatformSpecific(arraysize(registers), registers);
274 } 266 }
275 267
276 268
277 void StringAddDescriptor::Initialize(CallInterfaceDescriptorData* data) { 269 void StringAddDescriptor::InitializePlatformSpecific(
270 CallInterfaceDescriptorData* data) {
278 Register registers[] = {rsi, rdx, rax}; 271 Register registers[] = {rsi, rdx, rax};
279 data->Initialize(arraysize(registers), registers, NULL); 272 data->InitializePlatformSpecific(arraysize(registers), registers);
280 } 273 }
281 274
282 275
283 void KeyedDescriptor::Initialize(CallInterfaceDescriptorData* data) { 276 void KeyedDescriptor::InitializePlatformSpecific(
277 CallInterfaceDescriptorData* data) {
284 Register registers[] = { 278 Register registers[] = {
285 rsi, // context 279 rsi, // context
286 rcx, // key 280 rcx, // key
287 }; 281 };
288 Representation representations[] = { 282 data->InitializePlatformSpecific(arraysize(registers), registers);
289 Representation::Tagged(), // context
290 Representation::Tagged(), // key
291 };
292 data->Initialize(arraysize(registers), registers, representations);
293 } 283 }
294 284
295 285
296 void NamedDescriptor::Initialize(CallInterfaceDescriptorData* data) { 286 void NamedDescriptor::InitializePlatformSpecific(
287 CallInterfaceDescriptorData* data) {
297 Register registers[] = { 288 Register registers[] = {
298 rsi, // context 289 rsi, // context
299 rcx, // name 290 rcx, // name
300 }; 291 };
301 Representation representations[] = { 292 data->InitializePlatformSpecific(arraysize(registers), registers);
302 Representation::Tagged(), // context
303 Representation::Tagged(), // name
304 };
305 data->Initialize(arraysize(registers), registers, representations);
306 } 293 }
307 294
308 295
309 void CallHandlerDescriptor::Initialize(CallInterfaceDescriptorData* data) { 296 void CallHandlerDescriptor::InitializePlatformSpecific(
297 CallInterfaceDescriptorData* data) {
310 Register registers[] = { 298 Register registers[] = {
311 rsi, // context 299 rsi, // context
312 rdx, // receiver 300 rdx, // receiver
313 }; 301 };
314 Representation representations[] = { 302 data->InitializePlatformSpecific(arraysize(registers), registers);
315 Representation::Tagged(), // context
316 Representation::Tagged(), // receiver
317 };
318 data->Initialize(arraysize(registers), registers, representations);
319 } 303 }
320 304
321 305
322 void ArgumentAdaptorDescriptor::Initialize(CallInterfaceDescriptorData* data) { 306 void ArgumentAdaptorDescriptor::InitializePlatformSpecific(
307 CallInterfaceDescriptorData* data) {
323 Register registers[] = { 308 Register registers[] = {
324 rsi, // context 309 rsi, // context
325 rdi, // JSFunction 310 rdi, // JSFunction
326 rax, // actual number of arguments 311 rax, // actual number of arguments
327 rbx, // expected number of arguments 312 rbx, // expected number of arguments
328 }; 313 };
329 Representation representations[] = { 314 data->InitializePlatformSpecific(arraysize(registers), registers);
330 Representation::Tagged(), // context
331 Representation::Tagged(), // JSFunction
332 Representation::Integer32(), // actual number of arguments
333 Representation::Integer32(), // expected number of arguments
334 };
335 data->Initialize(arraysize(registers), registers, representations);
336 } 315 }
337 316
338 317
339 void ApiFunctionDescriptor::Initialize(CallInterfaceDescriptorData* data) { 318 void ApiFunctionDescriptor::InitializePlatformSpecific(
319 CallInterfaceDescriptorData* data) {
340 Register registers[] = { 320 Register registers[] = {
341 rsi, // context 321 rsi, // context
342 rdi, // callee 322 rdi, // callee
343 rbx, // call_data 323 rbx, // call_data
344 rcx, // holder 324 rcx, // holder
345 rdx, // api_function_address 325 rdx, // api_function_address
346 rax, // actual number of arguments 326 rax, // actual number of arguments
347 }; 327 };
348 Representation representations[] = { 328 data->InitializePlatformSpecific(arraysize(registers), registers);
349 Representation::Tagged(), // context
350 Representation::Tagged(), // callee
351 Representation::Tagged(), // call_data
352 Representation::Tagged(), // holder
353 Representation::External(), // api_function_address
354 Representation::Integer32(), // actual number of arguments
355 };
356 data->Initialize(arraysize(registers), registers, representations);
357 } 329 }
358 330
359 331
360 void ApiAccessorDescriptor::Initialize(CallInterfaceDescriptorData* data) { 332 void ApiAccessorDescriptor::InitializePlatformSpecific(
333 CallInterfaceDescriptorData* data) {
361 Register registers[] = { 334 Register registers[] = {
362 rsi, // context 335 rsi, // context
363 rdi, // callee 336 rdi, // callee
364 rbx, // call_data 337 rbx, // call_data
365 rcx, // holder 338 rcx, // holder
366 rdx, // api_function_address 339 rdx, // api_function_address
367 }; 340 };
368 Representation representations[] = { 341 data->InitializePlatformSpecific(arraysize(registers), registers);
369 Representation::Tagged(), // context
370 Representation::Tagged(), // callee
371 Representation::Tagged(), // call_data
372 Representation::Tagged(), // holder
373 Representation::External(), // api_function_address
374 };
375 data->Initialize(arraysize(registers), registers, representations);
376 } 342 }
377 343
378 344
379 void MathRoundVariantDescriptor::Initialize(CallInterfaceDescriptorData* data) { 345 void MathRoundVariantDescriptor::InitializePlatformSpecific(
346 CallInterfaceDescriptorData* data) {
380 Register registers[] = { 347 Register registers[] = {
381 rsi, // context 348 rsi, // context
382 rdi, // math rounding function 349 rdi, // math rounding function
383 rdx, // vector slot id 350 rdx, // vector slot id
384 }; 351 };
385 Representation representations[] = { 352 data->InitializePlatformSpecific(arraysize(registers), registers);
386 Representation::Tagged(), //
387 Representation::Tagged(), //
388 Representation::Tagged(), //
389 };
390 data->Initialize(arraysize(registers), registers, representations);
391 } 353 }
392 } // namespace internal 354 } // namespace internal
393 } // namespace v8 355 } // namespace v8
394 356
395 #endif // V8_TARGET_ARCH_X64 357 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/mips64/interface-descriptors-mips64.cc ('k') | test/cctest/compiler/test-changes-lowering.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698