| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include <math.h> // for isnan. | 5 #include <math.h> // for isnan. |
| 6 #include <setjmp.h> | 6 #include <setjmp.h> |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 | 8 |
| 9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
| 10 #if defined(TARGET_ARCH_ARM) | 10 #if defined(TARGET_ARCH_ARM) |
| (...skipping 3571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3582 // simulator code and therefore is regarded as a callee-saved register. | 3582 // simulator code and therefore is regarded as a callee-saved register. |
| 3583 int32_t r4_val = get_register(R4); | 3583 int32_t r4_val = get_register(R4); |
| 3584 int32_t r5_val = get_register(R5); | 3584 int32_t r5_val = get_register(R5); |
| 3585 int32_t r6_val = get_register(R6); | 3585 int32_t r6_val = get_register(R6); |
| 3586 int32_t r7_val = get_register(R7); | 3586 int32_t r7_val = get_register(R7); |
| 3587 int32_t r8_val = get_register(R8); | 3587 int32_t r8_val = get_register(R8); |
| 3588 int32_t r9_val = get_register(R9); | 3588 int32_t r9_val = get_register(R9); |
| 3589 int32_t r10_val = get_register(R10); | 3589 int32_t r10_val = get_register(R10); |
| 3590 int32_t r11_val = get_register(R11); | 3590 int32_t r11_val = get_register(R11); |
| 3591 | 3591 |
| 3592 double d8_val = get_dregister(D8); |
| 3593 double d9_val = get_dregister(D9); |
| 3594 double d10_val = get_dregister(D10); |
| 3595 double d11_val = get_dregister(D11); |
| 3596 double d12_val = get_dregister(D12); |
| 3597 double d13_val = get_dregister(D13); |
| 3598 double d14_val = get_dregister(D14); |
| 3599 double d15_val = get_dregister(D15); |
| 3600 |
| 3592 // Setup the callee-saved registers with a known value. To be able to check | 3601 // Setup the callee-saved registers with a known value. To be able to check |
| 3593 // that they are preserved properly across dart execution. | 3602 // that they are preserved properly across dart execution. |
| 3594 int32_t callee_saved_value = icount_; | 3603 int32_t callee_saved_value = icount_; |
| 3595 set_register(R4, callee_saved_value); | 3604 set_register(R4, callee_saved_value); |
| 3596 set_register(R5, callee_saved_value); | 3605 set_register(R5, callee_saved_value); |
| 3597 set_register(R6, callee_saved_value); | 3606 set_register(R6, callee_saved_value); |
| 3598 set_register(R7, callee_saved_value); | 3607 set_register(R7, callee_saved_value); |
| 3599 set_register(R8, callee_saved_value); | 3608 set_register(R8, callee_saved_value); |
| 3600 set_register(R9, callee_saved_value); | 3609 set_register(R9, callee_saved_value); |
| 3601 set_register(R10, callee_saved_value); | 3610 set_register(R10, callee_saved_value); |
| 3602 set_register(R11, callee_saved_value); | 3611 set_register(R11, callee_saved_value); |
| 3603 | 3612 |
| 3613 double callee_saved_dvalue = static_cast<double>(icount_); |
| 3614 set_dregister(D8, callee_saved_dvalue); |
| 3615 set_dregister(D9, callee_saved_dvalue); |
| 3616 set_dregister(D10, callee_saved_dvalue); |
| 3617 set_dregister(D11, callee_saved_dvalue); |
| 3618 set_dregister(D12, callee_saved_dvalue); |
| 3619 set_dregister(D13, callee_saved_dvalue); |
| 3620 set_dregister(D14, callee_saved_dvalue); |
| 3621 set_dregister(D15, callee_saved_dvalue); |
| 3622 |
| 3604 // Start the simulation | 3623 // Start the simulation |
| 3605 Execute(); | 3624 Execute(); |
| 3606 | 3625 |
| 3607 // Check that the callee-saved registers have been preserved. | 3626 // Check that the callee-saved registers have been preserved. |
| 3608 ASSERT(callee_saved_value == get_register(R4)); | 3627 ASSERT(callee_saved_value == get_register(R4)); |
| 3609 ASSERT(callee_saved_value == get_register(R5)); | 3628 ASSERT(callee_saved_value == get_register(R5)); |
| 3610 ASSERT(callee_saved_value == get_register(R6)); | 3629 ASSERT(callee_saved_value == get_register(R6)); |
| 3611 ASSERT(callee_saved_value == get_register(R7)); | 3630 ASSERT(callee_saved_value == get_register(R7)); |
| 3612 ASSERT(callee_saved_value == get_register(R8)); | 3631 ASSERT(callee_saved_value == get_register(R8)); |
| 3613 ASSERT(callee_saved_value == get_register(R9)); | 3632 ASSERT(callee_saved_value == get_register(R9)); |
| 3614 ASSERT(callee_saved_value == get_register(R10)); | 3633 ASSERT(callee_saved_value == get_register(R10)); |
| 3615 ASSERT(callee_saved_value == get_register(R11)); | 3634 ASSERT(callee_saved_value == get_register(R11)); |
| 3616 | 3635 |
| 3636 ASSERT(callee_saved_dvalue == get_dregister(D8)); |
| 3637 ASSERT(callee_saved_dvalue == get_dregister(D9)); |
| 3638 ASSERT(callee_saved_dvalue == get_dregister(D10)); |
| 3639 ASSERT(callee_saved_dvalue == get_dregister(D11)); |
| 3640 ASSERT(callee_saved_dvalue == get_dregister(D12)); |
| 3641 ASSERT(callee_saved_dvalue == get_dregister(D13)); |
| 3642 ASSERT(callee_saved_dvalue == get_dregister(D14)); |
| 3643 ASSERT(callee_saved_dvalue == get_dregister(D15)); |
| 3644 |
| 3617 // Restore callee-saved registers with the original value. | 3645 // Restore callee-saved registers with the original value. |
| 3618 set_register(R4, r4_val); | 3646 set_register(R4, r4_val); |
| 3619 set_register(R5, r5_val); | 3647 set_register(R5, r5_val); |
| 3620 set_register(R6, r6_val); | 3648 set_register(R6, r6_val); |
| 3621 set_register(R7, r7_val); | 3649 set_register(R7, r7_val); |
| 3622 set_register(R8, r8_val); | 3650 set_register(R8, r8_val); |
| 3623 set_register(R9, r9_val); | 3651 set_register(R9, r9_val); |
| 3624 set_register(R10, r10_val); | 3652 set_register(R10, r10_val); |
| 3625 set_register(R11, r11_val); | 3653 set_register(R11, r11_val); |
| 3626 | 3654 |
| 3655 set_dregister(D8, d8_val); |
| 3656 set_dregister(D9, d9_val); |
| 3657 set_dregister(D10, d10_val); |
| 3658 set_dregister(D11, d11_val); |
| 3659 set_dregister(D12, d12_val); |
| 3660 set_dregister(D13, d13_val); |
| 3661 set_dregister(D14, d14_val); |
| 3662 set_dregister(D15, d15_val); |
| 3663 |
| 3627 // Restore the SP register and return R1:R0. | 3664 // Restore the SP register and return R1:R0. |
| 3628 set_register(SP, sp_before_call); | 3665 set_register(SP, sp_before_call); |
| 3629 int64_t return_value; | 3666 int64_t return_value; |
| 3630 if (fp_return) { | 3667 if (fp_return) { |
| 3631 return_value = bit_cast<int64_t, double>(get_dregister(D0)); | 3668 return_value = bit_cast<int64_t, double>(get_dregister(D0)); |
| 3632 } else { | 3669 } else { |
| 3633 return_value = Utils::LowHighTo64Bits(get_register(R0), get_register(R1)); | 3670 return_value = Utils::LowHighTo64Bits(get_register(R0), get_register(R1)); |
| 3634 } | 3671 } |
| 3635 return return_value; | 3672 return return_value; |
| 3636 } | 3673 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3668 set_register(kExceptionObjectReg, bit_cast<int32_t>(raw_exception)); | 3705 set_register(kExceptionObjectReg, bit_cast<int32_t>(raw_exception)); |
| 3669 set_register(kStackTraceObjectReg, bit_cast<int32_t>(raw_stacktrace)); | 3706 set_register(kStackTraceObjectReg, bit_cast<int32_t>(raw_stacktrace)); |
| 3670 buf->Longjmp(); | 3707 buf->Longjmp(); |
| 3671 } | 3708 } |
| 3672 | 3709 |
| 3673 } // namespace dart | 3710 } // namespace dart |
| 3674 | 3711 |
| 3675 #endif // !defined(HOST_ARCH_ARM) | 3712 #endif // !defined(HOST_ARCH_ARM) |
| 3676 | 3713 |
| 3677 #endif // defined TARGET_ARCH_ARM | 3714 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |