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 // This is forked from Dart revision df52deea9f25690eb8b66c5995da92b70f7ac1fe | 5 // This is forked from Dart revision df52deea9f25690eb8b66c5995da92b70f7ac1fe |
6 // Please update the (git) revision if we merge changes from Dart. | 6 // Please update the (git) revision if we merge changes from Dart. |
7 // https://code.google.com/p/dart/wiki/GettingTheSource | 7 // https://code.google.com/p/dart/wiki/GettingTheSource |
8 | 8 |
9 #include "vm/globals.h" // NOLINT | 9 #include "vm/globals.h" // NOLINT |
10 #if defined(TARGET_ARCH_ARM) | 10 #if defined(TARGET_ARCH_ARM) |
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
873 | 873 |
874 | 874 |
875 void Assembler::vstmd(BlockAddressMode am, Register base, | 875 void Assembler::vstmd(BlockAddressMode am, Register base, |
876 DRegister first, intptr_t count, Condition cond) { | 876 DRegister first, intptr_t count, Condition cond) { |
877 ASSERT((am == IA) || (am == IA_W) || (am == DB_W)); | 877 ASSERT((am == IA) || (am == IA_W) || (am == DB_W)); |
878 ASSERT(count <= 16); | 878 ASSERT(count <= 16); |
879 ASSERT(first + count <= kNumberOfDRegisters); | 879 ASSERT(first + count <= kNumberOfDRegisters); |
880 EmitMultiVDMemOp(cond, am, false, base, first, count); | 880 EmitMultiVDMemOp(cond, am, false, base, first, count); |
881 } | 881 } |
882 | 882 |
883 | 883 #if 0 |
| 884 // Moved to ARM32::AssemblerARM32::emitVFPsss |
884 void Assembler::EmitVFPsss(Condition cond, int32_t opcode, | 885 void Assembler::EmitVFPsss(Condition cond, int32_t opcode, |
885 SRegister sd, SRegister sn, SRegister sm) { | 886 SRegister sd, SRegister sn, SRegister sm) { |
886 ASSERT(TargetCPUFeatures::vfp_supported()); | 887 ASSERT(TargetCPUFeatures::vfp_supported()); |
887 ASSERT(sd != kNoSRegister); | 888 ASSERT(sd != kNoSRegister); |
888 ASSERT(sn != kNoSRegister); | 889 ASSERT(sn != kNoSRegister); |
889 ASSERT(sm != kNoSRegister); | 890 ASSERT(sm != kNoSRegister); |
890 ASSERT(cond != kNoCondition); | 891 ASSERT(cond != kNoCondition); |
891 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | | 892 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
892 B27 | B26 | B25 | B11 | B9 | opcode | | 893 B27 | B26 | B25 | B11 | B9 | opcode | |
893 ((static_cast<int32_t>(sd) & 1)*B22) | | 894 ((static_cast<int32_t>(sd) & 1)*B22) | |
894 ((static_cast<int32_t>(sn) >> 1)*B16) | | 895 ((static_cast<int32_t>(sn) >> 1)*B16) | |
895 ((static_cast<int32_t>(sd) >> 1)*B12) | | 896 ((static_cast<int32_t>(sd) >> 1)*B12) | |
896 ((static_cast<int32_t>(sn) & 1)*B7) | | 897 ((static_cast<int32_t>(sn) & 1)*B7) | |
897 ((static_cast<int32_t>(sm) & 1)*B5) | | 898 ((static_cast<int32_t>(sm) & 1)*B5) | |
898 (static_cast<int32_t>(sm) >> 1); | 899 (static_cast<int32_t>(sm) >> 1); |
899 Emit(encoding); | 900 Emit(encoding); |
900 } | 901 } |
901 | 902 |
902 | 903 // Moved to ARM32::AssemblerARM32::emitVFPddd |
903 void Assembler::EmitVFPddd(Condition cond, int32_t opcode, | 904 void Assembler::EmitVFPddd(Condition cond, int32_t opcode, |
904 DRegister dd, DRegister dn, DRegister dm) { | 905 DRegister dd, DRegister dn, DRegister dm) { |
905 ASSERT(TargetCPUFeatures::vfp_supported()); | 906 ASSERT(TargetCPUFeatures::vfp_supported()); |
906 ASSERT(dd != kNoDRegister); | 907 ASSERT(dd != kNoDRegister); |
907 ASSERT(dn != kNoDRegister); | 908 ASSERT(dn != kNoDRegister); |
908 ASSERT(dm != kNoDRegister); | 909 ASSERT(dm != kNoDRegister); |
909 ASSERT(cond != kNoCondition); | 910 ASSERT(cond != kNoCondition); |
910 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | | 911 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
911 B27 | B26 | B25 | B11 | B9 | B8 | opcode | | 912 B27 | B26 | B25 | B11 | B9 | B8 | opcode | |
912 ((static_cast<int32_t>(dd) >> 4)*B22) | | 913 ((static_cast<int32_t>(dd) >> 4)*B22) | |
913 ((static_cast<int32_t>(dn) & 0xf)*B16) | | 914 ((static_cast<int32_t>(dn) & 0xf)*B16) | |
914 ((static_cast<int32_t>(dd) & 0xf)*B12) | | 915 ((static_cast<int32_t>(dd) & 0xf)*B12) | |
915 ((static_cast<int32_t>(dn) >> 4)*B7) | | 916 ((static_cast<int32_t>(dn) >> 4)*B7) | |
916 ((static_cast<int32_t>(dm) >> 4)*B5) | | 917 ((static_cast<int32_t>(dm) >> 4)*B5) | |
917 (static_cast<int32_t>(dm) & 0xf); | 918 (static_cast<int32_t>(dm) & 0xf); |
918 Emit(encoding); | 919 Emit(encoding); |
919 } | 920 } |
920 | 921 #endif |
921 | 922 |
922 void Assembler::vmovs(SRegister sd, SRegister sm, Condition cond) { | 923 void Assembler::vmovs(SRegister sd, SRegister sm, Condition cond) { |
923 EmitVFPsss(cond, B23 | B21 | B20 | B6, sd, S0, sm); | 924 EmitVFPsss(cond, B23 | B21 | B20 | B6, sd, S0, sm); |
924 } | 925 } |
925 | 926 |
926 | 927 |
927 void Assembler::vmovd(DRegister dd, DRegister dm, Condition cond) { | 928 void Assembler::vmovd(DRegister dd, DRegister dm, Condition cond) { |
928 EmitVFPddd(cond, B23 | B21 | B20 | B6, dd, D0, dm); | 929 EmitVFPddd(cond, B23 | B21 | B20 | B6, dd, D0, dm); |
929 } | 930 } |
930 | 931 |
(...skipping 26 matching lines...) Expand all Loading... |
957 (((imm64 >> 54) & ((1 << 9) - 1)) == ((1 << 8) -1)))) { | 958 (((imm64 >> 54) & ((1 << 9) - 1)) == ((1 << 8) -1)))) { |
958 uint8_t imm8 = ((imm64 >> 63) << 7) | (((imm64 >> 61) & 1) << 6) | | 959 uint8_t imm8 = ((imm64 >> 63) << 7) | (((imm64 >> 61) & 1) << 6) | |
959 ((imm64 >> 48) & ((1 << 6) -1)); | 960 ((imm64 >> 48) & ((1 << 6) -1)); |
960 EmitVFPddd(cond, B23 | B21 | B20 | ((imm8 >> 4)*B16) | B8 | (imm8 & 0xf), | 961 EmitVFPddd(cond, B23 | B21 | B20 | ((imm8 >> 4)*B16) | B8 | (imm8 & 0xf), |
961 dd, D0, D0); | 962 dd, D0, D0); |
962 return true; | 963 return true; |
963 } | 964 } |
964 return false; | 965 return false; |
965 } | 966 } |
966 | 967 |
967 | 968 #if 0 |
| 969 // Moved to Arm32::AssemblerARM32::vadds() |
968 void Assembler::vadds(SRegister sd, SRegister sn, SRegister sm, | 970 void Assembler::vadds(SRegister sd, SRegister sn, SRegister sm, |
969 Condition cond) { | 971 Condition cond) { |
970 EmitVFPsss(cond, B21 | B20, sd, sn, sm); | 972 EmitVFPsss(cond, B21 | B20, sd, sn, sm); |
971 } | 973 } |
972 | 974 |
973 | 975 // Moved to Arm32::AssemblerARM32::vaddd() |
974 void Assembler::vaddd(DRegister dd, DRegister dn, DRegister dm, | 976 void Assembler::vaddd(DRegister dd, DRegister dn, DRegister dm, |
975 Condition cond) { | 977 Condition cond) { |
976 EmitVFPddd(cond, B21 | B20, dd, dn, dm); | 978 EmitVFPddd(cond, B21 | B20, dd, dn, dm); |
977 } | 979 } |
978 | 980 #endif |
979 | 981 |
980 void Assembler::vsubs(SRegister sd, SRegister sn, SRegister sm, | 982 void Assembler::vsubs(SRegister sd, SRegister sn, SRegister sm, |
981 Condition cond) { | 983 Condition cond) { |
982 EmitVFPsss(cond, B21 | B20 | B6, sd, sn, sm); | 984 EmitVFPsss(cond, B21 | B20 | B6, sd, sn, sm); |
983 } | 985 } |
984 | 986 |
985 | 987 |
986 void Assembler::vsubd(DRegister dd, DRegister dn, DRegister dm, | 988 void Assembler::vsubd(DRegister dd, DRegister dn, DRegister dm, |
987 Condition cond) { | 989 Condition cond) { |
988 EmitVFPddd(cond, B21 | B20 | B6, dd, dn, dm); | 990 EmitVFPddd(cond, B21 | B20 | B6, dd, dn, dm); |
(...skipping 2694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3683 | 3685 |
3684 | 3686 |
3685 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 3687 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
3686 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); | 3688 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); |
3687 return fpu_reg_names[reg]; | 3689 return fpu_reg_names[reg]; |
3688 } | 3690 } |
3689 | 3691 |
3690 } // namespace dart | 3692 } // namespace dart |
3691 | 3693 |
3692 #endif // defined TARGET_ARCH_ARM | 3694 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |