| 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_ARM | 5 #if V8_TARGET_ARCH_ARM |
| 6 | 6 |
| 7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" |
| 8 #include "src/api-arguments.h" | 8 #include "src/api-arguments.h" |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 1048 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1059 { | 1059 { |
| 1060 // Prevent literal pool emission before return address. | 1060 // Prevent literal pool emission before return address. |
| 1061 Assembler::BlockConstPoolScope block_const_pool(masm); | 1061 Assembler::BlockConstPoolScope block_const_pool(masm); |
| 1062 __ add(lr, pc, Operand(4)); | 1062 __ add(lr, pc, Operand(4)); |
| 1063 __ str(lr, MemOperand(sp, result_stack_size)); | 1063 __ str(lr, MemOperand(sp, result_stack_size)); |
| 1064 __ Call(r5); | 1064 __ Call(r5); |
| 1065 } | 1065 } |
| 1066 if (result_size() > 2) { | 1066 if (result_size() > 2) { |
| 1067 DCHECK_EQ(3, result_size()); | 1067 DCHECK_EQ(3, result_size()); |
| 1068 // Read result values stored on stack. | 1068 // Read result values stored on stack. |
| 1069 __ ldr(r2, MemOperand(r0, 2 * kPointerSize)); | 1069 __ ldr(r2, MemOperand(sp, 2 * kPointerSize)); |
| 1070 __ ldr(r1, MemOperand(r0, 1 * kPointerSize)); | 1070 __ ldr(r1, MemOperand(sp, 1 * kPointerSize)); |
| 1071 __ ldr(r0, MemOperand(r0, 0 * kPointerSize)); | 1071 __ ldr(r0, MemOperand(sp, 0 * kPointerSize)); |
| 1072 } | 1072 } |
| 1073 // Result returned in r0, r1:r0 or r2:r1:r0 - do not destroy these registers! | 1073 // Result returned in r0, r1:r0 or r2:r1:r0 - do not destroy these registers! |
| 1074 | 1074 |
| 1075 __ VFPEnsureFPSCRState(r3); | 1075 __ VFPEnsureFPSCRState(r3); |
| 1076 | 1076 |
| 1077 // Check result for exception sentinel. | 1077 // Check result for exception sentinel. |
| 1078 Label exception_returned; | 1078 Label exception_returned; |
| 1079 __ CompareRoot(r0, Heap::kExceptionRootIndex); | 1079 __ CompareRoot(r0, Heap::kExceptionRootIndex); |
| 1080 __ b(eq, &exception_returned); | 1080 __ b(eq, &exception_returned); |
| 1081 | 1081 |
| (...skipping 4459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5541 kStackUnwindSpace, NULL, return_value_operand, NULL); | 5541 kStackUnwindSpace, NULL, return_value_operand, NULL); |
| 5542 } | 5542 } |
| 5543 | 5543 |
| 5544 | 5544 |
| 5545 #undef __ | 5545 #undef __ |
| 5546 | 5546 |
| 5547 } // namespace internal | 5547 } // namespace internal |
| 5548 } // namespace v8 | 5548 } // namespace v8 |
| 5549 | 5549 |
| 5550 #endif // V8_TARGET_ARCH_ARM | 5550 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |