OLD | NEW |
---|---|
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/code-stubs.h" | 5 #include "src/code-stubs.h" |
6 #include "src/compiler.h" | 6 #include "src/compiler.h" |
7 #include "src/compiler/common-operator.h" | 7 #include "src/compiler/common-operator.h" |
8 #include "src/compiler/frame.h" | 8 #include "src/compiler/frame.h" |
9 #include "src/compiler/linkage.h" | 9 #include "src/compiler/linkage.h" |
10 #include "src/compiler/node.h" | 10 #include "src/compiler/node.h" |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
380 Operator::kNoProperties, // properties | 380 Operator::kNoProperties, // properties |
381 kNoCalleeSaved, // callee-saved | 381 kNoCalleeSaved, // callee-saved |
382 kNoCalleeSaved, // callee-saved fp | 382 kNoCalleeSaved, // callee-saved fp |
383 CallDescriptor::kCanUseRoots | // flags | 383 CallDescriptor::kCanUseRoots | // flags |
384 flags, // flags | 384 flags, // flags |
385 "js-call"); | 385 "js-call"); |
386 } | 386 } |
387 | 387 |
388 | 388 |
389 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) { | 389 CallDescriptor* Linkage::GetInterpreterDispatchDescriptor(Zone* zone) { |
390 MachineSignature::Builder types(zone, 0, 5); | 390 MachineSignature::Builder types(zone, 0, 6); |
391 LocationSignature::Builder locations(zone, 0, 5); | 391 LocationSignature::Builder locations(zone, 0, 6); |
392 | 392 |
393 // Add registers for fixed parameters passed via interpreter dispatch. | 393 // Add registers for fixed parameters passed via interpreter dispatch. |
394 STATIC_ASSERT(0 == Linkage::kInterpreterAccumulatorParameter); | 394 STATIC_ASSERT(0 == Linkage::kInterpreterAccumulatorParameter); |
395 types.AddParam(kMachAnyTagged); | 395 types.AddParam(kMachAnyTagged); |
396 locations.AddParam(regloc(kInterpreterAccumulatorRegister)); | 396 locations.AddParam(regloc(kInterpreterAccumulatorRegister)); |
397 | 397 |
398 STATIC_ASSERT(1 == Linkage::kInterpreterRegisterFileParameter); | 398 STATIC_ASSERT(1 == Linkage::kInterpreterRegisterFileParameter); |
399 types.AddParam(kMachPtr); | 399 types.AddParam(kMachPtr); |
400 locations.AddParam(regloc(kInterpreterRegisterFileRegister)); | 400 locations.AddParam(regloc(kInterpreterRegisterFileRegister)); |
401 | 401 |
402 STATIC_ASSERT(2 == Linkage::kInterpreterBytecodeOffsetParameter); | 402 STATIC_ASSERT(2 == Linkage::kInterpreterBytecodeOffsetParameter); |
403 types.AddParam(kMachIntPtr); | 403 types.AddParam(kMachIntPtr); |
404 locations.AddParam(regloc(kInterpreterBytecodeOffsetRegister)); | 404 locations.AddParam(regloc(kInterpreterBytecodeOffsetRegister)); |
405 | 405 |
406 STATIC_ASSERT(3 == Linkage::kInterpreterBytecodeArrayParameter); | 406 STATIC_ASSERT(3 == Linkage::kInterpreterBytecodeArrayParameter); |
407 types.AddParam(kMachAnyTagged); | 407 types.AddParam(kMachAnyTagged); |
408 locations.AddParam(regloc(kInterpreterBytecodeArrayRegister)); | 408 locations.AddParam(regloc(kInterpreterBytecodeArrayRegister)); |
409 | 409 |
410 STATIC_ASSERT(4 == Linkage::kInterpreterDispatchTableParameter); | 410 STATIC_ASSERT(4 == Linkage::kInterpreterDispatchTableParameter); |
411 types.AddParam(kMachPtr); | 411 types.AddParam(kMachPtr); |
412 locations.AddParam(regloc(kInterpreterDispatchTableRegister)); | 412 locations.AddParam(regloc(kInterpreterDispatchTableRegister)); |
413 | 413 |
414 STATIC_ASSERT(5 == Linkage::kInterpreterContextParameter); | |
415 types.AddParam(kMachAnyTagged); | |
416 #if defined(V8_TARGET_ARCH_IA32) | |
Michael Starzinger
2015/08/20 09:32:02
Just for posterity: Not a huge fan of this #ifdef
rmcilroy
2015/08/24 10:14:38
Acknowledged.
| |
417 locations.AddParam( | |
418 LinkageLocation::ForCallerFrameSlot(kInterpreterContextSpillSlot)); | |
419 #else | |
420 locations.AddParam(regloc(kContextRegister)); | |
421 #endif | |
422 | |
414 LinkageLocation target_loc = LinkageLocation::ForAnyRegister(); | 423 LinkageLocation target_loc = LinkageLocation::ForAnyRegister(); |
415 return new (zone) CallDescriptor( // -- | 424 return new (zone) CallDescriptor( // -- |
416 CallDescriptor::kCallCodeObject, // kind | 425 CallDescriptor::kCallCodeObject, // kind |
417 kMachNone, // target MachineType | 426 kMachNone, // target MachineType |
418 target_loc, // target location | 427 target_loc, // target location |
419 types.Build(), // machine_sig | 428 types.Build(), // machine_sig |
420 locations.Build(), // location_sig | 429 locations.Build(), // location_sig |
421 0, // stack_parameter_count | 430 0, // stack_parameter_count |
422 Operator::kNoProperties, // properties | 431 Operator::kNoProperties, // properties |
423 kNoCalleeSaved, // callee-saved registers | 432 kNoCalleeSaved, // callee-saved registers |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
505 return LinkageLocation::ForCalleeFrameSlot(spill_index); | 514 return LinkageLocation::ForCalleeFrameSlot(spill_index); |
506 } else { | 515 } else { |
507 // Parameter. Use the assigned location from the incoming call descriptor. | 516 // Parameter. Use the assigned location from the incoming call descriptor. |
508 int parameter_index = 1 + index; // skip index 0, which is the target. | 517 int parameter_index = 1 + index; // skip index 0, which is the target. |
509 return incoming_->GetInputLocation(parameter_index); | 518 return incoming_->GetInputLocation(parameter_index); |
510 } | 519 } |
511 } | 520 } |
512 } // namespace compiler | 521 } // namespace compiler |
513 } // namespace internal | 522 } // namespace internal |
514 } // namespace v8 | 523 } // namespace v8 |
OLD | NEW |