| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #if V8_TARGET_ARCH_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 Loading... |
| 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 |
| OLD | NEW |