diff options
Diffstat (limited to 'compiler/utils')
30 files changed, 629 insertions, 28 deletions
diff --git a/compiler/utils/arm/jni_macro_assembler_arm_vixl.cc b/compiler/utils/arm/jni_macro_assembler_arm_vixl.cc index bebe64c2b9..ed57ca68e2 100644 --- a/compiler/utils/arm/jni_macro_assembler_arm_vixl.cc +++ b/compiler/utils/arm/jni_macro_assembler_arm_vixl.cc @@ -14,10 +14,11 @@ * limitations under the License. */ +#include "jni_macro_assembler_arm_vixl.h" + #include <iostream> #include <type_traits> -#include "jni_macro_assembler_arm_vixl.h" #include "entrypoints/quick/quick_entrypoints.h" #include "thread.h" diff --git a/compiler/utils/arm/managed_register_arm_test.cc b/compiler/utils/arm/managed_register_arm_test.cc index f5d4cc0d10..43b0b516dc 100644 --- a/compiler/utils/arm/managed_register_arm_test.cc +++ b/compiler/utils/arm/managed_register_arm_test.cc @@ -14,8 +14,8 @@ * limitations under the License. */ -#include "globals.h" #include "managed_register_arm.h" +#include "globals.h" #include "gtest/gtest.h" namespace art { diff --git a/compiler/utils/arm64/assembler_arm64.h b/compiler/utils/arm64/assembler_arm64.h index 66a7fed804..5b8a34e56d 100644 --- a/compiler/utils/arm64/assembler_arm64.h +++ b/compiler/utils/arm64/assembler_arm64.h @@ -23,9 +23,9 @@ #include "base/arena_containers.h" #include "base/logging.h" +#include "offsets.h" #include "utils/arm64/managed_register_arm64.h" #include "utils/assembler.h" -#include "offsets.h" // TODO(VIXL): Make VIXL compile with -Wshadow. #pragma GCC diagnostic push diff --git a/compiler/utils/arm64/jni_macro_assembler_arm64.h b/compiler/utils/arm64/jni_macro_assembler_arm64.h index 264e99adab..baf0434de0 100644 --- a/compiler/utils/arm64/jni_macro_assembler_arm64.h +++ b/compiler/utils/arm64/jni_macro_assembler_arm64.h @@ -25,9 +25,9 @@ #include "base/arena_containers.h" #include "base/enums.h" #include "base/logging.h" +#include "offsets.h" #include "utils/assembler.h" #include "utils/jni_macro_assembler.h" -#include "offsets.h" // TODO(VIXL): Make VIXL compile with -Wshadow. #pragma GCC diagnostic push diff --git a/compiler/utils/arm64/managed_register_arm64_test.cc b/compiler/utils/arm64/managed_register_arm64_test.cc index 79076b8ccc..2a79313be5 100644 --- a/compiler/utils/arm64/managed_register_arm64_test.cc +++ b/compiler/utils/arm64/managed_register_arm64_test.cc @@ -14,9 +14,10 @@ * limitations under the License. */ -#include "globals.h" -#include "assembler_arm64.h" #include "managed_register_arm64.h" + +#include "assembler_arm64.h" +#include "globals.h" #include "gtest/gtest.h" namespace art { diff --git a/compiler/utils/assembler_test.h b/compiler/utils/assembler_test.h index f655994bd3..ef53d7237c 100644 --- a/compiler/utils/assembler_test.h +++ b/compiler/utils/assembler_test.h @@ -19,14 +19,15 @@ #include "assembler.h" -#include "assembler_test_base.h" -#include "common_runtime_test.h" // For ScratchFile +#include <sys/stat.h> #include <cstdio> #include <cstdlib> #include <fstream> #include <iterator> -#include <sys/stat.h> + +#include "assembler_test_base.h" +#include "common_runtime_test.h" // For ScratchFile namespace art { diff --git a/compiler/utils/assembler_test_base.h b/compiler/utils/assembler_test_base.h index d76cb1c1df..2ef43bd79c 100644 --- a/compiler/utils/assembler_test_base.h +++ b/compiler/utils/assembler_test_base.h @@ -17,11 +17,11 @@ #ifndef ART_COMPILER_UTILS_ASSEMBLER_TEST_BASE_H_ #define ART_COMPILER_UTILS_ASSEMBLER_TEST_BASE_H_ +#include <sys/stat.h> #include <cstdio> #include <cstdlib> #include <fstream> #include <iterator> -#include <sys/stat.h> #include "android-base/strings.h" diff --git a/compiler/utils/assembler_thumb_test.cc b/compiler/utils/assembler_thumb_test.cc index 741beab1d5..e51b622b81 100644 --- a/compiler/utils/assembler_thumb_test.cc +++ b/compiler/utils/assembler_thumb_test.cc @@ -16,10 +16,10 @@ #include <dirent.h> #include <errno.h> -#include <fstream> -#include <map> #include <string.h> #include <sys/types.h> +#include <fstream> +#include <map> #include "gtest/gtest.h" diff --git a/compiler/utils/dedupe_set-inl.h b/compiler/utils/dedupe_set-inl.h index c06e9cadcc..c866504e62 100644 --- a/compiler/utils/dedupe_set-inl.h +++ b/compiler/utils/dedupe_set-inl.h @@ -19,14 +19,15 @@ #include "dedupe_set.h" -#include <algorithm> #include <inttypes.h> + +#include <algorithm> #include <unordered_map> #include "android-base/stringprintf.h" -#include "base/mutex.h" #include "base/hash_set.h" +#include "base/mutex.h" #include "base/stl_util.h" #include "base/time_utils.h" diff --git a/compiler/utils/dedupe_set.h b/compiler/utils/dedupe_set.h index b62f216842..3baa0612f6 100644 --- a/compiler/utils/dedupe_set.h +++ b/compiler/utils/dedupe_set.h @@ -17,8 +17,8 @@ #ifndef ART_COMPILER_UTILS_DEDUPE_SET_H_ #define ART_COMPILER_UTILS_DEDUPE_SET_H_ -#include <memory> #include <stdint.h> +#include <memory> #include <string> #include "base/macros.h" diff --git a/compiler/utils/jni_macro_assembler_test.h b/compiler/utils/jni_macro_assembler_test.h index 293f4cde9c..61296802f8 100644 --- a/compiler/utils/jni_macro_assembler_test.h +++ b/compiler/utils/jni_macro_assembler_test.h @@ -22,11 +22,12 @@ #include "assembler_test_base.h" #include "common_runtime_test.h" // For ScratchFile +#include <sys/stat.h> + #include <cstdio> #include <cstdlib> #include <fstream> #include <iterator> -#include <sys/stat.h> namespace art { diff --git a/compiler/utils/mips/assembler_mips.cc b/compiler/utils/mips/assembler_mips.cc index 24e34508d1..2cbabcfb32 100644 --- a/compiler/utils/mips/assembler_mips.cc +++ b/compiler/utils/mips/assembler_mips.cc @@ -2920,6 +2920,102 @@ void MipsAssembler::IlvrD(VectorRegister wd, VectorRegister ws, VectorRegister w static_cast<FRegister>(wt)); } +void MipsAssembler::MaddvB(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x1, 0x0, wt, ws, wd, 0x12), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::MaddvH(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x1, 0x1, wt, ws, wd, 0x12), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::MaddvW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x1, 0x2, wt, ws, wd, 0x12), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::MaddvD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x1, 0x3, wt, ws, wd, 0x12), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::MsubvB(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x2, 0x0, wt, ws, wd, 0x12), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::MsubvH(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x2, 0x1, wt, ws, wd, 0x12), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::MsubvW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x2, 0x2, wt, ws, wd, 0x12), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::MsubvD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x2, 0x3, wt, ws, wd, 0x12), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::FmaddW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x2, 0x0, wt, ws, wd, 0x1b), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::FmaddD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x2, 0x1, wt, ws, wd, 0x1b), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::FmsubW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x2, 0x2, wt, ws, wd, 0x1b), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + +void MipsAssembler::FmsubD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x2, 0x3, wt, ws, wd, 0x1b), + static_cast<FRegister>(wd), + static_cast<FRegister>(ws), + static_cast<FRegister>(wt)); +} + void MipsAssembler::ReplicateFPToVectorRegister(VectorRegister dst, FRegister src, bool is_double) { diff --git a/compiler/utils/mips/assembler_mips.h b/compiler/utils/mips/assembler_mips.h index e42bb3fa3d..a7ff931e7e 100644 --- a/compiler/utils/mips/assembler_mips.h +++ b/compiler/utils/mips/assembler_mips.h @@ -613,6 +613,19 @@ class MipsAssembler FINAL : public Assembler, public JNIMacroAssembler<PointerSi void IlvrW(VectorRegister wd, VectorRegister ws, VectorRegister wt); void IlvrD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MaddvB(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MaddvH(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MaddvW(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MaddvD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MsubvB(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MsubvH(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MsubvW(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MsubvD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void FmaddW(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void FmaddD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void FmsubW(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void FmsubD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + // Helper for replicating floating point value in all destination elements. void ReplicateFPToVectorRegister(VectorRegister dst, FRegister src, bool is_double); diff --git a/compiler/utils/mips/assembler_mips32r6_test.cc b/compiler/utils/mips/assembler_mips32r6_test.cc index 6ee2a5cb79..b72a14e906 100644 --- a/compiler/utils/mips/assembler_mips32r6_test.cc +++ b/compiler/utils/mips/assembler_mips32r6_test.cc @@ -1752,6 +1752,66 @@ TEST_F(AssemblerMIPS32r6Test, IlvrD) { DriverStr(RepeatVVV(&mips::MipsAssembler::IlvrD, "ilvr.d ${reg1}, ${reg2}, ${reg3}"), "ilvr.d"); } +TEST_F(AssemblerMIPS32r6Test, MaddvB) { + DriverStr(RepeatVVV(&mips::MipsAssembler::MaddvB, "maddv.b ${reg1}, ${reg2}, ${reg3}"), + "maddv.b"); +} + +TEST_F(AssemblerMIPS32r6Test, MaddvH) { + DriverStr(RepeatVVV(&mips::MipsAssembler::MaddvH, "maddv.h ${reg1}, ${reg2}, ${reg3}"), + "maddv.h"); +} + +TEST_F(AssemblerMIPS32r6Test, MaddvW) { + DriverStr(RepeatVVV(&mips::MipsAssembler::MaddvW, "maddv.w ${reg1}, ${reg2}, ${reg3}"), + "maddv.w"); +} + +TEST_F(AssemblerMIPS32r6Test, MaddvD) { + DriverStr(RepeatVVV(&mips::MipsAssembler::MaddvD, "maddv.d ${reg1}, ${reg2}, ${reg3}"), + "maddv.d"); +} + +TEST_F(AssemblerMIPS32r6Test, MsubvB) { + DriverStr(RepeatVVV(&mips::MipsAssembler::MsubvB, "msubv.b ${reg1}, ${reg2}, ${reg3}"), + "msubv.b"); +} + +TEST_F(AssemblerMIPS32r6Test, MsubvH) { + DriverStr(RepeatVVV(&mips::MipsAssembler::MsubvH, "msubv.h ${reg1}, ${reg2}, ${reg3}"), + "msubv.h"); +} + +TEST_F(AssemblerMIPS32r6Test, MsubvW) { + DriverStr(RepeatVVV(&mips::MipsAssembler::MsubvW, "msubv.w ${reg1}, ${reg2}, ${reg3}"), + "msubv.w"); +} + +TEST_F(AssemblerMIPS32r6Test, MsubvD) { + DriverStr(RepeatVVV(&mips::MipsAssembler::MsubvD, "msubv.d ${reg1}, ${reg2}, ${reg3}"), + "msubv.d"); +} + +TEST_F(AssemblerMIPS32r6Test, FmaddW) { + DriverStr(RepeatVVV(&mips::MipsAssembler::FmaddW, "fmadd.w ${reg1}, ${reg2}, ${reg3}"), + "fmadd.w"); +} + +TEST_F(AssemblerMIPS32r6Test, FmaddD) { + DriverStr(RepeatVVV(&mips::MipsAssembler::FmaddD, "fmadd.d ${reg1}, ${reg2}, ${reg3}"), + "fmadd.d"); +} + +TEST_F(AssemblerMIPS32r6Test, FmsubW) { + DriverStr(RepeatVVV(&mips::MipsAssembler::FmsubW, "fmsub.w ${reg1}, ${reg2}, ${reg3}"), + "fmsub.w"); +} + +TEST_F(AssemblerMIPS32r6Test, FmsubD) { + DriverStr(RepeatVVV(&mips::MipsAssembler::FmsubD, "fmsub.d ${reg1}, ${reg2}, ${reg3}"), + "fmsub.d"); +} + #undef __ } // namespace art diff --git a/compiler/utils/mips64/assembler_mips64.cc b/compiler/utils/mips64/assembler_mips64.cc index 90398540f8..7a1beb656b 100644 --- a/compiler/utils/mips64/assembler_mips64.cc +++ b/compiler/utils/mips64/assembler_mips64.cc @@ -1899,6 +1899,66 @@ void Mips64Assembler::IlvrD(VectorRegister wd, VectorRegister ws, VectorRegister EmitMsa3R(0x5, 0x3, wt, ws, wd, 0x14); } +void Mips64Assembler::MaddvB(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x1, 0x0, wt, ws, wd, 0x12); +} + +void Mips64Assembler::MaddvH(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x1, 0x1, wt, ws, wd, 0x12); +} + +void Mips64Assembler::MaddvW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x1, 0x2, wt, ws, wd, 0x12); +} + +void Mips64Assembler::MaddvD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x1, 0x3, wt, ws, wd, 0x12); +} + +void Mips64Assembler::MsubvB(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x2, 0x0, wt, ws, wd, 0x12); +} + +void Mips64Assembler::MsubvH(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x2, 0x1, wt, ws, wd, 0x12); +} + +void Mips64Assembler::MsubvW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x2, 0x2, wt, ws, wd, 0x12); +} + +void Mips64Assembler::MsubvD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x2, 0x3, wt, ws, wd, 0x12); +} + +void Mips64Assembler::FmaddW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x2, 0x0, wt, ws, wd, 0x1b); +} + +void Mips64Assembler::FmaddD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x2, 0x1, wt, ws, wd, 0x1b); +} + +void Mips64Assembler::FmsubW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x2, 0x2, wt, ws, wd, 0x1b); +} + +void Mips64Assembler::FmsubD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x2, 0x3, wt, ws, wd, 0x1b); +} + void Mips64Assembler::ReplicateFPToVectorRegister(VectorRegister dst, FpuRegister src, bool is_double) { diff --git a/compiler/utils/mips64/assembler_mips64.h b/compiler/utils/mips64/assembler_mips64.h index 5e88033743..c39d120bce 100644 --- a/compiler/utils/mips64/assembler_mips64.h +++ b/compiler/utils/mips64/assembler_mips64.h @@ -796,6 +796,19 @@ class Mips64Assembler FINAL : public Assembler, public JNIMacroAssembler<Pointer void IlvrW(VectorRegister wd, VectorRegister ws, VectorRegister wt); void IlvrD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MaddvB(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MaddvH(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MaddvW(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MaddvD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MsubvB(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MsubvH(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MsubvW(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void MsubvD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void FmaddW(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void FmaddD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void FmsubW(VectorRegister wd, VectorRegister ws, VectorRegister wt); + void FmsubD(VectorRegister wd, VectorRegister ws, VectorRegister wt); + // Helper for replicating floating point value in all destination elements. void ReplicateFPToVectorRegister(VectorRegister dst, FpuRegister src, bool is_double); diff --git a/compiler/utils/mips64/assembler_mips64_test.cc b/compiler/utils/mips64/assembler_mips64_test.cc index bdf9598ee7..021e335697 100644 --- a/compiler/utils/mips64/assembler_mips64_test.cc +++ b/compiler/utils/mips64/assembler_mips64_test.cc @@ -3340,6 +3340,66 @@ TEST_F(AssemblerMIPS64Test, IlvrD) { "ilvr.d"); } +TEST_F(AssemblerMIPS64Test, MaddvB) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::MaddvB, "maddv.b ${reg1}, ${reg2}, ${reg3}"), + "maddv.b"); +} + +TEST_F(AssemblerMIPS64Test, MaddvH) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::MaddvH, "maddv.h ${reg1}, ${reg2}, ${reg3}"), + "maddv.h"); +} + +TEST_F(AssemblerMIPS64Test, MaddvW) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::MaddvW, "maddv.w ${reg1}, ${reg2}, ${reg3}"), + "maddv.w"); +} + +TEST_F(AssemblerMIPS64Test, MaddvD) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::MaddvD, "maddv.d ${reg1}, ${reg2}, ${reg3}"), + "maddv.d"); +} + +TEST_F(AssemblerMIPS64Test, MsubvB) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::MsubvB, "msubv.b ${reg1}, ${reg2}, ${reg3}"), + "msubv.b"); +} + +TEST_F(AssemblerMIPS64Test, MsubvH) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::MsubvH, "msubv.h ${reg1}, ${reg2}, ${reg3}"), + "msubv.h"); +} + +TEST_F(AssemblerMIPS64Test, MsubvW) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::MsubvW, "msubv.w ${reg1}, ${reg2}, ${reg3}"), + "msubv.w"); +} + +TEST_F(AssemblerMIPS64Test, MsubvD) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::MsubvD, "msubv.d ${reg1}, ${reg2}, ${reg3}"), + "msubv.d"); +} + +TEST_F(AssemblerMIPS64Test, FmaddW) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::FmaddW, "fmadd.w ${reg1}, ${reg2}, ${reg3}"), + "fmadd.w"); +} + +TEST_F(AssemblerMIPS64Test, FmaddD) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::FmaddD, "fmadd.d ${reg1}, ${reg2}, ${reg3}"), + "fmadd.d"); +} + +TEST_F(AssemblerMIPS64Test, FmsubW) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::FmsubW, "fmsub.w ${reg1}, ${reg2}, ${reg3}"), + "fmsub.w"); +} + +TEST_F(AssemblerMIPS64Test, FmsubD) { + DriverStr(RepeatVVV(&mips64::Mips64Assembler::FmsubD, "fmsub.d ${reg1}, ${reg2}, ${reg3}"), + "fmsub.d"); +} + #undef __ } // namespace art diff --git a/compiler/utils/swap_space.cc b/compiler/utils/swap_space.cc index 621a652f0a..12d113d420 100644 --- a/compiler/utils/swap_space.cc +++ b/compiler/utils/swap_space.cc @@ -16,9 +16,10 @@ #include "swap_space.h" +#include <sys/mman.h> + #include <algorithm> #include <numeric> -#include <sys/mman.h> #include "base/bit_utils.h" #include "base/logging.h" diff --git a/compiler/utils/swap_space.h b/compiler/utils/swap_space.h index 0ff9fc69ed..08e243b644 100644 --- a/compiler/utils/swap_space.h +++ b/compiler/utils/swap_space.h @@ -17,12 +17,12 @@ #ifndef ART_COMPILER_UTILS_SWAP_SPACE_H_ #define ART_COMPILER_UTILS_SWAP_SPACE_H_ +#include <stddef.h> +#include <stdint.h> #include <cstdlib> #include <list> -#include <vector> #include <set> -#include <stdint.h> -#include <stddef.h> +#include <vector> #include "base/logging.h" #include "base/macros.h" diff --git a/compiler/utils/swap_space_test.cc b/compiler/utils/swap_space_test.cc index bf50ac3209..f4bca59cb3 100644 --- a/compiler/utils/swap_space_test.cc +++ b/compiler/utils/swap_space_test.cc @@ -16,10 +16,12 @@ #include "utils/swap_space.h" -#include <cstdio> -#include <sys/types.h> -#include <sys/stat.h> #include <fcntl.h> +#include <sys/stat.h> +#include <sys/types.h> + +#include <cstdio> + #include "gtest/gtest.h" #include "base/unix_file/fd_file.h" diff --git a/compiler/utils/test_dex_file_builder.h b/compiler/utils/test_dex_file_builder.h index 6921780a85..9ba3903033 100644 --- a/compiler/utils/test_dex_file_builder.h +++ b/compiler/utils/test_dex_file_builder.h @@ -17,11 +17,12 @@ #ifndef ART_COMPILER_UTILS_TEST_DEX_FILE_BUILDER_H_ #define ART_COMPILER_UTILS_TEST_DEX_FILE_BUILDER_H_ +#include <zlib.h> + #include <cstring> -#include <set> #include <map> +#include <set> #include <vector> -#include <zlib.h> #include "base/bit_utils.h" #include "base/logging.h" diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc index bef32f8254..b50f1af8f9 100644 --- a/compiler/utils/x86/assembler_x86.cc +++ b/compiler/utils/x86/assembler_x86.cc @@ -1238,6 +1238,101 @@ void X86Assembler::pavgw(XmmRegister dst, XmmRegister src) { EmitXmmRegisterOperand(dst, src); } + +void X86Assembler::psadbw(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitUint8(0x0F); + EmitUint8(0xF6); + EmitXmmRegisterOperand(dst, src); +} + + +void X86Assembler::pmaddwd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitUint8(0x0F); + EmitUint8(0xF5); + EmitXmmRegisterOperand(dst, src); +} + + +void X86Assembler::phaddw(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitUint8(0x0F); + EmitUint8(0x38); + EmitUint8(0x01); + EmitXmmRegisterOperand(dst, src); +} + + +void X86Assembler::phaddd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitUint8(0x0F); + EmitUint8(0x38); + EmitUint8(0x02); + EmitXmmRegisterOperand(dst, src); +} + + +void X86Assembler::haddps(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0xF2); + EmitUint8(0x0F); + EmitUint8(0x7C); + EmitXmmRegisterOperand(dst, src); +} + + +void X86Assembler::haddpd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitUint8(0x0F); + EmitUint8(0x7C); + EmitXmmRegisterOperand(dst, src); +} + + +void X86Assembler::phsubw(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitUint8(0x0F); + EmitUint8(0x38); + EmitUint8(0x05); + EmitXmmRegisterOperand(dst, src); +} + + +void X86Assembler::phsubd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitUint8(0x0F); + EmitUint8(0x38); + EmitUint8(0x06); + EmitXmmRegisterOperand(dst, src); +} + + +void X86Assembler::hsubps(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0xF2); + EmitUint8(0x0F); + EmitUint8(0x7D); + EmitXmmRegisterOperand(dst, src); +} + + +void X86Assembler::hsubpd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitUint8(0x0F); + EmitUint8(0x7D); + EmitXmmRegisterOperand(dst, src); +} + + void X86Assembler::pminsb(XmmRegister dst, XmmRegister src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); EmitUint8(0x66); diff --git a/compiler/utils/x86/assembler_x86.h b/compiler/utils/x86/assembler_x86.h index c4bb9ee18a..8578340ea7 100644 --- a/compiler/utils/x86/assembler_x86.h +++ b/compiler/utils/x86/assembler_x86.h @@ -497,6 +497,16 @@ class X86Assembler FINAL : public Assembler { void pavgb(XmmRegister dst, XmmRegister src); // no addr variant (for now) void pavgw(XmmRegister dst, XmmRegister src); + void psadbw(XmmRegister dst, XmmRegister src); + void pmaddwd(XmmRegister dst, XmmRegister src); + void phaddw(XmmRegister dst, XmmRegister src); + void phaddd(XmmRegister dst, XmmRegister src); + void haddps(XmmRegister dst, XmmRegister src); + void haddpd(XmmRegister dst, XmmRegister src); + void phsubw(XmmRegister dst, XmmRegister src); + void phsubd(XmmRegister dst, XmmRegister src); + void hsubps(XmmRegister dst, XmmRegister src); + void hsubpd(XmmRegister dst, XmmRegister src); void pminsb(XmmRegister dst, XmmRegister src); // no addr variant (for now) void pmaxsb(XmmRegister dst, XmmRegister src); diff --git a/compiler/utils/x86/assembler_x86_test.cc b/compiler/utils/x86/assembler_x86_test.cc index 34f2a47c27..3e1244ed5d 100644 --- a/compiler/utils/x86/assembler_x86_test.cc +++ b/compiler/utils/x86/assembler_x86_test.cc @@ -613,6 +613,46 @@ TEST_F(AssemblerX86Test, PAvgW) { DriverStr(RepeatFF(&x86::X86Assembler::pavgw, "pavgw %{reg2}, %{reg1}"), "pavgw"); } +TEST_F(AssemblerX86Test, PSadBW) { + DriverStr(RepeatFF(&x86::X86Assembler::psadbw, "psadbw %{reg2}, %{reg1}"), "psadbw"); +} + +TEST_F(AssemblerX86Test, PMAddWD) { + DriverStr(RepeatFF(&x86::X86Assembler::pmaddwd, "pmaddwd %{reg2}, %{reg1}"), "pmaddwd"); +} + +TEST_F(AssemblerX86Test, PHAddW) { + DriverStr(RepeatFF(&x86::X86Assembler::phaddw, "phaddw %{reg2}, %{reg1}"), "phaddw"); +} + +TEST_F(AssemblerX86Test, PHAddD) { + DriverStr(RepeatFF(&x86::X86Assembler::phaddd, "phaddd %{reg2}, %{reg1}"), "phaddd"); +} + +TEST_F(AssemblerX86Test, HAddPS) { + DriverStr(RepeatFF(&x86::X86Assembler::haddps, "haddps %{reg2}, %{reg1}"), "haddps"); +} + +TEST_F(AssemblerX86Test, HAddPD) { + DriverStr(RepeatFF(&x86::X86Assembler::haddpd, "haddpd %{reg2}, %{reg1}"), "haddpd"); +} + +TEST_F(AssemblerX86Test, PHSubW) { + DriverStr(RepeatFF(&x86::X86Assembler::phsubw, "phsubw %{reg2}, %{reg1}"), "phsubw"); +} + +TEST_F(AssemblerX86Test, PHSubD) { + DriverStr(RepeatFF(&x86::X86Assembler::phsubd, "phsubd %{reg2}, %{reg1}"), "phsubd"); +} + +TEST_F(AssemblerX86Test, HSubPS) { + DriverStr(RepeatFF(&x86::X86Assembler::hsubps, "hsubps %{reg2}, %{reg1}"), "hsubps"); +} + +TEST_F(AssemblerX86Test, HSubPD) { + DriverStr(RepeatFF(&x86::X86Assembler::hsubpd, "hsubpd %{reg2}, %{reg1}"), "hsubpd"); +} + TEST_F(AssemblerX86Test, PMinSB) { DriverStr(RepeatFF(&x86::X86Assembler::pminsb, "pminsb %{reg2}, %{reg1}"), "pminsb"); } diff --git a/compiler/utils/x86/jni_macro_assembler_x86.cc b/compiler/utils/x86/jni_macro_assembler_x86.cc index cfdf80ba50..e074346e01 100644 --- a/compiler/utils/x86/jni_macro_assembler_x86.cc +++ b/compiler/utils/x86/jni_macro_assembler_x86.cc @@ -16,10 +16,10 @@ #include "jni_macro_assembler_x86.h" -#include "utils/assembler.h" #include "base/casts.h" #include "entrypoints/quick/quick_entrypoints.h" #include "thread.h" +#include "utils/assembler.h" namespace art { namespace x86 { diff --git a/compiler/utils/x86/managed_register_x86_test.cc b/compiler/utils/x86/managed_register_x86_test.cc index 4fbafdadf9..0ed5c36fe4 100644 --- a/compiler/utils/x86/managed_register_x86_test.cc +++ b/compiler/utils/x86/managed_register_x86_test.cc @@ -14,8 +14,9 @@ * limitations under the License. */ -#include "globals.h" #include "managed_register_x86.h" + +#include "globals.h" #include "gtest/gtest.h" namespace art { diff --git a/compiler/utils/x86_64/assembler_x86_64.cc b/compiler/utils/x86_64/assembler_x86_64.cc index 82d1174a25..ea69a1c9be 100644 --- a/compiler/utils/x86_64/assembler_x86_64.cc +++ b/compiler/utils/x86_64/assembler_x86_64.cc @@ -1445,6 +1445,100 @@ void X86_64Assembler::pavgw(XmmRegister dst, XmmRegister src) { EmitXmmRegisterOperand(dst.LowBits(), src); } +void X86_64Assembler::psadbw(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0xF6); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + +void X86_64Assembler::pmaddwd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0xF5); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + +void X86_64Assembler::phaddw(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0x38); + EmitUint8(0x01); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + +void X86_64Assembler::phaddd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0x38); + EmitUint8(0x02); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + +void X86_64Assembler::haddps(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0xF2); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0x7C); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + +void X86_64Assembler::haddpd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0x7C); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + +void X86_64Assembler::phsubw(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0x38); + EmitUint8(0x05); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + +void X86_64Assembler::phsubd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0x38); + EmitUint8(0x06); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + +void X86_64Assembler::hsubps(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0xF2); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0x7D); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + +void X86_64Assembler::hsubpd(XmmRegister dst, XmmRegister src) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0x66); + EmitOptionalRex32(dst, src); + EmitUint8(0x0F); + EmitUint8(0x7D); + EmitXmmRegisterOperand(dst.LowBits(), src); +} + void X86_64Assembler::pminsb(XmmRegister dst, XmmRegister src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); EmitUint8(0x66); diff --git a/compiler/utils/x86_64/assembler_x86_64.h b/compiler/utils/x86_64/assembler_x86_64.h index 6e584fece1..41450bff4f 100644 --- a/compiler/utils/x86_64/assembler_x86_64.h +++ b/compiler/utils/x86_64/assembler_x86_64.h @@ -525,6 +525,16 @@ class X86_64Assembler FINAL : public Assembler { void pavgb(XmmRegister dst, XmmRegister src); // no addr variant (for now) void pavgw(XmmRegister dst, XmmRegister src); + void psadbw(XmmRegister dst, XmmRegister src); + void pmaddwd(XmmRegister dst, XmmRegister src); + void phaddw(XmmRegister dst, XmmRegister src); + void phaddd(XmmRegister dst, XmmRegister src); + void haddps(XmmRegister dst, XmmRegister src); + void haddpd(XmmRegister dst, XmmRegister src); + void phsubw(XmmRegister dst, XmmRegister src); + void phsubd(XmmRegister dst, XmmRegister src); + void hsubps(XmmRegister dst, XmmRegister src); + void hsubpd(XmmRegister dst, XmmRegister src); void pminsb(XmmRegister dst, XmmRegister src); // no addr variant (for now) void pmaxsb(XmmRegister dst, XmmRegister src); diff --git a/compiler/utils/x86_64/assembler_x86_64_test.cc b/compiler/utils/x86_64/assembler_x86_64_test.cc index b57400334c..ec14e7a825 100644 --- a/compiler/utils/x86_64/assembler_x86_64_test.cc +++ b/compiler/utils/x86_64/assembler_x86_64_test.cc @@ -1301,6 +1301,46 @@ TEST_F(AssemblerX86_64Test, Pavgw) { DriverStr(RepeatFF(&x86_64::X86_64Assembler::pavgw, "pavgw %{reg2}, %{reg1}"), "pavgw"); } +TEST_F(AssemblerX86_64Test, Psadbw) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::psadbw, "psadbw %{reg2}, %{reg1}"), "psadbw"); +} + +TEST_F(AssemblerX86_64Test, Pmaddwd) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::pmaddwd, "pmaddwd %{reg2}, %{reg1}"), "pmadwd"); +} + +TEST_F(AssemblerX86_64Test, Phaddw) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::phaddw, "phaddw %{reg2}, %{reg1}"), "phaddw"); +} + +TEST_F(AssemblerX86_64Test, Phaddd) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::phaddd, "phaddd %{reg2}, %{reg1}"), "phaddd"); +} + +TEST_F(AssemblerX86_64Test, Haddps) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::haddps, "haddps %{reg2}, %{reg1}"), "haddps"); +} + +TEST_F(AssemblerX86_64Test, Haddpd) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::haddpd, "haddpd %{reg2}, %{reg1}"), "haddpd"); +} + +TEST_F(AssemblerX86_64Test, Phsubw) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::phsubw, "phsubw %{reg2}, %{reg1}"), "phsubw"); +} + +TEST_F(AssemblerX86_64Test, Phsubd) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::phsubd, "phsubd %{reg2}, %{reg1}"), "phsubd"); +} + +TEST_F(AssemblerX86_64Test, Hsubps) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::hsubps, "hsubps %{reg2}, %{reg1}"), "hsubps"); +} + +TEST_F(AssemblerX86_64Test, Hsubpd) { + DriverStr(RepeatFF(&x86_64::X86_64Assembler::hsubpd, "hsubpd %{reg2}, %{reg1}"), "hsubpd"); +} + TEST_F(AssemblerX86_64Test, Pminsb) { DriverStr(RepeatFF(&x86_64::X86_64Assembler::pminsb, "pminsb %{reg2}, %{reg1}"), "pminsb"); } diff --git a/compiler/utils/x86_64/managed_register_x86_64_test.cc b/compiler/utils/x86_64/managed_register_x86_64_test.cc index 2dc7581472..e43d717385 100644 --- a/compiler/utils/x86_64/managed_register_x86_64_test.cc +++ b/compiler/utils/x86_64/managed_register_x86_64_test.cc @@ -14,8 +14,8 @@ * limitations under the License. */ -#include "globals.h" #include "managed_register_x86_64.h" +#include "globals.h" #include "gtest/gtest.h" namespace art { |