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 #if V8_TARGET_ARCH_IA32 | 5 #if V8_TARGET_ARCH_IA32 |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/bootstrapper.h" | 8 #include "src/bootstrapper.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 5465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5476 | 5476 |
5477 Register callee = edi; | 5477 Register callee = edi; |
5478 Register call_data = ebx; | 5478 Register call_data = ebx; |
5479 Register holder = ecx; | 5479 Register holder = ecx; |
5480 Register api_function_address = edx; | 5480 Register api_function_address = edx; |
5481 Register context = esi; | 5481 Register context = esi; |
5482 Register return_address = eax; | 5482 Register return_address = eax; |
5483 | 5483 |
5484 typedef FunctionCallbackArguments FCA; | 5484 typedef FunctionCallbackArguments FCA; |
5485 | 5485 |
5486 STATIC_ASSERT(FCA::kContextSaveIndex == 6); | 5486 STATIC_ASSERT(FCA::kContextSaveIndex == 5); |
5487 STATIC_ASSERT(FCA::kCalleeIndex == 5); | |
5488 STATIC_ASSERT(FCA::kDataIndex == 4); | 5487 STATIC_ASSERT(FCA::kDataIndex == 4); |
5489 STATIC_ASSERT(FCA::kReturnValueOffset == 3); | 5488 STATIC_ASSERT(FCA::kReturnValueOffset == 3); |
5490 STATIC_ASSERT(FCA::kReturnValueDefaultValueIndex == 2); | 5489 STATIC_ASSERT(FCA::kReturnValueDefaultValueIndex == 2); |
5491 STATIC_ASSERT(FCA::kIsolateIndex == 1); | 5490 STATIC_ASSERT(FCA::kIsolateIndex == 1); |
5492 STATIC_ASSERT(FCA::kHolderIndex == 0); | 5491 STATIC_ASSERT(FCA::kHolderIndex == 0); |
5493 STATIC_ASSERT(FCA::kArgsLength == 7); | 5492 STATIC_ASSERT(FCA::kArgsLength == 6); |
5494 | 5493 |
5495 DCHECK(argc.is_immediate() || eax.is(argc.reg())); | 5494 DCHECK(argc.is_immediate() || eax.is(argc.reg())); |
5496 | 5495 |
5497 if (argc.is_immediate()) { | 5496 if (argc.is_immediate()) { |
5498 __ pop(return_address); | 5497 __ pop(return_address); |
5499 // context save. | 5498 // context save. |
5500 __ push(context); | 5499 __ push(context); |
5501 } else { | 5500 } else { |
5502 // pop return address and save context | 5501 // pop return address and save context |
5503 __ xchg(context, Operand(esp, 0)); | 5502 __ xchg(context, Operand(esp, 0)); |
5504 return_address = context; | 5503 return_address = context; |
5505 } | 5504 } |
5506 | 5505 |
5507 // callee | |
5508 __ push(callee); | |
5509 | |
5510 // call data | 5506 // call data |
5511 __ push(call_data); | 5507 __ push(call_data); |
5512 | 5508 |
5513 Register scratch = call_data; | 5509 Register scratch = call_data; |
5514 if (!call_data_undefined) { | 5510 if (!call_data_undefined) { |
5515 // return value | 5511 // return value |
5516 __ push(Immediate(masm->isolate()->factory()->undefined_value())); | 5512 __ push(Immediate(masm->isolate()->factory()->undefined_value())); |
5517 // return value default | 5513 // return value default |
5518 __ push(Immediate(masm->isolate()->factory()->undefined_value())); | 5514 __ push(Immediate(masm->isolate()->factory()->undefined_value())); |
5519 } else { | 5515 } else { |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5654 Operand(ebp, 7 * kPointerSize), NULL); | 5650 Operand(ebp, 7 * kPointerSize), NULL); |
5655 } | 5651 } |
5656 | 5652 |
5657 | 5653 |
5658 #undef __ | 5654 #undef __ |
5659 | 5655 |
5660 } // namespace internal | 5656 } // namespace internal |
5661 } // namespace v8 | 5657 } // namespace v8 |
5662 | 5658 |
5663 #endif // V8_TARGET_ARCH_IA32 | 5659 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |