summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2023-08-08 11:25:27 +0000
committer VladimĂ­r Marko <vmarko@google.com> 2023-08-08 17:07:55 +0000
commit973cc9325dcf47edd233db95a00b99c36e0c54e3 (patch)
tree1f30800f39ae61d1ff7bd338d32031c6a5a65afe
parent5e572cfdea135c8e7061d50b6f7e1c0a88065ca8 (diff)
riscv64: Clean up assembler tests.
Remove unnecessary indirection for registers in assembler tests, including x86 and x86-64 tests. Remove unnecessary `riscv64::` qualifications from riscv64 assembler tests. Test: m test-art-host-gtest Bug: 283082089 Change-Id: Ia3b85c9532e49ac6277d31304bd7cbcfb2f7c738
-rw-r--r--compiler/utils/assembler_test.h151
-rw-r--r--compiler/utils/riscv64/assembler_riscv64_test.cc963
-rw-r--r--compiler/utils/x86/assembler_x86_test.cc116
-rw-r--r--compiler/utils/x86_64/assembler_x86_64_test.cc224
4 files changed, 679 insertions, 775 deletions
diff --git a/compiler/utils/assembler_test.h b/compiler/utils/assembler_test.h
index c2e5064faf..72f48367a6 100644
--- a/compiler/utils/assembler_test.h
+++ b/compiler/utils/assembler_test.h
@@ -26,6 +26,7 @@
#include <fstream>
#include <iterator>
+#include "base/array_ref.h"
#include "base/macros.h"
#include "base/malloc_arena_pool.h"
#include "assembler_test_base.h"
@@ -200,8 +201,8 @@ class AssemblerTest : public AssemblerTestBase {
template <typename Reg1, typename Reg2, typename ImmType>
std::string RepeatTemplatedRegistersImmBits(void (Ass::*f)(Reg1, Reg2, ImmType),
int imm_bits,
- const std::vector<Reg1*> reg1_registers,
- const std::vector<Reg2*> reg2_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
std::string (AssemblerTest::*GetName1)(const Reg1&),
std::string (AssemblerTest::*GetName2)(const Reg2&),
const std::string& fmt,
@@ -215,12 +216,12 @@ class AssemblerTest : public AssemblerTestBase {
for (int64_t imm : imms) {
ImmType new_imm = CreateImmediate(imm);
if (f != nullptr) {
- (assembler_.get()->*f)(*reg1, *reg2, new_imm * multiplier + bias);
+ (assembler_.get()->*f)(reg1, reg2, new_imm * multiplier + bias);
}
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
ReplaceImm(imm, bias, multiplier, &base);
str += base;
@@ -234,9 +235,9 @@ class AssemblerTest : public AssemblerTestBase {
template <typename Reg1, typename Reg2, typename Reg3, typename ImmType>
std::string RepeatTemplatedRegistersImmBits(void (Ass::*f)(Reg1, Reg2, Reg3, ImmType),
int imm_bits,
- const std::vector<Reg1*> reg1_registers,
- const std::vector<Reg2*> reg2_registers,
- const std::vector<Reg3*> reg3_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
+ ArrayRef<const Reg3> reg3_registers,
std::string (AssemblerTest::*GetName1)(const Reg1&),
std::string (AssemblerTest::*GetName2)(const Reg2&),
std::string (AssemblerTest::*GetName3)(const Reg3&),
@@ -251,13 +252,13 @@ class AssemblerTest : public AssemblerTestBase {
for (int64_t imm : imms) {
ImmType new_imm = CreateImmediate(imm);
if (f != nullptr) {
- (assembler_.get()->*f)(*reg1, *reg2, *reg3, new_imm + bias);
+ (assembler_.get()->*f)(reg1, reg2, reg3, new_imm + bias);
}
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
- ReplaceReg(REG3_TOKEN, (this->*GetName3)(*reg3), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
+ ReplaceReg(REG3_TOKEN, (this->*GetName3)(reg3), &base);
ReplaceImm(imm, bias, /*multiplier=*/ 1, &base);
str += base;
@@ -271,8 +272,8 @@ class AssemblerTest : public AssemblerTestBase {
template <typename ImmType, typename Reg1, typename Reg2>
std::string RepeatTemplatedImmBitsRegisters(void (Ass::*f)(ImmType, Reg1, Reg2),
- const std::vector<Reg1*> reg1_registers,
- const std::vector<Reg2*> reg2_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
std::string (AssemblerTest::*GetName1)(const Reg1&),
std::string (AssemblerTest::*GetName2)(const Reg2&),
int imm_bits,
@@ -287,12 +288,12 @@ class AssemblerTest : public AssemblerTestBase {
for (int64_t imm : imms) {
ImmType new_imm = CreateImmediate(imm);
if (f != nullptr) {
- (assembler_.get()->*f)(new_imm, *reg1, *reg2);
+ (assembler_.get()->*f)(new_imm, reg1, reg2);
}
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
ReplaceImm(imm, /*bias=*/ 0, /*multiplier=*/ 1, &base);
str += base;
@@ -306,7 +307,7 @@ class AssemblerTest : public AssemblerTestBase {
template <typename RegType, typename ImmType>
std::string RepeatTemplatedRegisterImmBits(void (Ass::*f)(RegType, ImmType),
int imm_bits,
- const std::vector<RegType*> registers,
+ ArrayRef<const RegType> registers,
std::string (AssemblerTest::*GetName)(const RegType&),
const std::string& fmt,
int bias) {
@@ -317,11 +318,11 @@ class AssemblerTest : public AssemblerTestBase {
for (int64_t imm : imms) {
ImmType new_imm = CreateImmediate(imm);
if (f != nullptr) {
- (assembler_.get()->*f)(*reg, new_imm + bias);
+ (assembler_.get()->*f)(reg, new_imm + bias);
}
std::string base = fmt;
- ReplaceReg(REG_TOKEN, (this->*GetName)(*reg), &base);
+ ReplaceReg(REG_TOKEN, (this->*GetName)(reg), &base);
ReplaceImm(imm, bias, /*multiplier=*/ 1, &base);
str += base;
@@ -336,7 +337,7 @@ class AssemblerTest : public AssemblerTestBase {
void (Ass::*f)(RegType, ImmType),
int imm_bits,
int shift,
- const std::vector<RegType*> registers,
+ ArrayRef<const RegType> registers,
std::string (AssemblerTest::*GetName)(const RegType&),
const std::string& fmt,
int bias) {
@@ -347,11 +348,11 @@ class AssemblerTest : public AssemblerTestBase {
for (int64_t imm : imms) {
ImmType new_imm = CreateImmediate(imm);
if (f != nullptr) {
- (assembler_.get()->*f)(*reg, new_imm + bias);
+ (assembler_.get()->*f)(reg, new_imm + bias);
}
std::string base = fmt;
- ReplaceReg(REG_TOKEN, (this->*GetName)(*reg), &base);
+ ReplaceReg(REG_TOKEN, (this->*GetName)(reg), &base);
ReplaceImm(imm, bias, /*multiplier=*/ 1, &base);
str += base;
@@ -390,8 +391,8 @@ class AssemblerTest : public AssemblerTestBase {
void (Ass::*f)(Reg1, Reg2, ImmType),
int imm_bits,
int shift,
- const std::vector<Reg1*> reg1_registers,
- const std::vector<Reg2*> reg2_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
std::string (AssemblerTest::*GetName1)(const Reg1&),
std::string (AssemblerTest::*GetName2)(const Reg2&),
const std::string& fmt,
@@ -405,12 +406,12 @@ class AssemblerTest : public AssemblerTestBase {
for (int64_t imm : imms) {
ImmType new_imm = CreateImmediate(imm);
if (f != nullptr) {
- (assembler_.get()->*f)(*reg1, *reg2, new_imm * multiplier + bias);
+ (assembler_.get()->*f)(reg1, reg2, new_imm * multiplier + bias);
}
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
ReplaceImm(imm, bias, multiplier, &base);
str += base;
@@ -786,18 +787,18 @@ class AssemblerTest : public AssemblerTestBase {
// Returns a vector of registers used by any of the repeat methods
// involving an "R" (e.g. RepeatR).
- virtual std::vector<Reg*> GetRegisters() = 0;
+ virtual ArrayRef<const Reg> GetRegisters() = 0;
// Returns a vector of fp-registers used by any of the repeat methods
// involving an "F" (e.g. RepeatFF).
- virtual std::vector<FPReg*> GetFPRegisters() {
+ virtual ArrayRef<const FPReg> GetFPRegisters() {
UNIMPLEMENTED(FATAL) << "Architecture does not support floating-point registers";
UNREACHABLE();
}
// Returns a vector of dedicated simd-registers used by any of the repeat
// methods involving an "V" (e.g. RepeatVV).
- virtual std::vector<VecReg*> GetVectorRegisters() {
+ virtual ArrayRef<const VecReg> GetVectorRegisters() {
UNIMPLEMENTED(FATAL) << "Architecture does not support vector registers";
UNREACHABLE();
}
@@ -1226,7 +1227,7 @@ class AssemblerTest : public AssemblerTestBase {
template <typename RegType, typename AddrType>
std::string RepeatTemplatedRegMem(void (Ass::*f)(RegType, const AddrType&),
- const std::vector<RegType*> registers,
+ ArrayRef<const RegType> registers,
const std::vector<AddrType> addresses,
std::string (AssemblerTest::*GetRName)(const RegType&),
std::string (AssemblerTest::*GetAName)(const AddrType&),
@@ -1236,11 +1237,11 @@ class AssemblerTest : public AssemblerTestBase {
for (auto reg : registers) {
for (auto addr : addresses) {
if (f != nullptr) {
- (assembler_.get()->*f)(*reg, addr);
+ (assembler_.get()->*f)(reg, addr);
}
std::string base = fmt;
- ReplaceReg(REG_TOKEN, (this->*GetRName)(*reg), &base);
+ ReplaceReg(REG_TOKEN, (this->*GetRName)(reg), &base);
ReplaceAddr((this->*GetAName)(addr), &base);
str += base;
@@ -1253,7 +1254,7 @@ class AssemblerTest : public AssemblerTestBase {
template <typename AddrType, typename RegType>
std::string RepeatTemplatedMemReg(void (Ass::*f)(const AddrType&, RegType),
const std::vector<AddrType> addresses,
- const std::vector<RegType*> registers,
+ ArrayRef<const RegType> registers,
std::string (AssemblerTest::*GetAName)(const AddrType&),
std::string (AssemblerTest::*GetRName)(const RegType&),
const std::string& fmt) {
@@ -1262,12 +1263,12 @@ class AssemblerTest : public AssemblerTestBase {
for (auto addr : addresses) {
for (auto reg : registers) {
if (f != nullptr) {
- (assembler_.get()->*f)(addr, *reg);
+ (assembler_.get()->*f)(addr, reg);
}
std::string base = fmt;
ReplaceAddr((this->*GetAName)(addr), &base);
- ReplaceReg(REG_TOKEN, (this->*GetRName)(*reg), &base);
+ ReplaceReg(REG_TOKEN, (this->*GetRName)(reg), &base);
str += base;
str += "\n";
@@ -1282,17 +1283,17 @@ class AssemblerTest : public AssemblerTestBase {
template <typename RegType>
std::string RepeatTemplatedRegister(void (Ass::*f)(RegType),
- const std::vector<RegType*> registers,
+ ArrayRef<const RegType> registers,
std::string (AssemblerTest::*GetName)(const RegType&),
const std::string& fmt) {
std::string str;
for (auto reg : registers) {
if (f != nullptr) {
- (assembler_.get()->*f)(*reg);
+ (assembler_.get()->*f)(reg);
}
std::string base = fmt;
- ReplaceReg(REG_TOKEN, (this->*GetName)(*reg), &base);
+ ReplaceReg(REG_TOKEN, (this->*GetName)(reg), &base);
str += base;
str += "\n";
@@ -1302,8 +1303,8 @@ class AssemblerTest : public AssemblerTestBase {
template <typename Reg1, typename Reg2>
std::string RepeatTemplatedRegisters(void (Ass::*f)(Reg1, Reg2),
- const std::vector<Reg1*> reg1_registers,
- const std::vector<Reg2*> reg2_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
std::string (AssemblerTest::*GetName1)(const Reg1&),
std::string (AssemblerTest::*GetName2)(const Reg2&),
const std::string& fmt,
@@ -1315,19 +1316,19 @@ class AssemblerTest : public AssemblerTestBase {
for (auto reg2 : reg2_registers) {
// Check if this register pair is on the exception list. If so, skip it.
if (except != nullptr) {
- const auto& pair = std::make_pair(*reg1, *reg2);
+ const auto& pair = std::make_pair(reg1, reg2);
if (std::find(except->begin(), except->end(), pair) != except->end()) {
continue;
}
}
if (f != nullptr) {
- (assembler_.get()->*f)(*reg1, *reg2);
+ (assembler_.get()->*f)(reg1, reg2);
}
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
str += base;
str += "\n";
@@ -1338,8 +1339,8 @@ class AssemblerTest : public AssemblerTestBase {
template <typename Reg1, typename Reg2>
std::string RepeatTemplatedRegistersNoDupes(void (Ass::*f)(Reg1, Reg2),
- const std::vector<Reg1*> reg1_registers,
- const std::vector<Reg2*> reg2_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
std::string (AssemblerTest::*GetName1)(const Reg1&),
std::string (AssemblerTest::*GetName2)(const Reg2&),
const std::string& fmt) {
@@ -1350,12 +1351,12 @@ class AssemblerTest : public AssemblerTestBase {
for (auto reg2 : reg2_registers) {
if (reg1 == reg2) continue;
if (f != nullptr) {
- (assembler_.get()->*f)(*reg1, *reg2);
+ (assembler_.get()->*f)(reg1, reg2);
}
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
str += base;
str += "\n";
@@ -1366,9 +1367,9 @@ class AssemblerTest : public AssemblerTestBase {
template <typename Reg1, typename Reg2, typename Reg3>
std::string RepeatTemplatedRegisters(void (Ass::*f)(Reg1, Reg2, Reg3),
- const std::vector<Reg1*> reg1_registers,
- const std::vector<Reg2*> reg2_registers,
- const std::vector<Reg3*> reg3_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
+ ArrayRef<const Reg3> reg3_registers,
std::string (AssemblerTest::*GetName1)(const Reg1&),
std::string (AssemblerTest::*GetName2)(const Reg2&),
std::string (AssemblerTest::*GetName3)(const Reg3&),
@@ -1378,13 +1379,13 @@ class AssemblerTest : public AssemblerTestBase {
for (auto reg2 : reg2_registers) {
for (auto reg3 : reg3_registers) {
if (f != nullptr) {
- (assembler_.get()->*f)(*reg1, *reg2, *reg3);
+ (assembler_.get()->*f)(reg1, reg2, reg3);
}
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
- ReplaceReg(REG3_TOKEN, (this->*GetName3)(*reg3), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
+ ReplaceReg(REG3_TOKEN, (this->*GetName3)(reg3), &base);
str += base;
str += "\n";
@@ -1396,10 +1397,10 @@ class AssemblerTest : public AssemblerTestBase {
template <typename Reg1, typename Reg2, typename Reg3, typename Reg4>
std::string RepeatTemplatedRegisters(void (Ass::*f)(Reg1, Reg2, Reg3, Reg4),
- const std::vector<Reg1*>& reg1_registers,
- const std::vector<Reg2*>& reg2_registers,
- const std::vector<Reg3*>& reg3_registers,
- const std::vector<Reg4*>& reg4_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
+ ArrayRef<const Reg3> reg3_registers,
+ ArrayRef<const Reg4> reg4_registers,
std::string (AssemblerTest::*GetName1)(const Reg1&),
std::string (AssemblerTest::*GetName2)(const Reg2&),
std::string (AssemblerTest::*GetName3)(const Reg3&),
@@ -1411,14 +1412,14 @@ class AssemblerTest : public AssemblerTestBase {
for (auto reg3 : reg3_registers) {
for (auto reg4 : reg4_registers) {
if (f != nullptr) {
- (assembler_.get()->*f)(*reg1, *reg2, *reg3, *reg4);
+ (assembler_.get()->*f)(reg1, reg2, reg3, reg4);
}
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
- ReplaceReg(REG3_TOKEN, (this->*GetName3)(*reg3), &base);
- ReplaceReg(REG4_TOKEN, (this->*GetName4)(*reg4), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
+ ReplaceReg(REG3_TOKEN, (this->*GetName3)(reg3), &base);
+ ReplaceReg(REG4_TOKEN, (this->*GetName4)(reg4), &base);
str += base;
str += "\n";
@@ -1431,8 +1432,8 @@ class AssemblerTest : public AssemblerTestBase {
template <typename Reg1, typename Reg2>
std::string RepeatTemplatedRegistersImm(void (Ass::*f)(Reg1, Reg2, const Imm&),
- const std::vector<Reg1*> reg1_registers,
- const std::vector<Reg2*> reg2_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
std::string (AssemblerTest::*GetName1)(const Reg1&),
std::string (AssemblerTest::*GetName2)(const Reg2&),
size_t imm_bytes,
@@ -1446,12 +1447,12 @@ class AssemblerTest : public AssemblerTestBase {
for (int64_t imm : imms) {
Imm new_imm = CreateImmediate(imm);
if (f != nullptr) {
- (assembler_.get()->*f)(*reg1, *reg2, new_imm);
+ (assembler_.get()->*f)(reg1, reg2, new_imm);
}
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
ReplaceImm(imm, /*bias=*/ 0, /*multiplier=*/ 1, &base);
str += base;
@@ -1551,7 +1552,7 @@ class AssemblerTest : public AssemblerTestBase {
std::string RepeatRegisterImm(void (Ass::*f)(Reg, const Imm&),
size_t imm_bytes,
const std::string& fmt) {
- const std::vector<Reg*> registers = GetRegisters();
+ ArrayRef<const Reg> registers = GetRegisters();
std::string str;
std::vector<int64_t> imms = CreateImmediateValues(imm_bytes);
@@ -1561,11 +1562,11 @@ class AssemblerTest : public AssemblerTestBase {
for (int64_t imm : imms) {
Imm new_imm = CreateImmediate(imm);
if (f != nullptr) {
- (assembler_.get()->*f)(*reg, new_imm);
+ (assembler_.get()->*f)(reg, new_imm);
}
std::string base = fmt;
- ReplaceReg(REG_TOKEN, GetRegName<kRegView>(*reg), &base);
+ ReplaceReg(REG_TOKEN, GetRegName<kRegView>(reg), &base);
ReplaceImm(imm, /*bias=*/ 0, /*multiplier=*/ 1, &base);
str += base;
diff --git a/compiler/utils/riscv64/assembler_riscv64_test.cc b/compiler/utils/riscv64/assembler_riscv64_test.cc
index edf541ebbf..b3ead59d94 100644
--- a/compiler/utils/riscv64/assembler_riscv64_test.cc
+++ b/compiler/utils/riscv64/assembler_riscv64_test.cc
@@ -29,150 +29,154 @@ namespace art HIDDEN {
namespace riscv64 {
struct RISCV64CpuRegisterCompare {
- bool operator()(const riscv64::XRegister& a, const riscv64::XRegister& b) const { return a < b; }
+ bool operator()(const XRegister& a, const XRegister& b) const { return a < b; }
};
-class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
- riscv64::Riscv64Label,
- riscv64::XRegister,
- riscv64::FRegister,
+class AssemblerRISCV64Test : public AssemblerTest<Riscv64Assembler,
+ Riscv64Label,
+ XRegister,
+ FRegister,
int32_t> {
public:
- using Base = AssemblerTest<riscv64::Riscv64Assembler,
- riscv64::Riscv64Label,
- riscv64::XRegister,
- riscv64::FRegister,
+ using Base = AssemblerTest<Riscv64Assembler,
+ Riscv64Label,
+ XRegister,
+ FRegister,
int32_t>;
AssemblerRISCV64Test()
: instruction_set_features_(Riscv64InstructionSetFeatures::FromVariant("default", nullptr)) {}
protected:
- riscv64::Riscv64Assembler* CreateAssembler(ArenaAllocator* allocator) override {
- return new (allocator) riscv64::Riscv64Assembler(allocator, instruction_set_features_.get());
+ Riscv64Assembler* CreateAssembler(ArenaAllocator* allocator) override {
+ return new (allocator) Riscv64Assembler(allocator, instruction_set_features_.get());
}
InstructionSet GetIsa() override { return InstructionSet::kRiscv64; }
void SetUpHelpers() override {
- if (registers_.size() == 0) {
- registers_.push_back(new riscv64::XRegister(riscv64::Zero));
- registers_.push_back(new riscv64::XRegister(riscv64::RA));
- registers_.push_back(new riscv64::XRegister(riscv64::SP));
- registers_.push_back(new riscv64::XRegister(riscv64::GP));
- registers_.push_back(new riscv64::XRegister(riscv64::TP));
- registers_.push_back(new riscv64::XRegister(riscv64::T0));
- registers_.push_back(new riscv64::XRegister(riscv64::T1));
- registers_.push_back(new riscv64::XRegister(riscv64::T2));
- registers_.push_back(new riscv64::XRegister(riscv64::S0));
- registers_.push_back(new riscv64::XRegister(riscv64::S1));
- registers_.push_back(new riscv64::XRegister(riscv64::A0));
- registers_.push_back(new riscv64::XRegister(riscv64::A1));
- registers_.push_back(new riscv64::XRegister(riscv64::A2));
- registers_.push_back(new riscv64::XRegister(riscv64::A3));
- registers_.push_back(new riscv64::XRegister(riscv64::A4));
- registers_.push_back(new riscv64::XRegister(riscv64::A5));
- registers_.push_back(new riscv64::XRegister(riscv64::A6));
- registers_.push_back(new riscv64::XRegister(riscv64::A7));
- registers_.push_back(new riscv64::XRegister(riscv64::S2));
- registers_.push_back(new riscv64::XRegister(riscv64::S3));
- registers_.push_back(new riscv64::XRegister(riscv64::S4));
- registers_.push_back(new riscv64::XRegister(riscv64::S5));
- registers_.push_back(new riscv64::XRegister(riscv64::S6));
- registers_.push_back(new riscv64::XRegister(riscv64::S7));
- registers_.push_back(new riscv64::XRegister(riscv64::S8));
- registers_.push_back(new riscv64::XRegister(riscv64::S9));
- registers_.push_back(new riscv64::XRegister(riscv64::S10));
- registers_.push_back(new riscv64::XRegister(riscv64::S11));
- registers_.push_back(new riscv64::XRegister(riscv64::T3));
- registers_.push_back(new riscv64::XRegister(riscv64::T4));
- registers_.push_back(new riscv64::XRegister(riscv64::T5));
- registers_.push_back(new riscv64::XRegister(riscv64::T6));
-
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::Zero), "zero");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::RA), "ra");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::SP), "sp");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::GP), "gp");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::TP), "tp");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::T0), "t0");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::T1), "t1");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::T2), "t2");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S0), "s0"); // s0/fp
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S1), "s1");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::A0), "a0");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::A1), "a1");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::A2), "a2");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::A3), "a3");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::A4), "a4");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::A5), "a5");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::A6), "a6");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::A7), "a7");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S2), "s2");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S3), "s3");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S4), "s4");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S5), "s5");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S6), "s6");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S7), "s7");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S8), "s8");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S9), "s9");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S10), "s10");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::S11), "s11");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::T3), "t3");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::T4), "t4");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::T5), "t5");
- secondary_register_names_.emplace(riscv64::XRegister(riscv64::T6), "t6");
-
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT0));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT1));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT2));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT3));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT4));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT5));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT6));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT7));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS0));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS1));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FA0));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FA1));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FA2));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FA3));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FA4));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FA5));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FA6));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FA7));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS2));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS3));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS4));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS5));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS6));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS7));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS8));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS9));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS10));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FS11));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT8));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT9));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT10));
- fp_registers_.push_back(new riscv64::FRegister(riscv64::FT11));
+ if (secondary_register_names_.empty()) {
+ secondary_register_names_.emplace(Zero, "zero");
+ secondary_register_names_.emplace(RA, "ra");
+ secondary_register_names_.emplace(SP, "sp");
+ secondary_register_names_.emplace(GP, "gp");
+ secondary_register_names_.emplace(TP, "tp");
+ secondary_register_names_.emplace(T0, "t0");
+ secondary_register_names_.emplace(T1, "t1");
+ secondary_register_names_.emplace(T2, "t2");
+ secondary_register_names_.emplace(S0, "s0"); // s0/fp
+ secondary_register_names_.emplace(S1, "s1");
+ secondary_register_names_.emplace(A0, "a0");
+ secondary_register_names_.emplace(A1, "a1");
+ secondary_register_names_.emplace(A2, "a2");
+ secondary_register_names_.emplace(A3, "a3");
+ secondary_register_names_.emplace(A4, "a4");
+ secondary_register_names_.emplace(A5, "a5");
+ secondary_register_names_.emplace(A6, "a6");
+ secondary_register_names_.emplace(A7, "a7");
+ secondary_register_names_.emplace(S2, "s2");
+ secondary_register_names_.emplace(S3, "s3");
+ secondary_register_names_.emplace(S4, "s4");
+ secondary_register_names_.emplace(S5, "s5");
+ secondary_register_names_.emplace(S6, "s6");
+ secondary_register_names_.emplace(S7, "s7");
+ secondary_register_names_.emplace(S8, "s8");
+ secondary_register_names_.emplace(S9, "s9");
+ secondary_register_names_.emplace(S10, "s10");
+ secondary_register_names_.emplace(S11, "s11");
+ secondary_register_names_.emplace(T3, "t3");
+ secondary_register_names_.emplace(T4, "t4");
+ secondary_register_names_.emplace(T5, "t5");
+ secondary_register_names_.emplace(T6, "t6");
}
}
void TearDown() override {
AssemblerTest::TearDown();
- STLDeleteElements(&registers_);
- STLDeleteElements(&fp_registers_);
}
- std::vector<riscv64::Riscv64Label> GetAddresses() override {
+ std::vector<Riscv64Label> GetAddresses() override {
UNIMPLEMENTED(FATAL) << "Feature not implemented yet";
UNREACHABLE();
}
- std::vector<riscv64::XRegister*> GetRegisters() override { return registers_; }
+ ArrayRef<const XRegister> GetRegisters() override {
+ static constexpr XRegister kXRegisters[] = {
+ Zero,
+ RA,
+ SP,
+ GP,
+ TP,
+ T0,
+ T1,
+ T2,
+ S0,
+ S1,
+ A0,
+ A1,
+ A2,
+ A3,
+ A4,
+ A5,
+ A6,
+ A7,
+ S2,
+ S3,
+ S4,
+ S5,
+ S6,
+ S7,
+ S8,
+ S9,
+ S10,
+ S11,
+ T3,
+ T4,
+ T5,
+ T6,
+ };
+ return ArrayRef<const XRegister>(kXRegisters);
+ }
- std::vector<riscv64::FRegister*> GetFPRegisters() override { return fp_registers_; }
+ ArrayRef<const FRegister> GetFPRegisters() override {
+ static constexpr FRegister kFRegisters[] = {
+ FT0,
+ FT1,
+ FT2,
+ FT3,
+ FT4,
+ FT5,
+ FT6,
+ FT7,
+ FS0,
+ FS1,
+ FA0,
+ FA1,
+ FA2,
+ FA3,
+ FA4,
+ FA5,
+ FA6,
+ FA7,
+ FS2,
+ FS3,
+ FS4,
+ FS5,
+ FS6,
+ FS7,
+ FS8,
+ FS9,
+ FS10,
+ FS11,
+ FT8,
+ FT9,
+ FT10,
+ FT11,
+ };
+ return ArrayRef<const FRegister>(kFRegisters);
+ }
- std::string GetSecondaryRegisterName(const riscv64::XRegister& reg) override {
+ std::string GetSecondaryRegisterName(const XRegister& reg) override {
CHECK(secondary_register_names_.find(reg) != secondary_register_names_.end());
return secondary_register_names_[reg];
}
@@ -213,15 +217,15 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
}
// Test various registers with a few small values.
// (Even Zero is an accepted register even if that does not really load the requested value.)
- for (XRegister* reg : GetRegisters()) {
+ for (XRegister reg : GetRegisters()) {
ScratchRegisterScope srs(GetAssembler());
- srs.ExcludeXRegister(*reg);
- std::string rd = GetRegisterName(*reg);
- emit_load_const(*reg, -1);
+ srs.ExcludeXRegister(reg);
+ std::string rd = GetRegisterName(reg);
+ emit_load_const(reg, -1);
expected += "li " + rd + ", -1\n";
- emit_load_const(*reg, 0);
+ emit_load_const(reg, 0);
expected += "li " + rd + ", 0\n";
- emit_load_const(*reg, 1);
+ emit_load_const(reg, 1);
expected += "li " + rd + ", 1\n";
}
// Test some significant values. Some may just repeat the tests above but other values
@@ -530,9 +534,9 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
PrintJalRd&& print_jalrd) {
std::string expected;
Riscv64Label label;
- for (XRegister* reg : GetRegisters()) {
- __ Jal(*reg, &label);
- expected += print_jalrd(*reg, label_name + "f");
+ for (XRegister reg : GetRegisters()) {
+ __ Jal(reg, &label);
+ expected += print_jalrd(reg, label_name + "f");
}
expected += EmitNops(gap_size);
__ Bind(&label);
@@ -550,9 +554,9 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
__ Bind(&label);
expected += label_name + ":\n";
expected += EmitNops(gap_size);
- for (XRegister* reg : GetRegisters()) {
- __ Jal(*reg, &label);
- expected += print_jalrd(*reg, label_name + "b");
+ for (XRegister reg : GetRegisters()) {
+ __ Jal(reg, &label);
+ expected += print_jalrd(reg, label_name + "b");
}
DriverStr(expected, test_name);
}
@@ -648,27 +652,27 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
large_values.push_back(0xfff);
std::string expected;
- for (XRegister* rd : GetRegisters()) {
- std::string rd_name = GetRegisterName(*rd);
+ for (XRegister rd : GetRegisters()) {
+ std::string rd_name = GetRegisterName(rd);
std::string addi_rd = ART_FORMAT("addi{} {}, ", suffix, rd_name);
std::string add_rd = ART_FORMAT("add{} {}, ", suffix, rd_name);
- for (XRegister* rs1 : GetRegisters()) {
+ for (XRegister rs1 : GetRegisters()) {
ScratchRegisterScope srs(GetAssembler());
- srs.ExcludeXRegister(*rs1);
- srs.ExcludeXRegister(*rd);
+ srs.ExcludeXRegister(rs1);
+ srs.ExcludeXRegister(rd);
- std::string rs1_name = GetRegisterName(*rs1);
- std::string tmp_name = GetRegisterName((*rs1 != TMP) ? TMP : TMP2);
+ std::string rs1_name = GetRegisterName(rs1);
+ std::string tmp_name = GetRegisterName((rs1 != TMP) ? TMP : TMP2);
std::string addi_tmp = ART_FORMAT("addi{} {}, ", suffix, tmp_name);
for (int64_t imm : kImm12s) {
- emit_op(*rd, *rs1, imm);
+ emit_op(rd, rs1, imm);
expected += ART_FORMAT("{}{}, {}\n", addi_rd, rs1_name, std::to_string(imm));
}
auto emit_simple_ops = [&](ArrayRef<const int64_t> imms, int64_t adjustment) {
for (int64_t imm : imms) {
- emit_op(*rd, *rs1, imm);
+ emit_op(rd, rs1, imm);
expected += ART_FORMAT("{}{}, {}\n", addi_tmp, rs1_name, std::to_string(adjustment));
expected +=
ART_FORMAT("{}{}, {}\n", addi_rd, tmp_name, std::to_string(imm - adjustment));
@@ -678,7 +682,7 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
emit_simple_ops(ArrayRef<const int64_t>(kSimpleNegativeValues), -0x800);
for (int64_t imm : large_values) {
- emit_op(*rd, *rs1, imm);
+ emit_op(rd, rs1, imm);
expected += ART_FORMAT("li {}, {}\n", tmp_name, std::to_string(imm));
expected += ART_FORMAT("{}{}, {}\n", add_rd, rs1_name, tmp_name);
}
@@ -721,24 +725,24 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
};
std::string expected;
- for (XRegister* rs1 : GetRegisters()) {
- XRegister tmp = get_temp(*rs1);
+ for (XRegister rs1 : GetRegisters()) {
+ XRegister tmp = get_temp(rs1);
if (tmp == kNoXRegister) {
continue; // Unsupported register combination.
}
std::string tmp_name = GetRegisterName(tmp);
ScratchRegisterScope srs(GetAssembler());
- srs.ExcludeXRegister(*rs1);
- std::string rs1_name = GetRegisterName(*rs1);
+ srs.ExcludeXRegister(rs1);
+ std::string rs1_name = GetRegisterName(rs1);
for (int64_t imm : kImm12s) {
- emit_op(*rs1, imm);
+ emit_op(rs1, imm);
expected += ART_FORMAT("{}, {}({})\n", head, std::to_string(imm), rs1_name);
}
auto emit_simple_ops = [&](ArrayRef<const int64_t> imms, int64_t adjustment) {
for (int64_t imm : imms) {
- emit_op(*rs1, imm);
+ emit_op(rs1, imm);
expected +=
ART_FORMAT("addi {}, {}, {}\n", tmp_name, rs1_name, std::to_string(adjustment));
expected += ART_FORMAT("{}, {}({})\n", head, std::to_string(imm - adjustment), tmp_name);
@@ -751,7 +755,7 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
emit_simple_ops(ArrayRef<const int64_t>(kSimpleNegativeOffsets), -0x800);
for (int64_t imm : kSplitOffsets) {
- emit_op(*rs1, imm);
+ emit_op(rs1, imm);
uint32_t imm20 = ((imm >> 12) + ((imm >> 11) & 1)) & 0xfffff;
int32_t small_offset = (imm & 0xfff) - ((imm & 0x800) << 1);
expected += ART_FORMAT("lui {}, {}\n", tmp_name, std::to_string(imm20));
@@ -760,7 +764,7 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
}
for (int64_t imm : kSpecialOffsets) {
- emit_op(*rs1, imm);
+ emit_op(rs1, imm);
expected += ART_FORMAT("lui {}, 0x80000\n", tmp_name);
expected +=
ART_FORMAT("addiw {}, {}, {}\n", tmp_name, tmp_name, std::to_string(imm - 0x80000000));
@@ -776,22 +780,22 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
void (Riscv64Assembler::*fn)(XRegister, XRegister, int32_t),
bool is_store) {
std::string expected;
- for (XRegister* rd : GetRegisters()) {
+ for (XRegister rd : GetRegisters()) {
ScratchRegisterScope srs(GetAssembler());
- srs.ExcludeXRegister(*rd);
+ srs.ExcludeXRegister(rd);
auto get_temp = [&](XRegister rs1) {
if (is_store) {
- return (rs1 != TMP && *rd != TMP)
+ return (rs1 != TMP && rd != TMP)
? TMP
- : (rs1 != TMP2 && *rd != TMP2) ? TMP2 : kNoXRegister;
+ : (rs1 != TMP2 && rd != TMP2) ? TMP2 : kNoXRegister;
} else {
return rs1 != TMP ? TMP : TMP2;
}
};
expected += RepeatLoadStoreArbitraryOffset(
- insn + " " + GetRegisterName(*rd),
+ insn + " " + GetRegisterName(rd),
get_temp,
- [&](XRegister rs1, int64_t offset) { (GetAssembler()->*fn)(*rd, rs1, offset); });
+ [&](XRegister rs1, int64_t offset) { (GetAssembler()->*fn)(rd, rs1, offset); });
}
DriverStr(expected, test_name);
}
@@ -800,11 +804,11 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
const std::string& insn,
void (Riscv64Assembler::*fn)(FRegister, XRegister, int32_t)) {
std::string expected;
- for (FRegister* rd : GetFPRegisters()) {
+ for (FRegister rd : GetFPRegisters()) {
expected += RepeatLoadStoreArbitraryOffset(
- insn + " " + GetFPRegName(*rd),
+ insn + " " + GetFPRegName(rd),
[&](XRegister rs1) { return rs1 != TMP ? TMP : TMP2; },
- [&](XRegister rs1, int64_t offset) { (GetAssembler()->*fn)(*rd, rs1, offset); });
+ [&](XRegister rs1, int64_t offset) { (GetAssembler()->*fn)(rd, rs1, offset); });
}
DriverStr(expected, test_name);
}
@@ -819,14 +823,14 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
"auipc " + rd_name + ", %pcrel_hi(" + label + "f)\n" +
load + " " + rd_name + ", %pcrel_lo(1b)(" + rd_name + ")\n";
};
- for (XRegister* reg : GetRegisters()) {
- if (*reg != Zero) {
- __ Loadw(*reg, narrow_literal);
- print_load("lw", *reg, "2");
- __ Loadwu(*reg, narrow_literal);
- print_load("lwu", *reg, "2");
- __ Loadd(*reg, wide_literal);
- print_load("ld", *reg, "3");
+ for (XRegister reg : GetRegisters()) {
+ if (reg != Zero) {
+ __ Loadw(reg, narrow_literal);
+ print_load("lw", reg, "2");
+ __ Loadwu(reg, narrow_literal);
+ print_load("lwu", reg, "2");
+ __ Loadd(reg, wide_literal);
+ print_load("ld", reg, "3");
}
}
std::string tmp = GetRegisterName(TMP);
@@ -836,11 +840,11 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
"auipc " + tmp + ", %pcrel_hi(" + label + "f)\n" +
load + " " + rd_name + ", %pcrel_lo(1b)(" + tmp + ")\n";
};
- for (FRegister* freg : GetFPRegisters()) {
- __ FLoadw(*freg, narrow_literal);
- print_fp_load("flw", *freg, "2");
- __ FLoadd(*freg, wide_literal);
- print_fp_load("fld", *freg, "3");
+ for (FRegister freg : GetFPRegisters()) {
+ __ FLoadw(freg, narrow_literal);
+ print_fp_load("flw", freg, "2");
+ __ FLoadd(freg, wide_literal);
+ print_fp_load("fld", freg, "3");
}
// All literal loads above emit 8 bytes of code. The narrow literal shall emit 4 bytes of code.
// If we do not add another instruction, we shall end up with padding before the long literal.
@@ -858,18 +862,18 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
const std::string& fmt) {
CHECK(f != nullptr);
std::string str;
- for (FRegister* reg1 : GetFPRegisters()) {
- for (FRegister* reg2 : GetFPRegisters()) {
- for (FRegister* reg3 : GetFPRegisters()) {
- for (FRegister* reg4 : GetFPRegisters()) {
+ for (FRegister reg1 : GetFPRegisters()) {
+ for (FRegister reg2 : GetFPRegisters()) {
+ for (FRegister reg3 : GetFPRegisters()) {
+ for (FRegister reg4 : GetFPRegisters()) {
for (FPRoundingMode rm : kRoundingModes) {
- (GetAssembler()->*f)(*reg1, *reg2, *reg3, *reg4, rm);
+ (GetAssembler()->*f)(reg1, reg2, reg3, reg4, rm);
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, GetFPRegName(*reg1), &base);
- ReplaceReg(REG2_TOKEN, GetFPRegName(*reg2), &base);
- ReplaceReg(REG3_TOKEN, GetFPRegName(*reg3), &base);
- ReplaceReg(REG4_TOKEN, GetFPRegName(*reg4), &base);
+ ReplaceReg(REG1_TOKEN, GetFPRegName(reg1), &base);
+ ReplaceReg(REG2_TOKEN, GetFPRegName(reg2), &base);
+ ReplaceReg(REG3_TOKEN, GetFPRegName(reg3), &base);
+ ReplaceReg(REG4_TOKEN, GetFPRegName(reg4), &base);
ReplaceRoundingMode(rm, &base);
str += base;
str += "\n";
@@ -886,16 +890,16 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
const std::string& fmt) {
CHECK(f != nullptr);
std::string str;
- for (FRegister* reg1 : GetFPRegisters()) {
- for (FRegister* reg2 : GetFPRegisters()) {
- for (FRegister* reg3 : GetFPRegisters()) {
+ for (FRegister reg1 : GetFPRegisters()) {
+ for (FRegister reg2 : GetFPRegisters()) {
+ for (FRegister reg3 : GetFPRegisters()) {
for (FPRoundingMode rm : kRoundingModes) {
- (GetAssembler()->*f)(*reg1, *reg2, *reg3, rm);
+ (GetAssembler()->*f)(reg1, reg2, reg3, rm);
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, GetFPRegName(*reg1), &base);
- ReplaceReg(REG2_TOKEN, GetFPRegName(*reg2), &base);
- ReplaceReg(REG3_TOKEN, GetFPRegName(*reg3), &base);
+ ReplaceReg(REG1_TOKEN, GetFPRegName(reg1), &base);
+ ReplaceReg(REG2_TOKEN, GetFPRegName(reg2), &base);
+ ReplaceReg(REG3_TOKEN, GetFPRegName(reg3), &base);
ReplaceRoundingMode(rm, &base);
str += base;
str += "\n";
@@ -909,21 +913,21 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
template <typename Reg1, typename Reg2>
std::string RepeatTemplatedRegistersRoundingMode(
void (Riscv64Assembler::*f)(Reg1, Reg2, FPRoundingMode),
- const std::vector<Reg1*>& reg1_registers,
- const std::vector<Reg2*>& reg2_registers,
+ ArrayRef<const Reg1> reg1_registers,
+ ArrayRef<const Reg2> reg2_registers,
std::string (Base::*GetName1)(const Reg1&),
std::string (Base::*GetName2)(const Reg2&),
const std::string& fmt) {
CHECK(f != nullptr);
std::string str;
- for (Reg1* reg1 : reg1_registers) {
- for (Reg2* reg2 : reg2_registers) {
+ for (Reg1 reg1 : reg1_registers) {
+ for (Reg2 reg2 : reg2_registers) {
for (FPRoundingMode rm : kRoundingModes) {
- (GetAssembler()->*f)(*reg1, *reg2, rm);
+ (GetAssembler()->*f)(reg1, reg2, rm);
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, (this->*GetName1)(*reg1), &base);
- ReplaceReg(REG2_TOKEN, (this->*GetName2)(*reg2), &base);
+ ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
+ ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
ReplaceRoundingMode(rm, &base);
str += base;
str += "\n";
@@ -971,14 +975,14 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
CHECK(f != nullptr);
std::vector<int64_t> imms = CreateImmediateValuesBits(2, /*as_uint=*/ true);
std::string str;
- for (XRegister* reg1 : GetRegisters()) {
- for (XRegister* reg2 : GetRegisters()) {
+ for (XRegister reg1 : GetRegisters()) {
+ for (XRegister reg2 : GetRegisters()) {
for (int64_t imm : imms) {
- (GetAssembler()->*f)(*reg1, *reg2, dchecked_integral_cast<uint32_t>(imm));
+ (GetAssembler()->*f)(reg1, reg2, dchecked_integral_cast<uint32_t>(imm));
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, GetRegisterName(*reg1), &base);
- ReplaceReg(REG2_TOKEN, GetRegisterName(*reg2), &base);
+ ReplaceReg(REG1_TOKEN, GetRegisterName(reg1), &base);
+ ReplaceReg(REG2_TOKEN, GetRegisterName(reg2), &base);
ReplaceAqRl(imm, &base);
str += base;
str += "\n";
@@ -993,16 +997,16 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
CHECK(f != nullptr);
std::vector<int64_t> imms = CreateImmediateValuesBits(2, /*as_uint=*/ true);
std::string str;
- for (XRegister* reg1 : GetRegisters()) {
- for (XRegister* reg2 : GetRegisters()) {
- for (XRegister* reg3 : GetRegisters()) {
+ for (XRegister reg1 : GetRegisters()) {
+ for (XRegister reg2 : GetRegisters()) {
+ for (XRegister reg3 : GetRegisters()) {
for (int64_t imm : imms) {
- (GetAssembler()->*f)(*reg1, *reg2, *reg3, dchecked_integral_cast<uint32_t>(imm));
+ (GetAssembler()->*f)(reg1, reg2, reg3, dchecked_integral_cast<uint32_t>(imm));
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, GetRegisterName(*reg1), &base);
- ReplaceReg(REG2_TOKEN, GetRegisterName(*reg2), &base);
- ReplaceReg(REG3_TOKEN, GetRegisterName(*reg3), &base);
+ ReplaceReg(REG1_TOKEN, GetRegisterName(reg1), &base);
+ ReplaceReg(REG2_TOKEN, GetRegisterName(reg2), &base);
+ ReplaceReg(REG3_TOKEN, GetRegisterName(reg3), &base);
ReplaceAqRl(imm, &base);
str += base;
str += "\n";
@@ -1018,15 +1022,15 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
CHECK(f != nullptr);
std::vector<int64_t> csrs = CreateImmediateValuesBits(12, /*as_uint=*/ true);
std::string str;
- for (XRegister* reg1 : GetRegisters()) {
+ for (XRegister reg1 : GetRegisters()) {
for (int64_t csr : csrs) {
- for (XRegister* reg2 : GetRegisters()) {
- (GetAssembler()->*f)(*reg1, dchecked_integral_cast<uint32_t>(csr), *reg2);
+ for (XRegister reg2 : GetRegisters()) {
+ (GetAssembler()->*f)(reg1, dchecked_integral_cast<uint32_t>(csr), reg2);
std::string base = fmt;
- ReplaceReg(REG1_TOKEN, GetRegisterName(*reg1), &base);
+ ReplaceReg(REG1_TOKEN, GetRegisterName(reg1), &base);
ReplaceCsrrImm(CSR_TOKEN, csr, &base);
- ReplaceReg(REG2_TOKEN, GetRegisterName(*reg2), &base);
+ ReplaceReg(REG2_TOKEN, GetRegisterName(reg2), &base);
str += base;
str += "\n";
}
@@ -1041,14 +1045,14 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
std::vector<int64_t> csrs = CreateImmediateValuesBits(12, /*as_uint=*/ true);
std::vector<int64_t> uimms = CreateImmediateValuesBits(2, /*as_uint=*/ true);
std::string str;
- for (XRegister* reg : GetRegisters()) {
+ for (XRegister reg : GetRegisters()) {
for (int64_t csr : csrs) {
for (int64_t uimm : uimms) {
(GetAssembler()->*f)(
- *reg, dchecked_integral_cast<uint32_t>(csr), dchecked_integral_cast<uint32_t>(uimm));
+ reg, dchecked_integral_cast<uint32_t>(csr), dchecked_integral_cast<uint32_t>(uimm));
std::string base = fmt;
- ReplaceReg(REG_TOKEN, GetRegisterName(*reg), &base);
+ ReplaceReg(REG_TOKEN, GetRegisterName(reg), &base);
ReplaceCsrrImm(CSR_TOKEN, csr, &base);
ReplaceCsrrImm(UIMM_TOKEN, uimm, &base);
str += base;
@@ -1065,12 +1069,12 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
EmitCssrX&& emit_csrrx) {
std::vector<int64_t> csrs = CreateImmediateValuesBits(12, /*as_uint=*/ true);
std::string expected;
- for (XRegister* reg : GetRegisters()) {
+ for (XRegister reg : GetRegisters()) {
for (int64_t csr : csrs) {
- emit_csrrx(dchecked_integral_cast<uint32_t>(csr), *reg);
+ emit_csrrx(dchecked_integral_cast<uint32_t>(csr), reg);
std::string base = fmt;
- ReplaceReg(REG_TOKEN, GetRegisterName(*reg), &base);
+ ReplaceReg(REG_TOKEN, GetRegisterName(reg), &base);
ReplaceCsrrImm(CSR_TOKEN, csr, &base);
expected += base;
expected += "\n";
@@ -1183,10 +1187,7 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
}
}
- std::vector<riscv64::XRegister*> registers_;
- std::map<riscv64::XRegister, std::string, RISCV64CpuRegisterCompare> secondary_register_names_;
-
- std::vector<riscv64::FRegister*> fp_registers_;
+ std::map<XRegister, std::string, RISCV64CpuRegisterCompare> secondary_register_names_;
std::unique_ptr<const Riscv64InstructionSetFeatures> instruction_set_features_;
};
@@ -1194,223 +1195,207 @@ class AssemblerRISCV64Test : public AssemblerTest<riscv64::Riscv64Assembler,
TEST_F(AssemblerRISCV64Test, Toolchain) { EXPECT_TRUE(CheckTools()); }
TEST_F(AssemblerRISCV64Test, Lui) {
- DriverStr(RepeatRIb(&riscv64::Riscv64Assembler::Lui, 20, "lui {reg}, {imm}"), "Lui");
+ DriverStr(RepeatRIb(&Riscv64Assembler::Lui, 20, "lui {reg}, {imm}"), "Lui");
}
TEST_F(AssemblerRISCV64Test, Auipc) {
- DriverStr(RepeatRIb(&riscv64::Riscv64Assembler::Auipc, 20, "auipc {reg}, {imm}"), "Auipc");
+ DriverStr(RepeatRIb(&Riscv64Assembler::Auipc, 20, "auipc {reg}, {imm}"), "Auipc");
}
TEST_F(AssemblerRISCV64Test, Jal) {
// TODO(riscv64): Change "-19, 2" to "-20, 1" for "C" Standard Extension.
- DriverStr(RepeatRIbS(&riscv64::Riscv64Assembler::Jal, -19, 2, "jal {reg}, {imm}\n"),
- "Jal");
+ DriverStr(RepeatRIbS(&Riscv64Assembler::Jal, -19, 2, "jal {reg}, {imm}\n"), "Jal");
}
TEST_F(AssemblerRISCV64Test, Jalr) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Jalr, -12, "jalr {reg1}, {reg2}, {imm}\n"),
- "Jalr");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Jalr, -12, "jalr {reg1}, {reg2}, {imm}\n"), "Jalr");
}
TEST_F(AssemblerRISCV64Test, Beq) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Beq, -11, 2, "beq {reg1}, {reg2}, {imm}\n"),
- "Beq");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Beq, -11, 2, "beq {reg1}, {reg2}, {imm}\n"), "Beq");
}
TEST_F(AssemblerRISCV64Test, Bne) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Bne, -11, 2, "bne {reg1}, {reg2}, {imm}\n"),
- "Bne");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Bne, -11, 2, "bne {reg1}, {reg2}, {imm}\n"), "Bne");
}
TEST_F(AssemblerRISCV64Test, Blt) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Blt, -11, 2, "blt {reg1}, {reg2}, {imm}\n"),
- "Blt");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Blt, -11, 2, "blt {reg1}, {reg2}, {imm}\n"), "Blt");
}
TEST_F(AssemblerRISCV64Test, Bge) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Bge, -11, 2, "bge {reg1}, {reg2}, {imm}\n"),
- "Bge");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Bge, -11, 2, "bge {reg1}, {reg2}, {imm}\n"), "Bge");
}
TEST_F(AssemblerRISCV64Test, Bltu) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Bltu, -11, 2, "bltu {reg1}, {reg2}, {imm}\n"),
- "Bltu");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Bltu, -11, 2, "bltu {reg1}, {reg2}, {imm}\n"), "Bltu");
}
TEST_F(AssemblerRISCV64Test, Bgeu) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Bgeu, -11, 2, "bgeu {reg1}, {reg2}, {imm}\n"),
- "Bgeu");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Bgeu, -11, 2, "bgeu {reg1}, {reg2}, {imm}\n"), "Bgeu");
}
TEST_F(AssemblerRISCV64Test, Lb) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Lb, -12, "lb {reg1}, {imm}({reg2})"), "Lb");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Lb, -12, "lb {reg1}, {imm}({reg2})"), "Lb");
}
TEST_F(AssemblerRISCV64Test, Lh) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Lh, -12, "lh {reg1}, {imm}({reg2})"), "Lh");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Lh, -12, "lh {reg1}, {imm}({reg2})"), "Lh");
}
TEST_F(AssemblerRISCV64Test, Lw) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Lw, -12, "lw {reg1}, {imm}({reg2})"), "Lw");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Lw, -12, "lw {reg1}, {imm}({reg2})"), "Lw");
}
TEST_F(AssemblerRISCV64Test, Ld) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Ld, -12, "ld {reg1}, {imm}({reg2})"), "Ld");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Ld, -12, "ld {reg1}, {imm}({reg2})"), "Ld");
}
TEST_F(AssemblerRISCV64Test, Lbu) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Lbu, -12, "lbu {reg1}, {imm}({reg2})"), "Lbu");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Lbu, -12, "lbu {reg1}, {imm}({reg2})"), "Lbu");
}
TEST_F(AssemblerRISCV64Test, Lhu) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Lhu, -12, "lhu {reg1}, {imm}({reg2})"), "Lhu");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Lhu, -12, "lhu {reg1}, {imm}({reg2})"), "Lhu");
}
TEST_F(AssemblerRISCV64Test, Lwu) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Lwu, -12, "lwu {reg1}, {imm}({reg2})"), "Lwu");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Lwu, -12, "lwu {reg1}, {imm}({reg2})"), "Lwu");
}
TEST_F(AssemblerRISCV64Test, Sb) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Sb, -12, "sb {reg1}, {imm}({reg2})"), "Sb");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Sb, -12, "sb {reg1}, {imm}({reg2})"), "Sb");
}
TEST_F(AssemblerRISCV64Test, Sh) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Sh, -12, "sh {reg1}, {imm}({reg2})"), "Sh");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Sh, -12, "sh {reg1}, {imm}({reg2})"), "Sh");
}
TEST_F(AssemblerRISCV64Test, Sw) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Sw, -12, "sw {reg1}, {imm}({reg2})"), "Sw");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Sw, -12, "sw {reg1}, {imm}({reg2})"), "Sw");
}
TEST_F(AssemblerRISCV64Test, Sd) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Sd, -12, "sd {reg1}, {imm}({reg2})"), "Sd");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Sd, -12, "sd {reg1}, {imm}({reg2})"), "Sd");
}
TEST_F(AssemblerRISCV64Test, Addi) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Addi, -12, "addi {reg1}, {reg2}, {imm}"),
- "Addi");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Addi, -12, "addi {reg1}, {reg2}, {imm}"), "Addi");
}
TEST_F(AssemblerRISCV64Test, Slti) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Slti, -12, "slti {reg1}, {reg2}, {imm}"),
- "Slti");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Slti, -12, "slti {reg1}, {reg2}, {imm}"), "Slti");
}
TEST_F(AssemblerRISCV64Test, Sltiu) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Sltiu, -12, "sltiu {reg1}, {reg2}, {imm}"),
- "Sltiu");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Sltiu, -12, "sltiu {reg1}, {reg2}, {imm}"), "Sltiu");
}
TEST_F(AssemblerRISCV64Test, Xori) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Xori, 11, "xori {reg1}, {reg2}, {imm}"), "Xori");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Xori, 11, "xori {reg1}, {reg2}, {imm}"), "Xori");
}
TEST_F(AssemblerRISCV64Test, Ori) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Ori, -12, "ori {reg1}, {reg2}, {imm}"), "Ori");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Ori, -12, "ori {reg1}, {reg2}, {imm}"), "Ori");
}
TEST_F(AssemblerRISCV64Test, Andi) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Andi, -12, "andi {reg1}, {reg2}, {imm}"),
- "Andi");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Andi, -12, "andi {reg1}, {reg2}, {imm}"), "Andi");
}
TEST_F(AssemblerRISCV64Test, Slli) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Slli, 6, "slli {reg1}, {reg2}, {imm}"), "Slli");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Slli, 6, "slli {reg1}, {reg2}, {imm}"), "Slli");
}
TEST_F(AssemblerRISCV64Test, Srli) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Srli, 6, "srli {reg1}, {reg2}, {imm}"), "Srli");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Srli, 6, "srli {reg1}, {reg2}, {imm}"), "Srli");
}
TEST_F(AssemblerRISCV64Test, Srai) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Srai, 6, "srai {reg1}, {reg2}, {imm}"), "Srai");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Srai, 6, "srai {reg1}, {reg2}, {imm}"), "Srai");
}
TEST_F(AssemblerRISCV64Test, Add) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Add, "add {reg1}, {reg2}, {reg3}"), "Add");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Add, "add {reg1}, {reg2}, {reg3}"), "Add");
}
TEST_F(AssemblerRISCV64Test, Sub) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Sub, "sub {reg1}, {reg2}, {reg3}"), "Sub");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Sub, "sub {reg1}, {reg2}, {reg3}"), "Sub");
}
TEST_F(AssemblerRISCV64Test, Slt) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Slt, "slt {reg1}, {reg2}, {reg3}"), "Slt");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Slt, "slt {reg1}, {reg2}, {reg3}"), "Slt");
}
TEST_F(AssemblerRISCV64Test, Sltu) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Sltu, "sltu {reg1}, {reg2}, {reg3}"), "Sltu");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Sltu, "sltu {reg1}, {reg2}, {reg3}"), "Sltu");
}
TEST_F(AssemblerRISCV64Test, Xor) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Xor, "xor {reg1}, {reg2}, {reg3}"), "Xor");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Xor, "xor {reg1}, {reg2}, {reg3}"), "Xor");
}
TEST_F(AssemblerRISCV64Test, Or) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Or, "or {reg1}, {reg2}, {reg3}"), "Or");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Or, "or {reg1}, {reg2}, {reg3}"), "Or");
}
TEST_F(AssemblerRISCV64Test, And) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::And, "and {reg1}, {reg2}, {reg3}"), "And");
+ DriverStr(RepeatRRR(&Riscv64Assembler::And, "and {reg1}, {reg2}, {reg3}"), "And");
}
TEST_F(AssemblerRISCV64Test, Sll) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Sll, "sll {reg1}, {reg2}, {reg3}"), "Sll");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Sll, "sll {reg1}, {reg2}, {reg3}"), "Sll");
}
TEST_F(AssemblerRISCV64Test, Srl) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Srl, "srl {reg1}, {reg2}, {reg3}"), "Srl");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Srl, "srl {reg1}, {reg2}, {reg3}"), "Srl");
}
TEST_F(AssemblerRISCV64Test, Sra) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Sra, "sra {reg1}, {reg2}, {reg3}"), "Sra");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Sra, "sra {reg1}, {reg2}, {reg3}"), "Sra");
}
TEST_F(AssemblerRISCV64Test, Addiw) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Addiw, -12, "addiw {reg1}, {reg2}, {imm}"),
- "Addiw");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Addiw, -12, "addiw {reg1}, {reg2}, {imm}"), "Addiw");
}
TEST_F(AssemblerRISCV64Test, Slliw) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Slliw, 5, "slliw {reg1}, {reg2}, {imm}"),
- "Slliw");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Slliw, 5, "slliw {reg1}, {reg2}, {imm}"), "Slliw");
}
TEST_F(AssemblerRISCV64Test, Srliw) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Srliw, 5, "srliw {reg1}, {reg2}, {imm}"),
- "Srliw");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Srliw, 5, "srliw {reg1}, {reg2}, {imm}"), "Srliw");
}
TEST_F(AssemblerRISCV64Test, Sraiw) {
- DriverStr(RepeatRRIb(&riscv64::Riscv64Assembler::Sraiw, 5, "sraiw {reg1}, {reg2}, {imm}"),
- "Sraiw");
+ DriverStr(RepeatRRIb(&Riscv64Assembler::Sraiw, 5, "sraiw {reg1}, {reg2}, {imm}"), "Sraiw");
}
TEST_F(AssemblerRISCV64Test, Addw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Addw, "addw {reg1}, {reg2}, {reg3}"), "Addw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Addw, "addw {reg1}, {reg2}, {reg3}"), "Addw");
}
TEST_F(AssemblerRISCV64Test, Subw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Subw, "subw {reg1}, {reg2}, {reg3}"), "Subw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Subw, "subw {reg1}, {reg2}, {reg3}"), "Subw");
}
TEST_F(AssemblerRISCV64Test, Sllw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Sllw, "sllw {reg1}, {reg2}, {reg3}"), "Sllw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Sllw, "sllw {reg1}, {reg2}, {reg3}"), "Sllw");
}
TEST_F(AssemblerRISCV64Test, Srlw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Srlw, "srlw {reg1}, {reg2}, {reg3}"), "Srlw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Srlw, "srlw {reg1}, {reg2}, {reg3}"), "Srlw");
}
TEST_F(AssemblerRISCV64Test, Sraw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Sraw, "sraw {reg1}, {reg2}, {reg3}"), "Sraw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Sraw, "sraw {reg1}, {reg2}, {reg3}"), "Sraw");
}
TEST_F(AssemblerRISCV64Test, Ecall) {
@@ -1469,499 +1454,455 @@ TEST_F(AssemblerRISCV64Test, FenceI) {
}
TEST_F(AssemblerRISCV64Test, Mul) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Mul, "mul {reg1}, {reg2}, {reg3}"), "Mul");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Mul, "mul {reg1}, {reg2}, {reg3}"), "Mul");
}
TEST_F(AssemblerRISCV64Test, Mulh) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Mulh, "mulh {reg1}, {reg2}, {reg3}"), "Mulh");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Mulh, "mulh {reg1}, {reg2}, {reg3}"), "Mulh");
}
TEST_F(AssemblerRISCV64Test, Mulhsu) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Mulhsu, "mulhsu {reg1}, {reg2}, {reg3}"), "Mulhsu");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Mulhsu, "mulhsu {reg1}, {reg2}, {reg3}"), "Mulhsu");
}
TEST_F(AssemblerRISCV64Test, Mulhu) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Mulhu, "mulhu {reg1}, {reg2}, {reg3}"), "Mulhu");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Mulhu, "mulhu {reg1}, {reg2}, {reg3}"), "Mulhu");
}
TEST_F(AssemblerRISCV64Test, Div) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Div, "div {reg1}, {reg2}, {reg3}"), "Div");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Div, "div {reg1}, {reg2}, {reg3}"), "Div");
}
TEST_F(AssemblerRISCV64Test, Divu) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Divu, "divu {reg1}, {reg2}, {reg3}"), "Divu");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Divu, "divu {reg1}, {reg2}, {reg3}"), "Divu");
}
TEST_F(AssemblerRISCV64Test, Rem) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Rem, "rem {reg1}, {reg2}, {reg3}"), "Rem");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Rem, "rem {reg1}, {reg2}, {reg3}"), "Rem");
}
TEST_F(AssemblerRISCV64Test, Remu) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Remu, "remu {reg1}, {reg2}, {reg3}"), "Remu");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Remu, "remu {reg1}, {reg2}, {reg3}"), "Remu");
}
TEST_F(AssemblerRISCV64Test, Mulw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Mulw, "mulw {reg1}, {reg2}, {reg3}"), "Mulw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Mulw, "mulw {reg1}, {reg2}, {reg3}"), "Mulw");
}
TEST_F(AssemblerRISCV64Test, Divw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Divw, "divw {reg1}, {reg2}, {reg3}"), "Divw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Divw, "divw {reg1}, {reg2}, {reg3}"), "Divw");
}
TEST_F(AssemblerRISCV64Test, Divuw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Divuw, "divuw {reg1}, {reg2}, {reg3}"), "Divuw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Divuw, "divuw {reg1}, {reg2}, {reg3}"), "Divuw");
}
TEST_F(AssemblerRISCV64Test, Remw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Remw, "remw {reg1}, {reg2}, {reg3}"), "Remw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Remw, "remw {reg1}, {reg2}, {reg3}"), "Remw");
}
TEST_F(AssemblerRISCV64Test, Remuw) {
- DriverStr(RepeatRRR(&riscv64::Riscv64Assembler::Remuw, "remuw {reg1}, {reg2}, {reg3}"), "Remuw");
+ DriverStr(RepeatRRR(&Riscv64Assembler::Remuw, "remuw {reg1}, {reg2}, {reg3}"), "Remuw");
}
TEST_F(AssemblerRISCV64Test, LrW) {
- DriverStr(RepeatRRAqRl(&riscv64::Riscv64Assembler::LrW, "lr.w{aqrl} {reg1}, ({reg2})"), "LrW");
+ DriverStr(RepeatRRAqRl(&Riscv64Assembler::LrW, "lr.w{aqrl} {reg1}, ({reg2})"), "LrW");
}
TEST_F(AssemblerRISCV64Test, LrD) {
- DriverStr(RepeatRRAqRl(&riscv64::Riscv64Assembler::LrD, "lr.d{aqrl} {reg1}, ({reg2})"), "LrD");
+ DriverStr(RepeatRRAqRl(&Riscv64Assembler::LrD, "lr.d{aqrl} {reg1}, ({reg2})"), "LrD");
}
TEST_F(AssemblerRISCV64Test, ScW) {
- DriverStr(RepeatRRRAqRl(&riscv64::Riscv64Assembler::ScW, "sc.w{aqrl} {reg1}, {reg2}, ({reg3})"),
- "ScW");
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::ScW, "sc.w{aqrl} {reg1}, {reg2}, ({reg3})"), "ScW");
}
TEST_F(AssemblerRISCV64Test, ScD) {
- DriverStr(RepeatRRRAqRl(&riscv64::Riscv64Assembler::ScD, "sc.d{aqrl} {reg1}, {reg2}, ({reg3})"),
- "ScD");
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::ScD, "sc.d{aqrl} {reg1}, {reg2}, ({reg3})"), "ScD");
}
TEST_F(AssemblerRISCV64Test, AmoSwapW) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoSwapW, "amoswap.w{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoSwapW, "amoswap.w{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoSwapW");
}
TEST_F(AssemblerRISCV64Test, AmoSwapD) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoSwapD, "amoswap.d{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoSwapD, "amoswap.d{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoSwapD");
}
TEST_F(AssemblerRISCV64Test, AmoAddW) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoAddW, "amoadd.w{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoAddW, "amoadd.w{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoAddW");
}
TEST_F(AssemblerRISCV64Test, AmoAddD) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoAddD, "amoadd.d{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoAddD, "amoadd.d{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoAddD");
}
TEST_F(AssemblerRISCV64Test, AmoXorW) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoXorW, "amoxor.w{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoXorW, "amoxor.w{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoXorW");
}
TEST_F(AssemblerRISCV64Test, AmoXorD) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoXorD, "amoxor.d{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoXorD, "amoxor.d{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoXorD");
}
TEST_F(AssemblerRISCV64Test, AmoAndW) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoAndW, "amoand.w{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoAndW, "amoand.w{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoAndW");
}
TEST_F(AssemblerRISCV64Test, AmoAndD) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoAndD, "amoand.d{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoAndD, "amoand.d{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoAndD");
}
TEST_F(AssemblerRISCV64Test, AmoOrW) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoOrW, "amoor.w{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoOrW, "amoor.w{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoOrW");
}
TEST_F(AssemblerRISCV64Test, AmoOrD) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoOrD, "amoor.d{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoOrD, "amoor.d{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoOrD");
}
TEST_F(AssemblerRISCV64Test, AmoMinW) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoMinW, "amomin.w{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMinW, "amomin.w{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoMinW");
}
TEST_F(AssemblerRISCV64Test, AmoMinD) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoMinD, "amomin.d{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMinD, "amomin.d{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoMinD");
}
TEST_F(AssemblerRISCV64Test, AmoMaxW) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoMaxW, "amomax.w{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMaxW, "amomax.w{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoMaxW");
}
TEST_F(AssemblerRISCV64Test, AmoMaxD) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoMaxD, "amomax.d{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMaxD, "amomax.d{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoMaxD");
}
TEST_F(AssemblerRISCV64Test, AmoMinuW) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoMinuW, "amominu.w{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMinuW, "amominu.w{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoMinuW");
}
TEST_F(AssemblerRISCV64Test, AmoMinuD) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoMinuD, "amominu.d{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMinuD, "amominu.d{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoMinuD");
}
TEST_F(AssemblerRISCV64Test, AmoMaxuW) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoMaxuW, "amomaxu.w{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMaxuW, "amomaxu.w{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoMaxuW");
}
TEST_F(AssemblerRISCV64Test, AmoMaxuD) {
- DriverStr(RepeatRRRAqRl(
- &riscv64::Riscv64Assembler::AmoMaxuD, "amomaxu.d{aqrl} {reg1}, {reg2}, ({reg3})"),
+ DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMaxuD, "amomaxu.d{aqrl} {reg1}, {reg2}, ({reg3})"),
"AmoMaxuD");
}
TEST_F(AssemblerRISCV64Test, Csrrw) {
- DriverStr(RepeatCsrrX(&riscv64::Riscv64Assembler::Csrrw, "csrrw {reg1}, {csr}, {reg2}"),
- "Csrrw");
+ DriverStr(RepeatCsrrX(&Riscv64Assembler::Csrrw, "csrrw {reg1}, {csr}, {reg2}"), "Csrrw");
}
TEST_F(AssemblerRISCV64Test, Csrrs) {
- DriverStr(RepeatCsrrX(&riscv64::Riscv64Assembler::Csrrs, "csrrs {reg1}, {csr}, {reg2}"),
- "Csrrs");
+ DriverStr(RepeatCsrrX(&Riscv64Assembler::Csrrs, "csrrs {reg1}, {csr}, {reg2}"), "Csrrs");
}
TEST_F(AssemblerRISCV64Test, Csrrc) {
- DriverStr(RepeatCsrrX(&riscv64::Riscv64Assembler::Csrrc, "csrrc {reg1}, {csr}, {reg2}"),
- "Csrrc");
+ DriverStr(RepeatCsrrX(&Riscv64Assembler::Csrrc, "csrrc {reg1}, {csr}, {reg2}"), "Csrrc");
}
TEST_F(AssemblerRISCV64Test, Csrrwi) {
- DriverStr(RepeatCsrrXi(&riscv64::Riscv64Assembler::Csrrwi, "csrrwi {reg}, {csr}, {uimm}"),
- "Csrrwi");
+ DriverStr(RepeatCsrrXi(&Riscv64Assembler::Csrrwi, "csrrwi {reg}, {csr}, {uimm}"), "Csrrwi");
}
TEST_F(AssemblerRISCV64Test, Csrrsi) {
- DriverStr(RepeatCsrrXi(&riscv64::Riscv64Assembler::Csrrsi, "csrrsi {reg}, {csr}, {uimm}"),
- "Csrrsi");
+ DriverStr(RepeatCsrrXi(&Riscv64Assembler::Csrrsi, "csrrsi {reg}, {csr}, {uimm}"), "Csrrsi");
}
TEST_F(AssemblerRISCV64Test, Csrrci) {
- DriverStr(RepeatCsrrXi(&riscv64::Riscv64Assembler::Csrrci, "csrrci {reg}, {csr}, {uimm}"),
- "Csrrci");
+ DriverStr(RepeatCsrrXi(&Riscv64Assembler::Csrrci, "csrrci {reg}, {csr}, {uimm}"), "Csrrci");
}
TEST_F(AssemblerRISCV64Test, FLw) {
- DriverStr(RepeatFRIb(&riscv64::Riscv64Assembler::FLw, -12, "flw {reg1}, {imm}({reg2})"), "FLw");
+ DriverStr(RepeatFRIb(&Riscv64Assembler::FLw, -12, "flw {reg1}, {imm}({reg2})"), "FLw");
}
TEST_F(AssemblerRISCV64Test, FLd) {
- DriverStr(RepeatFRIb(&riscv64::Riscv64Assembler::FLd, -12, "fld {reg1}, {imm}({reg2})"), "FLw");
+ DriverStr(RepeatFRIb(&Riscv64Assembler::FLd, -12, "fld {reg1}, {imm}({reg2})"), "FLw");
}
TEST_F(AssemblerRISCV64Test, FSw) {
- DriverStr(RepeatFRIb(&riscv64::Riscv64Assembler::FSw, 2, "fsw {reg1}, {imm}({reg2})"), "FSw");
+ DriverStr(RepeatFRIb(&Riscv64Assembler::FSw, 2, "fsw {reg1}, {imm}({reg2})"), "FSw");
}
TEST_F(AssemblerRISCV64Test, FSd) {
- DriverStr(RepeatFRIb(&riscv64::Riscv64Assembler::FSd, 2, "fsd {reg1}, {imm}({reg2})"), "FSd");
+ DriverStr(RepeatFRIb(&Riscv64Assembler::FSd, 2, "fsd {reg1}, {imm}({reg2})"), "FSd");
}
TEST_F(AssemblerRISCV64Test, FMAddS) {
- DriverStr(RepeatFFFFRoundingMode(&riscv64::Riscv64Assembler::FMAddS,
+ DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FMAddS,
"fmadd.s {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FMAddS");
}
TEST_F(AssemblerRISCV64Test, FMAddS_Default) {
- DriverStr(RepeatFFFF(&riscv64::Riscv64Assembler::FMAddS,
- "fmadd.s {reg1}, {reg2}, {reg3}, {reg4}"), "FMAddS_Default");
+ DriverStr(RepeatFFFF(&Riscv64Assembler::FMAddS, "fmadd.s {reg1}, {reg2}, {reg3}, {reg4}"),
+ "FMAddS_Default");
}
TEST_F(AssemblerRISCV64Test, FMAddD) {
- DriverStr(RepeatFFFFRoundingMode(&riscv64::Riscv64Assembler::FMAddD,
+ DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FMAddD,
"fmadd.d {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FMAddD");
}
TEST_F(AssemblerRISCV64Test, FMAddD_Default) {
- DriverStr(RepeatFFFF(&riscv64::Riscv64Assembler::FMAddD,
- "fmadd.d {reg1}, {reg2}, {reg3}, {reg4}"), "FMAddD_Default");
+ DriverStr(RepeatFFFF(&Riscv64Assembler::FMAddD, "fmadd.d {reg1}, {reg2}, {reg3}, {reg4}"),
+ "FMAddD_Default");
}
TEST_F(AssemblerRISCV64Test, FMSubS) {
- DriverStr(RepeatFFFFRoundingMode(&riscv64::Riscv64Assembler::FMSubS,
+ DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FMSubS,
"fmsub.s {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FMSubS");
}
TEST_F(AssemblerRISCV64Test, FMSubS_Default) {
- DriverStr(RepeatFFFF(&riscv64::Riscv64Assembler::FMSubS,
- "fmsub.s {reg1}, {reg2}, {reg3}, {reg4}"), "FMSubS_Default");
+ DriverStr(RepeatFFFF(&Riscv64Assembler::FMSubS, "fmsub.s {reg1}, {reg2}, {reg3}, {reg4}"),
+ "FMSubS_Default");
}
TEST_F(AssemblerRISCV64Test, FMSubD) {
- DriverStr(RepeatFFFFRoundingMode(&riscv64::Riscv64Assembler::FMSubD,
+ DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FMSubD,
"fmsub.d {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FMSubD");
}
TEST_F(AssemblerRISCV64Test, FMSubD_Default) {
- DriverStr(RepeatFFFF(&riscv64::Riscv64Assembler::FMSubD,
- "fmsub.d {reg1}, {reg2}, {reg3}, {reg4}"), "FMSubD_Default");
+ DriverStr(RepeatFFFF(&Riscv64Assembler::FMSubD, "fmsub.d {reg1}, {reg2}, {reg3}, {reg4}"),
+ "FMSubD_Default");
}
TEST_F(AssemblerRISCV64Test, FNMSubS) {
- DriverStr(RepeatFFFFRoundingMode(&riscv64::Riscv64Assembler::FNMSubS,
+ DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FNMSubS,
"fnmsub.s {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FNMSubS");
}
TEST_F(AssemblerRISCV64Test, FNMSubS_Default) {
- DriverStr(RepeatFFFF(&riscv64::Riscv64Assembler::FNMSubS,
- "fnmsub.s {reg1}, {reg2}, {reg3}, {reg4}"), "FNMSubS_Default");
+ DriverStr(RepeatFFFF(&Riscv64Assembler::FNMSubS, "fnmsub.s {reg1}, {reg2}, {reg3}, {reg4}"),
+ "FNMSubS_Default");
}
TEST_F(AssemblerRISCV64Test, FNMSubD) {
- DriverStr(RepeatFFFFRoundingMode(&riscv64::Riscv64Assembler::FNMSubD,
+ DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FNMSubD,
"fnmsub.d {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FNMSubD");
}
TEST_F(AssemblerRISCV64Test, FNMSubD_Default) {
- DriverStr(RepeatFFFF(&riscv64::Riscv64Assembler::FNMSubD,
- "fnmsub.d {reg1}, {reg2}, {reg3}, {reg4}"), "FNMSubD_Default");
+ DriverStr(RepeatFFFF(&Riscv64Assembler::FNMSubD, "fnmsub.d {reg1}, {reg2}, {reg3}, {reg4}"),
+ "FNMSubD_Default");
}
TEST_F(AssemblerRISCV64Test, FNMAddS) {
- DriverStr(RepeatFFFFRoundingMode(&riscv64::Riscv64Assembler::FNMAddS,
+ DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FNMAddS,
"fnmadd.s {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FNMAddS");
}
TEST_F(AssemblerRISCV64Test, FNMAddS_Default) {
- DriverStr(RepeatFFFF(&riscv64::Riscv64Assembler::FNMAddS,
- "fnmadd.s {reg1}, {reg2}, {reg3}, {reg4}"), "FNMAddS_Default");
+ DriverStr(RepeatFFFF(&Riscv64Assembler::FNMAddS, "fnmadd.s {reg1}, {reg2}, {reg3}, {reg4}"),
+ "FNMAddS_Default");
}
TEST_F(AssemblerRISCV64Test, FNMAddD) {
- DriverStr(RepeatFFFFRoundingMode(&riscv64::Riscv64Assembler::FNMAddD,
+ DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FNMAddD,
"fnmadd.d {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FNMAddD");
}
TEST_F(AssemblerRISCV64Test, FNMAddD_Default) {
- DriverStr(RepeatFFFF(&riscv64::Riscv64Assembler::FNMAddD,
- "fnmadd.d {reg1}, {reg2}, {reg3}, {reg4}"), "FNMAddD_Default");
+ DriverStr(RepeatFFFF(&Riscv64Assembler::FNMAddD, "fnmadd.d {reg1}, {reg2}, {reg3}, {reg4}"),
+ "FNMAddD_Default");
}
TEST_F(AssemblerRISCV64Test, FAddS) {
- DriverStr(RepeatFFFRoundingMode(&riscv64::Riscv64Assembler::FAddS,
- "fadd.s {reg1}, {reg2}, {reg3}, {rm}"), "FAddS");
+ DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FAddS, "fadd.s {reg1}, {reg2}, {reg3}, {rm}"),
+ "FAddS");
}
TEST_F(AssemblerRISCV64Test, FAddS_Default) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FAddS,
- "fadd.s {reg1}, {reg2}, {reg3}"), "FAddS_Default");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FAddS, "fadd.s {reg1}, {reg2}, {reg3}"), "FAddS_Default");
}
TEST_F(AssemblerRISCV64Test, FAddD) {
- DriverStr(RepeatFFFRoundingMode(&riscv64::Riscv64Assembler::FAddD,
- "fadd.d {reg1}, {reg2}, {reg3}, {rm}"), "FAddD");
+ DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FAddD, "fadd.d {reg1}, {reg2}, {reg3}, {rm}"),
+ "FAddD");
}
TEST_F(AssemblerRISCV64Test, FAddD_Default) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FAddD,
- "fadd.d {reg1}, {reg2}, {reg3}"), "FAddD_Default");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FAddD, "fadd.d {reg1}, {reg2}, {reg3}"), "FAddD_Default");
}
TEST_F(AssemblerRISCV64Test, FSubS) {
- DriverStr(RepeatFFFRoundingMode(&riscv64::Riscv64Assembler::FSubS,
- "fsub.s {reg1}, {reg2}, {reg3}, {rm}"), "FSubS");
+ DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FSubS, "fsub.s {reg1}, {reg2}, {reg3}, {rm}"),
+ "FSubS");
}
TEST_F(AssemblerRISCV64Test, FSubS_Default) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FSubS,
- "fsub.s {reg1}, {reg2}, {reg3}"), "FSubS_Default");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FSubS, "fsub.s {reg1}, {reg2}, {reg3}"), "FSubS_Default");
}
TEST_F(AssemblerRISCV64Test, FSubD) {
- DriverStr(RepeatFFFRoundingMode(&riscv64::Riscv64Assembler::FSubD,
- "fsub.d {reg1}, {reg2}, {reg3}, {rm}"), "FSubD");
+ DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FSubD, "fsub.d {reg1}, {reg2}, {reg3}, {rm}"),
+ "FSubD");
}
TEST_F(AssemblerRISCV64Test, FSubD_Default) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FSubD,
- "fsub.d {reg1}, {reg2}, {reg3}"), "FSubD_Default");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FSubD, "fsub.d {reg1}, {reg2}, {reg3}"), "FSubD_Default");
}
TEST_F(AssemblerRISCV64Test, FMulS) {
- DriverStr(RepeatFFFRoundingMode(&riscv64::Riscv64Assembler::FMulS,
- "fmul.s {reg1}, {reg2}, {reg3}, {rm}"), "FMulS");
+ DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FMulS, "fmul.s {reg1}, {reg2}, {reg3}, {rm}"),
+ "FMulS");
}
TEST_F(AssemblerRISCV64Test, FMulS_Default) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FMulS,
- "fmul.s {reg1}, {reg2}, {reg3}"), "FMulS_Default");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FMulS, "fmul.s {reg1}, {reg2}, {reg3}"), "FMulS_Default");
}
TEST_F(AssemblerRISCV64Test, FMulD) {
- DriverStr(RepeatFFFRoundingMode(&riscv64::Riscv64Assembler::FMulD,
- "fmul.d {reg1}, {reg2}, {reg3}, {rm}"), "FMulD");
+ DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FMulD, "fmul.d {reg1}, {reg2}, {reg3}, {rm}"),
+ "FMulD");
}
TEST_F(AssemblerRISCV64Test, FMulD_Default) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FMulD,
- "fmul.d {reg1}, {reg2}, {reg3}"), "FMulD_Default");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FMulD, "fmul.d {reg1}, {reg2}, {reg3}"), "FMulD_Default");
}
TEST_F(AssemblerRISCV64Test, FDivS) {
- DriverStr(RepeatFFFRoundingMode(&riscv64::Riscv64Assembler::FDivS,
- "fdiv.s {reg1}, {reg2}, {reg3}, {rm}"), "FDivS");
+ DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FDivS, "fdiv.s {reg1}, {reg2}, {reg3}, {rm}"),
+ "FDivS");
}
TEST_F(AssemblerRISCV64Test, FDivS_Default) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FDivS,
- "fdiv.s {reg1}, {reg2}, {reg3}"), "FDivS_Default");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FDivS, "fdiv.s {reg1}, {reg2}, {reg3}"), "FDivS_Default");
}
TEST_F(AssemblerRISCV64Test, FDivD) {
- DriverStr(RepeatFFFRoundingMode(&riscv64::Riscv64Assembler::FDivD,
- "fdiv.d {reg1}, {reg2}, {reg3}, {rm}"), "FDivD");
+ DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FDivD, "fdiv.d {reg1}, {reg2}, {reg3}, {rm}"),
+ "FDivD");
}
TEST_F(AssemblerRISCV64Test, FDivD_Default) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FDivD,
- "fdiv.d {reg1}, {reg2}, {reg3}"), "FDivD_Default");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FDivD, "fdiv.d {reg1}, {reg2}, {reg3}"), "FDivD_Default");
}
TEST_F(AssemblerRISCV64Test, FSqrtS) {
- DriverStr(RepeatFFRoundingMode(&riscv64::Riscv64Assembler::FSqrtS,
- "fsqrt.s {reg1}, {reg2}, {rm}"), "FSqrtS");
+ DriverStr(RepeatFFRoundingMode(&Riscv64Assembler::FSqrtS, "fsqrt.s {reg1}, {reg2}, {rm}"),
+ "FSqrtS");
}
TEST_F(AssemblerRISCV64Test, FSqrtS_Default) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FSqrtS,
- "fsqrt.s {reg1}, {reg2}"), "FSqrtS_Default");
+ DriverStr(RepeatFF(&Riscv64Assembler::FSqrtS, "fsqrt.s {reg1}, {reg2}"), "FSqrtS_Default");
}
TEST_F(AssemblerRISCV64Test, FSqrtD) {
- DriverStr(RepeatFFRoundingMode(&riscv64::Riscv64Assembler::FSqrtD,
- "fsqrt.d {reg1}, {reg2}, {rm}"), "FSqrtD");
+ DriverStr(RepeatFFRoundingMode(&Riscv64Assembler::FSqrtD, "fsqrt.d {reg1}, {reg2}, {rm}"),
+ "FSqrtD");
}
TEST_F(AssemblerRISCV64Test, FSqrtD_Default) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FSqrtD,
- "fsqrt.d {reg1}, {reg2}"), "FSqrtD_Default");
+ DriverStr(RepeatFF(&Riscv64Assembler::FSqrtD, "fsqrt.d {reg1}, {reg2}"), "FSqrtD_Default");
}
TEST_F(AssemblerRISCV64Test, FSgnjS) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FSgnjS, "fsgnj.s {reg1}, {reg2}, {reg3}"),
- "FSgnjS");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjS, "fsgnj.s {reg1}, {reg2}, {reg3}"), "FSgnjS");
}
TEST_F(AssemblerRISCV64Test, FSgnjD) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FSgnjD, "fsgnj.d {reg1}, {reg2}, {reg3}"),
- "FSgnjD");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjD, "fsgnj.d {reg1}, {reg2}, {reg3}"), "FSgnjD");
}
TEST_F(AssemblerRISCV64Test, FSgnjnS) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FSgnjnS, "fsgnjn.s {reg1}, {reg2}, {reg3}"),
- "FSgnjnS");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjnS, "fsgnjn.s {reg1}, {reg2}, {reg3}"), "FSgnjnS");
}
TEST_F(AssemblerRISCV64Test, FSgnjnD) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FSgnjnD, "fsgnjn.d {reg1}, {reg2}, {reg3}"),
- "FSgnjnD");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjnD, "fsgnjn.d {reg1}, {reg2}, {reg3}"), "FSgnjnD");
}
TEST_F(AssemblerRISCV64Test, FSgnjxS) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FSgnjxS, "fsgnjx.s {reg1}, {reg2}, {reg3}"),
- "FSgnjxS");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjxS, "fsgnjx.s {reg1}, {reg2}, {reg3}"), "FSgnjxS");
}
TEST_F(AssemblerRISCV64Test, FSgnjxD) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FSgnjxD, "fsgnjx.d {reg1}, {reg2}, {reg3}"),
- "FSgnjxD");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjxD, "fsgnjx.d {reg1}, {reg2}, {reg3}"), "FSgnjxD");
}
TEST_F(AssemblerRISCV64Test, FMinS) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FMinS, "fmin.s {reg1}, {reg2}, {reg3}"), "FMinS");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FMinS, "fmin.s {reg1}, {reg2}, {reg3}"), "FMinS");
}
TEST_F(AssemblerRISCV64Test, FMinD) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FMinD, "fmin.d {reg1}, {reg2}, {reg3}"), "FMinD");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FMinD, "fmin.d {reg1}, {reg2}, {reg3}"), "FMinD");
}
TEST_F(AssemblerRISCV64Test, FMaxS) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FMaxS, "fmax.s {reg1}, {reg2}, {reg3}"), "FMaxS");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FMaxS, "fmax.s {reg1}, {reg2}, {reg3}"), "FMaxS");
}
TEST_F(AssemblerRISCV64Test, FMaxD) {
- DriverStr(RepeatFFF(&riscv64::Riscv64Assembler::FMaxD, "fmax.d {reg1}, {reg2}, {reg3}"), "FMaxD");
+ DriverStr(RepeatFFF(&Riscv64Assembler::FMaxD, "fmax.d {reg1}, {reg2}, {reg3}"), "FMaxD");
}
TEST_F(AssemblerRISCV64Test, FCvtSD) {
- DriverStr(RepeatFFRoundingMode(&riscv64::Riscv64Assembler::FCvtSD,
- "fcvt.s.d {reg1}, {reg2}, {rm}"), "FCvtSD");
+ DriverStr(RepeatFFRoundingMode(&Riscv64Assembler::FCvtSD, "fcvt.s.d {reg1}, {reg2}, {rm}"),
+ "FCvtSD");
}
TEST_F(AssemblerRISCV64Test, FCvtSD_Default) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FCvtSD,
- "fcvt.s.d {reg1}, {reg2}"), "FCvtSD_Default");
+ DriverStr(RepeatFF(&Riscv64Assembler::FCvtSD, "fcvt.s.d {reg1}, {reg2}"), "FCvtSD_Default");
}
// This conversion is lossless, so the rounding mode is meaningless and the assembler we're
// testing against does not even accept the rounding mode argument, so this test is disabled.
TEST_F(AssemblerRISCV64Test, DISABLED_FCvtDS) {
- DriverStr(RepeatFFRoundingMode(&riscv64::Riscv64Assembler::FCvtDS,
- "fcvt.d.s {reg1}, {reg2}, {rm}"), "FCvtDS");
+ DriverStr(RepeatFFRoundingMode(&Riscv64Assembler::FCvtDS, "fcvt.d.s {reg1}, {reg2}, {rm}"),
+ "FCvtDS");
}
TEST_F(AssemblerRISCV64Test, FCvtDS_Default) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FCvtDS,
- "fcvt.d.s {reg1}, {reg2}"), "FCvtDS_Default");
+ DriverStr(RepeatFF(&Riscv64Assembler::FCvtDS, "fcvt.d.s {reg1}, {reg2}"), "FCvtDS_Default");
}
TEST_F(AssemblerRISCV64Test, FEqS) {
- DriverStr(RepeatRFF(&riscv64::Riscv64Assembler::FEqS, "feq.s {reg1}, {reg2}, {reg3}"), "FEqS");
+ DriverStr(RepeatRFF(&Riscv64Assembler::FEqS, "feq.s {reg1}, {reg2}, {reg3}"), "FEqS");
}
TEST_F(AssemblerRISCV64Test, FEqD) {
- DriverStr(RepeatRFF(&riscv64::Riscv64Assembler::FEqD, "feq.d {reg1}, {reg2}, {reg3}"), "FEqD");
+ DriverStr(RepeatRFF(&Riscv64Assembler::FEqD, "feq.d {reg1}, {reg2}, {reg3}"), "FEqD");
}
TEST_F(AssemblerRISCV64Test, FLtS) {
- DriverStr(RepeatRFF(&riscv64::Riscv64Assembler::FLtS, "flt.s {reg1}, {reg2}, {reg3}"), "FLtS");
+ DriverStr(RepeatRFF(&Riscv64Assembler::FLtS, "flt.s {reg1}, {reg2}, {reg3}"), "FLtS");
}
TEST_F(AssemblerRISCV64Test, FLtD) {
- DriverStr(RepeatRFF(&riscv64::Riscv64Assembler::FLtD, "flt.d {reg1}, {reg2}, {reg3}"), "FLtD");
+ DriverStr(RepeatRFF(&Riscv64Assembler::FLtD, "flt.d {reg1}, {reg2}, {reg3}"), "FLtD");
}
TEST_F(AssemblerRISCV64Test, FLeS) {
- DriverStr(RepeatRFF(&riscv64::Riscv64Assembler::FLeS, "fle.s {reg1}, {reg2}, {reg3}"), "FLeS");
+ DriverStr(RepeatRFF(&Riscv64Assembler::FLeS, "fle.s {reg1}, {reg2}, {reg3}"), "FLeS");
}
TEST_F(AssemblerRISCV64Test, FLeD) {
- DriverStr(RepeatRFF(&riscv64::Riscv64Assembler::FLeD, "fle.d {reg1}, {reg2}, {reg3}"), "FLeD");
+ DriverStr(RepeatRFF(&Riscv64Assembler::FLeD, "fle.d {reg1}, {reg2}, {reg3}"), "FLeD");
}
TEST_F(AssemblerRISCV64Test, FCvtWS) {
@@ -2113,27 +2054,27 @@ TEST_F(AssemblerRISCV64Test, FCvtDLu_Default) {
}
TEST_F(AssemblerRISCV64Test, FMvXW) {
- DriverStr(RepeatRF(&riscv64::Riscv64Assembler::FMvXW, "fmv.x.w {reg1}, {reg2}"), "FMvXW");
+ DriverStr(RepeatRF(&Riscv64Assembler::FMvXW, "fmv.x.w {reg1}, {reg2}"), "FMvXW");
}
TEST_F(AssemblerRISCV64Test, FMvXD) {
- DriverStr(RepeatRF(&riscv64::Riscv64Assembler::FMvXD, "fmv.x.d {reg1}, {reg2}"), "FMvXD");
+ DriverStr(RepeatRF(&Riscv64Assembler::FMvXD, "fmv.x.d {reg1}, {reg2}"), "FMvXD");
}
TEST_F(AssemblerRISCV64Test, FMvWX) {
- DriverStr(RepeatFR(&riscv64::Riscv64Assembler::FMvWX, "fmv.w.x {reg1}, {reg2}"), "FMvWX");
+ DriverStr(RepeatFR(&Riscv64Assembler::FMvWX, "fmv.w.x {reg1}, {reg2}"), "FMvWX");
}
TEST_F(AssemblerRISCV64Test, FMvDX) {
- DriverStr(RepeatFR(&riscv64::Riscv64Assembler::FMvDX, "fmv.d.x {reg1}, {reg2}"), "FMvDX");
+ DriverStr(RepeatFR(&Riscv64Assembler::FMvDX, "fmv.d.x {reg1}, {reg2}"), "FMvDX");
}
TEST_F(AssemblerRISCV64Test, FClassS) {
- DriverStr(RepeatRF(&riscv64::Riscv64Assembler::FClassS, "fclass.s {reg1}, {reg2}"), "FClassS");
+ DriverStr(RepeatRF(&Riscv64Assembler::FClassS, "fclass.s {reg1}, {reg2}"), "FClassS");
}
TEST_F(AssemblerRISCV64Test, FClassD) {
- DriverStr(RepeatrF(&riscv64::Riscv64Assembler::FClassD, "fclass.d {reg1}, {reg2}"), "FClassD");
+ DriverStr(RepeatrF(&Riscv64Assembler::FClassD, "fclass.d {reg1}, {reg2}"), "FClassD");
}
// Pseudo instructions.
@@ -2149,181 +2090,167 @@ TEST_F(AssemblerRISCV64Test, Li) {
}
TEST_F(AssemblerRISCV64Test, Mv) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::Mv, "addi {reg1}, {reg2}, 0"), "Mv");
+ DriverStr(RepeatRR(&Riscv64Assembler::Mv, "addi {reg1}, {reg2}, 0"), "Mv");
}
TEST_F(AssemblerRISCV64Test, Not) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::Not, "xori {reg1}, {reg2}, -1"), "Not");
+ DriverStr(RepeatRR(&Riscv64Assembler::Not, "xori {reg1}, {reg2}, -1"), "Not");
}
TEST_F(AssemblerRISCV64Test, Neg) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::Neg, "sub {reg1}, x0, {reg2}"), "Neg");
+ DriverStr(RepeatRR(&Riscv64Assembler::Neg, "sub {reg1}, x0, {reg2}"), "Neg");
}
TEST_F(AssemblerRISCV64Test, NegW) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::NegW, "subw {reg1}, x0, {reg2}"), "Neg");
+ DriverStr(RepeatRR(&Riscv64Assembler::NegW, "subw {reg1}, x0, {reg2}"), "Neg");
}
TEST_F(AssemblerRISCV64Test, SextB) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::SextB,
+ DriverStr(RepeatRR(&Riscv64Assembler::SextB,
"slli {reg1}, {reg2}, 56\n"
"srai {reg1}, {reg1}, 56"),
"SextB");
}
TEST_F(AssemblerRISCV64Test, SextH) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::SextH,
+ DriverStr(RepeatRR(&Riscv64Assembler::SextH,
"slli {reg1}, {reg2}, 48\n"
"srai {reg1}, {reg1}, 48"),
"SextH");
}
TEST_F(AssemblerRISCV64Test, SextW) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::SextW, "addiw {reg1}, {reg2}, 0\n"), "SextW");
+ DriverStr(RepeatRR(&Riscv64Assembler::SextW, "addiw {reg1}, {reg2}, 0\n"), "SextW");
}
TEST_F(AssemblerRISCV64Test, ZextB) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::ZextB, "andi {reg1}, {reg2}, 255"), "ZextB");
+ DriverStr(RepeatRR(&Riscv64Assembler::ZextB, "andi {reg1}, {reg2}, 255"), "ZextB");
}
TEST_F(AssemblerRISCV64Test, ZextH) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::ZextH,
+ DriverStr(RepeatRR(&Riscv64Assembler::ZextH,
"slli {reg1}, {reg2}, 48\n"
"srli {reg1}, {reg1}, 48"),
"SextH");
}
TEST_F(AssemblerRISCV64Test, ZextW) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::ZextW,
+ DriverStr(RepeatRR(&Riscv64Assembler::ZextW,
"slli {reg1}, {reg2}, 32\n"
"srli {reg1}, {reg1}, 32"),
"SextW");
}
TEST_F(AssemblerRISCV64Test, Seqz) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::Seqz, "sltiu {reg1}, {reg2}, 1\n"), "Seqz");
+ DriverStr(RepeatRR(&Riscv64Assembler::Seqz, "sltiu {reg1}, {reg2}, 1\n"), "Seqz");
}
TEST_F(AssemblerRISCV64Test, Snez) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::Snez, "sltu {reg1}, zero, {reg2}\n"), "Snez");
+ DriverStr(RepeatRR(&Riscv64Assembler::Snez, "sltu {reg1}, zero, {reg2}\n"), "Snez");
}
TEST_F(AssemblerRISCV64Test, Sltz) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::Sltz, "slt {reg1}, {reg2}, zero\n"), "Sltz");
+ DriverStr(RepeatRR(&Riscv64Assembler::Sltz, "slt {reg1}, {reg2}, zero\n"), "Sltz");
}
TEST_F(AssemblerRISCV64Test, Sgtz) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::Sgtz, "slt {reg1}, zero, {reg2}\n"), "Sgtz");
+ DriverStr(RepeatRR(&Riscv64Assembler::Sgtz, "slt {reg1}, zero, {reg2}\n"), "Sgtz");
}
TEST_F(AssemblerRISCV64Test, FMvS) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FMvS, "fsgnj.s {reg1}, {reg2}, {reg2}\n"), "FMvS");
+ DriverStr(RepeatFF(&Riscv64Assembler::FMvS, "fsgnj.s {reg1}, {reg2}, {reg2}\n"), "FMvS");
}
TEST_F(AssemblerRISCV64Test, FAbsS) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FAbsS, "fsgnjx.s {reg1}, {reg2}, {reg2}\n"),
- "FAbsS");
+ DriverStr(RepeatFF(&Riscv64Assembler::FAbsS, "fsgnjx.s {reg1}, {reg2}, {reg2}\n"), "FAbsS");
}
TEST_F(AssemblerRISCV64Test, FNegS) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FNegS, "fsgnjn.s {reg1}, {reg2}, {reg2}\n"),
- "FNegS");
+ DriverStr(RepeatFF(&Riscv64Assembler::FNegS, "fsgnjn.s {reg1}, {reg2}, {reg2}\n"), "FNegS");
}
TEST_F(AssemblerRISCV64Test, FMvD) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FMvD, "fsgnj.d {reg1}, {reg2}, {reg2}\n"), "FMvD");
+ DriverStr(RepeatFF(&Riscv64Assembler::FMvD, "fsgnj.d {reg1}, {reg2}, {reg2}\n"), "FMvD");
}
TEST_F(AssemblerRISCV64Test, FAbsD) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FAbsD, "fsgnjx.d {reg1}, {reg2}, {reg2}\n"),
- "FAbsD");
+ DriverStr(RepeatFF(&Riscv64Assembler::FAbsD, "fsgnjx.d {reg1}, {reg2}, {reg2}\n"), "FAbsD");
}
TEST_F(AssemblerRISCV64Test, FNegD) {
- DriverStr(RepeatFF(&riscv64::Riscv64Assembler::FNegD, "fsgnjn.d {reg1}, {reg2}, {reg2}\n"),
- "FNegD");
+ DriverStr(RepeatFF(&Riscv64Assembler::FNegD, "fsgnjn.d {reg1}, {reg2}, {reg2}\n"), "FNegD");
}
TEST_F(AssemblerRISCV64Test, Beqz) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRIbS(&riscv64::Riscv64Assembler::Beqz, -11, 2, "beq {reg}, zero, {imm}\n"),
- "Beqz");
+ DriverStr(RepeatRIbS(&Riscv64Assembler::Beqz, -11, 2, "beq {reg}, zero, {imm}\n"), "Beqz");
}
TEST_F(AssemblerRISCV64Test, Bnez) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRIbS(&riscv64::Riscv64Assembler::Bnez, -11, 2, "bne {reg}, zero, {imm}\n"),
- "Bnez");
+ DriverStr(RepeatRIbS(&Riscv64Assembler::Bnez, -11, 2, "bne {reg}, zero, {imm}\n"), "Bnez");
}
TEST_F(AssemblerRISCV64Test, Blez) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRIbS(&riscv64::Riscv64Assembler::Blez, -11, 2, "bge zero, {reg}, {imm}\n"),
- "Blez");
+ DriverStr(RepeatRIbS(&Riscv64Assembler::Blez, -11, 2, "bge zero, {reg}, {imm}\n"), "Blez");
}
TEST_F(AssemblerRISCV64Test, Bgez) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRIbS(&riscv64::Riscv64Assembler::Bgez, -11, 2, "bge {reg}, zero, {imm}\n"),
- "Bgez");
+ DriverStr(RepeatRIbS(&Riscv64Assembler::Bgez, -11, 2, "bge {reg}, zero, {imm}\n"), "Bgez");
}
TEST_F(AssemblerRISCV64Test, Bltz) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRIbS(&riscv64::Riscv64Assembler::Bltz, -11, 2, "blt {reg}, zero, {imm}\n"),
- "Bltz");
+ DriverStr(RepeatRIbS(&Riscv64Assembler::Bltz, -11, 2, "blt {reg}, zero, {imm}\n"), "Bltz");
}
TEST_F(AssemblerRISCV64Test, Bgtz) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRIbS(&riscv64::Riscv64Assembler::Bgtz, -11, 2, "blt zero, {reg}, {imm}\n"),
- "Bgtz");
+ DriverStr(RepeatRIbS(&Riscv64Assembler::Bgtz, -11, 2, "blt zero, {reg}, {imm}\n"), "Bgtz");
}
TEST_F(AssemblerRISCV64Test, Bgt) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Bgt, -11, 2, "blt {reg2}, {reg1}, {imm}\n"),
- "Bgt");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Bgt, -11, 2, "blt {reg2}, {reg1}, {imm}\n"), "Bgt");
}
TEST_F(AssemblerRISCV64Test, Ble) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Ble, -11, 2, "bge {reg2}, {reg1}, {imm}\n"),
- "Bge");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Ble, -11, 2, "bge {reg2}, {reg1}, {imm}\n"), "Bge");
}
TEST_F(AssemblerRISCV64Test, Bgtu) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Bgtu, -11, 2, "bltu {reg2}, {reg1}, {imm}\n"),
- "Bgtu");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Bgtu, -11, 2, "bltu {reg2}, {reg1}, {imm}\n"), "Bgtu");
}
TEST_F(AssemblerRISCV64Test, Bleu) {
// TODO(riscv64): Change "-11, 2" to "-12, 1" for "C" Standard Extension.
- DriverStr(RepeatRRIbS(&riscv64::Riscv64Assembler::Bleu, -11, 2, "bgeu {reg2}, {reg1}, {imm}\n"),
- "Bgeu");
+ DriverStr(RepeatRRIbS(&Riscv64Assembler::Bleu, -11, 2, "bgeu {reg2}, {reg1}, {imm}\n"), "Bgeu");
}
TEST_F(AssemblerRISCV64Test, J) {
// TODO(riscv64): Change "-19, 2" to "-20, 1" for "C" Standard Extension.
- DriverStr(RepeatIbS<int32_t>(&riscv64::Riscv64Assembler::J, -19, 2, "j {imm}\n"), "J");
+ DriverStr(RepeatIbS<int32_t>(&Riscv64Assembler::J, -19, 2, "j {imm}\n"), "J");
}
TEST_F(AssemblerRISCV64Test, JalRA) {
// TODO(riscv64): Change "-19, 2" to "-20, 1" for "C" Standard Extension.
- DriverStr(RepeatIbS<int32_t>(&riscv64::Riscv64Assembler::Jal, -19, 2, "jal {imm}\n"), "JalRA");
+ DriverStr(RepeatIbS<int32_t>(&Riscv64Assembler::Jal, -19, 2, "jal {imm}\n"), "JalRA");
}
TEST_F(AssemblerRISCV64Test, Jr) {
- DriverStr(RepeatR(&riscv64::Riscv64Assembler::Jr, "jr {reg}\n"), "Jr");
+ DriverStr(RepeatR(&Riscv64Assembler::Jr, "jr {reg}\n"), "Jr");
}
TEST_F(AssemblerRISCV64Test, JalrRA) {
- DriverStr(RepeatR(&riscv64::Riscv64Assembler::Jalr, "jalr {reg}\n"), "JalrRA");
+ DriverStr(RepeatR(&Riscv64Assembler::Jalr, "jalr {reg}\n"), "JalrRA");
}
TEST_F(AssemblerRISCV64Test, Jalr0) {
- DriverStr(RepeatRR(&riscv64::Riscv64Assembler::Jalr, "jalr {reg1}, {reg2}\n"), "Jalr0");
+ DriverStr(RepeatRR(&Riscv64Assembler::Jalr, "jalr {reg1}, {reg2}\n"), "Jalr0");
}
TEST_F(AssemblerRISCV64Test, Ret) {
@@ -2332,15 +2259,15 @@ TEST_F(AssemblerRISCV64Test, Ret) {
}
TEST_F(AssemblerRISCV64Test, RdCycle) {
- DriverStr(RepeatR(&riscv64::Riscv64Assembler::RdCycle, "rdcycle {reg}\n"), "RdCycle");
+ DriverStr(RepeatR(&Riscv64Assembler::RdCycle, "rdcycle {reg}\n"), "RdCycle");
}
TEST_F(AssemblerRISCV64Test, RdTime) {
- DriverStr(RepeatR(&riscv64::Riscv64Assembler::RdTime, "rdtime {reg}\n"), "RdTime");
+ DriverStr(RepeatR(&Riscv64Assembler::RdTime, "rdtime {reg}\n"), "RdTime");
}
TEST_F(AssemblerRISCV64Test, RdInstret) {
- DriverStr(RepeatR(&riscv64::Riscv64Assembler::RdInstret, "rdinstret {reg}\n"), "RdInstret");
+ DriverStr(RepeatR(&Riscv64Assembler::RdInstret, "rdinstret {reg}\n"), "RdInstret");
}
TEST_F(AssemblerRISCV64Test, Csrr) {
@@ -2499,12 +2426,12 @@ TEST_F(AssemblerRISCV64Test, BcondElimination) {
Riscv64Label label;
__ Bind(&label);
__ Nop();
- for (XRegister* reg : GetRegisters()) {
- __ Bne(*reg, *reg, &label);
- __ Blt(*reg, *reg, &label);
- __ Bgt(*reg, *reg, &label);
- __ Bltu(*reg, *reg, &label);
- __ Bgtu(*reg, *reg, &label);
+ for (XRegister reg : GetRegisters()) {
+ __ Bne(reg, reg, &label);
+ __ Blt(reg, reg, &label);
+ __ Bgt(reg, reg, &label);
+ __ Bltu(reg, reg, &label);
+ __ Bgtu(reg, reg, &label);
}
DriverStr("nop\n", "BcondElimination");
}
@@ -2513,12 +2440,12 @@ TEST_F(AssemblerRISCV64Test, BcondUnconditional) {
Riscv64Label label;
__ Bind(&label);
__ Nop();
- for (XRegister* reg : GetRegisters()) {
- __ Beq(*reg, *reg, &label);
- __ Bge(*reg, *reg, &label);
- __ Ble(*reg, *reg, &label);
- __ Bleu(*reg, *reg, &label);
- __ Bgeu(*reg, *reg, &label);
+ for (XRegister reg : GetRegisters()) {
+ __ Beq(reg, reg, &label);
+ __ Bge(reg, reg, &label);
+ __ Ble(reg, reg, &label);
+ __ Bleu(reg, reg, &label);
+ __ Bgeu(reg, reg, &label);
}
std::string expected =
"1:\n"
diff --git a/compiler/utils/x86/assembler_x86_test.cc b/compiler/utils/x86/assembler_x86_test.cc
index 5da6f04402..36a67b0535 100644
--- a/compiler/utils/x86/assembler_x86_test.cc
+++ b/compiler/utils/x86/assembler_x86_test.cc
@@ -89,19 +89,7 @@ class AssemblerX86Test : public AssemblerTest<x86::X86Assembler,
addresses_.push_back(x86::Address(x86::ESP, 987654321));
}
- if (registers_.size() == 0) {
- registers_.insert(end(registers_),
- {
- new x86::Register(x86::EAX),
- new x86::Register(x86::EBX),
- new x86::Register(x86::ECX),
- new x86::Register(x86::EDX),
- new x86::Register(x86::EBP),
- new x86::Register(x86::ESP),
- new x86::Register(x86::ESI),
- new x86::Register(x86::EDI)
- });
-
+ if (secondary_register_names_.empty()) {
secondary_register_names_.emplace(x86::Register(x86::EAX), "ax");
secondary_register_names_.emplace(x86::Register(x86::EBX), "bx");
secondary_register_names_.emplace(x86::Register(x86::ECX), "cx");
@@ -121,38 +109,28 @@ class AssemblerX86Test : public AssemblerTest<x86::X86Assembler,
tertiary_register_names_.emplace(x86::Register(x86::ESI), "dh");
tertiary_register_names_.emplace(x86::Register(x86::EDI), "bh");
}
-
- if (fp_registers_.size() == 0) {
- fp_registers_.insert(end(fp_registers_),
- {
- new x86::XmmRegister(x86::XMM0),
- new x86::XmmRegister(x86::XMM1),
- new x86::XmmRegister(x86::XMM2),
- new x86::XmmRegister(x86::XMM3),
- new x86::XmmRegister(x86::XMM4),
- new x86::XmmRegister(x86::XMM5),
- new x86::XmmRegister(x86::XMM6),
- new x86::XmmRegister(x86::XMM7)
- });
- }
}
void TearDown() override {
AssemblerTest::TearDown();
- STLDeleteElements(&registers_);
- STLDeleteElements(&fp_registers_);
}
std::vector<x86::Address> GetAddresses() override {
return addresses_;
}
- std::vector<x86::Register*> GetRegisters() override {
- return registers_;
+ ArrayRef<const x86::Register> GetRegisters() override {
+ static constexpr x86::Register kRegisters[] = {
+ x86::EAX, x86::EBX, x86::ECX, x86::EDX, x86::EBP, x86::ESP, x86::ESI, x86::EDI
+ };
+ return ArrayRef<const x86::Register>(kRegisters);
}
- std::vector<x86::XmmRegister*> GetFPRegisters() override {
- return fp_registers_;
+ ArrayRef<const x86::XmmRegister> GetFPRegisters() override {
+ static constexpr x86::XmmRegister kFPRegisters[] = {
+ x86::XMM0, x86::XMM1, x86::XMM2, x86::XMM3, x86::XMM4, x86::XMM5, x86::XMM6, x86::XMM7
+ };
+ return ArrayRef<const x86::XmmRegister>(kFPRegisters);
}
x86::Immediate CreateImmediate(int64_t imm_value) override {
@@ -173,10 +151,10 @@ class AssemblerX86Test : public AssemblerTest<x86::X86Assembler,
private:
std::vector<x86::Address> addresses_;
- std::vector<x86::Register*> registers_;
+ std::vector<x86::Register> registers_;
std::map<x86::Register, std::string, X86RegisterCompare> secondary_register_names_;
std::map<x86::Register, std::string, X86RegisterCompare> tertiary_register_names_;
- std::vector<x86::XmmRegister*> fp_registers_;
+ std::vector<x86::XmmRegister> fp_registers_;
};
class AssemblerX86AVXTest : public AssemblerX86Test {
@@ -267,28 +245,28 @@ TEST_F(AssemblerX86Test, RepeatAF) {
TEST_F(AssemblerX86Test, PoplAllAddresses) {
// Make sure all addressing modes combinations are tested at least once.
std::vector<x86::Address> all_addresses;
- for (x86::Register* base : GetRegisters()) {
+ for (x86::Register base : GetRegisters()) {
// Base only.
- all_addresses.push_back(x86::Address(*base, -1));
- all_addresses.push_back(x86::Address(*base, 0));
- all_addresses.push_back(x86::Address(*base, 1));
- all_addresses.push_back(x86::Address(*base, 123456789));
- for (x86::Register* index : GetRegisters()) {
- if (*index == x86::ESP) {
+ all_addresses.push_back(x86::Address(base, -1));
+ all_addresses.push_back(x86::Address(base, 0));
+ all_addresses.push_back(x86::Address(base, 1));
+ all_addresses.push_back(x86::Address(base, 123456789));
+ for (x86::Register index : GetRegisters()) {
+ if (index == x86::ESP) {
// Index cannot be ESP.
continue;
- } else if (*base == *index) {
+ } else if (base == index) {
// Index only.
- all_addresses.push_back(x86::Address(*index, TIMES_1, -1));
- all_addresses.push_back(x86::Address(*index, TIMES_2, 0));
- all_addresses.push_back(x86::Address(*index, TIMES_4, 1));
- all_addresses.push_back(x86::Address(*index, TIMES_8, 123456789));
+ all_addresses.push_back(x86::Address(index, TIMES_1, -1));
+ all_addresses.push_back(x86::Address(index, TIMES_2, 0));
+ all_addresses.push_back(x86::Address(index, TIMES_4, 1));
+ all_addresses.push_back(x86::Address(index, TIMES_8, 123456789));
}
// Base and index.
- all_addresses.push_back(x86::Address(*base, *index, TIMES_1, -1));
- all_addresses.push_back(x86::Address(*base, *index, TIMES_2, 0));
- all_addresses.push_back(x86::Address(*base, *index, TIMES_4, 1));
- all_addresses.push_back(x86::Address(*base, *index, TIMES_8, 123456789));
+ all_addresses.push_back(x86::Address(base, index, TIMES_1, -1));
+ all_addresses.push_back(x86::Address(base, index, TIMES_2, 0));
+ all_addresses.push_back(x86::Address(base, index, TIMES_4, 1));
+ all_addresses.push_back(x86::Address(base, index, TIMES_8, 123456789));
}
}
DriverStr(RepeatA(&x86::X86Assembler::popl, all_addresses, "popl {mem}"), "popq");
@@ -510,11 +488,11 @@ TEST_F(AssemblerX86Test, PopcntlAddress) {
// Rorl only allows CL as the shift count.
std::string rorl_fn(AssemblerX86Test::Base* assembler_test, x86::X86Assembler* assembler) {
std::ostringstream str;
- std::vector<x86::Register*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86::Register> registers = assembler_test->GetRegisters();
x86::Register shifter(x86::ECX);
- for (auto reg : registers) {
- assembler->rorl(*reg, shifter);
- str << "rorl %cl, %" << assembler_test->GetRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->rorl(reg, shifter);
+ str << "rorl %cl, %" << assembler_test->GetRegisterName(reg) << "\n";
}
return str.str();
}
@@ -530,11 +508,11 @@ TEST_F(AssemblerX86Test, RorlImm) {
// Roll only allows CL as the shift count.
std::string roll_fn(AssemblerX86Test::Base* assembler_test, x86::X86Assembler* assembler) {
std::ostringstream str;
- std::vector<x86::Register*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86::Register> registers = assembler_test->GetRegisters();
x86::Register shifter(x86::ECX);
- for (auto reg : registers) {
- assembler->roll(*reg, shifter);
- str << "roll %cl, %" << assembler_test->GetRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->roll(reg, shifter);
+ str << "roll %cl, %" << assembler_test->GetRegisterName(reg) << "\n";
}
return str.str();
}
@@ -1379,27 +1357,27 @@ TEST_F(AssemblerX86Test, AddressDisplaceBy) {
for (int32_t disp0 : displacements) { // initial displacement
for (int32_t disp : displacements) { // extra displacement
- for (const x86::Register *reg : GetRegisters()) {
+ for (x86::Register reg : GetRegisters()) {
// Test non-SIB addressing.
- EXPECT_EQ(x86::Address::displace(x86::Address(*reg, disp0), disp),
- x86::Address(*reg, disp0 + disp));
+ EXPECT_EQ(x86::Address::displace(x86::Address(reg, disp0), disp),
+ x86::Address(reg, disp0 + disp));
// Test SIB addressing with EBP base.
- if (*reg != x86::ESP) {
+ if (reg != x86::ESP) {
for (ScaleFactor scale : scales) {
- EXPECT_EQ(x86::Address::displace(x86::Address(*reg, scale, disp0), disp),
- x86::Address(*reg, scale, disp0 + disp));
+ EXPECT_EQ(x86::Address::displace(x86::Address(reg, scale, disp0), disp),
+ x86::Address(reg, scale, disp0 + disp));
}
}
// Test SIB addressing with different base.
- for (const x86::Register *index : GetRegisters()) {
- if (*index == x86::ESP) {
+ for (x86::Register index : GetRegisters()) {
+ if (index == x86::ESP) {
continue; // Skip ESP as it cannot be used with this address constructor.
}
for (ScaleFactor scale : scales) {
- EXPECT_EQ(x86::Address::displace(x86::Address(*reg, *index, scale, disp0), disp),
- x86::Address(*reg, *index, scale, disp0 + disp));
+ EXPECT_EQ(x86::Address::displace(x86::Address(reg, index, scale, disp0), disp),
+ x86::Address(reg, index, scale, disp0 + disp));
}
}
diff --git a/compiler/utils/x86_64/assembler_x86_64_test.cc b/compiler/utils/x86_64/assembler_x86_64_test.cc
index 5f7845f02c..e985441101 100644
--- a/compiler/utils/x86_64/assembler_x86_64_test.cc
+++ b/compiler/utils/x86_64/assembler_x86_64_test.cc
@@ -199,24 +199,7 @@ class AssemblerX86_64Test : public AssemblerTest<x86_64::X86_64Assembler,
addresses_.push_back(x86_64::Address(x86_64::CpuRegister(x86_64::R15), 123456789));
}
- if (registers_.size() == 0) {
- registers_.push_back(new x86_64::CpuRegister(x86_64::RAX));
- registers_.push_back(new x86_64::CpuRegister(x86_64::RBX));
- registers_.push_back(new x86_64::CpuRegister(x86_64::RCX));
- registers_.push_back(new x86_64::CpuRegister(x86_64::RDX));
- registers_.push_back(new x86_64::CpuRegister(x86_64::RBP));
- registers_.push_back(new x86_64::CpuRegister(x86_64::RSP));
- registers_.push_back(new x86_64::CpuRegister(x86_64::RSI));
- registers_.push_back(new x86_64::CpuRegister(x86_64::RDI));
- registers_.push_back(new x86_64::CpuRegister(x86_64::R8));
- registers_.push_back(new x86_64::CpuRegister(x86_64::R9));
- registers_.push_back(new x86_64::CpuRegister(x86_64::R10));
- registers_.push_back(new x86_64::CpuRegister(x86_64::R11));
- registers_.push_back(new x86_64::CpuRegister(x86_64::R12));
- registers_.push_back(new x86_64::CpuRegister(x86_64::R13));
- registers_.push_back(new x86_64::CpuRegister(x86_64::R14));
- registers_.push_back(new x86_64::CpuRegister(x86_64::R15));
-
+ if (secondary_register_names_.empty()) {
secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RAX), "eax");
secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RBX), "ebx");
secondary_register_names_.emplace(x86_64::CpuRegister(x86_64::RCX), "ecx");
@@ -267,42 +250,59 @@ class AssemblerX86_64Test : public AssemblerTest<x86_64::X86_64Assembler,
quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R13), "r13b");
quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R14), "r14b");
quaternary_register_names_.emplace(x86_64::CpuRegister(x86_64::R15), "r15b");
-
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM0));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM1));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM2));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM3));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM4));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM5));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM6));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM7));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM8));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM9));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM10));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM11));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM12));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM13));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM14));
- fp_registers_.push_back(new x86_64::XmmRegister(x86_64::XMM15));
}
}
void TearDown() override {
AssemblerTest::TearDown();
- STLDeleteElements(&registers_);
- STLDeleteElements(&fp_registers_);
}
std::vector<x86_64::Address> GetAddresses() override {
return addresses_;
}
- std::vector<x86_64::CpuRegister*> GetRegisters() override {
- return registers_;
+ ArrayRef<const x86_64::CpuRegister> GetRegisters() override {
+ static constexpr x86_64::CpuRegister kRegisters[] = {
+ x86_64::CpuRegister(x86_64::RAX),
+ x86_64::CpuRegister(x86_64::RBX),
+ x86_64::CpuRegister(x86_64::RCX),
+ x86_64::CpuRegister(x86_64::RDX),
+ x86_64::CpuRegister(x86_64::RBP),
+ x86_64::CpuRegister(x86_64::RSP),
+ x86_64::CpuRegister(x86_64::RSI),
+ x86_64::CpuRegister(x86_64::RDI),
+ x86_64::CpuRegister(x86_64::R8),
+ x86_64::CpuRegister(x86_64::R9),
+ x86_64::CpuRegister(x86_64::R10),
+ x86_64::CpuRegister(x86_64::R11),
+ x86_64::CpuRegister(x86_64::R12),
+ x86_64::CpuRegister(x86_64::R13),
+ x86_64::CpuRegister(x86_64::R14),
+ x86_64::CpuRegister(x86_64::R15),
+ };
+ return ArrayRef<const x86_64::CpuRegister>(kRegisters);
}
- std::vector<x86_64::XmmRegister*> GetFPRegisters() override {
- return fp_registers_;
+ ArrayRef<const x86_64::XmmRegister> GetFPRegisters() override {
+ static constexpr x86_64::XmmRegister kFPRegisters[] = {
+ x86_64::XmmRegister(x86_64::XMM0),
+ x86_64::XmmRegister(x86_64::XMM1),
+ x86_64::XmmRegister(x86_64::XMM2),
+ x86_64::XmmRegister(x86_64::XMM3),
+ x86_64::XmmRegister(x86_64::XMM4),
+ x86_64::XmmRegister(x86_64::XMM5),
+ x86_64::XmmRegister(x86_64::XMM6),
+ x86_64::XmmRegister(x86_64::XMM7),
+ x86_64::XmmRegister(x86_64::XMM8),
+ x86_64::XmmRegister(x86_64::XMM9),
+ x86_64::XmmRegister(x86_64::XMM10),
+ x86_64::XmmRegister(x86_64::XMM11),
+ x86_64::XmmRegister(x86_64::XMM12),
+ x86_64::XmmRegister(x86_64::XMM13),
+ x86_64::XmmRegister(x86_64::XMM14),
+ x86_64::XmmRegister(x86_64::XMM15),
+ };
+ return ArrayRef<const x86_64::XmmRegister>(kFPRegisters);
}
x86_64::Immediate CreateImmediate(int64_t imm_value) override {
@@ -328,11 +328,9 @@ class AssemblerX86_64Test : public AssemblerTest<x86_64::X86_64Assembler,
private:
std::vector<x86_64::Address> addresses_;
- std::vector<x86_64::CpuRegister*> registers_;
std::map<x86_64::CpuRegister, std::string, X86_64CpuRegisterCompare> secondary_register_names_;
std::map<x86_64::CpuRegister, std::string, X86_64CpuRegisterCompare> tertiary_register_names_;
std::map<x86_64::CpuRegister, std::string, X86_64CpuRegisterCompare> quaternary_register_names_;
- std::vector<x86_64::XmmRegister*> fp_registers_;
};
class AssemblerX86_64AVXTest : public AssemblerX86_64Test {
@@ -515,28 +513,28 @@ TEST_F(AssemblerX86_64Test, Toolchain) {
TEST_F(AssemblerX86_64Test, PopqAllAddresses) {
// Make sure all addressing modes combinations are tested at least once.
std::vector<x86_64::Address> all_addresses;
- for (x86_64::CpuRegister* base : GetRegisters()) {
+ for (const x86_64::CpuRegister& base : GetRegisters()) {
// Base only.
- all_addresses.push_back(x86_64::Address(*base, -1));
- all_addresses.push_back(x86_64::Address(*base, 0));
- all_addresses.push_back(x86_64::Address(*base, 1));
- all_addresses.push_back(x86_64::Address(*base, 123456789));
- for (x86_64::CpuRegister* index : GetRegisters()) {
- if (index->AsRegister() == x86_64::RSP) {
+ all_addresses.push_back(x86_64::Address(base, -1));
+ all_addresses.push_back(x86_64::Address(base, 0));
+ all_addresses.push_back(x86_64::Address(base, 1));
+ all_addresses.push_back(x86_64::Address(base, 123456789));
+ for (const x86_64::CpuRegister& index : GetRegisters()) {
+ if (index.AsRegister() == x86_64::RSP) {
// Index cannot be RSP.
continue;
- } else if (base->AsRegister() == index->AsRegister()) {
+ } else if (base.AsRegister() == index.AsRegister()) {
// Index only.
- all_addresses.push_back(x86_64::Address(*index, TIMES_1, -1));
- all_addresses.push_back(x86_64::Address(*index, TIMES_2, 0));
- all_addresses.push_back(x86_64::Address(*index, TIMES_4, 1));
- all_addresses.push_back(x86_64::Address(*index, TIMES_8, 123456789));
+ all_addresses.push_back(x86_64::Address(index, TIMES_1, -1));
+ all_addresses.push_back(x86_64::Address(index, TIMES_2, 0));
+ all_addresses.push_back(x86_64::Address(index, TIMES_4, 1));
+ all_addresses.push_back(x86_64::Address(index, TIMES_8, 123456789));
}
// Base and index.
- all_addresses.push_back(x86_64::Address(*base, *index, TIMES_1, -1));
- all_addresses.push_back(x86_64::Address(*base, *index, TIMES_2, 0));
- all_addresses.push_back(x86_64::Address(*base, *index, TIMES_4, 1));
- all_addresses.push_back(x86_64::Address(*base, *index, TIMES_8, 123456789));
+ all_addresses.push_back(x86_64::Address(base, index, TIMES_1, -1));
+ all_addresses.push_back(x86_64::Address(base, index, TIMES_2, 0));
+ all_addresses.push_back(x86_64::Address(base, index, TIMES_4, 1));
+ all_addresses.push_back(x86_64::Address(base, index, TIMES_8, 123456789));
}
}
DriverStr(RepeatA(&x86_64::X86_64Assembler::popq, all_addresses, "popq {mem}"), "popq");
@@ -641,11 +639,11 @@ TEST_F(AssemblerX86_64Test, SublImm) {
// Shll only allows CL as the shift count.
std::string shll_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->shll(*reg, shifter);
- str << "shll %cl, %" << assembler_test->GetSecondaryRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->shll(reg, shifter);
+ str << "shll %cl, %" << assembler_test->GetSecondaryRegisterName(reg) << "\n";
}
return str.str();
}
@@ -662,11 +660,11 @@ TEST_F(AssemblerX86_64Test, ShllImm) {
// Shlq only allows CL as the shift count.
std::string shlq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->shlq(*reg, shifter);
- str << "shlq %cl, %" << assembler_test->GetRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->shlq(reg, shifter);
+ str << "shlq %cl, %" << assembler_test->GetRegisterName(reg) << "\n";
}
return str.str();
}
@@ -683,11 +681,11 @@ TEST_F(AssemblerX86_64Test, ShlqImm) {
// Shrl only allows CL as the shift count.
std::string shrl_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->shrl(*reg, shifter);
- str << "shrl %cl, %" << assembler_test->GetSecondaryRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->shrl(reg, shifter);
+ str << "shrl %cl, %" << assembler_test->GetSecondaryRegisterName(reg) << "\n";
}
return str.str();
}
@@ -703,11 +701,11 @@ TEST_F(AssemblerX86_64Test, ShrlImm) {
// Shrq only allows CL as the shift count.
std::string shrq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->shrq(*reg, shifter);
- str << "shrq %cl, %" << assembler_test->GetRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->shrq(reg, shifter);
+ str << "shrq %cl, %" << assembler_test->GetRegisterName(reg) << "\n";
}
return str.str();
}
@@ -723,11 +721,11 @@ TEST_F(AssemblerX86_64Test, ShrqImm) {
// Sarl only allows CL as the shift count.
std::string sarl_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->sarl(*reg, shifter);
- str << "sarl %cl, %" << assembler_test->GetSecondaryRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->sarl(reg, shifter);
+ str << "sarl %cl, %" << assembler_test->GetSecondaryRegisterName(reg) << "\n";
}
return str.str();
}
@@ -743,11 +741,11 @@ TEST_F(AssemblerX86_64Test, SarlImm) {
// Sarq only allows CL as the shift count.
std::string sarq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->sarq(*reg, shifter);
- str << "sarq %cl, %" << assembler_test->GetRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->sarq(reg, shifter);
+ str << "sarq %cl, %" << assembler_test->GetRegisterName(reg) << "\n";
}
return str.str();
}
@@ -763,11 +761,11 @@ TEST_F(AssemblerX86_64Test, SarqImm) {
// Rorl only allows CL as the shift count.
std::string rorl_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->rorl(*reg, shifter);
- str << "rorl %cl, %" << assembler_test->GetSecondaryRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->rorl(reg, shifter);
+ str << "rorl %cl, %" << assembler_test->GetSecondaryRegisterName(reg) << "\n";
}
return str.str();
}
@@ -783,11 +781,11 @@ TEST_F(AssemblerX86_64Test, RorlImm) {
// Roll only allows CL as the shift count.
std::string roll_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->roll(*reg, shifter);
- str << "roll %cl, %" << assembler_test->GetSecondaryRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->roll(reg, shifter);
+ str << "roll %cl, %" << assembler_test->GetSecondaryRegisterName(reg) << "\n";
}
return str.str();
}
@@ -803,11 +801,11 @@ TEST_F(AssemblerX86_64Test, RollImm) {
// Rorq only allows CL as the shift count.
std::string rorq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->rorq(*reg, shifter);
- str << "rorq %cl, %" << assembler_test->GetRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->rorq(reg, shifter);
+ str << "rorq %cl, %" << assembler_test->GetRegisterName(reg) << "\n";
}
return str.str();
}
@@ -823,11 +821,11 @@ TEST_F(AssemblerX86_64Test, RorqImm) {
// Rolq only allows CL as the shift count.
std::string rolq_fn(AssemblerX86_64Test::Base* assembler_test, x86_64::X86_64Assembler* assembler) {
std::ostringstream str;
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
x86_64::CpuRegister shifter(x86_64::RCX);
- for (auto reg : registers) {
- assembler->rolq(*reg, shifter);
- str << "rolq %cl, %" << assembler_test->GetRegisterName(*reg) << "\n";
+ for (auto&& reg : registers) {
+ assembler->rolq(reg, shifter);
+ str << "rolq %cl, %" << assembler_test->GetRegisterName(reg) << "\n";
}
return str.str();
}
@@ -2375,13 +2373,13 @@ std::string setcc_test_fn(AssemblerX86_64Test::Base* assembler_test,
std::string suffixes[15] = { "o", "no", "b", "ae", "e", "ne", "be", "a", "s", "ns", "pe", "po",
"l", "ge", "le" };
- std::vector<x86_64::CpuRegister*> registers = assembler_test->GetRegisters();
+ ArrayRef<const x86_64::CpuRegister> registers = assembler_test->GetRegisters();
std::ostringstream str;
- for (auto reg : registers) {
+ for (auto&& reg : registers) {
for (size_t i = 0; i < 15; ++i) {
- assembler->setcc(static_cast<x86_64::Condition>(i), *reg);
- str << "set" << suffixes[i] << " %" << assembler_test->GetQuaternaryRegisterName(*reg) << "\n";
+ assembler->setcc(static_cast<x86_64::Condition>(i), reg);
+ str << "set" << suffixes[i] << " %" << assembler_test->GetQuaternaryRegisterName(reg) << "\n";
}
}
@@ -2459,27 +2457,27 @@ TEST_F(AssemblerX86_64Test, AddressDisplaceBy) {
for (int32_t disp0 : displacements) { // initial displacement
for (int32_t disp : displacements) { // extra displacement
- for (const x86_64::CpuRegister* reg : GetRegisters()) {
+ for (const x86_64::CpuRegister reg : GetRegisters()) {
// Test non-SIB addressing.
- EXPECT_EQ(x86_64::Address::displace(x86_64::Address(*reg, disp0), disp),
- x86_64::Address(*reg, disp0 + disp));
+ EXPECT_EQ(x86_64::Address::displace(x86_64::Address(reg, disp0), disp),
+ x86_64::Address(reg, disp0 + disp));
// Test SIB addressing with RBP base.
- if (reg->AsRegister() != x86_64::RSP) {
+ if (reg.AsRegister() != x86_64::RSP) {
for (ScaleFactor scale : scales) {
- EXPECT_EQ(x86_64::Address::displace(x86_64::Address(*reg, scale, disp0), disp),
- x86_64::Address(*reg, scale, disp0 + disp));
+ EXPECT_EQ(x86_64::Address::displace(x86_64::Address(reg, scale, disp0), disp),
+ x86_64::Address(reg, scale, disp0 + disp));
}
}
// Test SIB addressing with different base.
- for (const x86_64::CpuRegister* index : GetRegisters()) {
- if (index->AsRegister() == x86_64::RSP) {
+ for (const x86_64::CpuRegister& index : GetRegisters()) {
+ if (index.AsRegister() == x86_64::RSP) {
continue; // Skip RSP as it cannot be used with this address constructor.
}
for (ScaleFactor scale : scales) {
- EXPECT_EQ(x86_64::Address::displace(x86_64::Address(*reg, *index, scale, disp0), disp),
- x86_64::Address(*reg, *index, scale, disp0 + disp));
+ EXPECT_EQ(x86_64::Address::displace(x86_64::Address(reg, index, scale, disp0), disp),
+ x86_64::Address(reg, index, scale, disp0 + disp));
}
}