| 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 <setjmp.h> // NOLINT | 5 #include <setjmp.h> // NOLINT |
| 6 #include <stdlib.h> | 6 #include <stdlib.h> |
| 7 | 7 |
| 8 #include "vm/globals.h" | 8 #include "vm/globals.h" |
| 9 #if defined(TARGET_ARCH_ARM) | 9 #if defined(TARGET_ARCH_ARM) |
| 10 | 10 |
| (...skipping 3758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3769 set_register(LR, kEndSimulatingPC); | 3769 set_register(LR, kEndSimulatingPC); |
| 3770 | 3770 |
| 3771 // Remember the values of callee-saved registers. | 3771 // Remember the values of callee-saved registers. |
| 3772 // The code below assumes that r9 is not used as sb (static base) in | 3772 // The code below assumes that r9 is not used as sb (static base) in |
| 3773 // simulator code and therefore is regarded as a callee-saved register. | 3773 // simulator code and therefore is regarded as a callee-saved register. |
| 3774 int32_t r4_val = get_register(R4); | 3774 int32_t r4_val = get_register(R4); |
| 3775 int32_t r5_val = get_register(R5); | 3775 int32_t r5_val = get_register(R5); |
| 3776 int32_t r6_val = get_register(R6); | 3776 int32_t r6_val = get_register(R6); |
| 3777 int32_t r7_val = get_register(R7); | 3777 int32_t r7_val = get_register(R7); |
| 3778 int32_t r8_val = get_register(R8); | 3778 int32_t r8_val = get_register(R8); |
| 3779 #if defined(TARGET_ABI_EABI) | 3779 #if !defined(TARGET_OS_MACOS) && !defined(TARGET_OS_MACOS_IOS) |
| 3780 int32_t r9_val = get_register(R9); | 3780 int32_t r9_val = get_register(R9); |
| 3781 #endif | 3781 #endif |
| 3782 int32_t r10_val = get_register(R10); | 3782 int32_t r10_val = get_register(R10); |
| 3783 int32_t r11_val = get_register(R11); | 3783 int32_t r11_val = get_register(R11); |
| 3784 | 3784 |
| 3785 double d8_val = 0.0; | 3785 double d8_val = 0.0; |
| 3786 double d9_val = 0.0; | 3786 double d9_val = 0.0; |
| 3787 double d10_val = 0.0; | 3787 double d10_val = 0.0; |
| 3788 double d11_val = 0.0; | 3788 double d11_val = 0.0; |
| 3789 double d12_val = 0.0; | 3789 double d12_val = 0.0; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3803 } | 3803 } |
| 3804 | 3804 |
| 3805 // Setup the callee-saved registers with a known value. To be able to check | 3805 // Setup the callee-saved registers with a known value. To be able to check |
| 3806 // that they are preserved properly across dart execution. | 3806 // that they are preserved properly across dart execution. |
| 3807 int32_t callee_saved_value = icount_; | 3807 int32_t callee_saved_value = icount_; |
| 3808 set_register(R4, callee_saved_value); | 3808 set_register(R4, callee_saved_value); |
| 3809 set_register(R5, callee_saved_value); | 3809 set_register(R5, callee_saved_value); |
| 3810 set_register(R6, callee_saved_value); | 3810 set_register(R6, callee_saved_value); |
| 3811 set_register(R7, callee_saved_value); | 3811 set_register(R7, callee_saved_value); |
| 3812 set_register(R8, callee_saved_value); | 3812 set_register(R8, callee_saved_value); |
| 3813 #if defined(TARGET_ABI_EABI) | 3813 #if !defined(TARGET_OS_MACOS) && !defined(TARGET_OS_MACOS_IOS) |
| 3814 set_register(R9, callee_saved_value); | 3814 set_register(R9, callee_saved_value); |
| 3815 #endif | 3815 #endif |
| 3816 set_register(R10, callee_saved_value); | 3816 set_register(R10, callee_saved_value); |
| 3817 set_register(R11, callee_saved_value); | 3817 set_register(R11, callee_saved_value); |
| 3818 | 3818 |
| 3819 double callee_saved_dvalue = 0.0; | 3819 double callee_saved_dvalue = 0.0; |
| 3820 if (TargetCPUFeatures::vfp_supported()) { | 3820 if (TargetCPUFeatures::vfp_supported()) { |
| 3821 callee_saved_dvalue = static_cast<double>(icount_); | 3821 callee_saved_dvalue = static_cast<double>(icount_); |
| 3822 set_dregister(D8, callee_saved_dvalue); | 3822 set_dregister(D8, callee_saved_dvalue); |
| 3823 set_dregister(D9, callee_saved_dvalue); | 3823 set_dregister(D9, callee_saved_dvalue); |
| 3824 set_dregister(D10, callee_saved_dvalue); | 3824 set_dregister(D10, callee_saved_dvalue); |
| 3825 set_dregister(D11, callee_saved_dvalue); | 3825 set_dregister(D11, callee_saved_dvalue); |
| 3826 set_dregister(D12, callee_saved_dvalue); | 3826 set_dregister(D12, callee_saved_dvalue); |
| 3827 set_dregister(D13, callee_saved_dvalue); | 3827 set_dregister(D13, callee_saved_dvalue); |
| 3828 set_dregister(D14, callee_saved_dvalue); | 3828 set_dregister(D14, callee_saved_dvalue); |
| 3829 set_dregister(D15, callee_saved_dvalue); | 3829 set_dregister(D15, callee_saved_dvalue); |
| 3830 } | 3830 } |
| 3831 | 3831 |
| 3832 // Start the simulation | 3832 // Start the simulation |
| 3833 Execute(); | 3833 Execute(); |
| 3834 | 3834 |
| 3835 // Check that the callee-saved registers have been preserved. | 3835 // Check that the callee-saved registers have been preserved. |
| 3836 ASSERT(callee_saved_value == get_register(R4)); | 3836 ASSERT(callee_saved_value == get_register(R4)); |
| 3837 ASSERT(callee_saved_value == get_register(R5)); | 3837 ASSERT(callee_saved_value == get_register(R5)); |
| 3838 ASSERT(callee_saved_value == get_register(R6)); | 3838 ASSERT(callee_saved_value == get_register(R6)); |
| 3839 ASSERT(callee_saved_value == get_register(R7)); | 3839 ASSERT(callee_saved_value == get_register(R7)); |
| 3840 ASSERT(callee_saved_value == get_register(R8)); | 3840 ASSERT(callee_saved_value == get_register(R8)); |
| 3841 #if defined(TARGET_ABI_EABI) | 3841 #if !defined(TARGET_OS_MACOS) && !defined(TARGET_OS_MACOS_IOS) |
| 3842 ASSERT(callee_saved_value == get_register(R9)); | 3842 ASSERT(callee_saved_value == get_register(R9)); |
| 3843 #endif | 3843 #endif |
| 3844 ASSERT(callee_saved_value == get_register(R10)); | 3844 ASSERT(callee_saved_value == get_register(R10)); |
| 3845 ASSERT(callee_saved_value == get_register(R11)); | 3845 ASSERT(callee_saved_value == get_register(R11)); |
| 3846 | 3846 |
| 3847 if (TargetCPUFeatures::vfp_supported()) { | 3847 if (TargetCPUFeatures::vfp_supported()) { |
| 3848 ASSERT(callee_saved_dvalue == get_dregister(D8)); | 3848 ASSERT(callee_saved_dvalue == get_dregister(D8)); |
| 3849 ASSERT(callee_saved_dvalue == get_dregister(D9)); | 3849 ASSERT(callee_saved_dvalue == get_dregister(D9)); |
| 3850 ASSERT(callee_saved_dvalue == get_dregister(D10)); | 3850 ASSERT(callee_saved_dvalue == get_dregister(D10)); |
| 3851 ASSERT(callee_saved_dvalue == get_dregister(D11)); | 3851 ASSERT(callee_saved_dvalue == get_dregister(D11)); |
| 3852 ASSERT(callee_saved_dvalue == get_dregister(D12)); | 3852 ASSERT(callee_saved_dvalue == get_dregister(D12)); |
| 3853 ASSERT(callee_saved_dvalue == get_dregister(D13)); | 3853 ASSERT(callee_saved_dvalue == get_dregister(D13)); |
| 3854 ASSERT(callee_saved_dvalue == get_dregister(D14)); | 3854 ASSERT(callee_saved_dvalue == get_dregister(D14)); |
| 3855 ASSERT(callee_saved_dvalue == get_dregister(D15)); | 3855 ASSERT(callee_saved_dvalue == get_dregister(D15)); |
| 3856 } | 3856 } |
| 3857 | 3857 |
| 3858 // Restore callee-saved registers with the original value. | 3858 // Restore callee-saved registers with the original value. |
| 3859 set_register(R4, r4_val); | 3859 set_register(R4, r4_val); |
| 3860 set_register(R5, r5_val); | 3860 set_register(R5, r5_val); |
| 3861 set_register(R6, r6_val); | 3861 set_register(R6, r6_val); |
| 3862 set_register(R7, r7_val); | 3862 set_register(R7, r7_val); |
| 3863 set_register(R8, r8_val); | 3863 set_register(R8, r8_val); |
| 3864 #if defined(TARGET_ABI_EABI) | 3864 #if !defined(TARGET_OS_MACOS) && !defined(TARGET_OS_MACOS_IOS) |
| 3865 set_register(R9, r9_val); | 3865 set_register(R9, r9_val); |
| 3866 #endif | 3866 #endif |
| 3867 set_register(R10, r10_val); | 3867 set_register(R10, r10_val); |
| 3868 set_register(R11, r11_val); | 3868 set_register(R11, r11_val); |
| 3869 | 3869 |
| 3870 if (TargetCPUFeatures::vfp_supported()) { | 3870 if (TargetCPUFeatures::vfp_supported()) { |
| 3871 set_dregister(D8, d8_val); | 3871 set_dregister(D8, d8_val); |
| 3872 set_dregister(D9, d9_val); | 3872 set_dregister(D9, d9_val); |
| 3873 set_dregister(D10, d10_val); | 3873 set_dregister(D10, d10_val); |
| 3874 set_dregister(D11, d11_val); | 3874 set_dregister(D11, d11_val); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3922 set_register(CODE_REG, code); | 3922 set_register(CODE_REG, code); |
| 3923 set_register(PP, pp); | 3923 set_register(PP, pp); |
| 3924 buf->Longjmp(); | 3924 buf->Longjmp(); |
| 3925 } | 3925 } |
| 3926 | 3926 |
| 3927 } // namespace dart | 3927 } // namespace dart |
| 3928 | 3928 |
| 3929 #endif // defined(USING_SIMULATOR) | 3929 #endif // defined(USING_SIMULATOR) |
| 3930 | 3930 |
| 3931 #endif // defined TARGET_ARCH_ARM | 3931 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |