diff options
| author | 2017-09-20 10:33:06 -0700 | |
|---|---|---|
| committer | 2017-09-20 10:35:21 -0700 | |
| commit | f7754e861f0dec2d4772d61102fa93252258f672 (patch) | |
| tree | fdd1a2b81468a8310eae93c070b0ad2a6e290767 /compiler/utils/assembler_test.h | |
| parent | b407afe983f8b106a5007d07aa2523ffc6525018 (diff) | |
Add more repeat support and register views.
Rationale:
This enables exhaustive testing of instructions
that use various memory addressing modes and
register views (full, half, quarter, etc.).
Bug: 18380245
Bug: 18380559
Bug: 18380348
Test: assembler_x86[_64]_test
Change-Id: I598c3e35a4791166ab629479ccb969ef3c6494b8
Diffstat (limited to 'compiler/utils/assembler_test.h')
| -rw-r--r-- | compiler/utils/assembler_test.h | 142 |
1 files changed, 141 insertions, 1 deletions
diff --git a/compiler/utils/assembler_test.h b/compiler/utils/assembler_test.h index 12954a4c32..227954e21b 100644 --- a/compiler/utils/assembler_test.h +++ b/compiler/utils/assembler_test.h @@ -114,6 +114,24 @@ class AssemblerTest : public testing::Test { fmt); } + std::string Repeatww(void (Ass::*f)(Reg, Reg), const std::string& fmt) { + return RepeatTemplatedRegisters<Reg, Reg>(f, + GetRegisters(), + GetRegisters(), + &AssemblerTest::GetRegName<RegisterView::kUseTertiaryName>, + &AssemblerTest::GetRegName<RegisterView::kUseTertiaryName>, + fmt); + } + + std::string Repeatbb(void (Ass::*f)(Reg, Reg), const std::string& fmt) { + return RepeatTemplatedRegisters<Reg, Reg>(f, + GetRegisters(), + GetRegisters(), + &AssemblerTest::GetRegName<RegisterView::kUseQuaternaryName>, + &AssemblerTest::GetRegName<RegisterView::kUseQuaternaryName>, + fmt); + } + std::string RepeatRRR(void (Ass::*f)(Reg, Reg, Reg), const std::string& fmt) { return RepeatTemplatedRegisters<Reg, Reg, Reg>(f, GetRegisters(), @@ -147,10 +165,18 @@ class AssemblerTest : public testing::Test { return RepeatRegisterImm<RegisterView::kUsePrimaryName>(f, imm_bytes, fmt); } - std::string Repeatri(void (Ass::*f)(Reg, const Imm&), size_t imm_bytes, const std::string& fmt) { + std::string RepeatrI(void (Ass::*f)(Reg, const Imm&), size_t imm_bytes, const std::string& fmt) { return RepeatRegisterImm<RegisterView::kUseSecondaryName>(f, imm_bytes, fmt); } + std::string RepeatwI(void (Ass::*f)(Reg, const Imm&), size_t imm_bytes, const std::string& fmt) { + return RepeatRegisterImm<RegisterView::kUseTertiaryName>(f, imm_bytes, fmt); + } + + std::string RepeatbI(void (Ass::*f)(Reg, const Imm&), size_t imm_bytes, const std::string& fmt) { + return RepeatRegisterImm<RegisterView::kUseQuaternaryName>(f, imm_bytes, fmt); + } + template <typename Reg1, typename Reg2, typename ImmType> std::string RepeatTemplatedRegistersImmBits(void (Ass::*f)(Reg1, Reg2, ImmType), int imm_bits, @@ -909,6 +935,63 @@ class AssemblerTest : public testing::Test { fmt); } + // Repeats over secondary registers and addresses provided by fixture. + std::string RepeatrA(void (Ass::*f)(Reg, const Addr&), const std::string& fmt) { + return RepeatrA(f, GetAddresses(), fmt); + } + + // Variant that takes explicit vector of addresss + // (to test restricted addressing modes set). + std::string RepeatrA(void (Ass::*f)(Reg, const Addr&), + const std::vector<Addr>& a, + const std::string& fmt) { + return RepeatTemplatedRegMem<Reg, Addr>( + f, + GetRegisters(), + a, + &AssemblerTest::GetRegName<RegisterView::kUseSecondaryName>, + &AssemblerTest::GetAddrName, + fmt); + } + + // Repeats over tertiary registers and addresses provided by fixture. + std::string RepeatwA(void (Ass::*f)(Reg, const Addr&), const std::string& fmt) { + return RepeatwA(f, GetAddresses(), fmt); + } + + // Variant that takes explicit vector of addresss + // (to test restricted addressing modes set). + std::string RepeatwA(void (Ass::*f)(Reg, const Addr&), + const std::vector<Addr>& a, + const std::string& fmt) { + return RepeatTemplatedRegMem<Reg, Addr>( + f, + GetRegisters(), + a, + &AssemblerTest::GetRegName<RegisterView::kUseTertiaryName>, + &AssemblerTest::GetAddrName, + fmt); + } + + // Repeats over quaternary registers and addresses provided by fixture. + std::string RepeatbA(void (Ass::*f)(Reg, const Addr&), const std::string& fmt) { + return RepeatbA(f, GetAddresses(), fmt); + } + + // Variant that takes explicit vector of addresss + // (to test restricted addressing modes set). + std::string RepeatbA(void (Ass::*f)(Reg, const Addr&), + const std::vector<Addr>& a, + const std::string& fmt) { + return RepeatTemplatedRegMem<Reg, Addr>( + f, + GetRegisters(), + a, + &AssemblerTest::GetRegName<RegisterView::kUseQuaternaryName>, + &AssemblerTest::GetAddrName, + fmt); + } + // Repeats over fp-registers and addresses provided by fixture. std::string RepeatFA(void (Ass::*f)(FPReg, const Addr&), const std::string& fmt) { return RepeatFA(f, GetAddresses(), fmt); @@ -947,6 +1030,63 @@ class AssemblerTest : public testing::Test { fmt); } + // Repeats over addresses and secondary registers provided by fixture. + std::string RepeatAr(void (Ass::*f)(const Addr&, Reg), const std::string& fmt) { + return RepeatAr(f, GetAddresses(), fmt); + } + + // Variant that takes explicit vector of addresss + // (to test restricted addressing modes set). + std::string RepeatAr(void (Ass::*f)(const Addr&, Reg), + const std::vector<Addr>& a, + const std::string& fmt) { + return RepeatTemplatedMemReg<Addr, Reg>( + f, + a, + GetRegisters(), + &AssemblerTest::GetAddrName, + &AssemblerTest::GetRegName<RegisterView::kUseSecondaryName>, + fmt); + } + + // Repeats over addresses and tertiary registers provided by fixture. + std::string RepeatAw(void (Ass::*f)(const Addr&, Reg), const std::string& fmt) { + return RepeatAw(f, GetAddresses(), fmt); + } + + // Variant that takes explicit vector of addresss + // (to test restricted addressing modes set). + std::string RepeatAw(void (Ass::*f)(const Addr&, Reg), + const std::vector<Addr>& a, + const std::string& fmt) { + return RepeatTemplatedMemReg<Addr, Reg>( + f, + a, + GetRegisters(), + &AssemblerTest::GetAddrName, + &AssemblerTest::GetRegName<RegisterView::kUseTertiaryName>, + fmt); + } + + // Repeats over addresses and quaternary registers provided by fixture. + std::string RepeatAb(void (Ass::*f)(const Addr&, Reg), const std::string& fmt) { + return RepeatAb(f, GetAddresses(), fmt); + } + + // Variant that takes explicit vector of addresss + // (to test restricted addressing modes set). + std::string RepeatAb(void (Ass::*f)(const Addr&, Reg), + const std::vector<Addr>& a, + const std::string& fmt) { + return RepeatTemplatedMemReg<Addr, Reg>( + f, + a, + GetRegisters(), + &AssemblerTest::GetAddrName, + &AssemblerTest::GetRegName<RegisterView::kUseQuaternaryName>, + fmt); + } + // Repeats over addresses and fp-registers provided by fixture. std::string RepeatAF(void (Ass::*f)(const Addr&, FPReg), const std::string& fmt) { return RepeatAF(f, GetAddresses(), fmt); |