Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: src/DartARM32/assembler_arm.cc

Issue 1540653003: Add VADD instruction to the ARM integrated assembler. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Clean up ARM register functions. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/DartARM32/assembler_arm.h ('k') | src/IceAssemblerARM32.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « src/DartARM32/assembler_arm.h ('k') | src/IceAssemblerARM32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698