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

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

Issue 1211333003: Make context register implicit for CallInterfaceDescriptors (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Platform ports Created 5 years, 5 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 #include "src/interface-descriptors.h" 7 #include "src/interface-descriptors.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 return function; 44 return function;
45 } 45 }
46 46
47 47
48 void CallInterfaceDescriptorData::InitializePlatformSpecific( 48 void CallInterfaceDescriptorData::InitializePlatformSpecific(
49 int register_parameter_count, Register* registers, 49 int register_parameter_count, Register* registers,
50 PlatformInterfaceDescriptor* platform_descriptor) { 50 PlatformInterfaceDescriptor* platform_descriptor) {
51 platform_specific_descriptor_ = platform_descriptor; 51 platform_specific_descriptor_ = platform_descriptor;
52 register_param_count_ = register_parameter_count; 52 register_param_count_ = register_parameter_count;
53 53
54 // An interface descriptor must have a context register.
55 DCHECK(register_parameter_count > 0 &&
56 registers[0].is(CallInterfaceDescriptor::ContextRegister()));
57
58 // InterfaceDescriptor owns a copy of the registers array. 54 // InterfaceDescriptor owns a copy of the registers array.
59 register_params_.Reset(NewArray<Register>(register_parameter_count)); 55 register_params_.Reset(NewArray<Register>(register_parameter_count));
60 for (int i = 0; i < register_parameter_count; i++) { 56 for (int i = 0; i < register_parameter_count; i++) {
61 register_params_[i] = registers[i]; 57 register_params_[i] = registers[i];
62 } 58 }
63 } 59 }
64 60
65 const char* CallInterfaceDescriptor::DebugName(Isolate* isolate) const { 61 const char* CallInterfaceDescriptor::DebugName(Isolate* isolate) const {
66 CallInterfaceDescriptorData* start = isolate->call_descriptor_data(0); 62 CallInterfaceDescriptorData* start = isolate->call_descriptor_data(0);
67 size_t index = data_ - start; 63 size_t index = data_ - start;
68 DCHECK(index < CallDescriptors::NUMBER_OF_DESCRIPTORS); 64 DCHECK(index < CallDescriptors::NUMBER_OF_DESCRIPTORS);
69 CallDescriptors::Key key = static_cast<CallDescriptors::Key>(index); 65 CallDescriptors::Key key = static_cast<CallDescriptors::Key>(index);
70 switch (key) { 66 switch (key) {
71 #define DEF_CASE(NAME) \ 67 #define DEF_CASE(NAME) \
72 case CallDescriptors::NAME: \ 68 case CallDescriptors::NAME: \
73 return #NAME " Descriptor"; 69 return #NAME " Descriptor";
74 INTERFACE_DESCRIPTOR_LIST(DEF_CASE) 70 INTERFACE_DESCRIPTOR_LIST(DEF_CASE)
75 #undef DEF_CASE 71 #undef DEF_CASE
76 case CallDescriptors::NUMBER_OF_DESCRIPTORS: 72 case CallDescriptors::NUMBER_OF_DESCRIPTORS:
77 break; 73 break;
78 } 74 }
79 return ""; 75 return "";
80 } 76 }
81 77
82 78
83 Type::FunctionType* LoadDescriptor::BuildCallInterfaceDescriptorFunctionType( 79 Type::FunctionType* LoadDescriptor::BuildCallInterfaceDescriptorFunctionType(
84 Isolate* isolate, int paramater_count) { 80 Isolate* isolate, int paramater_count) {
85 Type::FunctionType* function = Type::FunctionType::New( 81 Type::FunctionType* function = Type::FunctionType::New(
86 AnyTagged(), Type::Undefined(), 4, isolate->interface_descriptor_zone()); 82 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone());
87 function->InitParameter(0, AnyTagged()); 83 function->InitParameter(0, AnyTagged());
88 function->InitParameter(1, AnyTagged()); 84 function->InitParameter(1, AnyTagged());
89 function->InitParameter(2, AnyTagged()); 85 function->InitParameter(2, SmiType());
90 function->InitParameter(3, SmiType());
91 return function; 86 return function;
92 } 87 }
93 88
94 void LoadDescriptor::InitializePlatformSpecific( 89 void LoadDescriptor::InitializePlatformSpecific(
95 CallInterfaceDescriptorData* data) { 90 CallInterfaceDescriptorData* data) {
96 Register registers[] = {ContextRegister(), ReceiverRegister(), NameRegister(), 91 Register registers[] = {ReceiverRegister(), NameRegister(), SlotRegister()};
97 SlotRegister()};
98 data->InitializePlatformSpecific(arraysize(registers), registers); 92 data->InitializePlatformSpecific(arraysize(registers), registers);
99 } 93 }
100 94
101 95
102 void StoreDescriptor::InitializePlatformSpecific( 96 void StoreDescriptor::InitializePlatformSpecific(
103 CallInterfaceDescriptorData* data) { 97 CallInterfaceDescriptorData* data) {
104 Register registers[] = {ContextRegister(), ReceiverRegister(), NameRegister(), 98 Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister()};
105 ValueRegister()};
106 data->InitializePlatformSpecific(arraysize(registers), registers); 99 data->InitializePlatformSpecific(arraysize(registers), registers);
107 } 100 }
108 101
109 102
110 void StoreTransitionDescriptor::InitializePlatformSpecific( 103 void StoreTransitionDescriptor::InitializePlatformSpecific(
111 CallInterfaceDescriptorData* data) { 104 CallInterfaceDescriptorData* data) {
112 Register registers[] = {ContextRegister(), ReceiverRegister(), NameRegister(), 105 Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(),
113 ValueRegister(), MapRegister()}; 106 MapRegister()};
114 data->InitializePlatformSpecific(arraysize(registers), registers); 107 data->InitializePlatformSpecific(arraysize(registers), registers);
115 } 108 }
116 109
117 110
118 void ElementTransitionAndStoreDescriptor::InitializePlatformSpecific( 111 void ElementTransitionAndStoreDescriptor::InitializePlatformSpecific(
119 CallInterfaceDescriptorData* data) { 112 CallInterfaceDescriptorData* data) {
120 Register registers[] = {ContextRegister(), ValueRegister(), MapRegister(), 113 Register registers[] = {ValueRegister(), MapRegister(), NameRegister(),
121 NameRegister(), ReceiverRegister()}; 114 ReceiverRegister()};
122 data->InitializePlatformSpecific(arraysize(registers), registers); 115 data->InitializePlatformSpecific(arraysize(registers), registers);
123 } 116 }
124 117
125 118
126 void InstanceofDescriptor::InitializePlatformSpecific( 119 void InstanceofDescriptor::InitializePlatformSpecific(
127 CallInterfaceDescriptorData* data) { 120 CallInterfaceDescriptorData* data) {
128 Register registers[] = {ContextRegister(), left(), right()}; 121 Register registers[] = {left(), right()};
129 data->InitializePlatformSpecific(arraysize(registers), registers); 122 data->InitializePlatformSpecific(arraysize(registers), registers);
130 } 123 }
131 124
132 125
133 void MathPowTaggedDescriptor::InitializePlatformSpecific( 126 void MathPowTaggedDescriptor::InitializePlatformSpecific(
134 CallInterfaceDescriptorData* data) { 127 CallInterfaceDescriptorData* data) {
135 Register registers[] = {ContextRegister(), exponent()}; 128 Register registers[] = {exponent()};
136 data->InitializePlatformSpecific(arraysize(registers), registers); 129 data->InitializePlatformSpecific(arraysize(registers), registers);
137 } 130 }
138 131
139 132
140 void MathPowIntegerDescriptor::InitializePlatformSpecific( 133 void MathPowIntegerDescriptor::InitializePlatformSpecific(
141 CallInterfaceDescriptorData* data) { 134 CallInterfaceDescriptorData* data) {
142 Register registers[] = {ContextRegister(), exponent()}; 135 Register registers[] = {exponent()};
143 data->InitializePlatformSpecific(arraysize(registers), registers); 136 data->InitializePlatformSpecific(arraysize(registers), registers);
144 } 137 }
145 138
146 139
147 Type::FunctionType* 140 Type::FunctionType*
148 LoadWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType( 141 LoadWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType(
149 Isolate* isolate, int paramater_count) { 142 Isolate* isolate, int paramater_count) {
150 Type::FunctionType* function = Type::FunctionType::New( 143 Type::FunctionType* function = Type::FunctionType::New(
151 AnyTagged(), Type::Undefined(), 5, isolate->interface_descriptor_zone()); 144 AnyTagged(), Type::Undefined(), 4, isolate->interface_descriptor_zone());
152 function->InitParameter(0, AnyTagged()); 145 function->InitParameter(0, AnyTagged());
153 function->InitParameter(1, AnyTagged()); 146 function->InitParameter(1, AnyTagged());
154 function->InitParameter(2, AnyTagged()); 147 function->InitParameter(2, SmiType());
155 function->InitParameter(3, SmiType()); 148 function->InitParameter(3, AnyTagged());
156 function->InitParameter(4, AnyTagged());
157 return function; 149 return function;
158 } 150 }
159 151
160 152
161 void LoadWithVectorDescriptor::InitializePlatformSpecific( 153 void LoadWithVectorDescriptor::InitializePlatformSpecific(
162 CallInterfaceDescriptorData* data) { 154 CallInterfaceDescriptorData* data) {
163 Register registers[] = {ContextRegister(), ReceiverRegister(), NameRegister(), 155 Register registers[] = {ReceiverRegister(), NameRegister(), SlotRegister(),
164 SlotRegister(), VectorRegister()}; 156 VectorRegister()};
165 data->InitializePlatformSpecific(arraysize(registers), registers); 157 data->InitializePlatformSpecific(arraysize(registers), registers);
166 } 158 }
167 159
168 160
169 Type::FunctionType* 161 Type::FunctionType*
170 VectorStoreICDescriptor::BuildCallInterfaceDescriptorFunctionType( 162 VectorStoreICDescriptor::BuildCallInterfaceDescriptorFunctionType(
171 Isolate* isolate, int paramater_count) { 163 Isolate* isolate, int paramater_count) {
172 Type::FunctionType* function = Type::FunctionType::New( 164 Type::FunctionType* function = Type::FunctionType::New(
173 AnyTagged(), Type::Undefined(), 6, isolate->interface_descriptor_zone()); 165 AnyTagged(), Type::Undefined(), 5, isolate->interface_descriptor_zone());
174 function->InitParameter(0, AnyTagged()); 166 function->InitParameter(0, AnyTagged());
175 function->InitParameter(1, AnyTagged()); 167 function->InitParameter(1, AnyTagged());
176 function->InitParameter(2, AnyTagged()); 168 function->InitParameter(2, AnyTagged());
177 function->InitParameter(3, AnyTagged()); 169 function->InitParameter(3, SmiType());
178 function->InitParameter(4, SmiType()); 170 function->InitParameter(4, AnyTagged());
179 function->InitParameter(5, AnyTagged());
180 return function; 171 return function;
181 } 172 }
182 173
183 174
184 void VectorStoreICDescriptor::InitializePlatformSpecific( 175 void VectorStoreICDescriptor::InitializePlatformSpecific(
185 CallInterfaceDescriptorData* data) { 176 CallInterfaceDescriptorData* data) {
186 Register registers[] = {ContextRegister(), ReceiverRegister(), 177 Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(),
187 NameRegister(), ValueRegister(), 178 SlotRegister(), VectorRegister()};
188 SlotRegister(), VectorRegister()};
189 data->InitializePlatformSpecific(arraysize(registers), registers); 179 data->InitializePlatformSpecific(arraysize(registers), registers);
190 } 180 }
191 181
192 182
193 Type::FunctionType* 183 Type::FunctionType*
194 VectorStoreICTrampolineDescriptor::BuildCallInterfaceDescriptorFunctionType( 184 VectorStoreICTrampolineDescriptor::BuildCallInterfaceDescriptorFunctionType(
195 Isolate* isolate, int paramater_count) { 185 Isolate* isolate, int paramater_count) {
196 Type::FunctionType* function = Type::FunctionType::New( 186 Type::FunctionType* function = Type::FunctionType::New(
197 AnyTagged(), Type::Undefined(), 5, isolate->interface_descriptor_zone()); 187 AnyTagged(), Type::Undefined(), 4, isolate->interface_descriptor_zone());
198 function->InitParameter(0, AnyTagged()); 188 function->InitParameter(0, AnyTagged());
199 function->InitParameter(1, AnyTagged()); 189 function->InitParameter(1, AnyTagged());
200 function->InitParameter(2, AnyTagged()); 190 function->InitParameter(2, AnyTagged());
201 function->InitParameter(3, AnyTagged()); 191 function->InitParameter(3, SmiType());
202 function->InitParameter(4, SmiType());
203 return function; 192 return function;
204 } 193 }
205 194
206 195
207 void VectorStoreICTrampolineDescriptor::InitializePlatformSpecific( 196 void VectorStoreICTrampolineDescriptor::InitializePlatformSpecific(
208 CallInterfaceDescriptorData* data) { 197 CallInterfaceDescriptorData* data) {
209 Register registers[] = {ContextRegister(), ReceiverRegister(), NameRegister(), 198 Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(),
210 ValueRegister(), SlotRegister()}; 199 SlotRegister()};
211 data->InitializePlatformSpecific(arraysize(registers), registers); 200 data->InitializePlatformSpecific(arraysize(registers), registers);
212 } 201 }
213 202
214 203
215 Type::FunctionType* 204 Type::FunctionType*
216 ApiGetterDescriptor::BuildCallInterfaceDescriptorFunctionType( 205 ApiGetterDescriptor::BuildCallInterfaceDescriptorFunctionType(
217 Isolate* isolate, int paramater_count) { 206 Isolate* isolate, int paramater_count) {
218 Type::FunctionType* function = Type::FunctionType::New( 207 Type::FunctionType* function = Type::FunctionType::New(
219 AnyTagged(), Type::Undefined(), 2, isolate->interface_descriptor_zone()); 208 AnyTagged(), Type::Undefined(), 1, isolate->interface_descriptor_zone());
220 function->InitParameter(0, AnyTagged()); 209 function->InitParameter(0, ExternalPointer());
221 function->InitParameter(1, ExternalPointer());
222 return function; 210 return function;
223 } 211 }
224 212
225 213
226 void ApiGetterDescriptor::InitializePlatformSpecific( 214 void ApiGetterDescriptor::InitializePlatformSpecific(
227 CallInterfaceDescriptorData* data) { 215 CallInterfaceDescriptorData* data) {
228 Register registers[] = {ContextRegister(), function_address()}; 216 Register registers[] = {function_address()};
229 data->InitializePlatformSpecific(arraysize(registers), registers); 217 data->InitializePlatformSpecific(arraysize(registers), registers);
230 } 218 }
231 219
232 220
233 void ArgumentsAccessReadDescriptor::InitializePlatformSpecific( 221 void ArgumentsAccessReadDescriptor::InitializePlatformSpecific(
234 CallInterfaceDescriptorData* data) { 222 CallInterfaceDescriptorData* data) {
235 Register registers[] = {ContextRegister(), index(), parameter_count()}; 223 Register registers[] = {index(), parameter_count()};
236 data->InitializePlatformSpecific(arraysize(registers), registers); 224 data->InitializePlatformSpecific(arraysize(registers), registers);
237 } 225 }
238 226
239 227
240 void ContextOnlyDescriptor::InitializePlatformSpecific( 228 void ContextOnlyDescriptor::InitializePlatformSpecific(
241 CallInterfaceDescriptorData* data) { 229 CallInterfaceDescriptorData* data) {
242 Register registers[] = {ContextRegister()}; 230 data->InitializePlatformSpecific(0, nullptr);
243 data->InitializePlatformSpecific(arraysize(registers), registers);
244 } 231 }
245 232
246 233
247 void GrowArrayElementsDescriptor::InitializePlatformSpecific( 234 void GrowArrayElementsDescriptor::InitializePlatformSpecific(
248 CallInterfaceDescriptorData* data) { 235 CallInterfaceDescriptorData* data) {
249 Register registers[] = {ContextRegister(), ObjectRegister(), KeyRegister()}; 236 Register registers[] = {ObjectRegister(), KeyRegister()};
250 data->InitializePlatformSpecific(arraysize(registers), registers); 237 data->InitializePlatformSpecific(arraysize(registers), registers);
251 } 238 }
252 239
253 240
254 Type::FunctionType* 241 Type::FunctionType*
255 FastCloneShallowArrayDescriptor::BuildCallInterfaceDescriptorFunctionType( 242 FastCloneShallowArrayDescriptor::BuildCallInterfaceDescriptorFunctionType(
256 Isolate* isolate, int paramater_count) { 243 Isolate* isolate, int paramater_count) {
257 Type::FunctionType* function = Type::FunctionType::New( 244 Type::FunctionType* function = Type::FunctionType::New(
258 AnyTagged(), Type::Undefined(), 4, isolate->interface_descriptor_zone()); 245 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone());
259 function->InitParameter(0, AnyTagged()); 246 function->InitParameter(0, AnyTagged());
260 function->InitParameter(1, AnyTagged()); 247 function->InitParameter(1, SmiType());
261 function->InitParameter(2, SmiType()); 248 function->InitParameter(2, AnyTagged());
262 function->InitParameter(3, AnyTagged());
263 return function; 249 return function;
264 } 250 }
265 251
266 252
267 Type::FunctionType* 253 Type::FunctionType*
268 CreateAllocationSiteDescriptor::BuildCallInterfaceDescriptorFunctionType( 254 CreateAllocationSiteDescriptor::BuildCallInterfaceDescriptorFunctionType(
269 Isolate* isolate, int paramater_count) { 255 Isolate* isolate, int paramater_count) {
270 Type::FunctionType* function = Type::FunctionType::New( 256 Type::FunctionType* function = Type::FunctionType::New(
271 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone()); 257 AnyTagged(), Type::Undefined(), 2, isolate->interface_descriptor_zone());
272 function->InitParameter(0, AnyTagged()); 258 function->InitParameter(0, AnyTagged());
273 function->InitParameter(1, AnyTagged()); 259 function->InitParameter(1, SmiType());
274 function->InitParameter(2, SmiType());
275 return function; 260 return function;
276 } 261 }
277 262
278 263
279 Type::FunctionType* 264 Type::FunctionType*
280 CreateWeakCellDescriptor::BuildCallInterfaceDescriptorFunctionType( 265 CreateWeakCellDescriptor::BuildCallInterfaceDescriptorFunctionType(
281 Isolate* isolate, int paramater_count) { 266 Isolate* isolate, int paramater_count) {
282 Type::FunctionType* function = Type::FunctionType::New( 267 Type::FunctionType* function = Type::FunctionType::New(
283 AnyTagged(), Type::Undefined(), 4, isolate->interface_descriptor_zone()); 268 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone());
284 function->InitParameter(0, AnyTagged()); 269 function->InitParameter(0, AnyTagged());
285 function->InitParameter(1, AnyTagged()); 270 function->InitParameter(1, SmiType());
286 function->InitParameter(2, SmiType()); 271 function->InitParameter(2, AnyTagged());
287 function->InitParameter(3, AnyTagged());
288 return function; 272 return function;
289 } 273 }
290 274
291 275
292 Type::FunctionType* 276 Type::FunctionType*
293 CallFunctionWithFeedbackDescriptor::BuildCallInterfaceDescriptorFunctionType( 277 CallFunctionWithFeedbackDescriptor::BuildCallInterfaceDescriptorFunctionType(
294 Isolate* isolate, int paramater_count) { 278 Isolate* isolate, int paramater_count) {
295 Type::FunctionType* function = Type::FunctionType::New( 279 Type::FunctionType* function = Type::FunctionType::New(
296 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone()); 280 AnyTagged(), Type::Undefined(), 2, isolate->interface_descriptor_zone());
297 function->InitParameter(0, AnyTagged()); 281 function->InitParameter(0, Type::Receiver()); // JSFunction
298 function->InitParameter(1, Type::Receiver()); // JSFunction 282 function->InitParameter(1, SmiType());
299 function->InitParameter(2, SmiType());
300 return function; 283 return function;
301 } 284 }
302 285
303 286
304 Type::FunctionType* CallFunctionWithFeedbackAndVectorDescriptor:: 287 Type::FunctionType* CallFunctionWithFeedbackAndVectorDescriptor::
305 BuildCallInterfaceDescriptorFunctionType(Isolate* isolate, 288 BuildCallInterfaceDescriptorFunctionType(Isolate* isolate,
306 int paramater_count) { 289 int paramater_count) {
307 Type::FunctionType* function = Type::FunctionType::New( 290 Type::FunctionType* function = Type::FunctionType::New(
308 AnyTagged(), Type::Undefined(), 4, isolate->interface_descriptor_zone()); 291 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone());
309 function->InitParameter(0, AnyTagged()); 292 function->InitParameter(0, Type::Receiver()); // JSFunction
310 function->InitParameter(1, Type::Receiver()); // JSFunction 293 function->InitParameter(1, SmiType());
311 function->InitParameter(2, SmiType()); 294 function->InitParameter(2, AnyTagged());
312 function->InitParameter(3, AnyTagged());
313 return function; 295 return function;
314 } 296 }
315 297
316 298
317 Type::FunctionType* 299 Type::FunctionType*
318 ArrayConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType( 300 ArrayConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType(
319 Isolate* isolate, int paramater_count) { 301 Isolate* isolate, int paramater_count) {
320 Type::FunctionType* function = Type::FunctionType::New( 302 Type::FunctionType* function = Type::FunctionType::New(
321 AnyTagged(), Type::Undefined(), 4, isolate->interface_descriptor_zone()); 303 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone());
322 function->InitParameter(0, AnyTagged()); 304 function->InitParameter(0, Type::Receiver()); // JSFunction
323 function->InitParameter(1, Type::Receiver()); // JSFunction 305 function->InitParameter(1, AnyTagged());
324 function->InitParameter(2, AnyTagged()); 306 function->InitParameter(2, UntaggedSigned32());
325 function->InitParameter(3, UntaggedSigned32());
326 return function; 307 return function;
327 } 308 }
328 309
329 310
330 Type::FunctionType* 311 Type::FunctionType*
331 InternalArrayConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType( 312 InternalArrayConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType(
332 Isolate* isolate, int paramater_count) { 313 Isolate* isolate, int paramater_count) {
333 Type::FunctionType* function = Type::FunctionType::New( 314 Type::FunctionType* function = Type::FunctionType::New(
334 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone()); 315 AnyTagged(), Type::Undefined(), 2, isolate->interface_descriptor_zone());
335 function->InitParameter(0, AnyTagged()); 316 function->InitParameter(0, Type::Receiver()); // JSFunction
336 function->InitParameter(1, Type::Receiver()); // JSFunction 317 function->InitParameter(1, UntaggedSigned32());
337 function->InitParameter(2, UntaggedSigned32());
338 return function; 318 return function;
339 } 319 }
340 320
341 321
342 Type::FunctionType* 322 Type::FunctionType*
343 ArgumentAdaptorDescriptor::BuildCallInterfaceDescriptorFunctionType( 323 ArgumentAdaptorDescriptor::BuildCallInterfaceDescriptorFunctionType(
344 Isolate* isolate, int paramater_count) { 324 Isolate* isolate, int paramater_count) {
345 Type::FunctionType* function = Type::FunctionType::New( 325 Type::FunctionType* function = Type::FunctionType::New(
346 AnyTagged(), Type::Undefined(), 4, isolate->interface_descriptor_zone()); 326 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone());
347 function->InitParameter(0, AnyTagged()); // context 327 function->InitParameter(0, Type::Receiver()); // JSFunction
348 function->InitParameter(1, Type::Receiver()); // JSFunction 328 function->InitParameter(1, UntaggedSigned32()); // actual number of arguments
349 function->InitParameter(2, UntaggedSigned32()); // actual number of arguments 329 function->InitParameter(2,
350 function->InitParameter(3,
351 UntaggedSigned32()); // expected number of arguments 330 UntaggedSigned32()); // expected number of arguments
352 return function; 331 return function;
353 } 332 }
354 333
355 334
356 Type::FunctionType* 335 Type::FunctionType*
357 ApiFunctionDescriptor::BuildCallInterfaceDescriptorFunctionType( 336 ApiFunctionDescriptor::BuildCallInterfaceDescriptorFunctionType(
358 Isolate* isolate, int paramater_count) { 337 Isolate* isolate, int paramater_count) {
359 Type::FunctionType* function = Type::FunctionType::New( 338 Type::FunctionType* function = Type::FunctionType::New(
360 AnyTagged(), Type::Undefined(), 6, isolate->interface_descriptor_zone()); 339 AnyTagged(), Type::Undefined(), 5, isolate->interface_descriptor_zone());
361 function->InitParameter(0, AnyTagged()); // context 340 function->InitParameter(0, AnyTagged()); // callee
362 function->InitParameter(1, AnyTagged()); // callee 341 function->InitParameter(1, AnyTagged()); // call_data
363 function->InitParameter(2, AnyTagged()); // call_data 342 function->InitParameter(2, AnyTagged()); // holder
364 function->InitParameter(3, AnyTagged()); // holder 343 function->InitParameter(3, ExternalPointer()); // api_function_address
365 function->InitParameter(4, ExternalPointer()); // api_function_address 344 function->InitParameter(4, UntaggedSigned32()); // actual number of arguments
366 function->InitParameter(5, UntaggedSigned32()); // actual number of arguments
367 return function; 345 return function;
368 } 346 }
369 347
370 348
371 Type::FunctionType* 349 Type::FunctionType*
372 ApiAccessorDescriptor::BuildCallInterfaceDescriptorFunctionType( 350 ApiAccessorDescriptor::BuildCallInterfaceDescriptorFunctionType(
373 Isolate* isolate, int paramater_count) { 351 Isolate* isolate, int paramater_count) {
374 Type::FunctionType* function = Type::FunctionType::New( 352 Type::FunctionType* function = Type::FunctionType::New(
375 AnyTagged(), Type::Undefined(), 5, isolate->interface_descriptor_zone()); 353 AnyTagged(), Type::Undefined(), 4, isolate->interface_descriptor_zone());
376 function->InitParameter(0, AnyTagged()); // context 354 function->InitParameter(0, AnyTagged()); // callee
377 function->InitParameter(1, AnyTagged()); // callee 355 function->InitParameter(1, AnyTagged()); // call_data
378 function->InitParameter(2, AnyTagged()); // call_data 356 function->InitParameter(2, AnyTagged()); // holder
379 function->InitParameter(3, AnyTagged()); // holder 357 function->InitParameter(3, ExternalPointer()); // api_function_address
380 function->InitParameter(4, ExternalPointer()); // api_function_address
381 return function; 358 return function;
382 } 359 }
383 360
384 361
385 Type::FunctionType* 362 Type::FunctionType*
386 MathRoundVariantDescriptor::BuildCallInterfaceDescriptorFunctionType( 363 MathRoundVariantDescriptor::BuildCallInterfaceDescriptorFunctionType(
387 Isolate* isolate, int paramater_count) { 364 Isolate* isolate, int paramater_count) {
388 Type::FunctionType* function = Type::FunctionType::New( 365 Type::FunctionType* function = Type::FunctionType::New(
389 AnyTagged(), Type::Undefined(), 3, isolate->interface_descriptor_zone()); 366 AnyTagged(), Type::Undefined(), 2, isolate->interface_descriptor_zone());
390 function->InitParameter(0, Type::Receiver()); 367 function->InitParameter(0, SmiType());
391 function->InitParameter(1, SmiType()); 368 function->InitParameter(1, AnyTagged());
392 function->InitParameter(2, AnyTagged());
393 return function; 369 return function;
394 } 370 }
395 371
396 372
397 } // namespace internal 373 } // namespace internal
398 } // namespace v8 374 } // namespace v8
OLDNEW
« src/code-stubs.h ('K') | « src/interface-descriptors.h ('k') | src/mips/code-stubs-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698