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/interface-descriptors.h" | 5 #include "src/interface-descriptors.h" |
6 | 6 |
7 namespace v8 { | 7 namespace v8 { |
8 namespace internal { | 8 namespace internal { |
9 | 9 |
10 namespace { | |
11 // Constructors for common combined semantic and representation types. | |
12 Type* SmiType(Zone* zone) { | |
13 return Type::Intersect(Type::SignedSmall(), Type::TaggedSigned(), zone); | |
14 } | |
15 | |
16 | |
17 Type* UntaggedIntegral32(Zone* zone) { | |
18 return Type::Intersect(Type::Signed32(), Type::UntaggedIntegral32(), zone); | |
19 } | |
20 | |
21 | |
22 Type* AnyTagged(Zone* zone) { | |
23 return Type::Intersect( | |
24 Type::Any(), | |
25 Type::Union(Type::TaggedPointer(), Type::TaggedSigned(), zone), zone); | |
26 } | |
27 | |
28 | |
29 Type* ExternalPointer(Zone* zone) { | |
30 return Type::Intersect(Type::Internal(), Type::UntaggedPointer(), zone); | |
31 } | |
32 } // namespace | |
33 | |
34 FunctionType* CallInterfaceDescriptor::BuildDefaultFunctionType( | |
35 Isolate* isolate, int parameter_count) { | |
36 Zone* zone = isolate->interface_descriptor_zone(); | |
37 FunctionType* function = | |
38 Type::Function(AnyTagged(zone), Type::Undefined(), parameter_count, zone) | |
39 ->AsFunction(); | |
40 while (parameter_count-- != 0) { | |
41 function->InitParameter(parameter_count, AnyTagged(zone)); | |
42 } | |
43 return function; | |
44 } | |
45 | 10 |
46 void CallInterfaceDescriptorData::InitializePlatformSpecific( | 11 void CallInterfaceDescriptorData::InitializePlatformSpecific( |
47 int register_parameter_count, const Register* registers, | 12 int register_parameter_count, const Register* registers, |
48 PlatformInterfaceDescriptor* platform_descriptor) { | 13 PlatformInterfaceDescriptor* platform_descriptor) { |
49 platform_specific_descriptor_ = platform_descriptor; | 14 platform_specific_descriptor_ = platform_descriptor; |
50 register_param_count_ = register_parameter_count; | 15 register_param_count_ = register_parameter_count; |
51 | 16 |
52 // InterfaceDescriptor owns a copy of the registers array. | 17 // InterfaceDescriptor owns a copy of the registers array. |
53 register_params_.reset(NewArray<Register>(register_parameter_count)); | 18 register_params_.reset(NewArray<Register>(register_parameter_count)); |
54 for (int i = 0; i < register_parameter_count; i++) { | 19 for (int i = 0; i < register_parameter_count; i++) { |
55 register_params_[i] = registers[i]; | 20 register_params_[i] = registers[i]; |
56 } | 21 } |
57 } | 22 } |
58 | 23 |
| 24 void CallInterfaceDescriptorData::InitializePlatformIndependent( |
| 25 int parameter_count, int extra_parameter_count, |
| 26 const MachineType* machine_types) { |
| 27 // InterfaceDescriptor owns a copy of the MachineType array. |
| 28 // We only care about parameters, not receiver and result. |
| 29 param_count_ = parameter_count + extra_parameter_count; |
| 30 machine_types_.reset(NewArray<MachineType>(param_count_)); |
| 31 for (int i = 0; i < param_count_; i++) { |
| 32 if (machine_types == NULL || i >= parameter_count) { |
| 33 machine_types_[i] = MachineType::AnyTagged(); |
| 34 } else { |
| 35 machine_types_[i] = machine_types[i]; |
| 36 } |
| 37 } |
| 38 } |
| 39 |
59 const char* CallInterfaceDescriptor::DebugName(Isolate* isolate) const { | 40 const char* CallInterfaceDescriptor::DebugName(Isolate* isolate) const { |
60 CallInterfaceDescriptorData* start = isolate->call_descriptor_data(0); | 41 CallInterfaceDescriptorData* start = isolate->call_descriptor_data(0); |
61 size_t index = data_ - start; | 42 size_t index = data_ - start; |
62 DCHECK(index < CallDescriptors::NUMBER_OF_DESCRIPTORS); | 43 DCHECK(index < CallDescriptors::NUMBER_OF_DESCRIPTORS); |
63 CallDescriptors::Key key = static_cast<CallDescriptors::Key>(index); | 44 CallDescriptors::Key key = static_cast<CallDescriptors::Key>(index); |
64 switch (key) { | 45 switch (key) { |
65 #define DEF_CASE(NAME) \ | 46 #define DEF_CASE(NAME) \ |
66 case CallDescriptors::NAME: \ | 47 case CallDescriptors::NAME: \ |
67 return #NAME " Descriptor"; | 48 return #NAME " Descriptor"; |
68 INTERFACE_DESCRIPTOR_LIST(DEF_CASE) | 49 INTERFACE_DESCRIPTOR_LIST(DEF_CASE) |
69 #undef DEF_CASE | 50 #undef DEF_CASE |
70 case CallDescriptors::NUMBER_OF_DESCRIPTORS: | 51 case CallDescriptors::NUMBER_OF_DESCRIPTORS: |
71 break; | 52 break; |
72 } | 53 } |
73 return ""; | 54 return ""; |
74 } | 55 } |
75 | 56 |
76 | 57 |
77 void VoidDescriptor::InitializePlatformSpecific( | 58 void VoidDescriptor::InitializePlatformSpecific( |
78 CallInterfaceDescriptorData* data) { | 59 CallInterfaceDescriptorData* data) { |
79 data->InitializePlatformSpecific(0, nullptr); | 60 data->InitializePlatformSpecific(0, nullptr); |
80 } | 61 } |
81 | 62 |
82 FunctionType* | 63 void FastNewFunctionContextDescriptor::InitializePlatformIndependent( |
83 FastNewFunctionContextDescriptor::BuildCallInterfaceDescriptorFunctionType( | 64 CallInterfaceDescriptorData* data) { |
84 Isolate* isolate, int parameter_count) { | 65 MachineType machine_types[] = {MachineType::AnyTagged(), |
85 Zone* zone = isolate->interface_descriptor_zone(); | 66 MachineType::Int32()}; |
86 FunctionType* function = | 67 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
87 Type::Function(AnyTagged(zone), Type::Undefined(), 2, zone)->AsFunction(); | 68 machine_types); |
88 function->InitParameter(0, AnyTagged(zone)); | |
89 function->InitParameter(1, UntaggedIntegral32(zone)); | |
90 return function; | |
91 } | 69 } |
92 | 70 |
93 void FastNewFunctionContextDescriptor::InitializePlatformSpecific( | 71 void FastNewFunctionContextDescriptor::InitializePlatformSpecific( |
94 CallInterfaceDescriptorData* data) { | 72 CallInterfaceDescriptorData* data) { |
95 Register registers[] = {FunctionRegister(), SlotsRegister()}; | 73 Register registers[] = {FunctionRegister(), SlotsRegister()}; |
96 data->InitializePlatformSpecific(arraysize(registers), registers); | 74 data->InitializePlatformSpecific(arraysize(registers), registers); |
97 } | 75 } |
98 | 76 |
99 FunctionType* LoadDescriptor::BuildCallInterfaceDescriptorFunctionType( | 77 void LoadDescriptor::InitializePlatformIndependent( |
100 Isolate* isolate, int parameter_count) { | 78 CallInterfaceDescriptorData* data) { |
101 Zone* zone = isolate->interface_descriptor_zone(); | 79 // kReceiver, kName, kSlot |
102 FunctionType* function = | 80 MachineType machine_types[] = {MachineType::AnyTagged(), |
103 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 81 MachineType::AnyTagged(), |
104 ->AsFunction(); | 82 MachineType::TaggedSigned()}; |
105 function->InitParameter(kReceiver, AnyTagged(zone)); | 83 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
106 function->InitParameter(kName, AnyTagged(zone)); | 84 machine_types); |
107 function->InitParameter(kSlot, SmiType(zone)); | |
108 return function; | |
109 } | 85 } |
110 | 86 |
111 | |
112 void LoadDescriptor::InitializePlatformSpecific( | 87 void LoadDescriptor::InitializePlatformSpecific( |
113 CallInterfaceDescriptorData* data) { | 88 CallInterfaceDescriptorData* data) { |
114 Register registers[] = {ReceiverRegister(), NameRegister(), SlotRegister()}; | 89 Register registers[] = {ReceiverRegister(), NameRegister(), SlotRegister()}; |
115 data->InitializePlatformSpecific(arraysize(registers), registers); | 90 data->InitializePlatformSpecific(arraysize(registers), registers); |
116 } | 91 } |
117 | 92 |
118 FunctionType* LoadGlobalDescriptor::BuildCallInterfaceDescriptorFunctionType( | 93 void LoadGlobalDescriptor::InitializePlatformIndependent( |
119 Isolate* isolate, int parameter_count) { | 94 CallInterfaceDescriptorData* data) { |
120 Zone* zone = isolate->interface_descriptor_zone(); | 95 // kSlot |
121 FunctionType* function = | 96 MachineType machine_types[] = {MachineType::TaggedSigned()}; |
122 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 97 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
123 ->AsFunction(); | 98 machine_types); |
124 function->InitParameter(kSlot, SmiType(zone)); | |
125 return function; | |
126 } | 99 } |
127 | 100 |
128 void LoadGlobalDescriptor::InitializePlatformSpecific( | 101 void LoadGlobalDescriptor::InitializePlatformSpecific( |
129 CallInterfaceDescriptorData* data) { | 102 CallInterfaceDescriptorData* data) { |
130 Register registers[] = {LoadWithVectorDescriptor::SlotRegister()}; | 103 Register registers[] = {LoadWithVectorDescriptor::SlotRegister()}; |
131 data->InitializePlatformSpecific(arraysize(registers), registers); | 104 data->InitializePlatformSpecific(arraysize(registers), registers); |
132 } | 105 } |
133 | 106 |
134 FunctionType* | 107 void LoadGlobalWithVectorDescriptor::InitializePlatformIndependent( |
135 LoadGlobalWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType( | 108 CallInterfaceDescriptorData* data) { |
136 Isolate* isolate, int parameter_count) { | 109 // kSlot, kVector |
137 Zone* zone = isolate->interface_descriptor_zone(); | 110 MachineType machine_types[] = {MachineType::TaggedSigned(), |
138 FunctionType* function = | 111 MachineType::AnyTagged()}; |
139 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 112 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
140 ->AsFunction(); | 113 machine_types); |
141 function->InitParameter(kSlot, SmiType(zone)); | |
142 function->InitParameter(kVector, AnyTagged(zone)); | |
143 return function; | |
144 } | 114 } |
145 | 115 |
146 void LoadGlobalWithVectorDescriptor::InitializePlatformSpecific( | 116 void LoadGlobalWithVectorDescriptor::InitializePlatformSpecific( |
147 CallInterfaceDescriptorData* data) { | 117 CallInterfaceDescriptorData* data) { |
148 Register registers[] = {LoadWithVectorDescriptor::SlotRegister(), | 118 Register registers[] = {LoadWithVectorDescriptor::SlotRegister(), |
149 LoadWithVectorDescriptor::VectorRegister()}; | 119 LoadWithVectorDescriptor::VectorRegister()}; |
150 data->InitializePlatformSpecific(arraysize(registers), registers); | 120 data->InitializePlatformSpecific(arraysize(registers), registers); |
151 } | 121 } |
152 | 122 |
153 FunctionType* StoreDescriptor::BuildCallInterfaceDescriptorFunctionType( | 123 void StoreDescriptor::InitializePlatformIndependent( |
154 Isolate* isolate, int parameter_count) { | 124 CallInterfaceDescriptorData* data) { |
155 Zone* zone = isolate->interface_descriptor_zone(); | 125 // kReceiver, kName, kValue, kSlot |
156 FunctionType* function = | 126 MachineType machine_types[] = { |
157 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 127 MachineType::AnyTagged(), MachineType::AnyTagged(), |
158 ->AsFunction(); | 128 MachineType::AnyTagged(), MachineType::TaggedSigned()}; |
159 function->InitParameter(kReceiver, AnyTagged(zone)); | 129 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
160 function->InitParameter(kName, AnyTagged(zone)); | 130 machine_types); |
161 function->InitParameter(kValue, AnyTagged(zone)); | |
162 function->InitParameter(kSlot, SmiType(zone)); | |
163 return function; | |
164 } | 131 } |
165 | 132 |
166 void StoreDescriptor::InitializePlatformSpecific( | 133 void StoreDescriptor::InitializePlatformSpecific( |
167 CallInterfaceDescriptorData* data) { | 134 CallInterfaceDescriptorData* data) { |
168 Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), | 135 Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), |
169 SlotRegister()}; | 136 SlotRegister()}; |
170 data->InitializePlatformSpecific(arraysize(registers), registers); | 137 data->InitializePlatformSpecific(arraysize(registers), registers); |
171 } | 138 } |
172 | 139 |
173 | 140 |
(...skipping 13 matching lines...) Expand all Loading... |
187 MapRegister(), VectorRegister()}; | 154 MapRegister(), VectorRegister()}; |
188 data->InitializePlatformSpecific(arraysize(registers), registers); | 155 data->InitializePlatformSpecific(arraysize(registers), registers); |
189 } else { | 156 } else { |
190 Register registers[] = {ReceiverRegister(), NameRegister(), | 157 Register registers[] = {ReceiverRegister(), NameRegister(), |
191 ValueRegister(), MapRegister(), | 158 ValueRegister(), MapRegister(), |
192 SlotRegister(), VectorRegister()}; | 159 SlotRegister(), VectorRegister()}; |
193 data->InitializePlatformSpecific(arraysize(registers), registers); | 160 data->InitializePlatformSpecific(arraysize(registers), registers); |
194 } | 161 } |
195 } | 162 } |
196 | 163 |
197 FunctionType* | 164 void StoreTransitionDescriptor::InitializePlatformIndependent( |
198 StoreTransitionDescriptor::BuildCallInterfaceDescriptorFunctionType( | 165 CallInterfaceDescriptorData* data) { |
199 Isolate* isolate, int parameter_count) { | 166 // kReceiver, kName, kValue, kMap |
200 Zone* zone = isolate->interface_descriptor_zone(); | 167 MachineType machine_types[] = { |
201 FunctionType* function = | 168 MachineType::AnyTagged(), MachineType::AnyTagged(), |
202 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 169 MachineType::AnyTagged(), MachineType::AnyTagged()}; |
203 ->AsFunction(); | 170 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
204 function->InitParameter(kReceiver, AnyTagged(zone)); | 171 machine_types); |
205 function->InitParameter(kName, AnyTagged(zone)); | |
206 function->InitParameter(kValue, AnyTagged(zone)); | |
207 function->InitParameter(kMap, AnyTagged(zone)); | |
208 return function; | |
209 } | 172 } |
210 | 173 |
211 FunctionType* | 174 void StoreGlobalViaContextDescriptor::InitializePlatformIndependent( |
212 StoreGlobalViaContextDescriptor::BuildCallInterfaceDescriptorFunctionType( | 175 CallInterfaceDescriptorData* data) { |
213 Isolate* isolate, int parameter_count) { | 176 // kSlot, kValue |
214 Zone* zone = isolate->interface_descriptor_zone(); | 177 MachineType machine_types[] = {MachineType::Int32(), |
215 FunctionType* function = | 178 MachineType::AnyTagged()}; |
216 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 179 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
217 ->AsFunction(); | 180 machine_types); |
218 function->InitParameter(kSlot, UntaggedIntegral32(zone)); | |
219 function->InitParameter(kValue, AnyTagged(zone)); | |
220 return function; | |
221 } | 181 } |
222 | 182 |
223 | |
224 void StoreGlobalViaContextDescriptor::InitializePlatformSpecific( | 183 void StoreGlobalViaContextDescriptor::InitializePlatformSpecific( |
225 CallInterfaceDescriptorData* data) { | 184 CallInterfaceDescriptorData* data) { |
226 Register registers[] = {SlotRegister(), ValueRegister()}; | 185 Register registers[] = {SlotRegister(), ValueRegister()}; |
227 data->InitializePlatformSpecific(arraysize(registers), registers); | 186 data->InitializePlatformSpecific(arraysize(registers), registers); |
228 } | 187 } |
229 | 188 |
230 | 189 |
231 void StringCompareDescriptor::InitializePlatformSpecific( | 190 void StringCompareDescriptor::InitializePlatformSpecific( |
232 CallInterfaceDescriptorData* data) { | 191 CallInterfaceDescriptorData* data) { |
233 Register registers[] = {LeftRegister(), RightRegister()}; | 192 Register registers[] = {LeftRegister(), RightRegister()}; |
(...skipping 11 matching lines...) Expand all Loading... |
245 Register registers[] = {exponent()}; | 204 Register registers[] = {exponent()}; |
246 data->InitializePlatformSpecific(arraysize(registers), registers); | 205 data->InitializePlatformSpecific(arraysize(registers), registers); |
247 } | 206 } |
248 | 207 |
249 void MathPowIntegerDescriptor::InitializePlatformSpecific( | 208 void MathPowIntegerDescriptor::InitializePlatformSpecific( |
250 CallInterfaceDescriptorData* data) { | 209 CallInterfaceDescriptorData* data) { |
251 Register registers[] = {exponent()}; | 210 Register registers[] = {exponent()}; |
252 data->InitializePlatformSpecific(arraysize(registers), registers); | 211 data->InitializePlatformSpecific(arraysize(registers), registers); |
253 } | 212 } |
254 | 213 |
255 FunctionType* | 214 void LoadWithVectorDescriptor::InitializePlatformIndependent( |
256 LoadWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType( | 215 CallInterfaceDescriptorData* data) { |
257 Isolate* isolate, int parameter_count) { | 216 // kReceiver, kName, kSlot, kVector |
258 Zone* zone = isolate->interface_descriptor_zone(); | 217 MachineType machine_types[] = { |
259 FunctionType* function = | 218 MachineType::AnyTagged(), MachineType::AnyTagged(), |
260 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 219 MachineType::TaggedSigned(), MachineType::AnyTagged()}; |
261 ->AsFunction(); | 220 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
262 function->InitParameter(kReceiver, AnyTagged(zone)); | 221 machine_types); |
263 function->InitParameter(kName, AnyTagged(zone)); | |
264 function->InitParameter(kSlot, SmiType(zone)); | |
265 function->InitParameter(kVector, AnyTagged(zone)); | |
266 return function; | |
267 } | 222 } |
268 | 223 |
269 | 224 |
270 void LoadWithVectorDescriptor::InitializePlatformSpecific( | 225 void LoadWithVectorDescriptor::InitializePlatformSpecific( |
271 CallInterfaceDescriptorData* data) { | 226 CallInterfaceDescriptorData* data) { |
272 Register registers[] = {ReceiverRegister(), NameRegister(), SlotRegister(), | 227 Register registers[] = {ReceiverRegister(), NameRegister(), SlotRegister(), |
273 VectorRegister()}; | 228 VectorRegister()}; |
274 data->InitializePlatformSpecific(arraysize(registers), registers); | 229 data->InitializePlatformSpecific(arraysize(registers), registers); |
275 } | 230 } |
276 | 231 |
277 FunctionType* | 232 void VectorStoreTransitionDescriptor::InitializePlatformIndependent( |
278 VectorStoreTransitionDescriptor::BuildCallInterfaceDescriptorFunctionType( | 233 CallInterfaceDescriptorData* data) { |
279 Isolate* isolate, int parameter_count) { | |
280 Zone* zone = isolate->interface_descriptor_zone(); | |
281 bool has_slot = !VectorStoreTransitionDescriptor::SlotRegister().is(no_reg); | 234 bool has_slot = !VectorStoreTransitionDescriptor::SlotRegister().is(no_reg); |
282 int arg_count = has_slot ? 6 : 5; | 235 |
283 FunctionType* function = | |
284 Type::Function(AnyTagged(zone), Type::Undefined(), arg_count, zone) | |
285 ->AsFunction(); | |
286 int index = 0; | |
287 // TODO(ishell): use ParameterIndices here | |
288 function->InitParameter(index++, AnyTagged(zone)); // receiver | |
289 function->InitParameter(index++, AnyTagged(zone)); // name | |
290 function->InitParameter(index++, AnyTagged(zone)); // value | |
291 function->InitParameter(index++, AnyTagged(zone)); // map | |
292 if (has_slot) { | 236 if (has_slot) { |
293 function->InitParameter(index++, SmiType(zone)); // slot | 237 // kReceiver, kName, kValue, kMap, kSlot, kVector |
| 238 MachineType machine_types[] = { |
| 239 MachineType::AnyTagged(), MachineType::AnyTagged(), |
| 240 MachineType::AnyTagged(), MachineType::AnyTagged(), |
| 241 MachineType::TaggedSigned(), MachineType::AnyTagged()}; |
| 242 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
| 243 machine_types); |
| 244 } else { |
| 245 // kReceiver, kName, kValue, kMap, kVector |
| 246 MachineType machine_types[] = { |
| 247 MachineType::AnyTagged(), MachineType::AnyTagged(), |
| 248 MachineType::AnyTagged(), MachineType::AnyTagged(), |
| 249 MachineType::AnyTagged()}; |
| 250 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
| 251 machine_types); |
294 } | 252 } |
295 function->InitParameter(index++, AnyTagged(zone)); // vector | |
296 return function; | |
297 } | 253 } |
298 | 254 |
299 FunctionType* | 255 void StoreWithVectorDescriptor::InitializePlatformIndependent( |
300 StoreWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType( | 256 CallInterfaceDescriptorData* data) { |
301 Isolate* isolate, int parameter_count) { | 257 // kReceiver, kName, kValue, kSlot, kVector |
302 Zone* zone = isolate->interface_descriptor_zone(); | 258 MachineType machine_types[] = { |
303 FunctionType* function = | 259 MachineType::AnyTagged(), MachineType::AnyTagged(), |
304 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 260 MachineType::AnyTagged(), MachineType::TaggedSigned(), |
305 ->AsFunction(); | 261 MachineType::AnyTagged()}; |
306 function->InitParameter(kReceiver, AnyTagged(zone)); | 262 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
307 function->InitParameter(kName, AnyTagged(zone)); | 263 machine_types); |
308 function->InitParameter(kValue, AnyTagged(zone)); | |
309 function->InitParameter(kSlot, SmiType(zone)); | |
310 function->InitParameter(kVector, AnyTagged(zone)); | |
311 return function; | |
312 } | 264 } |
313 | 265 |
314 void StoreWithVectorDescriptor::InitializePlatformSpecific( | 266 void StoreWithVectorDescriptor::InitializePlatformSpecific( |
315 CallInterfaceDescriptorData* data) { | 267 CallInterfaceDescriptorData* data) { |
316 Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), | 268 Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), |
317 SlotRegister(), VectorRegister()}; | 269 SlotRegister(), VectorRegister()}; |
318 data->InitializePlatformSpecific(arraysize(registers), registers); | 270 data->InitializePlatformSpecific(arraysize(registers), registers); |
319 } | 271 } |
320 | 272 |
321 FunctionType* | 273 void BinaryOpWithVectorDescriptor::InitializePlatformIndependent( |
322 BinaryOpWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType( | 274 CallInterfaceDescriptorData* data) { |
323 Isolate* isolate, int parameter_count) { | 275 // kLeft, kRight, kSlot, kVector |
324 DCHECK_EQ(parameter_count, kParameterCount); | 276 MachineType machine_types[] = {MachineType::AnyTagged(), |
325 Zone* zone = isolate->interface_descriptor_zone(); | 277 MachineType::AnyTagged(), MachineType::Int32(), |
326 FunctionType* function = | 278 MachineType::AnyTagged()}; |
327 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 279 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
328 ->AsFunction(); | 280 machine_types); |
329 function->InitParameter(kLeft, AnyTagged(zone)); | |
330 function->InitParameter(kRight, AnyTagged(zone)); | |
331 function->InitParameter(kSlot, UntaggedIntegral32(zone)); | |
332 function->InitParameter(kVector, AnyTagged(zone)); | |
333 return function; | |
334 } | 281 } |
335 | 282 |
336 const Register ApiGetterDescriptor::ReceiverRegister() { | 283 const Register ApiGetterDescriptor::ReceiverRegister() { |
337 return LoadDescriptor::ReceiverRegister(); | 284 return LoadDescriptor::ReceiverRegister(); |
338 } | 285 } |
339 | 286 |
340 void ApiGetterDescriptor::InitializePlatformSpecific( | 287 void ApiGetterDescriptor::InitializePlatformSpecific( |
341 CallInterfaceDescriptorData* data) { | 288 CallInterfaceDescriptorData* data) { |
342 Register registers[] = {ReceiverRegister(), HolderRegister(), | 289 Register registers[] = {ReceiverRegister(), HolderRegister(), |
343 CallbackRegister()}; | 290 CallbackRegister()}; |
(...skipping 21 matching lines...) Expand all Loading... |
365 case 6: | 312 case 6: |
366 return OnStackWith6ArgsDescriptor(isolate); | 313 return OnStackWith6ArgsDescriptor(isolate); |
367 case 7: | 314 case 7: |
368 return OnStackWith7ArgsDescriptor(isolate); | 315 return OnStackWith7ArgsDescriptor(isolate); |
369 default: | 316 default: |
370 UNREACHABLE(); | 317 UNREACHABLE(); |
371 return VoidDescriptor(isolate); | 318 return VoidDescriptor(isolate); |
372 } | 319 } |
373 } | 320 } |
374 | 321 |
375 FunctionType* | 322 void OnStackArgsDescriptorBase::InitializePlatformIndependent( |
376 OnStackArgsDescriptorBase::BuildCallInterfaceDescriptorFunctionTypeWithArg( | 323 CallInterfaceDescriptorData* data) { |
377 Isolate* isolate, int register_parameter_count, int parameter_count) { | 324 data->InitializePlatformIndependent(0, extra_args(), NULL); |
378 DCHECK_EQ(0, register_parameter_count); | |
379 DCHECK_GT(parameter_count, 0); | |
380 Zone* zone = isolate->interface_descriptor_zone(); | |
381 FunctionType* function = | |
382 Type::Function(AnyTagged(zone), AnyTagged(zone), parameter_count, zone) | |
383 ->AsFunction(); | |
384 for (int i = 0; i < parameter_count; i++) { | |
385 function->InitParameter(i, AnyTagged(zone)); | |
386 } | |
387 return function; | |
388 } | 325 } |
389 | 326 |
390 void OnStackArgsDescriptorBase::InitializePlatformSpecific( | 327 void OnStackArgsDescriptorBase::InitializePlatformSpecific( |
391 CallInterfaceDescriptorData* data) { | 328 CallInterfaceDescriptorData* data) { |
392 data->InitializePlatformSpecific(0, nullptr); | 329 data->InitializePlatformSpecific(0, nullptr); |
393 } | 330 } |
394 | 331 |
395 void GrowArrayElementsDescriptor::InitializePlatformSpecific( | 332 void GrowArrayElementsDescriptor::InitializePlatformSpecific( |
396 CallInterfaceDescriptorData* data) { | 333 CallInterfaceDescriptorData* data) { |
397 Register registers[] = {ObjectRegister(), KeyRegister()}; | 334 Register registers[] = {ObjectRegister(), KeyRegister()}; |
398 data->InitializePlatformSpecific(arraysize(registers), registers); | 335 data->InitializePlatformSpecific(arraysize(registers), registers); |
399 } | 336 } |
400 | 337 |
401 FunctionType* | 338 void VarArgFunctionDescriptor::InitializePlatformIndependent( |
402 VarArgFunctionDescriptor::BuildCallInterfaceDescriptorFunctionType( | 339 CallInterfaceDescriptorData* data) { |
403 Isolate* isolate, int parameter_count) { | 340 // kActualArgumentsCount |
404 Zone* zone = isolate->interface_descriptor_zone(); | 341 MachineType machine_types[] = {MachineType::Int32()}; |
405 FunctionType* function = | 342 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
406 Type::Function(AnyTagged(zone), AnyTagged(zone), kParameterCount, zone) | 343 machine_types); |
407 ->AsFunction(); | |
408 function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); | |
409 return function; | |
410 } | 344 } |
411 | 345 |
412 FunctionType* | 346 void FastCloneRegExpDescriptor::InitializePlatformIndependent( |
413 FastCloneRegExpDescriptor::BuildCallInterfaceDescriptorFunctionType( | 347 CallInterfaceDescriptorData* data) { |
414 Isolate* isolate, int parameter_count) { | 348 // kClosure, kLiteralIndex, kPattern, kFlags |
415 Zone* zone = isolate->interface_descriptor_zone(); | 349 MachineType machine_types[] = { |
416 FunctionType* function = | 350 MachineType::AnyTagged(), MachineType::TaggedSigned(), |
417 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 351 MachineType::AnyTagged(), MachineType::AnyTagged()}; |
418 ->AsFunction(); | 352 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
419 function->InitParameter(kClosure, AnyTagged(zone)); | 353 machine_types); |
420 function->InitParameter(kLiteralIndex, SmiType(zone)); | |
421 function->InitParameter(kPattern, AnyTagged(zone)); | |
422 function->InitParameter(kFlags, AnyTagged(zone)); | |
423 return function; | |
424 } | 354 } |
425 | 355 |
426 FunctionType* | 356 void FastCloneShallowArrayDescriptor::InitializePlatformIndependent( |
427 FastCloneShallowArrayDescriptor::BuildCallInterfaceDescriptorFunctionType( | 357 CallInterfaceDescriptorData* data) { |
428 Isolate* isolate, int parameter_count) { | 358 // kClosure, kLiteralIndex, kConstantElements |
429 Zone* zone = isolate->interface_descriptor_zone(); | 359 MachineType machine_types[] = {MachineType::AnyTagged(), |
430 FunctionType* function = | 360 MachineType::TaggedSigned(), |
431 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 361 MachineType::AnyTagged()}; |
432 ->AsFunction(); | 362 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
433 function->InitParameter(kClosure, AnyTagged(zone)); | 363 machine_types); |
434 function->InitParameter(kLiteralIndex, SmiType(zone)); | |
435 function->InitParameter(kConstantElements, AnyTagged(zone)); | |
436 return function; | |
437 } | 364 } |
438 | 365 |
439 FunctionType* | 366 void CreateAllocationSiteDescriptor::InitializePlatformIndependent( |
440 CreateAllocationSiteDescriptor::BuildCallInterfaceDescriptorFunctionType( | 367 CallInterfaceDescriptorData* data) { |
441 Isolate* isolate, int parameter_count) { | 368 // kVector, kSlot |
442 Zone* zone = isolate->interface_descriptor_zone(); | 369 MachineType machine_types[] = {MachineType::AnyTagged(), |
443 FunctionType* function = | 370 MachineType::TaggedSigned()}; |
444 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 371 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
445 ->AsFunction(); | 372 machine_types); |
446 function->InitParameter(kVector, AnyTagged(zone)); | |
447 function->InitParameter(kSlot, SmiType(zone)); | |
448 return function; | |
449 } | 373 } |
450 | 374 |
451 FunctionType* | 375 void CreateWeakCellDescriptor::InitializePlatformIndependent( |
452 CreateWeakCellDescriptor::BuildCallInterfaceDescriptorFunctionType( | 376 CallInterfaceDescriptorData* data) { |
453 Isolate* isolate, int parameter_count) { | 377 // kVector, kSlot, kValue |
454 Zone* zone = isolate->interface_descriptor_zone(); | 378 MachineType machine_types[] = {MachineType::AnyTagged(), |
455 FunctionType* function = | 379 MachineType::TaggedSigned(), |
456 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 380 MachineType::AnyTagged()}; |
457 ->AsFunction(); | 381 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
458 function->InitParameter(kVector, AnyTagged(zone)); | 382 machine_types); |
459 function->InitParameter(kSlot, SmiType(zone)); | |
460 function->InitParameter(kValue, AnyTagged(zone)); | |
461 return function; | |
462 } | 383 } |
463 | 384 |
464 FunctionType* | 385 void CallTrampolineDescriptor::InitializePlatformIndependent( |
465 CallTrampolineDescriptor::BuildCallInterfaceDescriptorFunctionType( | 386 CallInterfaceDescriptorData* data) { |
466 Isolate* isolate, int parameter_count) { | 387 // kFunction, kActualArgumentsCount |
467 Zone* zone = isolate->interface_descriptor_zone(); | 388 MachineType machine_types[] = {MachineType::AnyTagged(), |
468 FunctionType* function = | 389 MachineType::Int32()}; |
469 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 390 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
470 ->AsFunction(); | 391 machine_types); |
471 function->InitParameter(kFunction, AnyTagged(zone)); | |
472 function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); | |
473 return function; | |
474 } | 392 } |
475 | 393 |
476 FunctionType* ConstructStubDescriptor::BuildCallInterfaceDescriptorFunctionType( | 394 void ConstructStubDescriptor::InitializePlatformIndependent( |
477 Isolate* isolate, int parameter_count) { | 395 CallInterfaceDescriptorData* data) { |
478 Zone* zone = isolate->interface_descriptor_zone(); | 396 // kFunction, kNewTarget, kActualArgumentsCount, kAllocationSite |
479 FunctionType* function = | 397 MachineType machine_types[] = {MachineType::AnyTagged(), |
480 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 398 MachineType::AnyTagged(), MachineType::Int32(), |
481 ->AsFunction(); | 399 MachineType::AnyTagged()}; |
482 function->InitParameter(kFunction, AnyTagged(zone)); | 400 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
483 function->InitParameter(kNewTarget, AnyTagged(zone)); | 401 machine_types); |
484 function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); | |
485 function->InitParameter(kAllocationSite, AnyTagged(zone)); | |
486 return function; | |
487 } | 402 } |
488 | 403 |
489 FunctionType* | 404 void ConstructTrampolineDescriptor::InitializePlatformIndependent( |
490 ConstructTrampolineDescriptor::BuildCallInterfaceDescriptorFunctionType( | 405 CallInterfaceDescriptorData* data) { |
491 Isolate* isolate, int parameter_count) { | 406 // kFunction, kNewTarget, kActualArgumentsCount |
492 Zone* zone = isolate->interface_descriptor_zone(); | 407 MachineType machine_types[] = { |
493 FunctionType* function = | 408 MachineType::AnyTagged(), MachineType::AnyTagged(), MachineType::Int32()}; |
494 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 409 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
495 ->AsFunction(); | 410 machine_types); |
496 function->InitParameter(kFunction, AnyTagged(zone)); | |
497 function->InitParameter(kNewTarget, AnyTagged(zone)); | |
498 function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); | |
499 return function; | |
500 } | 411 } |
501 | 412 |
502 FunctionType* | 413 void CallFunctionWithFeedbackDescriptor::InitializePlatformIndependent( |
503 CallFunctionWithFeedbackDescriptor::BuildCallInterfaceDescriptorFunctionType( | 414 CallInterfaceDescriptorData* data) { |
504 Isolate* isolate, int parameter_count) { | 415 // kFunction, kSlot |
505 Zone* zone = isolate->interface_descriptor_zone(); | 416 MachineType machine_types[] = {MachineType::AnyTagged(), |
506 FunctionType* function = | 417 MachineType::TaggedSigned()}; |
507 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 418 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
508 ->AsFunction(); | 419 machine_types); |
509 function->InitParameter(kFunction, Type::Receiver()); | |
510 function->InitParameter(kSlot, SmiType(zone)); | |
511 return function; | |
512 } | 420 } |
513 | 421 |
514 FunctionType* CallFunctionWithFeedbackAndVectorDescriptor:: | 422 void CallFunctionWithFeedbackAndVectorDescriptor::InitializePlatformIndependent( |
515 BuildCallInterfaceDescriptorFunctionType(Isolate* isolate, | 423 CallInterfaceDescriptorData* data) { |
516 int parameter_count) { | 424 // kFunction, kSlot, kVector |
517 Zone* zone = isolate->interface_descriptor_zone(); | 425 MachineType machine_types[] = {MachineType::TaggedPointer(), |
518 FunctionType* function = | 426 MachineType::TaggedSigned(), |
519 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 427 MachineType::AnyTagged()}; |
520 ->AsFunction(); | 428 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
521 function->InitParameter(kFunction, Type::Receiver()); | 429 machine_types); |
522 function->InitParameter(kSlot, SmiType(zone)); | |
523 function->InitParameter(kVector, AnyTagged(zone)); | |
524 return function; | |
525 } | 430 } |
526 | 431 |
527 FunctionType* | 432 void ArrayNoArgumentConstructorDescriptor::InitializePlatformIndependent( |
528 ArrayNoArgumentConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType( | 433 CallInterfaceDescriptorData* data) { |
529 Isolate* isolate, int parameter_count) { | 434 // kFunction, kAllocationSite, kActualArgumentsCount, kFunctionParameter |
530 Zone* zone = isolate->interface_descriptor_zone(); | 435 MachineType machine_types[] = {MachineType::TaggedPointer(), |
531 FunctionType* function = | 436 MachineType::AnyTagged(), MachineType::Int32(), |
532 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 437 MachineType::AnyTagged()}; |
533 ->AsFunction(); | 438 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
534 function->InitParameter(kFunction, Type::Receiver()); | 439 machine_types); |
535 function->InitParameter(kAllocationSite, AnyTagged(zone)); | |
536 function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); | |
537 function->InitParameter(kFunctionParameter, AnyTagged(zone)); | |
538 return function; | |
539 } | 440 } |
540 | 441 |
541 FunctionType* ArraySingleArgumentConstructorDescriptor:: | 442 void ArraySingleArgumentConstructorDescriptor::InitializePlatformIndependent( |
542 BuildCallInterfaceDescriptorFunctionType(Isolate* isolate, | 443 CallInterfaceDescriptorData* data) { |
543 int parameter_count) { | 444 // kFunction, kAllocationSite, kActualArgumentsCount, kFunctionParameter, |
544 Zone* zone = isolate->interface_descriptor_zone(); | 445 // kArraySizeSmiParameter |
545 FunctionType* function = | 446 MachineType machine_types[] = { |
546 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 447 MachineType::TaggedPointer(), MachineType::AnyTagged(), |
547 ->AsFunction(); | 448 MachineType::Int32(), MachineType::AnyTagged(), MachineType::AnyTagged()}; |
548 function->InitParameter(kFunction, Type::Receiver()); | 449 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
549 function->InitParameter(kAllocationSite, AnyTagged(zone)); | 450 machine_types); |
550 function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); | |
551 function->InitParameter(kFunctionParameter, AnyTagged(zone)); | |
552 function->InitParameter(kArraySizeSmiParameter, AnyTagged(zone)); | |
553 return function; | |
554 } | 451 } |
555 | 452 |
556 FunctionType* | 453 void ArrayNArgumentsConstructorDescriptor::InitializePlatformIndependent( |
557 ArrayNArgumentsConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType( | 454 CallInterfaceDescriptorData* data) { |
558 Isolate* isolate, int parameter_count) { | 455 // kFunction, kAllocationSite, kActualArgumentsCount |
559 Zone* zone = isolate->interface_descriptor_zone(); | 456 MachineType machine_types[] = {MachineType::TaggedPointer(), |
560 FunctionType* function = | 457 MachineType::AnyTagged(), |
561 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 458 MachineType::Int32()}; |
562 ->AsFunction(); | 459 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
563 function->InitParameter(kFunction, Type::Receiver()); | 460 machine_types); |
564 function->InitParameter(kAllocationSite, AnyTagged(zone)); | |
565 function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); | |
566 return function; | |
567 } | 461 } |
568 | 462 |
569 FunctionType* | 463 void ArgumentAdaptorDescriptor::InitializePlatformIndependent( |
570 ArgumentAdaptorDescriptor::BuildCallInterfaceDescriptorFunctionType( | 464 CallInterfaceDescriptorData* data) { |
571 Isolate* isolate, int parameter_count) { | 465 // kFunction, kNewTarget, kActualArgumentsCount, kExpectedArgumentsCount |
572 Zone* zone = isolate->interface_descriptor_zone(); | 466 MachineType machine_types[] = {MachineType::TaggedPointer(), |
573 FunctionType* function = | 467 MachineType::AnyTagged(), MachineType::Int32(), |
574 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 468 MachineType::Int32()}; |
575 ->AsFunction(); | 469 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
576 function->InitParameter(kFunction, Type::Receiver()); | 470 machine_types); |
577 function->InitParameter(kNewTarget, AnyTagged(zone)); | |
578 function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); | |
579 function->InitParameter(kExpectedArgumentsCount, UntaggedIntegral32(zone)); | |
580 return function; | |
581 } | 471 } |
582 | 472 |
583 CallInterfaceDescriptor ApiCallbackDescriptorBase::ForArgs(Isolate* isolate, | 473 CallInterfaceDescriptor ApiCallbackDescriptorBase::ForArgs(Isolate* isolate, |
584 int argc) { | 474 int argc) { |
585 switch (argc) { | 475 switch (argc) { |
586 case 0: | 476 case 0: |
587 return ApiCallbackWith0ArgsDescriptor(isolate); | 477 return ApiCallbackWith0ArgsDescriptor(isolate); |
588 case 1: | 478 case 1: |
589 return ApiCallbackWith1ArgsDescriptor(isolate); | 479 return ApiCallbackWith1ArgsDescriptor(isolate); |
590 case 2: | 480 case 2: |
591 return ApiCallbackWith2ArgsDescriptor(isolate); | 481 return ApiCallbackWith2ArgsDescriptor(isolate); |
592 case 3: | 482 case 3: |
593 return ApiCallbackWith3ArgsDescriptor(isolate); | 483 return ApiCallbackWith3ArgsDescriptor(isolate); |
594 case 4: | 484 case 4: |
595 return ApiCallbackWith4ArgsDescriptor(isolate); | 485 return ApiCallbackWith4ArgsDescriptor(isolate); |
596 case 5: | 486 case 5: |
597 return ApiCallbackWith5ArgsDescriptor(isolate); | 487 return ApiCallbackWith5ArgsDescriptor(isolate); |
598 case 6: | 488 case 6: |
599 return ApiCallbackWith6ArgsDescriptor(isolate); | 489 return ApiCallbackWith6ArgsDescriptor(isolate); |
600 case 7: | 490 case 7: |
601 return ApiCallbackWith7ArgsDescriptor(isolate); | 491 return ApiCallbackWith7ArgsDescriptor(isolate); |
602 default: | 492 default: |
603 UNREACHABLE(); | 493 UNREACHABLE(); |
604 return VoidDescriptor(isolate); | 494 return VoidDescriptor(isolate); |
605 } | 495 } |
606 } | 496 } |
607 | 497 |
608 FunctionType* | 498 void ApiCallbackDescriptorBase::InitializePlatformIndependent( |
609 ApiCallbackDescriptorBase::BuildCallInterfaceDescriptorFunctionTypeWithArg( | 499 CallInterfaceDescriptorData* data) { |
610 Isolate* isolate, int parameter_count, int argc) { | 500 // kFunction, kCallData, kHolder, kApiFunctionAddress |
611 Zone* zone = isolate->interface_descriptor_zone(); | 501 MachineType machine_types[] = { |
612 FunctionType* function = Type::Function(AnyTagged(zone), Type::Undefined(), | 502 MachineType::AnyTagged(), MachineType::AnyTagged(), |
613 kParameterCount + argc, zone) | 503 MachineType::AnyTagged(), MachineType::Pointer()}; |
614 ->AsFunction(); | 504 data->InitializePlatformIndependent(arraysize(machine_types), extra_args(), |
615 function->InitParameter(kFunction, AnyTagged(zone)); | 505 machine_types); |
616 function->InitParameter(kCallData, AnyTagged(zone)); | |
617 function->InitParameter(kHolder, AnyTagged(zone)); | |
618 function->InitParameter(kApiFunctionAddress, ExternalPointer(zone)); | |
619 for (int i = 0; i < argc; i++) { | |
620 function->InitParameter(i, AnyTagged(zone)); | |
621 } | |
622 return function; | |
623 } | 506 } |
624 | 507 |
625 FunctionType* | 508 void InterpreterDispatchDescriptor::InitializePlatformIndependent( |
626 InterpreterDispatchDescriptor::BuildCallInterfaceDescriptorFunctionType( | 509 CallInterfaceDescriptorData* data) { |
627 Isolate* isolate, int parameter_count) { | 510 // kAccumulator, kBytecodeOffset, kBytecodeArray, kDispatchTable |
628 Zone* zone = isolate->interface_descriptor_zone(); | 511 MachineType machine_types[] = {MachineType::AnyTagged(), MachineType::Int32(), |
629 FunctionType* function = | 512 MachineType::AnyTagged(), |
630 Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) | 513 MachineType::AnyTagged()}; |
631 ->AsFunction(); | 514 data->InitializePlatformIndependent(arraysize(machine_types), 0, |
632 function->InitParameter(kAccumulator, AnyTagged(zone)); | 515 machine_types); |
633 function->InitParameter(kBytecodeOffset, UntaggedIntegral32(zone)); | |
634 function->InitParameter(kBytecodeArray, AnyTagged(zone)); | |
635 function->InitParameter(kDispatchTable, AnyTagged(zone)); | |
636 return function; | |
637 } | 516 } |
638 | 517 |
639 } // namespace internal | 518 } // namespace internal |
640 } // namespace v8 | 519 } // namespace v8 |
OLD | NEW |