1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2023 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker *
4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker *
8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker *
10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker */
16*795d594fSAndroid Build Coastguard Worker
17*795d594fSAndroid Build Coastguard Worker #include "assembler_riscv64.h"
18*795d594fSAndroid Build Coastguard Worker
19*795d594fSAndroid Build Coastguard Worker #include <inttypes.h>
20*795d594fSAndroid Build Coastguard Worker
21*795d594fSAndroid Build Coastguard Worker #include <map>
22*795d594fSAndroid Build Coastguard Worker
23*795d594fSAndroid Build Coastguard Worker #include "base/bit_utils.h"
24*795d594fSAndroid Build Coastguard Worker #include "utils/assembler_test.h"
25*795d594fSAndroid Build Coastguard Worker
26*795d594fSAndroid Build Coastguard Worker #define __ GetAssembler()->
27*795d594fSAndroid Build Coastguard Worker
28*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN {
29*795d594fSAndroid Build Coastguard Worker namespace riscv64 {
30*795d594fSAndroid Build Coastguard Worker
31*795d594fSAndroid Build Coastguard Worker struct RISCV64CpuRegisterCompare {
operator ()art::riscv64::RISCV64CpuRegisterCompare32*795d594fSAndroid Build Coastguard Worker bool operator()(const XRegister& a, const XRegister& b) const { return a < b; }
33*795d594fSAndroid Build Coastguard Worker };
34*795d594fSAndroid Build Coastguard Worker
35*795d594fSAndroid Build Coastguard Worker class AssemblerRISCV64Test : public AssemblerTest<Riscv64Assembler,
36*795d594fSAndroid Build Coastguard Worker Riscv64Label,
37*795d594fSAndroid Build Coastguard Worker XRegister,
38*795d594fSAndroid Build Coastguard Worker FRegister,
39*795d594fSAndroid Build Coastguard Worker int32_t,
40*795d594fSAndroid Build Coastguard Worker VRegister> {
41*795d594fSAndroid Build Coastguard Worker public:
42*795d594fSAndroid Build Coastguard Worker using Base =
43*795d594fSAndroid Build Coastguard Worker AssemblerTest<Riscv64Assembler, Riscv64Label, XRegister, FRegister, int32_t, VRegister>;
44*795d594fSAndroid Build Coastguard Worker
AssemblerRISCV64Test()45*795d594fSAndroid Build Coastguard Worker AssemblerRISCV64Test() {}
46*795d594fSAndroid Build Coastguard Worker
47*795d594fSAndroid Build Coastguard Worker protected:
CreateAssembler(ArenaAllocator * allocator)48*795d594fSAndroid Build Coastguard Worker Riscv64Assembler* CreateAssembler(ArenaAllocator* allocator) override {
49*795d594fSAndroid Build Coastguard Worker return new (allocator) Riscv64Assembler(allocator, kRiscv64AllExtensionsMask);
50*795d594fSAndroid Build Coastguard Worker }
51*795d594fSAndroid Build Coastguard Worker
GetIsa()52*795d594fSAndroid Build Coastguard Worker InstructionSet GetIsa() override { return InstructionSet::kRiscv64; }
53*795d594fSAndroid Build Coastguard Worker
54*795d594fSAndroid Build Coastguard Worker class ScopedMarchOverride {
55*795d594fSAndroid Build Coastguard Worker public:
ScopedMarchOverride(AssemblerRISCV64Test * test,const std::string & march)56*795d594fSAndroid Build Coastguard Worker ScopedMarchOverride(AssemblerRISCV64Test* test, const std::string& march)
57*795d594fSAndroid Build Coastguard Worker : test_(test), old_override_(test->march_override_) {
58*795d594fSAndroid Build Coastguard Worker test->march_override_ = march;
59*795d594fSAndroid Build Coastguard Worker }
60*795d594fSAndroid Build Coastguard Worker
~ScopedMarchOverride()61*795d594fSAndroid Build Coastguard Worker ~ScopedMarchOverride() {
62*795d594fSAndroid Build Coastguard Worker test_->march_override_ = old_override_;
63*795d594fSAndroid Build Coastguard Worker }
64*795d594fSAndroid Build Coastguard Worker
65*795d594fSAndroid Build Coastguard Worker private:
66*795d594fSAndroid Build Coastguard Worker AssemblerRISCV64Test* const test_;
67*795d594fSAndroid Build Coastguard Worker std::optional<std::string> const old_override_;
68*795d594fSAndroid Build Coastguard Worker };
69*795d594fSAndroid Build Coastguard Worker
70*795d594fSAndroid Build Coastguard Worker class ScopedCSuppression {
71*795d594fSAndroid Build Coastguard Worker public:
ScopedCSuppression(AssemblerRISCV64Test * test)72*795d594fSAndroid Build Coastguard Worker explicit ScopedCSuppression(AssemblerRISCV64Test* test)
73*795d594fSAndroid Build Coastguard Worker : smo_(test, "-march=rv64imafdv_zba_zbb"),
74*795d594fSAndroid Build Coastguard Worker exclusion_(test->GetAssembler()) {}
75*795d594fSAndroid Build Coastguard Worker
76*795d594fSAndroid Build Coastguard Worker private:
77*795d594fSAndroid Build Coastguard Worker ScopedMarchOverride smo_;
78*795d594fSAndroid Build Coastguard Worker ScopedExtensionsExclusion<kRiscv64CompressedExtensionsMask> exclusion_;
79*795d594fSAndroid Build Coastguard Worker };
80*795d594fSAndroid Build Coastguard Worker
81*795d594fSAndroid Build Coastguard Worker class ScopedZbaAndCSuppression {
82*795d594fSAndroid Build Coastguard Worker public:
ScopedZbaAndCSuppression(AssemblerRISCV64Test * test)83*795d594fSAndroid Build Coastguard Worker explicit ScopedZbaAndCSuppression(AssemblerRISCV64Test* test)
84*795d594fSAndroid Build Coastguard Worker : smo_(test, "-march=rv64imafdv_zbb"),
85*795d594fSAndroid Build Coastguard Worker exclusion_(test->GetAssembler()) {}
86*795d594fSAndroid Build Coastguard Worker
87*795d594fSAndroid Build Coastguard Worker private:
88*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64ExtensionMask kExcludedExtensions =
89*795d594fSAndroid Build Coastguard Worker Riscv64ExtensionBit(Riscv64Extension::kZba) | kRiscv64CompressedExtensionsMask;
90*795d594fSAndroid Build Coastguard Worker
91*795d594fSAndroid Build Coastguard Worker ScopedMarchOverride smo_;
92*795d594fSAndroid Build Coastguard Worker ScopedExtensionsExclusion<kExcludedExtensions> exclusion_;
93*795d594fSAndroid Build Coastguard Worker };
94*795d594fSAndroid Build Coastguard Worker
95*795d594fSAndroid Build Coastguard Worker class ScopedZbbSuppression {
96*795d594fSAndroid Build Coastguard Worker public:
ScopedZbbSuppression(AssemblerRISCV64Test * test)97*795d594fSAndroid Build Coastguard Worker explicit ScopedZbbSuppression(AssemblerRISCV64Test* test)
98*795d594fSAndroid Build Coastguard Worker : smo_(test, "-march=rv64imafdcv_zba"), exclusion_(test->GetAssembler()) {}
99*795d594fSAndroid Build Coastguard Worker
100*795d594fSAndroid Build Coastguard Worker private:
101*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64ExtensionMask kExcludedExtensions =
102*795d594fSAndroid Build Coastguard Worker Riscv64ExtensionBit(Riscv64Extension::kZbb);
103*795d594fSAndroid Build Coastguard Worker
104*795d594fSAndroid Build Coastguard Worker ScopedMarchOverride smo_;
105*795d594fSAndroid Build Coastguard Worker ScopedExtensionsExclusion<kExcludedExtensions> exclusion_;
106*795d594fSAndroid Build Coastguard Worker };
107*795d594fSAndroid Build Coastguard Worker
108*795d594fSAndroid Build Coastguard Worker class ScopedZbaSuppression {
109*795d594fSAndroid Build Coastguard Worker public:
ScopedZbaSuppression(AssemblerRISCV64Test * test)110*795d594fSAndroid Build Coastguard Worker explicit ScopedZbaSuppression(AssemblerRISCV64Test* test)
111*795d594fSAndroid Build Coastguard Worker : smo_(test, "-march=rv64imafdcv_zbb"), exclusion_(test->GetAssembler()) {}
112*795d594fSAndroid Build Coastguard Worker
113*795d594fSAndroid Build Coastguard Worker private:
114*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64ExtensionMask kExcludedExtensions =
115*795d594fSAndroid Build Coastguard Worker Riscv64ExtensionBit(Riscv64Extension::kZba);
116*795d594fSAndroid Build Coastguard Worker
117*795d594fSAndroid Build Coastguard Worker ScopedMarchOverride smo_;
118*795d594fSAndroid Build Coastguard Worker ScopedExtensionsExclusion<kExcludedExtensions> exclusion_;
119*795d594fSAndroid Build Coastguard Worker };
120*795d594fSAndroid Build Coastguard Worker
121*795d594fSAndroid Build Coastguard Worker class ScopedZbbAndCSuppression {
122*795d594fSAndroid Build Coastguard Worker public:
ScopedZbbAndCSuppression(AssemblerRISCV64Test * test)123*795d594fSAndroid Build Coastguard Worker explicit ScopedZbbAndCSuppression(AssemblerRISCV64Test* test)
124*795d594fSAndroid Build Coastguard Worker : smo_(test, "-march=rv64imafdv_zba"),
125*795d594fSAndroid Build Coastguard Worker exclusion_(test->GetAssembler()) {}
126*795d594fSAndroid Build Coastguard Worker
127*795d594fSAndroid Build Coastguard Worker private:
128*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64ExtensionMask kExcludedExtensions =
129*795d594fSAndroid Build Coastguard Worker Riscv64ExtensionBit(Riscv64Extension::kZbb) | kRiscv64CompressedExtensionsMask;
130*795d594fSAndroid Build Coastguard Worker
131*795d594fSAndroid Build Coastguard Worker ScopedMarchOverride smo_;
132*795d594fSAndroid Build Coastguard Worker ScopedExtensionsExclusion<kExcludedExtensions> exclusion_;
133*795d594fSAndroid Build Coastguard Worker };
134*795d594fSAndroid Build Coastguard Worker
135*795d594fSAndroid Build Coastguard Worker class ScopedZbaZbbAndCSuppression {
136*795d594fSAndroid Build Coastguard Worker public:
ScopedZbaZbbAndCSuppression(AssemblerRISCV64Test * test)137*795d594fSAndroid Build Coastguard Worker explicit ScopedZbaZbbAndCSuppression(AssemblerRISCV64Test* test)
138*795d594fSAndroid Build Coastguard Worker : smo_(test, "-march=rv64imafdv"), exclusion_(test->GetAssembler()) {}
139*795d594fSAndroid Build Coastguard Worker
140*795d594fSAndroid Build Coastguard Worker private:
141*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64ExtensionMask kExcludedExtensions =
142*795d594fSAndroid Build Coastguard Worker Riscv64ExtensionBit(Riscv64Extension::kZbb) |
143*795d594fSAndroid Build Coastguard Worker Riscv64ExtensionBit(Riscv64Extension::kZba) |
144*795d594fSAndroid Build Coastguard Worker kRiscv64CompressedExtensionsMask;
145*795d594fSAndroid Build Coastguard Worker
146*795d594fSAndroid Build Coastguard Worker ScopedMarchOverride smo_;
147*795d594fSAndroid Build Coastguard Worker ScopedExtensionsExclusion<kExcludedExtensions> exclusion_;
148*795d594fSAndroid Build Coastguard Worker };
149*795d594fSAndroid Build Coastguard Worker
GetAssemblerCommand()150*795d594fSAndroid Build Coastguard Worker std::vector<std::string> GetAssemblerCommand() override {
151*795d594fSAndroid Build Coastguard Worker std::vector<std::string> result = Base::GetAssemblerCommand();
152*795d594fSAndroid Build Coastguard Worker if (march_override_.has_value()) {
153*795d594fSAndroid Build Coastguard Worker auto it = std::find_if(result.begin(),
154*795d594fSAndroid Build Coastguard Worker result.end(),
155*795d594fSAndroid Build Coastguard Worker [](const std::string& s) { return s.starts_with("-march="); });
156*795d594fSAndroid Build Coastguard Worker CHECK(it != result.end());
157*795d594fSAndroid Build Coastguard Worker *it = march_override_.value();
158*795d594fSAndroid Build Coastguard Worker }
159*795d594fSAndroid Build Coastguard Worker return result;
160*795d594fSAndroid Build Coastguard Worker }
161*795d594fSAndroid Build Coastguard Worker
SetUpHelpers()162*795d594fSAndroid Build Coastguard Worker void SetUpHelpers() override {
163*795d594fSAndroid Build Coastguard Worker if (secondary_register_names_.empty()) {
164*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(Zero, "zero");
165*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(RA, "ra");
166*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(SP, "sp");
167*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(GP, "gp");
168*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(TP, "tp");
169*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(T0, "t0");
170*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(T1, "t1");
171*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(T2, "t2");
172*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S0, "s0"); // s0/fp
173*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S1, "s1");
174*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(A0, "a0");
175*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(A1, "a1");
176*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(A2, "a2");
177*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(A3, "a3");
178*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(A4, "a4");
179*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(A5, "a5");
180*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(A6, "a6");
181*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(A7, "a7");
182*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S2, "s2");
183*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S3, "s3");
184*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S4, "s4");
185*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S5, "s5");
186*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S6, "s6");
187*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S7, "s7");
188*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S8, "s8");
189*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S9, "s9");
190*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S10, "s10");
191*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(S11, "s11");
192*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(T3, "t3");
193*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(T4, "t4");
194*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(T5, "t5");
195*795d594fSAndroid Build Coastguard Worker secondary_register_names_.emplace(T6, "t6");
196*795d594fSAndroid Build Coastguard Worker }
197*795d594fSAndroid Build Coastguard Worker }
198*795d594fSAndroid Build Coastguard Worker
TearDown()199*795d594fSAndroid Build Coastguard Worker void TearDown() override {
200*795d594fSAndroid Build Coastguard Worker AssemblerTest::TearDown();
201*795d594fSAndroid Build Coastguard Worker }
202*795d594fSAndroid Build Coastguard Worker
GetAddresses()203*795d594fSAndroid Build Coastguard Worker std::vector<Riscv64Label> GetAddresses() override {
204*795d594fSAndroid Build Coastguard Worker UNIMPLEMENTED(FATAL) << "Feature not implemented yet";
205*795d594fSAndroid Build Coastguard Worker UNREACHABLE();
206*795d594fSAndroid Build Coastguard Worker }
207*795d594fSAndroid Build Coastguard Worker
GetRegisters()208*795d594fSAndroid Build Coastguard Worker ArrayRef<const XRegister> GetRegisters() override {
209*795d594fSAndroid Build Coastguard Worker static constexpr XRegister kXRegisters[] = {
210*795d594fSAndroid Build Coastguard Worker Zero,
211*795d594fSAndroid Build Coastguard Worker RA,
212*795d594fSAndroid Build Coastguard Worker SP,
213*795d594fSAndroid Build Coastguard Worker GP,
214*795d594fSAndroid Build Coastguard Worker TP,
215*795d594fSAndroid Build Coastguard Worker T0,
216*795d594fSAndroid Build Coastguard Worker T1,
217*795d594fSAndroid Build Coastguard Worker T2,
218*795d594fSAndroid Build Coastguard Worker S0,
219*795d594fSAndroid Build Coastguard Worker S1,
220*795d594fSAndroid Build Coastguard Worker A0,
221*795d594fSAndroid Build Coastguard Worker A1,
222*795d594fSAndroid Build Coastguard Worker A2,
223*795d594fSAndroid Build Coastguard Worker A3,
224*795d594fSAndroid Build Coastguard Worker A4,
225*795d594fSAndroid Build Coastguard Worker A5,
226*795d594fSAndroid Build Coastguard Worker A6,
227*795d594fSAndroid Build Coastguard Worker A7,
228*795d594fSAndroid Build Coastguard Worker S2,
229*795d594fSAndroid Build Coastguard Worker S3,
230*795d594fSAndroid Build Coastguard Worker S4,
231*795d594fSAndroid Build Coastguard Worker S5,
232*795d594fSAndroid Build Coastguard Worker S6,
233*795d594fSAndroid Build Coastguard Worker S7,
234*795d594fSAndroid Build Coastguard Worker S8,
235*795d594fSAndroid Build Coastguard Worker S9,
236*795d594fSAndroid Build Coastguard Worker S10,
237*795d594fSAndroid Build Coastguard Worker S11,
238*795d594fSAndroid Build Coastguard Worker T3,
239*795d594fSAndroid Build Coastguard Worker T4,
240*795d594fSAndroid Build Coastguard Worker T5,
241*795d594fSAndroid Build Coastguard Worker T6,
242*795d594fSAndroid Build Coastguard Worker };
243*795d594fSAndroid Build Coastguard Worker return ArrayRef<const XRegister>(kXRegisters);
244*795d594fSAndroid Build Coastguard Worker }
245*795d594fSAndroid Build Coastguard Worker
GetRegistersShort()246*795d594fSAndroid Build Coastguard Worker ArrayRef<const XRegister> GetRegistersShort() {
247*795d594fSAndroid Build Coastguard Worker static constexpr XRegister kXRegistersShort[] = {
248*795d594fSAndroid Build Coastguard Worker S0,
249*795d594fSAndroid Build Coastguard Worker S1,
250*795d594fSAndroid Build Coastguard Worker A0,
251*795d594fSAndroid Build Coastguard Worker A1,
252*795d594fSAndroid Build Coastguard Worker A2,
253*795d594fSAndroid Build Coastguard Worker A3,
254*795d594fSAndroid Build Coastguard Worker A4,
255*795d594fSAndroid Build Coastguard Worker A5,
256*795d594fSAndroid Build Coastguard Worker };
257*795d594fSAndroid Build Coastguard Worker return ArrayRef<const XRegister>(kXRegistersShort);
258*795d594fSAndroid Build Coastguard Worker }
259*795d594fSAndroid Build Coastguard Worker
GetFPRegisters()260*795d594fSAndroid Build Coastguard Worker ArrayRef<const FRegister> GetFPRegisters() override {
261*795d594fSAndroid Build Coastguard Worker static constexpr FRegister kFRegisters[] = {
262*795d594fSAndroid Build Coastguard Worker FT0,
263*795d594fSAndroid Build Coastguard Worker FT1,
264*795d594fSAndroid Build Coastguard Worker FT2,
265*795d594fSAndroid Build Coastguard Worker FT3,
266*795d594fSAndroid Build Coastguard Worker FT4,
267*795d594fSAndroid Build Coastguard Worker FT5,
268*795d594fSAndroid Build Coastguard Worker FT6,
269*795d594fSAndroid Build Coastguard Worker FT7,
270*795d594fSAndroid Build Coastguard Worker FS0,
271*795d594fSAndroid Build Coastguard Worker FS1,
272*795d594fSAndroid Build Coastguard Worker FA0,
273*795d594fSAndroid Build Coastguard Worker FA1,
274*795d594fSAndroid Build Coastguard Worker FA2,
275*795d594fSAndroid Build Coastguard Worker FA3,
276*795d594fSAndroid Build Coastguard Worker FA4,
277*795d594fSAndroid Build Coastguard Worker FA5,
278*795d594fSAndroid Build Coastguard Worker FA6,
279*795d594fSAndroid Build Coastguard Worker FA7,
280*795d594fSAndroid Build Coastguard Worker FS2,
281*795d594fSAndroid Build Coastguard Worker FS3,
282*795d594fSAndroid Build Coastguard Worker FS4,
283*795d594fSAndroid Build Coastguard Worker FS5,
284*795d594fSAndroid Build Coastguard Worker FS6,
285*795d594fSAndroid Build Coastguard Worker FS7,
286*795d594fSAndroid Build Coastguard Worker FS8,
287*795d594fSAndroid Build Coastguard Worker FS9,
288*795d594fSAndroid Build Coastguard Worker FS10,
289*795d594fSAndroid Build Coastguard Worker FS11,
290*795d594fSAndroid Build Coastguard Worker FT8,
291*795d594fSAndroid Build Coastguard Worker FT9,
292*795d594fSAndroid Build Coastguard Worker FT10,
293*795d594fSAndroid Build Coastguard Worker FT11,
294*795d594fSAndroid Build Coastguard Worker };
295*795d594fSAndroid Build Coastguard Worker return ArrayRef<const FRegister>(kFRegisters);
296*795d594fSAndroid Build Coastguard Worker }
297*795d594fSAndroid Build Coastguard Worker
GetVectorRegisters()298*795d594fSAndroid Build Coastguard Worker ArrayRef<const VRegister> GetVectorRegisters() override {
299*795d594fSAndroid Build Coastguard Worker static constexpr VRegister kVRegisters[] = {
300*795d594fSAndroid Build Coastguard Worker V0, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15,
301*795d594fSAndroid Build Coastguard Worker V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V27, V28, V29, V30, V31
302*795d594fSAndroid Build Coastguard Worker };
303*795d594fSAndroid Build Coastguard Worker return ArrayRef<const VRegister>(kVRegisters);
304*795d594fSAndroid Build Coastguard Worker }
305*795d594fSAndroid Build Coastguard Worker
GetFPRegistersShort()306*795d594fSAndroid Build Coastguard Worker ArrayRef<const FRegister> GetFPRegistersShort() {
307*795d594fSAndroid Build Coastguard Worker static constexpr FRegister kFRegistersShort[] = {
308*795d594fSAndroid Build Coastguard Worker FS0,
309*795d594fSAndroid Build Coastguard Worker FS1,
310*795d594fSAndroid Build Coastguard Worker FA0,
311*795d594fSAndroid Build Coastguard Worker FA1,
312*795d594fSAndroid Build Coastguard Worker FA2,
313*795d594fSAndroid Build Coastguard Worker FA3,
314*795d594fSAndroid Build Coastguard Worker FA4,
315*795d594fSAndroid Build Coastguard Worker FA5,
316*795d594fSAndroid Build Coastguard Worker };
317*795d594fSAndroid Build Coastguard Worker return ArrayRef<const FRegister>(kFRegistersShort);
318*795d594fSAndroid Build Coastguard Worker }
319*795d594fSAndroid Build Coastguard Worker
GetSecondaryRegisterName(const XRegister & reg)320*795d594fSAndroid Build Coastguard Worker std::string GetSecondaryRegisterName(const XRegister& reg) override {
321*795d594fSAndroid Build Coastguard Worker CHECK(secondary_register_names_.find(reg) != secondary_register_names_.end());
322*795d594fSAndroid Build Coastguard Worker return secondary_register_names_[reg];
323*795d594fSAndroid Build Coastguard Worker }
324*795d594fSAndroid Build Coastguard Worker
CreateImmediate(int64_t imm_value)325*795d594fSAndroid Build Coastguard Worker int32_t CreateImmediate(int64_t imm_value) override {
326*795d594fSAndroid Build Coastguard Worker return dchecked_integral_cast<int32_t>(imm_value);
327*795d594fSAndroid Build Coastguard Worker }
328*795d594fSAndroid Build Coastguard Worker
329*795d594fSAndroid Build Coastguard Worker template <typename Emit>
RepeatInsn(size_t count,const std::string & insn,Emit && emit)330*795d594fSAndroid Build Coastguard Worker std::string RepeatInsn(size_t count, const std::string& insn, Emit&& emit) {
331*795d594fSAndroid Build Coastguard Worker std::string result;
332*795d594fSAndroid Build Coastguard Worker for (; count != 0u; --count) {
333*795d594fSAndroid Build Coastguard Worker result += insn;
334*795d594fSAndroid Build Coastguard Worker emit();
335*795d594fSAndroid Build Coastguard Worker }
336*795d594fSAndroid Build Coastguard Worker return result;
337*795d594fSAndroid Build Coastguard Worker }
338*795d594fSAndroid Build Coastguard Worker
EmitNops(size_t size)339*795d594fSAndroid Build Coastguard Worker std::string EmitNops(size_t size) {
340*795d594fSAndroid Build Coastguard Worker const size_t nop_size = GetAssembler()->IsExtensionEnabled(Riscv64Extension::kZca) ?
341*795d594fSAndroid Build Coastguard Worker sizeof(uint16_t) :
342*795d594fSAndroid Build Coastguard Worker sizeof(uint32_t);
343*795d594fSAndroid Build Coastguard Worker DCHECK(IsAlignedParam(size, nop_size));
344*795d594fSAndroid Build Coastguard Worker const size_t num_nops = size / nop_size;
345*795d594fSAndroid Build Coastguard Worker return RepeatInsn(num_nops, "nop\n", [&]() { __ Nop(); });
346*795d594fSAndroid Build Coastguard Worker }
347*795d594fSAndroid Build Coastguard Worker
348*795d594fSAndroid Build Coastguard Worker template <typename EmitLoadConst>
TestLoadConst64(const std::string & test_name,bool can_use_tmp,EmitLoadConst && emit_load_const)349*795d594fSAndroid Build Coastguard Worker void TestLoadConst64(const std::string& test_name,
350*795d594fSAndroid Build Coastguard Worker bool can_use_tmp,
351*795d594fSAndroid Build Coastguard Worker EmitLoadConst&& emit_load_const) {
352*795d594fSAndroid Build Coastguard Worker std::string expected;
353*795d594fSAndroid Build Coastguard Worker // Test standard immediates. Unlike other instructions, `Li()` accepts an `int64_t` but
354*795d594fSAndroid Build Coastguard Worker // this is unsupported by `CreateImmediate()`, so we cannot use `RepeatRIb()` for these.
355*795d594fSAndroid Build Coastguard Worker // Note: This `CreateImmediateValuesBits()` call does not produce any values where
356*795d594fSAndroid Build Coastguard Worker // `LoadConst64()` would emit different code from `Li()`.
357*795d594fSAndroid Build Coastguard Worker for (int64_t value : CreateImmediateValuesBits(64, /*as_uint=*/ false)) {
358*795d594fSAndroid Build Coastguard Worker emit_load_const(A0, value);
359*795d594fSAndroid Build Coastguard Worker expected += "li a0, " + std::to_string(value) + "\n";
360*795d594fSAndroid Build Coastguard Worker }
361*795d594fSAndroid Build Coastguard Worker // Test various registers with a few small values.
362*795d594fSAndroid Build Coastguard Worker // (Even Zero is an accepted register even if that does not really load the requested value.)
363*795d594fSAndroid Build Coastguard Worker for (XRegister reg : GetRegisters()) {
364*795d594fSAndroid Build Coastguard Worker ScratchRegisterScope srs(GetAssembler());
365*795d594fSAndroid Build Coastguard Worker srs.ExcludeXRegister(reg);
366*795d594fSAndroid Build Coastguard Worker std::string rd = GetRegisterName(reg);
367*795d594fSAndroid Build Coastguard Worker emit_load_const(reg, -1);
368*795d594fSAndroid Build Coastguard Worker expected += "li " + rd + ", -1\n";
369*795d594fSAndroid Build Coastguard Worker emit_load_const(reg, 0);
370*795d594fSAndroid Build Coastguard Worker expected += "li " + rd + ", 0\n";
371*795d594fSAndroid Build Coastguard Worker emit_load_const(reg, 1);
372*795d594fSAndroid Build Coastguard Worker expected += "li " + rd + ", 1\n";
373*795d594fSAndroid Build Coastguard Worker }
374*795d594fSAndroid Build Coastguard Worker // Test some significant values. Some may just repeat the tests above but other values
375*795d594fSAndroid Build Coastguard Worker // show some complex patterns, even exposing a value where clang (and therefore also this
376*795d594fSAndroid Build Coastguard Worker // assembler) does not generate the shortest sequence.
377*795d594fSAndroid Build Coastguard Worker // For the following values, `LoadConst64()` emits the same code as `Li()`.
378*795d594fSAndroid Build Coastguard Worker int64_t test_values1[] = {
379*795d594fSAndroid Build Coastguard Worker // Small values, either ADDI, ADDI+SLLI, LUI, or LUI+ADDIW.
380*795d594fSAndroid Build Coastguard Worker // The ADDI+LUI is presumably used to allow shorter code for RV64C.
381*795d594fSAndroid Build Coastguard Worker -4097, -4096, -4095, -2176, -2049, -2048, -2047, -1025, -1024, -1023, -2, -1,
382*795d594fSAndroid Build Coastguard Worker 0, 1, 2, 1023, 1024, 1025, 2047, 2048, 2049, 2176, 4095, 4096, 4097,
383*795d594fSAndroid Build Coastguard Worker // Just below std::numeric_limits<int32_t>::min()
384*795d594fSAndroid Build Coastguard Worker INT64_C(-0x80000001), // LUI+ADDI
385*795d594fSAndroid Build Coastguard Worker INT64_C(-0x80000800), // LUI+ADDI
386*795d594fSAndroid Build Coastguard Worker INT64_C(-0x80000801), // LUI+ADDIW+SLLI+ADDI; LUI+ADDI+ADDI would be shorter.
387*795d594fSAndroid Build Coastguard Worker INT64_C(-0x80000800123), // LUI+ADDIW+SLLI+ADDI
388*795d594fSAndroid Build Coastguard Worker INT64_C(0x0123450000000123), // LUI+SLLI+ADDI
389*795d594fSAndroid Build Coastguard Worker INT64_C(-0x7654300000000123), // LUI+SLLI+ADDI
390*795d594fSAndroid Build Coastguard Worker INT64_C(0x0fffffffffff0000), // LUI+SRLI
391*795d594fSAndroid Build Coastguard Worker INT64_C(0x0ffffffffffff000), // LUI+SRLI
392*795d594fSAndroid Build Coastguard Worker INT64_C(0x0ffffffffffff010), // LUI+ADDIW+SRLI
393*795d594fSAndroid Build Coastguard Worker INT64_C(0x0fffffffffffff10), // ADDI+SLLI+ADDI; LUI+ADDIW+SRLI would be same length.
394*795d594fSAndroid Build Coastguard Worker INT64_C(0x0fffffffffffff80), // ADDI+SRLI
395*795d594fSAndroid Build Coastguard Worker INT64_C(0x0ffffffff7ffff80), // LUI+ADDI+SRLI
396*795d594fSAndroid Build Coastguard Worker INT64_C(0x0123450000001235), // LUI+SLLI+ADDI+SLLI+ADDI
397*795d594fSAndroid Build Coastguard Worker INT64_C(0x0123450000001234), // LUI+SLLI+ADDI+SLLI
398*795d594fSAndroid Build Coastguard Worker INT64_C(0x0000000fff808010), // LUI+SLLI+SRLI
399*795d594fSAndroid Build Coastguard Worker INT64_C(0x00000000fff80801), // LUI+SLLI+SRLI
400*795d594fSAndroid Build Coastguard Worker INT64_C(0x00000000ffffffff), // ADDI+SRLI
401*795d594fSAndroid Build Coastguard Worker INT64_C(0x00000001ffffffff), // ADDI+SRLI
402*795d594fSAndroid Build Coastguard Worker INT64_C(0x00000003ffffffff), // ADDI+SRLI
403*795d594fSAndroid Build Coastguard Worker INT64_C(0x00000000ffc00801), // LUI+ADDIW+SLLI+ADDI
404*795d594fSAndroid Build Coastguard Worker INT64_C(0x00000001fffff7fe), // ADDI+SLLI+SRLI
405*795d594fSAndroid Build Coastguard Worker };
406*795d594fSAndroid Build Coastguard Worker for (int64_t value : test_values1) {
407*795d594fSAndroid Build Coastguard Worker emit_load_const(A0, value);
408*795d594fSAndroid Build Coastguard Worker expected += "li a0, " + std::to_string(value) + "\n";
409*795d594fSAndroid Build Coastguard Worker }
410*795d594fSAndroid Build Coastguard Worker // For the following values, `LoadConst64()` emits different code than `Li()`.
411*795d594fSAndroid Build Coastguard Worker std::pair<int64_t, const char*> test_values2[] = {
412*795d594fSAndroid Build Coastguard Worker // Li: LUI+ADDIW+SLLI+ADDI+SLLI+ADDI+SLLI+ADDI
413*795d594fSAndroid Build Coastguard Worker // LoadConst: LUI+ADDIW+LUI+ADDIW+SLLI+ADD (using TMP)
414*795d594fSAndroid Build Coastguard Worker { INT64_C(0x1234567812345678),
415*795d594fSAndroid Build Coastguard Worker "li {reg1}, 0x12345678 / 8\n" // Trailing zero bits in high word are handled by SLLI.
416*795d594fSAndroid Build Coastguard Worker "li {reg2}, 0x12345678\n"
417*795d594fSAndroid Build Coastguard Worker "slli {reg1}, {reg1}, 32 + 3\n"
418*795d594fSAndroid Build Coastguard Worker "add {reg1}, {reg1}, {reg2}\n" },
419*795d594fSAndroid Build Coastguard Worker { INT64_C(0x1234567887654321),
420*795d594fSAndroid Build Coastguard Worker "li {reg1}, 0x12345678 + 1\n" // One higher to compensate for negative TMP.
421*795d594fSAndroid Build Coastguard Worker "li {reg2}, 0x87654321 - 0x100000000\n"
422*795d594fSAndroid Build Coastguard Worker "slli {reg1}, {reg1}, 32\n"
423*795d594fSAndroid Build Coastguard Worker "add {reg1}, {reg1}, {reg2}\n" },
424*795d594fSAndroid Build Coastguard Worker { INT64_C(-0x1234567887654321),
425*795d594fSAndroid Build Coastguard Worker "li {reg1}, -0x12345678 - 1\n" // High 32 bits of the constant.
426*795d594fSAndroid Build Coastguard Worker "li {reg2}, 0x100000000 - 0x87654321\n" // Low 32 bits of the constant.
427*795d594fSAndroid Build Coastguard Worker "slli {reg1}, {reg1}, 32\n"
428*795d594fSAndroid Build Coastguard Worker "add {reg1}, {reg1}, {reg2}\n" },
429*795d594fSAndroid Build Coastguard Worker
430*795d594fSAndroid Build Coastguard Worker // Li: LUI+SLLI+ADDI+SLLI+ADDI+SLLI
431*795d594fSAndroid Build Coastguard Worker // LoadConst: LUI+LUI+SLLI+ADD (using TMP)
432*795d594fSAndroid Build Coastguard Worker { INT64_C(0x1234500012345000),
433*795d594fSAndroid Build Coastguard Worker "lui {reg1}, 0x12345\n"
434*795d594fSAndroid Build Coastguard Worker "lui {reg2}, 0x12345\n"
435*795d594fSAndroid Build Coastguard Worker "slli {reg1}, {reg1}, 44 - 12\n"
436*795d594fSAndroid Build Coastguard Worker "add {reg1}, {reg1}, {reg2}\n" },
437*795d594fSAndroid Build Coastguard Worker { INT64_C(0x0123450012345000),
438*795d594fSAndroid Build Coastguard Worker "lui {reg1}, 0x12345\n"
439*795d594fSAndroid Build Coastguard Worker "lui {reg2}, 0x12345\n"
440*795d594fSAndroid Build Coastguard Worker "slli {reg1}, {reg1}, 40 - 12\n"
441*795d594fSAndroid Build Coastguard Worker "add {reg1}, {reg1}, {reg2}\n" },
442*795d594fSAndroid Build Coastguard Worker
443*795d594fSAndroid Build Coastguard Worker // Li: LUI+ADDIW+SLLI+ADDI+SLLI+ADDI
444*795d594fSAndroid Build Coastguard Worker // LoadConst: LUI+LUI+ADDIW+SLLI+ADD (using TMP)
445*795d594fSAndroid Build Coastguard Worker { INT64_C(0x0001234512345678),
446*795d594fSAndroid Build Coastguard Worker "lui {reg1}, 0x12345\n"
447*795d594fSAndroid Build Coastguard Worker "li {reg2}, 0x12345678\n"
448*795d594fSAndroid Build Coastguard Worker "slli {reg1}, {reg1}, 32 - 12\n"
449*795d594fSAndroid Build Coastguard Worker "add {reg1}, {reg1}, {reg2}\n" },
450*795d594fSAndroid Build Coastguard Worker { INT64_C(0x0012345012345678),
451*795d594fSAndroid Build Coastguard Worker "lui {reg1}, 0x12345\n"
452*795d594fSAndroid Build Coastguard Worker "li {reg2}, 0x12345678\n"
453*795d594fSAndroid Build Coastguard Worker "slli {reg1}, {reg1}, 36 - 12\n"
454*795d594fSAndroid Build Coastguard Worker "add {reg1}, {reg1}, {reg2}\n" },
455*795d594fSAndroid Build Coastguard Worker };
456*795d594fSAndroid Build Coastguard Worker for (auto [value, fmt] : test_values2) {
457*795d594fSAndroid Build Coastguard Worker emit_load_const(A0, value);
458*795d594fSAndroid Build Coastguard Worker if (can_use_tmp) {
459*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
460*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetRegisterName(A0), &base);
461*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetRegisterName(TMP), &base);
462*795d594fSAndroid Build Coastguard Worker expected += base;
463*795d594fSAndroid Build Coastguard Worker } else {
464*795d594fSAndroid Build Coastguard Worker expected += "li a0, " + std::to_string(value) + "\n";
465*795d594fSAndroid Build Coastguard Worker }
466*795d594fSAndroid Build Coastguard Worker }
467*795d594fSAndroid Build Coastguard Worker
468*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
469*795d594fSAndroid Build Coastguard Worker }
470*795d594fSAndroid Build Coastguard Worker
StripZeroArg(const std::string & args)471*795d594fSAndroid Build Coastguard Worker static std::string StripZeroArg(const std::string& args) {
472*795d594fSAndroid Build Coastguard Worker static constexpr char kZeroSuffix[] = ", zero";
473*795d594fSAndroid Build Coastguard Worker CHECK(args.ends_with(kZeroSuffix));
474*795d594fSAndroid Build Coastguard Worker return args.substr(0u, args.size() - strlen(kZeroSuffix));
475*795d594fSAndroid Build Coastguard Worker }
476*795d594fSAndroid Build Coastguard Worker
GetPrintBcond()477*795d594fSAndroid Build Coastguard Worker auto GetPrintBcond() {
478*795d594fSAndroid Build Coastguard Worker return [](const std::string& cond,
479*795d594fSAndroid Build Coastguard Worker [[maybe_unused]] const std::string& opposite_cond,
480*795d594fSAndroid Build Coastguard Worker const std::string& args,
481*795d594fSAndroid Build Coastguard Worker const std::string& target) {
482*795d594fSAndroid Build Coastguard Worker return "b" + cond + args + ", " + target + "\n";
483*795d594fSAndroid Build Coastguard Worker };
484*795d594fSAndroid Build Coastguard Worker }
485*795d594fSAndroid Build Coastguard Worker
GetPrintCBcond()486*795d594fSAndroid Build Coastguard Worker auto GetPrintCBcond() {
487*795d594fSAndroid Build Coastguard Worker return [](const std::string& cond,
488*795d594fSAndroid Build Coastguard Worker [[maybe_unused]] const std::string& opposite_cond,
489*795d594fSAndroid Build Coastguard Worker const std::string& args,
490*795d594fSAndroid Build Coastguard Worker const std::string& target) {
491*795d594fSAndroid Build Coastguard Worker return "c.b" + cond + "z" + StripZeroArg(args) + ", " + target + "\n";
492*795d594fSAndroid Build Coastguard Worker };
493*795d594fSAndroid Build Coastguard Worker }
494*795d594fSAndroid Build Coastguard Worker
GetPrintBcondOppositeAndJ(const std::string & skip_label)495*795d594fSAndroid Build Coastguard Worker auto GetPrintBcondOppositeAndJ(const std::string& skip_label) {
496*795d594fSAndroid Build Coastguard Worker return [=]([[maybe_unused]] const std::string& cond,
497*795d594fSAndroid Build Coastguard Worker const std::string& opposite_cond,
498*795d594fSAndroid Build Coastguard Worker const std::string& args,
499*795d594fSAndroid Build Coastguard Worker const std::string& target) {
500*795d594fSAndroid Build Coastguard Worker return "b" + opposite_cond + args + ", " + skip_label + "f\n" +
501*795d594fSAndroid Build Coastguard Worker "j " + target + "\n" +
502*795d594fSAndroid Build Coastguard Worker skip_label + ":\n";
503*795d594fSAndroid Build Coastguard Worker };
504*795d594fSAndroid Build Coastguard Worker }
505*795d594fSAndroid Build Coastguard Worker
GetPrintCBcondOppositeAndJ(const std::string & skip_label)506*795d594fSAndroid Build Coastguard Worker auto GetPrintCBcondOppositeAndJ(const std::string& skip_label) {
507*795d594fSAndroid Build Coastguard Worker return [=]([[maybe_unused]] const std::string& cond,
508*795d594fSAndroid Build Coastguard Worker const std::string& opposite_cond,
509*795d594fSAndroid Build Coastguard Worker const std::string& args,
510*795d594fSAndroid Build Coastguard Worker const std::string& target) {
511*795d594fSAndroid Build Coastguard Worker return "c.b" + opposite_cond + "z" + StripZeroArg(args) + ", " + skip_label + "f\n" +
512*795d594fSAndroid Build Coastguard Worker "j " + target + "\n" +
513*795d594fSAndroid Build Coastguard Worker skip_label + ":\n";
514*795d594fSAndroid Build Coastguard Worker };
515*795d594fSAndroid Build Coastguard Worker }
516*795d594fSAndroid Build Coastguard Worker
GetPrintBcondOppositeAndTail(const std::string & skip_label,const std::string & base_label)517*795d594fSAndroid Build Coastguard Worker auto GetPrintBcondOppositeAndTail(const std::string& skip_label, const std::string& base_label) {
518*795d594fSAndroid Build Coastguard Worker return [=]([[maybe_unused]] const std::string& cond,
519*795d594fSAndroid Build Coastguard Worker const std::string& opposite_cond,
520*795d594fSAndroid Build Coastguard Worker const std::string& args,
521*795d594fSAndroid Build Coastguard Worker const std::string& target) {
522*795d594fSAndroid Build Coastguard Worker return "b" + opposite_cond + args + ", " + skip_label + "f\n" +
523*795d594fSAndroid Build Coastguard Worker base_label + ":\n" +
524*795d594fSAndroid Build Coastguard Worker "auipc t6, %pcrel_hi(" + target + ")\n" +
525*795d594fSAndroid Build Coastguard Worker "jalr x0, %pcrel_lo(" + base_label + "b)(t6)\n" +
526*795d594fSAndroid Build Coastguard Worker skip_label + ":\n";
527*795d594fSAndroid Build Coastguard Worker };
528*795d594fSAndroid Build Coastguard Worker }
529*795d594fSAndroid Build Coastguard Worker
530*795d594fSAndroid Build Coastguard Worker // Helper function for basic tests that all branch conditions map to the correct opcodes,
531*795d594fSAndroid Build Coastguard Worker // whether with branch expansion (a conditional branch with opposite condition over an
532*795d594fSAndroid Build Coastguard Worker // unconditional branch) or without.
533*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
EmitBcondForAllConditions(Riscv64Label * label,const std::string & target,PrintBcond && print_bcond,bool is_bare)534*795d594fSAndroid Build Coastguard Worker std::string EmitBcondForAllConditions(Riscv64Label* label,
535*795d594fSAndroid Build Coastguard Worker const std::string& target,
536*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
537*795d594fSAndroid Build Coastguard Worker bool is_bare) {
538*795d594fSAndroid Build Coastguard Worker XRegister rs = A0;
539*795d594fSAndroid Build Coastguard Worker __ Beqz(rs, label, is_bare);
540*795d594fSAndroid Build Coastguard Worker __ Bnez(rs, label, is_bare);
541*795d594fSAndroid Build Coastguard Worker __ Blez(rs, label, is_bare);
542*795d594fSAndroid Build Coastguard Worker __ Bgez(rs, label, is_bare);
543*795d594fSAndroid Build Coastguard Worker __ Bltz(rs, label, is_bare);
544*795d594fSAndroid Build Coastguard Worker __ Bgtz(rs, label, is_bare);
545*795d594fSAndroid Build Coastguard Worker XRegister rt = A1;
546*795d594fSAndroid Build Coastguard Worker __ Beq(rs, rt, label, is_bare);
547*795d594fSAndroid Build Coastguard Worker __ Bne(rs, rt, label, is_bare);
548*795d594fSAndroid Build Coastguard Worker __ Ble(rs, rt, label, is_bare);
549*795d594fSAndroid Build Coastguard Worker __ Bge(rs, rt, label, is_bare);
550*795d594fSAndroid Build Coastguard Worker __ Blt(rs, rt, label, is_bare);
551*795d594fSAndroid Build Coastguard Worker __ Bgt(rs, rt, label, is_bare);
552*795d594fSAndroid Build Coastguard Worker __ Bleu(rs, rt, label, is_bare);
553*795d594fSAndroid Build Coastguard Worker __ Bgeu(rs, rt, label, is_bare);
554*795d594fSAndroid Build Coastguard Worker __ Bltu(rs, rt, label, is_bare);
555*795d594fSAndroid Build Coastguard Worker __ Bgtu(rs, rt, label, is_bare);
556*795d594fSAndroid Build Coastguard Worker
557*795d594fSAndroid Build Coastguard Worker return
558*795d594fSAndroid Build Coastguard Worker print_bcond("eq", "ne", "z a0", target) +
559*795d594fSAndroid Build Coastguard Worker print_bcond("ne", "eq", "z a0", target) +
560*795d594fSAndroid Build Coastguard Worker print_bcond("le", "gt", "z a0", target) +
561*795d594fSAndroid Build Coastguard Worker print_bcond("ge", "lt", "z a0", target) +
562*795d594fSAndroid Build Coastguard Worker print_bcond("lt", "ge", "z a0", target) +
563*795d594fSAndroid Build Coastguard Worker print_bcond("gt", "le", "z a0", target) +
564*795d594fSAndroid Build Coastguard Worker print_bcond("eq", "ne", " a0, a1", target) +
565*795d594fSAndroid Build Coastguard Worker print_bcond("ne", "eq", " a0, a1", target) +
566*795d594fSAndroid Build Coastguard Worker print_bcond("le", "gt", " a0, a1", target) +
567*795d594fSAndroid Build Coastguard Worker print_bcond("ge", "lt", " a0, a1", target) +
568*795d594fSAndroid Build Coastguard Worker print_bcond("lt", "ge", " a0, a1", target) +
569*795d594fSAndroid Build Coastguard Worker print_bcond("gt", "le", " a0, a1", target) +
570*795d594fSAndroid Build Coastguard Worker print_bcond("leu", "gtu", " a0, a1", target) +
571*795d594fSAndroid Build Coastguard Worker print_bcond("geu", "ltu", " a0, a1", target) +
572*795d594fSAndroid Build Coastguard Worker print_bcond("ltu", "geu", " a0, a1", target) +
573*795d594fSAndroid Build Coastguard Worker print_bcond("gtu", "leu", " a0, a1", target);
574*795d594fSAndroid Build Coastguard Worker }
575*795d594fSAndroid Build Coastguard Worker
576*795d594fSAndroid Build Coastguard Worker // Test Bcond for forward branches with all conditions.
577*795d594fSAndroid Build Coastguard Worker // The gap must be such that either all branches expand, or none does.
578*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBcondForward(const std::string & test_name,size_t gap_size,const std::string & target_label,PrintBcond && print_bcond,bool is_bare=false)579*795d594fSAndroid Build Coastguard Worker void TestBcondForward(const std::string& test_name,
580*795d594fSAndroid Build Coastguard Worker size_t gap_size,
581*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
582*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
583*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
584*795d594fSAndroid Build Coastguard Worker std::string expected;
585*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
586*795d594fSAndroid Build Coastguard Worker expected += EmitBcondForAllConditions(&label, target_label + "f", print_bcond, is_bare);
587*795d594fSAndroid Build Coastguard Worker expected += EmitNops(gap_size);
588*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
589*795d594fSAndroid Build Coastguard Worker expected += target_label + ":\n";
590*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
591*795d594fSAndroid Build Coastguard Worker }
592*795d594fSAndroid Build Coastguard Worker
593*795d594fSAndroid Build Coastguard Worker // Test Bcond for backward branches with all conditions.
594*795d594fSAndroid Build Coastguard Worker // The gap must be such that either all branches expand, or none does.
595*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBcondBackward(const std::string & test_name,size_t gap_size,const std::string & target_label,PrintBcond && print_bcond,bool is_bare=false)596*795d594fSAndroid Build Coastguard Worker void TestBcondBackward(const std::string& test_name,
597*795d594fSAndroid Build Coastguard Worker size_t gap_size,
598*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
599*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
600*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
601*795d594fSAndroid Build Coastguard Worker std::string expected;
602*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
603*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
604*795d594fSAndroid Build Coastguard Worker expected += target_label + ":\n";
605*795d594fSAndroid Build Coastguard Worker expected += EmitNops(gap_size);
606*795d594fSAndroid Build Coastguard Worker expected += EmitBcondForAllConditions(&label, target_label + "b", print_bcond, is_bare);
607*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
608*795d594fSAndroid Build Coastguard Worker }
609*795d594fSAndroid Build Coastguard Worker
MaxOffset9BackwardDistance() const610*795d594fSAndroid Build Coastguard Worker size_t MaxOffset9BackwardDistance() const { return KB / 4; }
MaxOffset9ForwardDistance() const611*795d594fSAndroid Build Coastguard Worker size_t MaxOffset9ForwardDistance() const { return KB / 4 - 2; }
612*795d594fSAndroid Build Coastguard Worker
MaxOffset12BackwardDistance() const613*795d594fSAndroid Build Coastguard Worker size_t MaxOffset12BackwardDistance() const { return 2 * KB; }
MaxOffset12ForwardDistance() const614*795d594fSAndroid Build Coastguard Worker size_t MaxOffset12ForwardDistance() const { return 2 * KB - 2; }
615*795d594fSAndroid Build Coastguard Worker
MaxOffset13BackwardDistance() const616*795d594fSAndroid Build Coastguard Worker size_t MaxOffset13BackwardDistance() const { return 4 * KB; }
MaxOffset13ForwardDistance() const617*795d594fSAndroid Build Coastguard Worker size_t MaxOffset13ForwardDistance() const { return 4 * KB - 2; }
618*795d594fSAndroid Build Coastguard Worker
MaxOffset13BackwardDistance_WithoutC() const619*795d594fSAndroid Build Coastguard Worker size_t MaxOffset13BackwardDistance_WithoutC() const { return 4 * KB; }
MaxOffset13ForwardDistance_WithoutC() const620*795d594fSAndroid Build Coastguard Worker size_t MaxOffset13ForwardDistance_WithoutC() const { return 4 * KB - 4; }
621*795d594fSAndroid Build Coastguard Worker
MaxOffset21BackwardDistance() const622*795d594fSAndroid Build Coastguard Worker size_t MaxOffset21BackwardDistance() const { return 1 * MB; }
MaxOffset21ForwardDistance() const623*795d594fSAndroid Build Coastguard Worker size_t MaxOffset21ForwardDistance() const { return 1 * MB - 2; }
624*795d594fSAndroid Build Coastguard Worker
MaxOffset21BackwardDistance_WithoutC()625*795d594fSAndroid Build Coastguard Worker size_t MaxOffset21BackwardDistance_WithoutC() { return 1 * MB; }
MaxOffset21ForwardDistance_WithoutC()626*795d594fSAndroid Build Coastguard Worker size_t MaxOffset21ForwardDistance_WithoutC() { return 1 * MB - 4; }
627*795d594fSAndroid Build Coastguard Worker
628*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBcondA0RegForward(const std::string & test_name,void (Riscv64Assembler::* f)(XRegister,XRegister,Riscv64Label *,bool),XRegister reg,size_t nops_size,PrintBcond && print_bcond,const std::string & cond,const std::string & opposite_cond,const std::string & target_label,bool is_bare)629*795d594fSAndroid Build Coastguard Worker void TestBcondA0RegForward(const std::string& test_name,
630*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(XRegister, XRegister, Riscv64Label*, bool),
631*795d594fSAndroid Build Coastguard Worker XRegister reg,
632*795d594fSAndroid Build Coastguard Worker size_t nops_size,
633*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
634*795d594fSAndroid Build Coastguard Worker const std::string& cond,
635*795d594fSAndroid Build Coastguard Worker const std::string& opposite_cond,
636*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
637*795d594fSAndroid Build Coastguard Worker bool is_bare) {
638*795d594fSAndroid Build Coastguard Worker std::string expected;
639*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
640*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(A0, reg, &label, is_bare);
641*795d594fSAndroid Build Coastguard Worker std::string args = " a0, " + GetRegisterName(reg);
642*795d594fSAndroid Build Coastguard Worker expected += print_bcond(cond, opposite_cond, args, target_label + "f");
643*795d594fSAndroid Build Coastguard Worker expected += EmitNops(nops_size);
644*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
645*795d594fSAndroid Build Coastguard Worker expected += target_label + ":\n";
646*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
647*795d594fSAndroid Build Coastguard Worker }
648*795d594fSAndroid Build Coastguard Worker
649*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBeqzA0Forward(const std::string & test_name,size_t nops_size,PrintBcond && print_bcond,const std::string & target_label,bool is_bare=false)650*795d594fSAndroid Build Coastguard Worker void TestBeqzA0Forward(const std::string& test_name,
651*795d594fSAndroid Build Coastguard Worker size_t nops_size,
652*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
653*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
654*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
655*795d594fSAndroid Build Coastguard Worker TestBcondA0RegForward(test_name,
656*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Beq,
657*795d594fSAndroid Build Coastguard Worker Zero,
658*795d594fSAndroid Build Coastguard Worker nops_size,
659*795d594fSAndroid Build Coastguard Worker std::move(print_bcond),
660*795d594fSAndroid Build Coastguard Worker "eq",
661*795d594fSAndroid Build Coastguard Worker "ne",
662*795d594fSAndroid Build Coastguard Worker target_label,
663*795d594fSAndroid Build Coastguard Worker is_bare);
664*795d594fSAndroid Build Coastguard Worker }
665*795d594fSAndroid Build Coastguard Worker
666*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBnezA0Forward(const std::string & test_name,size_t nops_size,PrintBcond && print_bcond,const std::string & target_label,bool is_bare=false)667*795d594fSAndroid Build Coastguard Worker void TestBnezA0Forward(const std::string& test_name,
668*795d594fSAndroid Build Coastguard Worker size_t nops_size,
669*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
670*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
671*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
672*795d594fSAndroid Build Coastguard Worker TestBcondA0RegForward(test_name,
673*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bne,
674*795d594fSAndroid Build Coastguard Worker Zero,
675*795d594fSAndroid Build Coastguard Worker nops_size,
676*795d594fSAndroid Build Coastguard Worker std::move(print_bcond),
677*795d594fSAndroid Build Coastguard Worker "ne",
678*795d594fSAndroid Build Coastguard Worker "eq",
679*795d594fSAndroid Build Coastguard Worker target_label,
680*795d594fSAndroid Build Coastguard Worker is_bare);
681*795d594fSAndroid Build Coastguard Worker }
682*795d594fSAndroid Build Coastguard Worker
683*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBeqA0A1Forward(const std::string & test_name,size_t nops_size,PrintBcond && print_bcond,const std::string & target_label,bool is_bare=false)684*795d594fSAndroid Build Coastguard Worker void TestBeqA0A1Forward(const std::string& test_name,
685*795d594fSAndroid Build Coastguard Worker size_t nops_size,
686*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
687*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
688*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
689*795d594fSAndroid Build Coastguard Worker TestBcondA0RegForward(test_name,
690*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Beq,
691*795d594fSAndroid Build Coastguard Worker A1,
692*795d594fSAndroid Build Coastguard Worker nops_size,
693*795d594fSAndroid Build Coastguard Worker std::move(print_bcond),
694*795d594fSAndroid Build Coastguard Worker "eq",
695*795d594fSAndroid Build Coastguard Worker "ne",
696*795d594fSAndroid Build Coastguard Worker target_label,
697*795d594fSAndroid Build Coastguard Worker is_bare);
698*795d594fSAndroid Build Coastguard Worker }
699*795d594fSAndroid Build Coastguard Worker
700*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBcondA0RegBackward(const std::string & test_name,void (Riscv64Assembler::* f)(XRegister,XRegister,Riscv64Label *,bool),XRegister reg,size_t nops_size,PrintBcond && print_bcond,const std::string & cond,const std::string & opposite_cond,const std::string & target_label,bool is_bare)701*795d594fSAndroid Build Coastguard Worker void TestBcondA0RegBackward(
702*795d594fSAndroid Build Coastguard Worker const std::string& test_name,
703*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(XRegister, XRegister, Riscv64Label*, bool),
704*795d594fSAndroid Build Coastguard Worker XRegister reg,
705*795d594fSAndroid Build Coastguard Worker size_t nops_size,
706*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
707*795d594fSAndroid Build Coastguard Worker const std::string& cond,
708*795d594fSAndroid Build Coastguard Worker const std::string& opposite_cond,
709*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
710*795d594fSAndroid Build Coastguard Worker bool is_bare) {
711*795d594fSAndroid Build Coastguard Worker std::string expected;
712*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
713*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
714*795d594fSAndroid Build Coastguard Worker expected += target_label + ":\n";
715*795d594fSAndroid Build Coastguard Worker expected += EmitNops(nops_size);
716*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(A0, reg, &label, is_bare);
717*795d594fSAndroid Build Coastguard Worker std::string args = " a0, " + GetRegisterName(reg);
718*795d594fSAndroid Build Coastguard Worker expected += print_bcond(cond, opposite_cond, args, target_label + "b");
719*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
720*795d594fSAndroid Build Coastguard Worker }
721*795d594fSAndroid Build Coastguard Worker
722*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBeqzA0Backward(const std::string & test_name,size_t nops_size,PrintBcond && print_bcond,const std::string & target_label,bool is_bare=false)723*795d594fSAndroid Build Coastguard Worker void TestBeqzA0Backward(const std::string& test_name,
724*795d594fSAndroid Build Coastguard Worker size_t nops_size,
725*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
726*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
727*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
728*795d594fSAndroid Build Coastguard Worker TestBcondA0RegBackward(test_name,
729*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Beq,
730*795d594fSAndroid Build Coastguard Worker Zero,
731*795d594fSAndroid Build Coastguard Worker nops_size,
732*795d594fSAndroid Build Coastguard Worker std::move(print_bcond),
733*795d594fSAndroid Build Coastguard Worker "eq",
734*795d594fSAndroid Build Coastguard Worker "ne",
735*795d594fSAndroid Build Coastguard Worker target_label,
736*795d594fSAndroid Build Coastguard Worker is_bare);
737*795d594fSAndroid Build Coastguard Worker }
738*795d594fSAndroid Build Coastguard Worker
739*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBnezA0Backward(const std::string & test_name,size_t nops_size,PrintBcond && print_bcond,const std::string & target_label,bool is_bare=false)740*795d594fSAndroid Build Coastguard Worker void TestBnezA0Backward(const std::string& test_name,
741*795d594fSAndroid Build Coastguard Worker size_t nops_size,
742*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
743*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
744*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
745*795d594fSAndroid Build Coastguard Worker TestBcondA0RegBackward(test_name,
746*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bne,
747*795d594fSAndroid Build Coastguard Worker Zero,
748*795d594fSAndroid Build Coastguard Worker nops_size,
749*795d594fSAndroid Build Coastguard Worker std::move(print_bcond),
750*795d594fSAndroid Build Coastguard Worker "ne",
751*795d594fSAndroid Build Coastguard Worker "eq",
752*795d594fSAndroid Build Coastguard Worker target_label,
753*795d594fSAndroid Build Coastguard Worker is_bare);
754*795d594fSAndroid Build Coastguard Worker }
755*795d594fSAndroid Build Coastguard Worker
756*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBeqA0A1Backward(const std::string & test_name,size_t nops_size,PrintBcond && print_bcond,const std::string & target_label,bool is_bare=false)757*795d594fSAndroid Build Coastguard Worker void TestBeqA0A1Backward(const std::string& test_name,
758*795d594fSAndroid Build Coastguard Worker size_t nops_size,
759*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond,
760*795d594fSAndroid Build Coastguard Worker const std::string& target_label,
761*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
762*795d594fSAndroid Build Coastguard Worker TestBcondA0RegBackward(test_name,
763*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Beq,
764*795d594fSAndroid Build Coastguard Worker A1,
765*795d594fSAndroid Build Coastguard Worker nops_size,
766*795d594fSAndroid Build Coastguard Worker std::move(print_bcond),
767*795d594fSAndroid Build Coastguard Worker "eq",
768*795d594fSAndroid Build Coastguard Worker "ne",
769*795d594fSAndroid Build Coastguard Worker target_label,
770*795d594fSAndroid Build Coastguard Worker is_bare);
771*795d594fSAndroid Build Coastguard Worker }
772*795d594fSAndroid Build Coastguard Worker
773*795d594fSAndroid Build Coastguard Worker // Test a branch setup where expanding one branch causes expanding another branch
774*795d594fSAndroid Build Coastguard Worker // which causes expanding another branch, etc. The argument `cascade` determines
775*795d594fSAndroid Build Coastguard Worker // whether we push the first branch to expand, or not.
776*795d594fSAndroid Build Coastguard Worker template <typename PrintBcond>
TestBeqA0A1MaybeCascade(const std::string & test_name,bool cascade,PrintBcond && print_bcond)777*795d594fSAndroid Build Coastguard Worker void TestBeqA0A1MaybeCascade(const std::string& test_name,
778*795d594fSAndroid Build Coastguard Worker bool cascade,
779*795d594fSAndroid Build Coastguard Worker PrintBcond&& print_bcond) {
780*795d594fSAndroid Build Coastguard Worker const size_t kNumBeqs = MaxOffset13ForwardDistance() / sizeof(uint32_t) / 2u;
781*795d594fSAndroid Build Coastguard Worker auto label_name = [](size_t i) { return ".L" + std::to_string(i); };
782*795d594fSAndroid Build Coastguard Worker
783*795d594fSAndroid Build Coastguard Worker std::string expected;
784*795d594fSAndroid Build Coastguard Worker std::vector<Riscv64Label> labels(kNumBeqs);
785*795d594fSAndroid Build Coastguard Worker for (size_t i = 0; i != kNumBeqs; ++i) {
786*795d594fSAndroid Build Coastguard Worker __ Beq(A0, A1, &labels[i]);
787*795d594fSAndroid Build Coastguard Worker expected += print_bcond("eq", "ne", " a0, a1", label_name(i));
788*795d594fSAndroid Build Coastguard Worker }
789*795d594fSAndroid Build Coastguard Worker if (cascade) {
790*795d594fSAndroid Build Coastguard Worker expected += EmitNops(sizeof(uint32_t));
791*795d594fSAndroid Build Coastguard Worker }
792*795d594fSAndroid Build Coastguard Worker for (size_t i = 0; i != kNumBeqs; ++i) {
793*795d594fSAndroid Build Coastguard Worker expected += EmitNops(2 * sizeof(uint32_t));
794*795d594fSAndroid Build Coastguard Worker __ Bind(&labels[i]);
795*795d594fSAndroid Build Coastguard Worker expected += label_name(i) + ":\n";
796*795d594fSAndroid Build Coastguard Worker }
797*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
798*795d594fSAndroid Build Coastguard Worker }
799*795d594fSAndroid Build Coastguard Worker
TestBcondElimination(const std::string & test_name,const std::string & nop)800*795d594fSAndroid Build Coastguard Worker void TestBcondElimination(const std::string& test_name, const std::string& nop) {
801*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
802*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
803*795d594fSAndroid Build Coastguard Worker __ Nop();
804*795d594fSAndroid Build Coastguard Worker for (XRegister reg : GetRegisters()) {
805*795d594fSAndroid Build Coastguard Worker __ Bne(reg, reg, &label);
806*795d594fSAndroid Build Coastguard Worker __ Blt(reg, reg, &label);
807*795d594fSAndroid Build Coastguard Worker __ Bgt(reg, reg, &label);
808*795d594fSAndroid Build Coastguard Worker __ Bltu(reg, reg, &label);
809*795d594fSAndroid Build Coastguard Worker __ Bgtu(reg, reg, &label);
810*795d594fSAndroid Build Coastguard Worker }
811*795d594fSAndroid Build Coastguard Worker DriverStr(nop + "\n", test_name);
812*795d594fSAndroid Build Coastguard Worker }
813*795d594fSAndroid Build Coastguard Worker
TestBcondUnconditional(const std::string & test_name,const std::string & j)814*795d594fSAndroid Build Coastguard Worker void TestBcondUnconditional(const std::string& test_name, const std::string& j) {
815*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
816*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
817*795d594fSAndroid Build Coastguard Worker __ Nop();
818*795d594fSAndroid Build Coastguard Worker for (XRegister reg : GetRegisters()) {
819*795d594fSAndroid Build Coastguard Worker __ Beq(reg, reg, &label);
820*795d594fSAndroid Build Coastguard Worker __ Bge(reg, reg, &label);
821*795d594fSAndroid Build Coastguard Worker __ Ble(reg, reg, &label);
822*795d594fSAndroid Build Coastguard Worker __ Bleu(reg, reg, &label);
823*795d594fSAndroid Build Coastguard Worker __ Bgeu(reg, reg, &label);
824*795d594fSAndroid Build Coastguard Worker }
825*795d594fSAndroid Build Coastguard Worker std::string expected =
826*795d594fSAndroid Build Coastguard Worker "1:\n"
827*795d594fSAndroid Build Coastguard Worker "nop\n" +
828*795d594fSAndroid Build Coastguard Worker RepeatInsn(5u * GetRegisters().size(), j + " 1b\n", []() {});
829*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
830*795d594fSAndroid Build Coastguard Worker }
831*795d594fSAndroid Build Coastguard Worker
GetPrintJalRd()832*795d594fSAndroid Build Coastguard Worker auto GetPrintJalRd() {
833*795d594fSAndroid Build Coastguard Worker return [=](XRegister rd, const std::string& target) {
834*795d594fSAndroid Build Coastguard Worker std::string rd_name = GetRegisterName(rd);
835*795d594fSAndroid Build Coastguard Worker return "jal " + rd_name + ", " + target + "\n";
836*795d594fSAndroid Build Coastguard Worker };
837*795d594fSAndroid Build Coastguard Worker }
838*795d594fSAndroid Build Coastguard Worker
GetPrintCallRd(const std::string & base_label)839*795d594fSAndroid Build Coastguard Worker auto GetPrintCallRd(const std::string& base_label) {
840*795d594fSAndroid Build Coastguard Worker return [=](XRegister rd, const std::string& target) {
841*795d594fSAndroid Build Coastguard Worker std::string rd_name = GetRegisterName(rd);
842*795d594fSAndroid Build Coastguard Worker std::string temp_name = (rd != Zero) ? rd_name : GetRegisterName(TMP);
843*795d594fSAndroid Build Coastguard Worker return base_label + ":\n" +
844*795d594fSAndroid Build Coastguard Worker "auipc " + temp_name + ", %pcrel_hi(" + target + ")\n" +
845*795d594fSAndroid Build Coastguard Worker "jalr " + rd_name + ", %pcrel_lo(" + base_label + "b)(" + temp_name + ")\n";
846*795d594fSAndroid Build Coastguard Worker };
847*795d594fSAndroid Build Coastguard Worker }
848*795d594fSAndroid Build Coastguard Worker
849*795d594fSAndroid Build Coastguard Worker template <typename PrintJalRd>
TestJalRdForward(const std::string & test_name,size_t gap_size,const std::string & label_name,PrintJalRd && print_jalrd,bool is_bare=false)850*795d594fSAndroid Build Coastguard Worker void TestJalRdForward(const std::string& test_name,
851*795d594fSAndroid Build Coastguard Worker size_t gap_size,
852*795d594fSAndroid Build Coastguard Worker const std::string& label_name,
853*795d594fSAndroid Build Coastguard Worker PrintJalRd&& print_jalrd,
854*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
855*795d594fSAndroid Build Coastguard Worker std::string expected;
856*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
857*795d594fSAndroid Build Coastguard Worker for (XRegister reg : GetRegisters()) {
858*795d594fSAndroid Build Coastguard Worker __ Jal(reg, &label, is_bare);
859*795d594fSAndroid Build Coastguard Worker expected += print_jalrd(reg, label_name + "f");
860*795d594fSAndroid Build Coastguard Worker }
861*795d594fSAndroid Build Coastguard Worker expected += EmitNops(gap_size);
862*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
863*795d594fSAndroid Build Coastguard Worker expected += label_name + ":\n";
864*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
865*795d594fSAndroid Build Coastguard Worker }
866*795d594fSAndroid Build Coastguard Worker
867*795d594fSAndroid Build Coastguard Worker template <typename PrintJalRd>
TestJalRdBackward(const std::string & test_name,size_t gap_size,const std::string & label_name,PrintJalRd && print_jalrd,bool is_bare=false)868*795d594fSAndroid Build Coastguard Worker void TestJalRdBackward(const std::string& test_name,
869*795d594fSAndroid Build Coastguard Worker size_t gap_size,
870*795d594fSAndroid Build Coastguard Worker const std::string& label_name,
871*795d594fSAndroid Build Coastguard Worker PrintJalRd&& print_jalrd,
872*795d594fSAndroid Build Coastguard Worker bool is_bare = false) {
873*795d594fSAndroid Build Coastguard Worker std::string expected;
874*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
875*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
876*795d594fSAndroid Build Coastguard Worker expected += label_name + ":\n";
877*795d594fSAndroid Build Coastguard Worker expected += EmitNops(gap_size);
878*795d594fSAndroid Build Coastguard Worker for (XRegister reg : GetRegisters()) {
879*795d594fSAndroid Build Coastguard Worker __ Jal(reg, &label, is_bare);
880*795d594fSAndroid Build Coastguard Worker expected += print_jalrd(reg, label_name + "b");
881*795d594fSAndroid Build Coastguard Worker }
882*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
883*795d594fSAndroid Build Coastguard Worker }
884*795d594fSAndroid Build Coastguard Worker
GetEmitJ(bool is_bare=false)885*795d594fSAndroid Build Coastguard Worker auto GetEmitJ(bool is_bare = false) {
886*795d594fSAndroid Build Coastguard Worker return [=](Riscv64Label* label) { __ J(label, is_bare); };
887*795d594fSAndroid Build Coastguard Worker }
888*795d594fSAndroid Build Coastguard Worker
GetEmitJal()889*795d594fSAndroid Build Coastguard Worker auto GetEmitJal() {
890*795d594fSAndroid Build Coastguard Worker return [=](Riscv64Label* label) { __ Jal(label); };
891*795d594fSAndroid Build Coastguard Worker }
892*795d594fSAndroid Build Coastguard Worker
GetPrintJ()893*795d594fSAndroid Build Coastguard Worker auto GetPrintJ() {
894*795d594fSAndroid Build Coastguard Worker return [=](const std::string& target) {
895*795d594fSAndroid Build Coastguard Worker return "j " + target + "\n";
896*795d594fSAndroid Build Coastguard Worker };
897*795d594fSAndroid Build Coastguard Worker }
898*795d594fSAndroid Build Coastguard Worker
GetPrintCJ()899*795d594fSAndroid Build Coastguard Worker auto GetPrintCJ() {
900*795d594fSAndroid Build Coastguard Worker return [=](const std::string& target) {
901*795d594fSAndroid Build Coastguard Worker return "c.j " + target + "\n";
902*795d594fSAndroid Build Coastguard Worker };
903*795d594fSAndroid Build Coastguard Worker }
904*795d594fSAndroid Build Coastguard Worker
GetPrintJal()905*795d594fSAndroid Build Coastguard Worker auto GetPrintJal() {
906*795d594fSAndroid Build Coastguard Worker return [=](const std::string& target) {
907*795d594fSAndroid Build Coastguard Worker return "jal " + target + "\n";
908*795d594fSAndroid Build Coastguard Worker };
909*795d594fSAndroid Build Coastguard Worker }
910*795d594fSAndroid Build Coastguard Worker
GetPrintTail(const std::string & base_label)911*795d594fSAndroid Build Coastguard Worker auto GetPrintTail(const std::string& base_label) {
912*795d594fSAndroid Build Coastguard Worker return [=](const std::string& target) {
913*795d594fSAndroid Build Coastguard Worker return base_label + ":\n" +
914*795d594fSAndroid Build Coastguard Worker "auipc t6, %pcrel_hi(" + target + ")\n" +
915*795d594fSAndroid Build Coastguard Worker "jalr x0, %pcrel_lo(" + base_label + "b)(t6)\n";
916*795d594fSAndroid Build Coastguard Worker };
917*795d594fSAndroid Build Coastguard Worker }
918*795d594fSAndroid Build Coastguard Worker
GetPrintCall(const std::string & base_label)919*795d594fSAndroid Build Coastguard Worker auto GetPrintCall(const std::string& base_label) {
920*795d594fSAndroid Build Coastguard Worker return [=](const std::string& target) {
921*795d594fSAndroid Build Coastguard Worker return base_label + ":\n" +
922*795d594fSAndroid Build Coastguard Worker "auipc ra, %pcrel_hi(" + target + ")\n" +
923*795d594fSAndroid Build Coastguard Worker "jalr ra, %pcrel_lo(" + base_label + "b)(ra)\n";
924*795d594fSAndroid Build Coastguard Worker };
925*795d594fSAndroid Build Coastguard Worker }
926*795d594fSAndroid Build Coastguard Worker
927*795d594fSAndroid Build Coastguard Worker template <typename EmitBuncond, typename PrintBuncond>
TestBuncondForward(const std::string & test_name,size_t gap_size,const std::string & label_name,EmitBuncond && emit_buncond,PrintBuncond && print_buncond)928*795d594fSAndroid Build Coastguard Worker void TestBuncondForward(const std::string& test_name,
929*795d594fSAndroid Build Coastguard Worker size_t gap_size,
930*795d594fSAndroid Build Coastguard Worker const std::string& label_name,
931*795d594fSAndroid Build Coastguard Worker EmitBuncond&& emit_buncond,
932*795d594fSAndroid Build Coastguard Worker PrintBuncond&& print_buncond) {
933*795d594fSAndroid Build Coastguard Worker std::string expected;
934*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
935*795d594fSAndroid Build Coastguard Worker emit_buncond(&label);
936*795d594fSAndroid Build Coastguard Worker expected += print_buncond(label_name + "f");
937*795d594fSAndroid Build Coastguard Worker expected += EmitNops(gap_size);
938*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
939*795d594fSAndroid Build Coastguard Worker expected += label_name + ":\n";
940*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
941*795d594fSAndroid Build Coastguard Worker }
942*795d594fSAndroid Build Coastguard Worker
943*795d594fSAndroid Build Coastguard Worker template <typename EmitBuncond, typename PrintBuncond>
TestBuncondBackward(const std::string & test_name,size_t gap_size,const std::string & label_name,EmitBuncond && emit_buncond,PrintBuncond && print_buncond)944*795d594fSAndroid Build Coastguard Worker void TestBuncondBackward(const std::string& test_name,
945*795d594fSAndroid Build Coastguard Worker size_t gap_size,
946*795d594fSAndroid Build Coastguard Worker const std::string& label_name,
947*795d594fSAndroid Build Coastguard Worker EmitBuncond&& emit_buncond,
948*795d594fSAndroid Build Coastguard Worker PrintBuncond&& print_buncond) {
949*795d594fSAndroid Build Coastguard Worker std::string expected;
950*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
951*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
952*795d594fSAndroid Build Coastguard Worker expected += label_name + ":\n";
953*795d594fSAndroid Build Coastguard Worker expected += EmitNops(gap_size);
954*795d594fSAndroid Build Coastguard Worker emit_buncond(&label);
955*795d594fSAndroid Build Coastguard Worker expected += print_buncond(label_name + "b");
956*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
957*795d594fSAndroid Build Coastguard Worker }
958*795d594fSAndroid Build Coastguard Worker
959*795d594fSAndroid Build Coastguard Worker template <typename EmitOp>
TestAddConst(const std::string & test_name,size_t bits,const std::string & suffix,EmitOp && emit_op)960*795d594fSAndroid Build Coastguard Worker void TestAddConst(const std::string& test_name,
961*795d594fSAndroid Build Coastguard Worker size_t bits,
962*795d594fSAndroid Build Coastguard Worker const std::string& suffix,
963*795d594fSAndroid Build Coastguard Worker EmitOp&& emit_op) {
964*795d594fSAndroid Build Coastguard Worker int64_t kImm12s[] = {
965*795d594fSAndroid Build Coastguard Worker 0, 1, 2, 0xff, 0x100, 0x1ff, 0x200, 0x3ff, 0x400, 0x7ff,
966*795d594fSAndroid Build Coastguard Worker -1, -2, -0x100, -0x101, -0x200, -0x201, -0x400, -0x401, -0x800,
967*795d594fSAndroid Build Coastguard Worker };
968*795d594fSAndroid Build Coastguard Worker int64_t kSimplePositiveValues[] = {
969*795d594fSAndroid Build Coastguard Worker 0x800, 0x801, 0xbff, 0xc00, 0xff0, 0xff7, 0xff8, 0xffb, 0xffc, 0xffd, 0xffe,
970*795d594fSAndroid Build Coastguard Worker };
971*795d594fSAndroid Build Coastguard Worker int64_t kSimpleNegativeValues[] = {
972*795d594fSAndroid Build Coastguard Worker -0x801, -0x802, -0xbff, -0xc00, -0xff0, -0xff8, -0xffc, -0xffe, -0xfff, -0x1000,
973*795d594fSAndroid Build Coastguard Worker };
974*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> large_values = CreateImmediateValuesBits(bits, /*as_uint=*/ false);
975*795d594fSAndroid Build Coastguard Worker auto kept_end = std::remove_if(large_values.begin(),
976*795d594fSAndroid Build Coastguard Worker large_values.end(),
977*795d594fSAndroid Build Coastguard Worker [](int64_t value) { return IsInt<13>(value); });
978*795d594fSAndroid Build Coastguard Worker large_values.erase(kept_end, large_values.end());
979*795d594fSAndroid Build Coastguard Worker large_values.push_back(0xfff);
980*795d594fSAndroid Build Coastguard Worker
981*795d594fSAndroid Build Coastguard Worker std::string expected;
982*795d594fSAndroid Build Coastguard Worker for (XRegister rd : GetRegisters()) {
983*795d594fSAndroid Build Coastguard Worker std::string rd_name = GetRegisterName(rd);
984*795d594fSAndroid Build Coastguard Worker std::string addi_rd = ART_FORMAT("addi{} {}, ", suffix, rd_name);
985*795d594fSAndroid Build Coastguard Worker std::string add_rd = ART_FORMAT("add{} {}, ", suffix, rd_name);
986*795d594fSAndroid Build Coastguard Worker for (XRegister rs1 : GetRegisters()) {
987*795d594fSAndroid Build Coastguard Worker ScratchRegisterScope srs(GetAssembler());
988*795d594fSAndroid Build Coastguard Worker srs.ExcludeXRegister(rs1);
989*795d594fSAndroid Build Coastguard Worker srs.ExcludeXRegister(rd);
990*795d594fSAndroid Build Coastguard Worker
991*795d594fSAndroid Build Coastguard Worker std::string rs1_name = GetRegisterName(rs1);
992*795d594fSAndroid Build Coastguard Worker std::string tmp_name = GetRegisterName((rs1 != TMP) ? TMP : TMP2);
993*795d594fSAndroid Build Coastguard Worker std::string addi_tmp = ART_FORMAT("addi{} {}, ", suffix, tmp_name);
994*795d594fSAndroid Build Coastguard Worker
995*795d594fSAndroid Build Coastguard Worker for (int64_t imm : kImm12s) {
996*795d594fSAndroid Build Coastguard Worker emit_op(rd, rs1, imm);
997*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("{}{}, {}\n", addi_rd, rs1_name, std::to_string(imm));
998*795d594fSAndroid Build Coastguard Worker }
999*795d594fSAndroid Build Coastguard Worker
1000*795d594fSAndroid Build Coastguard Worker auto emit_simple_ops = [&](ArrayRef<const int64_t> imms, int64_t adjustment) {
1001*795d594fSAndroid Build Coastguard Worker for (int64_t imm : imms) {
1002*795d594fSAndroid Build Coastguard Worker emit_op(rd, rs1, imm);
1003*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("{}{}, {}\n", addi_tmp, rs1_name, std::to_string(adjustment));
1004*795d594fSAndroid Build Coastguard Worker expected +=
1005*795d594fSAndroid Build Coastguard Worker ART_FORMAT("{}{}, {}\n", addi_rd, tmp_name, std::to_string(imm - adjustment));
1006*795d594fSAndroid Build Coastguard Worker }
1007*795d594fSAndroid Build Coastguard Worker };
1008*795d594fSAndroid Build Coastguard Worker emit_simple_ops(ArrayRef<const int64_t>(kSimplePositiveValues), 0x7ff);
1009*795d594fSAndroid Build Coastguard Worker emit_simple_ops(ArrayRef<const int64_t>(kSimpleNegativeValues), -0x800);
1010*795d594fSAndroid Build Coastguard Worker
1011*795d594fSAndroid Build Coastguard Worker for (int64_t imm : large_values) {
1012*795d594fSAndroid Build Coastguard Worker emit_op(rd, rs1, imm);
1013*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("li {}, {}\n", tmp_name, std::to_string(imm));
1014*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("{}{}, {}\n", add_rd, rs1_name, tmp_name);
1015*795d594fSAndroid Build Coastguard Worker }
1016*795d594fSAndroid Build Coastguard Worker }
1017*795d594fSAndroid Build Coastguard Worker }
1018*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
1019*795d594fSAndroid Build Coastguard Worker }
1020*795d594fSAndroid Build Coastguard Worker
1021*795d594fSAndroid Build Coastguard Worker template <typename GetTemp, typename EmitOp>
RepeatLoadStoreArbitraryOffset(const std::string & head,GetTemp && get_temp,EmitOp && emit_op)1022*795d594fSAndroid Build Coastguard Worker std::string RepeatLoadStoreArbitraryOffset(const std::string& head,
1023*795d594fSAndroid Build Coastguard Worker GetTemp&& get_temp,
1024*795d594fSAndroid Build Coastguard Worker EmitOp&& emit_op) {
1025*795d594fSAndroid Build Coastguard Worker int64_t kImm12s[] = {
1026*795d594fSAndroid Build Coastguard Worker 0, 1, 2, 0xff, 0x100, 0x1ff, 0x200, 0x3ff, 0x400, 0x7ff,
1027*795d594fSAndroid Build Coastguard Worker -1, -2, -0x100, -0x101, -0x200, -0x201, -0x400, -0x401, -0x800,
1028*795d594fSAndroid Build Coastguard Worker };
1029*795d594fSAndroid Build Coastguard Worker int64_t kSimplePositiveOffsetsAlign8[] = {
1030*795d594fSAndroid Build Coastguard Worker 0x800, 0x801, 0xbff, 0xc00, 0xff0, 0xff4, 0xff6, 0xff7
1031*795d594fSAndroid Build Coastguard Worker };
1032*795d594fSAndroid Build Coastguard Worker int64_t kSimplePositiveOffsetsAlign4[] = {
1033*795d594fSAndroid Build Coastguard Worker 0xff8, 0xff9, 0xffa, 0xffb
1034*795d594fSAndroid Build Coastguard Worker };
1035*795d594fSAndroid Build Coastguard Worker int64_t kSimplePositiveOffsetsAlign2[] = {
1036*795d594fSAndroid Build Coastguard Worker 0xffc, 0xffd
1037*795d594fSAndroid Build Coastguard Worker };
1038*795d594fSAndroid Build Coastguard Worker int64_t kSimplePositiveOffsetsNoAlign[] = {
1039*795d594fSAndroid Build Coastguard Worker 0xffe
1040*795d594fSAndroid Build Coastguard Worker };
1041*795d594fSAndroid Build Coastguard Worker int64_t kSimpleNegativeOffsets[] = {
1042*795d594fSAndroid Build Coastguard Worker -0x801, -0x802, -0xbff, -0xc00, -0xff0, -0xff8, -0xffc, -0xffe, -0xfff, -0x1000,
1043*795d594fSAndroid Build Coastguard Worker };
1044*795d594fSAndroid Build Coastguard Worker int64_t kSplitOffsets[] = {
1045*795d594fSAndroid Build Coastguard Worker 0xfff, 0x1000, 0x1001, 0x17ff, 0x1800, 0x1fff, 0x2000, 0x2001, 0x27ff, 0x2800,
1046*795d594fSAndroid Build Coastguard Worker 0x7fffe7ff, 0x7fffe800, 0x7fffefff, 0x7ffff000, 0x7ffff001, 0x7ffff7ff,
1047*795d594fSAndroid Build Coastguard Worker -0x1001, -0x1002, -0x17ff, -0x1800, -0x1801, -0x2000, -0x2001, -0x2800, -0x2801,
1048*795d594fSAndroid Build Coastguard Worker -0x7ffff000, -0x7ffff001, -0x7ffff800, -0x7ffff801, -0x7fffffff, -0x80000000,
1049*795d594fSAndroid Build Coastguard Worker };
1050*795d594fSAndroid Build Coastguard Worker int64_t kSpecialOffsets[] = {
1051*795d594fSAndroid Build Coastguard Worker 0x7ffff800, 0x7ffff801, 0x7ffffffe, 0x7fffffff
1052*795d594fSAndroid Build Coastguard Worker };
1053*795d594fSAndroid Build Coastguard Worker
1054*795d594fSAndroid Build Coastguard Worker std::string expected;
1055*795d594fSAndroid Build Coastguard Worker for (XRegister rs1 : GetRegisters()) {
1056*795d594fSAndroid Build Coastguard Worker XRegister tmp = get_temp(rs1);
1057*795d594fSAndroid Build Coastguard Worker if (tmp == kNoXRegister) {
1058*795d594fSAndroid Build Coastguard Worker continue; // Unsupported register combination.
1059*795d594fSAndroid Build Coastguard Worker }
1060*795d594fSAndroid Build Coastguard Worker std::string tmp_name = GetRegisterName(tmp);
1061*795d594fSAndroid Build Coastguard Worker ScratchRegisterScope srs(GetAssembler());
1062*795d594fSAndroid Build Coastguard Worker srs.ExcludeXRegister(rs1);
1063*795d594fSAndroid Build Coastguard Worker std::string rs1_name = GetRegisterName(rs1);
1064*795d594fSAndroid Build Coastguard Worker
1065*795d594fSAndroid Build Coastguard Worker for (int64_t imm : kImm12s) {
1066*795d594fSAndroid Build Coastguard Worker emit_op(rs1, imm);
1067*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("{}, {}({})\n", head, std::to_string(imm), rs1_name);
1068*795d594fSAndroid Build Coastguard Worker }
1069*795d594fSAndroid Build Coastguard Worker
1070*795d594fSAndroid Build Coastguard Worker auto emit_simple_ops = [&](ArrayRef<const int64_t> imms, int64_t adjustment) {
1071*795d594fSAndroid Build Coastguard Worker for (int64_t imm : imms) {
1072*795d594fSAndroid Build Coastguard Worker emit_op(rs1, imm);
1073*795d594fSAndroid Build Coastguard Worker expected +=
1074*795d594fSAndroid Build Coastguard Worker ART_FORMAT("addi {}, {}, {}\n", tmp_name, rs1_name, std::to_string(adjustment));
1075*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("{}, {}({})\n", head, std::to_string(imm - adjustment), tmp_name);
1076*795d594fSAndroid Build Coastguard Worker }
1077*795d594fSAndroid Build Coastguard Worker };
1078*795d594fSAndroid Build Coastguard Worker emit_simple_ops(ArrayRef<const int64_t>(kSimplePositiveOffsetsAlign8), 0x7f8);
1079*795d594fSAndroid Build Coastguard Worker emit_simple_ops(ArrayRef<const int64_t>(kSimplePositiveOffsetsAlign4), 0x7fc);
1080*795d594fSAndroid Build Coastguard Worker emit_simple_ops(ArrayRef<const int64_t>(kSimplePositiveOffsetsAlign2), 0x7fe);
1081*795d594fSAndroid Build Coastguard Worker emit_simple_ops(ArrayRef<const int64_t>(kSimplePositiveOffsetsNoAlign), 0x7ff);
1082*795d594fSAndroid Build Coastguard Worker emit_simple_ops(ArrayRef<const int64_t>(kSimpleNegativeOffsets), -0x800);
1083*795d594fSAndroid Build Coastguard Worker
1084*795d594fSAndroid Build Coastguard Worker for (int64_t imm : kSplitOffsets) {
1085*795d594fSAndroid Build Coastguard Worker emit_op(rs1, imm);
1086*795d594fSAndroid Build Coastguard Worker uint32_t imm20 = ((imm >> 12) + ((imm >> 11) & 1)) & 0xfffff;
1087*795d594fSAndroid Build Coastguard Worker int32_t small_offset = (imm & 0xfff) - ((imm & 0x800) << 1);
1088*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("lui {}, {}\n", tmp_name, std::to_string(imm20));
1089*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("add {}, {}, {}\n", tmp_name, tmp_name, rs1_name);
1090*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("{},{}({})\n", head, std::to_string(small_offset), tmp_name);
1091*795d594fSAndroid Build Coastguard Worker }
1092*795d594fSAndroid Build Coastguard Worker
1093*795d594fSAndroid Build Coastguard Worker for (int64_t imm : kSpecialOffsets) {
1094*795d594fSAndroid Build Coastguard Worker emit_op(rs1, imm);
1095*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("lui {}, 0x80000\n", tmp_name);
1096*795d594fSAndroid Build Coastguard Worker expected +=
1097*795d594fSAndroid Build Coastguard Worker ART_FORMAT("addiw {}, {}, {}\n", tmp_name, tmp_name, std::to_string(imm - 0x80000000));
1098*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("add {}, {}, {}\n", tmp_name, tmp_name, rs1_name);
1099*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("{}, ({})\n", head, tmp_name);
1100*795d594fSAndroid Build Coastguard Worker }
1101*795d594fSAndroid Build Coastguard Worker }
1102*795d594fSAndroid Build Coastguard Worker return expected;
1103*795d594fSAndroid Build Coastguard Worker }
1104*795d594fSAndroid Build Coastguard Worker
TestLoadStoreArbitraryOffset(const std::string & test_name,const std::string & insn,void (Riscv64Assembler::* fn)(XRegister,XRegister,int32_t),bool is_store)1105*795d594fSAndroid Build Coastguard Worker void TestLoadStoreArbitraryOffset(const std::string& test_name,
1106*795d594fSAndroid Build Coastguard Worker const std::string& insn,
1107*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*fn)(XRegister, XRegister, int32_t),
1108*795d594fSAndroid Build Coastguard Worker bool is_store) {
1109*795d594fSAndroid Build Coastguard Worker std::string expected;
1110*795d594fSAndroid Build Coastguard Worker for (XRegister rd : GetRegisters()) {
1111*795d594fSAndroid Build Coastguard Worker ScratchRegisterScope srs(GetAssembler());
1112*795d594fSAndroid Build Coastguard Worker srs.ExcludeXRegister(rd);
1113*795d594fSAndroid Build Coastguard Worker auto get_temp = [&](XRegister rs1) {
1114*795d594fSAndroid Build Coastguard Worker if (is_store) {
1115*795d594fSAndroid Build Coastguard Worker return (rs1 != TMP && rd != TMP)
1116*795d594fSAndroid Build Coastguard Worker ? TMP
1117*795d594fSAndroid Build Coastguard Worker : (rs1 != TMP2 && rd != TMP2) ? TMP2 : kNoXRegister;
1118*795d594fSAndroid Build Coastguard Worker } else {
1119*795d594fSAndroid Build Coastguard Worker return rs1 != TMP ? TMP : TMP2;
1120*795d594fSAndroid Build Coastguard Worker }
1121*795d594fSAndroid Build Coastguard Worker };
1122*795d594fSAndroid Build Coastguard Worker expected += RepeatLoadStoreArbitraryOffset(
1123*795d594fSAndroid Build Coastguard Worker insn + " " + GetRegisterName(rd),
1124*795d594fSAndroid Build Coastguard Worker get_temp,
1125*795d594fSAndroid Build Coastguard Worker [&](XRegister rs1, int64_t offset) { (GetAssembler()->*fn)(rd, rs1, offset); });
1126*795d594fSAndroid Build Coastguard Worker }
1127*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
1128*795d594fSAndroid Build Coastguard Worker }
1129*795d594fSAndroid Build Coastguard Worker
TestFPLoadStoreArbitraryOffset(const std::string & test_name,const std::string & insn,void (Riscv64Assembler::* fn)(FRegister,XRegister,int32_t))1130*795d594fSAndroid Build Coastguard Worker void TestFPLoadStoreArbitraryOffset(const std::string& test_name,
1131*795d594fSAndroid Build Coastguard Worker const std::string& insn,
1132*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*fn)(FRegister, XRegister, int32_t)) {
1133*795d594fSAndroid Build Coastguard Worker std::string expected;
1134*795d594fSAndroid Build Coastguard Worker for (FRegister rd : GetFPRegisters()) {
1135*795d594fSAndroid Build Coastguard Worker expected += RepeatLoadStoreArbitraryOffset(
1136*795d594fSAndroid Build Coastguard Worker insn + " " + GetFPRegName(rd),
1137*795d594fSAndroid Build Coastguard Worker [&](XRegister rs1) { return rs1 != TMP ? TMP : TMP2; },
1138*795d594fSAndroid Build Coastguard Worker [&](XRegister rs1, int64_t offset) { (GetAssembler()->*fn)(rd, rs1, offset); });
1139*795d594fSAndroid Build Coastguard Worker }
1140*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
1141*795d594fSAndroid Build Coastguard Worker }
1142*795d594fSAndroid Build Coastguard Worker
TestLoadLiteral(const std::string & test_name,bool with_padding_for_long)1143*795d594fSAndroid Build Coastguard Worker void TestLoadLiteral(const std::string& test_name, bool with_padding_for_long) {
1144*795d594fSAndroid Build Coastguard Worker std::string expected;
1145*795d594fSAndroid Build Coastguard Worker Literal* narrow_literal = __ NewLiteral<uint32_t>(0x12345678);
1146*795d594fSAndroid Build Coastguard Worker Literal* wide_literal = __ NewLiteral<uint64_t>(0x1234567887654321);
1147*795d594fSAndroid Build Coastguard Worker auto print_load = [&](const std::string& load, XRegister rd, const std::string& label) {
1148*795d594fSAndroid Build Coastguard Worker std::string rd_name = GetRegisterName(rd);
1149*795d594fSAndroid Build Coastguard Worker expected += "1:\n"
1150*795d594fSAndroid Build Coastguard Worker "auipc " + rd_name + ", %pcrel_hi(" + label + "f)\n" +
1151*795d594fSAndroid Build Coastguard Worker load + " " + rd_name + ", %pcrel_lo(1b)(" + rd_name + ")\n";
1152*795d594fSAndroid Build Coastguard Worker };
1153*795d594fSAndroid Build Coastguard Worker for (XRegister reg : GetRegisters()) {
1154*795d594fSAndroid Build Coastguard Worker if (reg != Zero) {
1155*795d594fSAndroid Build Coastguard Worker __ Loadw(reg, narrow_literal);
1156*795d594fSAndroid Build Coastguard Worker print_load("lw", reg, "2");
1157*795d594fSAndroid Build Coastguard Worker __ Loadwu(reg, narrow_literal);
1158*795d594fSAndroid Build Coastguard Worker print_load("lwu", reg, "2");
1159*795d594fSAndroid Build Coastguard Worker __ Loadd(reg, wide_literal);
1160*795d594fSAndroid Build Coastguard Worker print_load("ld", reg, "3");
1161*795d594fSAndroid Build Coastguard Worker }
1162*795d594fSAndroid Build Coastguard Worker }
1163*795d594fSAndroid Build Coastguard Worker std::string tmp = GetRegisterName(TMP);
1164*795d594fSAndroid Build Coastguard Worker auto print_fp_load = [&](const std::string& load, FRegister rd, const std::string& label) {
1165*795d594fSAndroid Build Coastguard Worker std::string rd_name = GetFPRegName(rd);
1166*795d594fSAndroid Build Coastguard Worker expected += "1:\n"
1167*795d594fSAndroid Build Coastguard Worker "auipc " + tmp + ", %pcrel_hi(" + label + "f)\n" +
1168*795d594fSAndroid Build Coastguard Worker load + " " + rd_name + ", %pcrel_lo(1b)(" + tmp + ")\n";
1169*795d594fSAndroid Build Coastguard Worker };
1170*795d594fSAndroid Build Coastguard Worker for (FRegister freg : GetFPRegisters()) {
1171*795d594fSAndroid Build Coastguard Worker __ FLoadw(freg, narrow_literal);
1172*795d594fSAndroid Build Coastguard Worker print_fp_load("flw", freg, "2");
1173*795d594fSAndroid Build Coastguard Worker __ FLoadd(freg, wide_literal);
1174*795d594fSAndroid Build Coastguard Worker print_fp_load("fld", freg, "3");
1175*795d594fSAndroid Build Coastguard Worker }
1176*795d594fSAndroid Build Coastguard Worker // All literal loads above emit 8 bytes of code. The narrow literal shall emit 4 bytes of code.
1177*795d594fSAndroid Build Coastguard Worker // If we do not add another instruction, we shall end up with padding before the long literal.
1178*795d594fSAndroid Build Coastguard Worker expected += EmitNops(with_padding_for_long ? 0u : sizeof(uint32_t));
1179*795d594fSAndroid Build Coastguard Worker expected += "2:\n"
1180*795d594fSAndroid Build Coastguard Worker ".4byte 0x12345678\n" +
1181*795d594fSAndroid Build Coastguard Worker std::string(with_padding_for_long ? ".4byte 0\n" : "") +
1182*795d594fSAndroid Build Coastguard Worker "3:\n"
1183*795d594fSAndroid Build Coastguard Worker ".8byte 0x1234567887654321\n";
1184*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
1185*795d594fSAndroid Build Coastguard Worker }
1186*795d594fSAndroid Build Coastguard Worker
RepeatFFFFRoundingMode(void (Riscv64Assembler::* f)(FRegister,FRegister,FRegister,FRegister,FPRoundingMode),const std::string & fmt)1187*795d594fSAndroid Build Coastguard Worker std::string RepeatFFFFRoundingMode(
1188*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(FRegister, FRegister, FRegister, FRegister, FPRoundingMode),
1189*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1190*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1191*795d594fSAndroid Build Coastguard Worker std::string str;
1192*795d594fSAndroid Build Coastguard Worker ArrayRef<const FRegister> fp_regs = GetFPRegisters();
1193*795d594fSAndroid Build Coastguard Worker for (FRegister reg1 : fp_regs) {
1194*795d594fSAndroid Build Coastguard Worker std::string base1 = fmt;
1195*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetFPRegName(reg1), &base1);
1196*795d594fSAndroid Build Coastguard Worker for (FRegister reg2 : fp_regs) {
1197*795d594fSAndroid Build Coastguard Worker std::string base2 = base1;
1198*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetFPRegName(reg2), &base2);
1199*795d594fSAndroid Build Coastguard Worker for (FRegister reg3 : fp_regs) {
1200*795d594fSAndroid Build Coastguard Worker std::string base3 = base2;
1201*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG3_TOKEN, GetFPRegName(reg3), &base3);
1202*795d594fSAndroid Build Coastguard Worker for (FRegister reg4 : fp_regs) {
1203*795d594fSAndroid Build Coastguard Worker std::string base4 = base3;
1204*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG4_TOKEN, GetFPRegName(reg4), &base4);
1205*795d594fSAndroid Build Coastguard Worker for (FPRoundingMode rm : kRoundingModes) {
1206*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, reg3, reg4, rm);
1207*795d594fSAndroid Build Coastguard Worker
1208*795d594fSAndroid Build Coastguard Worker std::string base = base4;
1209*795d594fSAndroid Build Coastguard Worker ReplaceRoundingMode(rm, &base);
1210*795d594fSAndroid Build Coastguard Worker str += base;
1211*795d594fSAndroid Build Coastguard Worker str += "\n";
1212*795d594fSAndroid Build Coastguard Worker }
1213*795d594fSAndroid Build Coastguard Worker }
1214*795d594fSAndroid Build Coastguard Worker }
1215*795d594fSAndroid Build Coastguard Worker }
1216*795d594fSAndroid Build Coastguard Worker }
1217*795d594fSAndroid Build Coastguard Worker return str;
1218*795d594fSAndroid Build Coastguard Worker }
1219*795d594fSAndroid Build Coastguard Worker
RepeatFFFRoundingMode(void (Riscv64Assembler::* f)(FRegister,FRegister,FRegister,FPRoundingMode),const std::string & fmt)1220*795d594fSAndroid Build Coastguard Worker std::string RepeatFFFRoundingMode(
1221*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(FRegister, FRegister, FRegister, FPRoundingMode),
1222*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1223*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1224*795d594fSAndroid Build Coastguard Worker std::string str;
1225*795d594fSAndroid Build Coastguard Worker ArrayRef<const FRegister> fp_regs = GetFPRegisters();
1226*795d594fSAndroid Build Coastguard Worker for (FRegister reg1 : fp_regs) {
1227*795d594fSAndroid Build Coastguard Worker std::string base1 = fmt;
1228*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetFPRegName(reg1), &base1);
1229*795d594fSAndroid Build Coastguard Worker for (FRegister reg2 : fp_regs) {
1230*795d594fSAndroid Build Coastguard Worker std::string base2 = base1;
1231*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetFPRegName(reg2), &base2);
1232*795d594fSAndroid Build Coastguard Worker for (FRegister reg3 : fp_regs) {
1233*795d594fSAndroid Build Coastguard Worker std::string base3 = base2;
1234*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG3_TOKEN, GetFPRegName(reg3), &base3);
1235*795d594fSAndroid Build Coastguard Worker for (FPRoundingMode rm : kRoundingModes) {
1236*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, reg3, rm);
1237*795d594fSAndroid Build Coastguard Worker
1238*795d594fSAndroid Build Coastguard Worker std::string base = base3;
1239*795d594fSAndroid Build Coastguard Worker ReplaceRoundingMode(rm, &base);
1240*795d594fSAndroid Build Coastguard Worker str += base;
1241*795d594fSAndroid Build Coastguard Worker str += "\n";
1242*795d594fSAndroid Build Coastguard Worker }
1243*795d594fSAndroid Build Coastguard Worker }
1244*795d594fSAndroid Build Coastguard Worker }
1245*795d594fSAndroid Build Coastguard Worker }
1246*795d594fSAndroid Build Coastguard Worker return str;
1247*795d594fSAndroid Build Coastguard Worker }
1248*795d594fSAndroid Build Coastguard Worker
1249*795d594fSAndroid Build Coastguard Worker template <typename Reg, typename Imm>
RepeatCTemplateRegImm(void (Riscv64Assembler::* f)(Reg,Imm),ArrayRef<const Reg> registers,std::string (Base::* GetName)(const Reg &),int imm_bits,int shift,bool no_zero_imm,const std::string & fmt)1250*795d594fSAndroid Build Coastguard Worker std::string RepeatCTemplateRegImm(void (Riscv64Assembler::*f)(Reg, Imm),
1251*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg> registers,
1252*795d594fSAndroid Build Coastguard Worker std::string (Base::*GetName)(const Reg&),
1253*795d594fSAndroid Build Coastguard Worker int imm_bits,
1254*795d594fSAndroid Build Coastguard Worker int shift,
1255*795d594fSAndroid Build Coastguard Worker bool no_zero_imm,
1256*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1257*795d594fSAndroid Build Coastguard Worker auto imms = CreateImmediateValuesBits(abs(imm_bits), /*as_uint=*/imm_bits > 0, shift);
1258*795d594fSAndroid Build Coastguard Worker
1259*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1260*795d594fSAndroid Build Coastguard Worker std::string str;
1261*795d594fSAndroid Build Coastguard Worker for (Reg reg : registers) {
1262*795d594fSAndroid Build Coastguard Worker for (int64_t imm_raw : imms) {
1263*795d594fSAndroid Build Coastguard Worker if (no_zero_imm && imm_raw == 0) {
1264*795d594fSAndroid Build Coastguard Worker continue;
1265*795d594fSAndroid Build Coastguard Worker }
1266*795d594fSAndroid Build Coastguard Worker
1267*795d594fSAndroid Build Coastguard Worker Imm imm = CreateImmediate(imm_raw);
1268*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg, imm);
1269*795d594fSAndroid Build Coastguard Worker
1270*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1271*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG_TOKEN, (this->*GetName)(reg), &base);
1272*795d594fSAndroid Build Coastguard Worker ReplaceImm(imm, /*bias=*/0, /*multiplier=*/1, &base);
1273*795d594fSAndroid Build Coastguard Worker str += base;
1274*795d594fSAndroid Build Coastguard Worker str += "\n";
1275*795d594fSAndroid Build Coastguard Worker }
1276*795d594fSAndroid Build Coastguard Worker }
1277*795d594fSAndroid Build Coastguard Worker return str;
1278*795d594fSAndroid Build Coastguard Worker }
1279*795d594fSAndroid Build Coastguard Worker
1280*795d594fSAndroid Build Coastguard Worker template <typename Imm>
RepeatCRImm(void (Riscv64Assembler::* f)(XRegister,Imm),bool is_short,bool no_zero_reg,bool no_zero_imm,int imm_bits,int shift,const std::string & fmt)1281*795d594fSAndroid Build Coastguard Worker std::string RepeatCRImm(void (Riscv64Assembler::*f)(XRegister, Imm),
1282*795d594fSAndroid Build Coastguard Worker bool is_short,
1283*795d594fSAndroid Build Coastguard Worker bool no_zero_reg,
1284*795d594fSAndroid Build Coastguard Worker bool no_zero_imm,
1285*795d594fSAndroid Build Coastguard Worker int imm_bits,
1286*795d594fSAndroid Build Coastguard Worker int shift,
1287*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1288*795d594fSAndroid Build Coastguard Worker auto regs = is_short ? GetRegistersShort() : GetRegisters();
1289*795d594fSAndroid Build Coastguard Worker if (no_zero_reg) {
1290*795d594fSAndroid Build Coastguard Worker CHECK(!is_short);
1291*795d594fSAndroid Build Coastguard Worker CHECK_EQ(regs[0], Zero);
1292*795d594fSAndroid Build Coastguard Worker regs = regs.SubArray(1);
1293*795d594fSAndroid Build Coastguard Worker }
1294*795d594fSAndroid Build Coastguard Worker return RepeatCTemplateRegImm(
1295*795d594fSAndroid Build Coastguard Worker f, regs, &AssemblerRISCV64Test::GetRegisterName, imm_bits, shift, no_zero_imm, fmt);
1296*795d594fSAndroid Build Coastguard Worker }
1297*795d594fSAndroid Build Coastguard Worker
1298*795d594fSAndroid Build Coastguard Worker template <typename Imm>
RepeatCFImm(void (Riscv64Assembler::* f)(FRegister,Imm),int imm_bits,int shift,const std::string & fmt)1299*795d594fSAndroid Build Coastguard Worker std::string RepeatCFImm(void (Riscv64Assembler::*f)(FRegister, Imm),
1300*795d594fSAndroid Build Coastguard Worker int imm_bits,
1301*795d594fSAndroid Build Coastguard Worker int shift,
1302*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1303*795d594fSAndroid Build Coastguard Worker auto regs = GetFPRegisters();
1304*795d594fSAndroid Build Coastguard Worker return RepeatCTemplateRegImm(
1305*795d594fSAndroid Build Coastguard Worker f, regs, &AssemblerRISCV64Test::GetFPRegName, imm_bits, shift, /*no_zero_imm=*/false, fmt);
1306*795d594fSAndroid Build Coastguard Worker }
1307*795d594fSAndroid Build Coastguard Worker
1308*795d594fSAndroid Build Coastguard Worker template <typename Reg1>
RepeatTemplatedShortRegistersImm(void (Riscv64Assembler::* f)(Reg1,XRegister,int32_t),ArrayRef<const Reg1> reg1_registers,std::string (Base::* GetName1)(const Reg1 &),int imm_bits,int shift,bool no_zero_imm,const std::string & fmt)1309*795d594fSAndroid Build Coastguard Worker std::string RepeatTemplatedShortRegistersImm(void (Riscv64Assembler::*f)(Reg1,
1310*795d594fSAndroid Build Coastguard Worker XRegister,
1311*795d594fSAndroid Build Coastguard Worker int32_t),
1312*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg1> reg1_registers,
1313*795d594fSAndroid Build Coastguard Worker std::string (Base::*GetName1)(const Reg1&),
1314*795d594fSAndroid Build Coastguard Worker int imm_bits,
1315*795d594fSAndroid Build Coastguard Worker int shift,
1316*795d594fSAndroid Build Coastguard Worker bool no_zero_imm,
1317*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1318*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1319*795d594fSAndroid Build Coastguard Worker auto imms = CreateImmediateValuesBits(abs(imm_bits), imm_bits > 0, shift);
1320*795d594fSAndroid Build Coastguard Worker std::string str;
1321*795d594fSAndroid Build Coastguard Worker for (Reg1 reg1 : reg1_registers) {
1322*795d594fSAndroid Build Coastguard Worker for (XRegister reg2 : GetRegistersShort()) {
1323*795d594fSAndroid Build Coastguard Worker for (int64_t imm_raw : imms) {
1324*795d594fSAndroid Build Coastguard Worker if (no_zero_imm && imm_raw == 0) {
1325*795d594fSAndroid Build Coastguard Worker continue;
1326*795d594fSAndroid Build Coastguard Worker }
1327*795d594fSAndroid Build Coastguard Worker
1328*795d594fSAndroid Build Coastguard Worker int32_t imm = CreateImmediate(imm_raw);
1329*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, imm);
1330*795d594fSAndroid Build Coastguard Worker
1331*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1332*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
1333*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetRegisterName(reg2), &base);
1334*795d594fSAndroid Build Coastguard Worker ReplaceImm(imm, /*bias=*/0, /*multiplier=*/1, &base);
1335*795d594fSAndroid Build Coastguard Worker str += base;
1336*795d594fSAndroid Build Coastguard Worker str += "\n";
1337*795d594fSAndroid Build Coastguard Worker }
1338*795d594fSAndroid Build Coastguard Worker }
1339*795d594fSAndroid Build Coastguard Worker }
1340*795d594fSAndroid Build Coastguard Worker return str;
1341*795d594fSAndroid Build Coastguard Worker }
1342*795d594fSAndroid Build Coastguard Worker
RepeatCRRImm(void (Riscv64Assembler::* f)(XRegister,XRegister,int32_t),int imm_bits,int shift,const std::string & fmt)1343*795d594fSAndroid Build Coastguard Worker std::string RepeatCRRImm(void (Riscv64Assembler::*f)(XRegister, XRegister, int32_t),
1344*795d594fSAndroid Build Coastguard Worker int imm_bits,
1345*795d594fSAndroid Build Coastguard Worker int shift,
1346*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1347*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedShortRegistersImm(f,
1348*795d594fSAndroid Build Coastguard Worker GetRegistersShort(),
1349*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1350*795d594fSAndroid Build Coastguard Worker imm_bits,
1351*795d594fSAndroid Build Coastguard Worker shift,
1352*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
1353*795d594fSAndroid Build Coastguard Worker fmt);
1354*795d594fSAndroid Build Coastguard Worker }
1355*795d594fSAndroid Build Coastguard Worker
RepeatCFRImm(void (Riscv64Assembler::* f)(FRegister,XRegister,int32_t),int imm_bits,int shift,const std::string & fmt)1356*795d594fSAndroid Build Coastguard Worker std::string RepeatCFRImm(void (Riscv64Assembler::*f)(FRegister, XRegister, int32_t),
1357*795d594fSAndroid Build Coastguard Worker int imm_bits,
1358*795d594fSAndroid Build Coastguard Worker int shift,
1359*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1360*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedShortRegistersImm(f,
1361*795d594fSAndroid Build Coastguard Worker GetFPRegistersShort(),
1362*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetFPRegName,
1363*795d594fSAndroid Build Coastguard Worker imm_bits,
1364*795d594fSAndroid Build Coastguard Worker shift,
1365*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
1366*795d594fSAndroid Build Coastguard Worker fmt);
1367*795d594fSAndroid Build Coastguard Worker }
1368*795d594fSAndroid Build Coastguard Worker
RepeatCRRShort(void (Riscv64Assembler::* f)(XRegister,XRegister),const std::string & fmt)1369*795d594fSAndroid Build Coastguard Worker std::string RepeatCRRShort(void (Riscv64Assembler::*f)(XRegister, XRegister),
1370*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1371*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegisters(f,
1372*795d594fSAndroid Build Coastguard Worker GetRegistersShort(),
1373*795d594fSAndroid Build Coastguard Worker GetRegistersShort(),
1374*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1375*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1376*795d594fSAndroid Build Coastguard Worker fmt);
1377*795d594fSAndroid Build Coastguard Worker }
1378*795d594fSAndroid Build Coastguard Worker
RepeatCRRNonZero(void (Riscv64Assembler::* f)(XRegister,XRegister),const std::string & fmt)1379*795d594fSAndroid Build Coastguard Worker std::string RepeatCRRNonZero(void (Riscv64Assembler::*f)(XRegister, XRegister),
1380*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1381*795d594fSAndroid Build Coastguard Worker auto regs = GetRegisters();
1382*795d594fSAndroid Build Coastguard Worker CHECK_EQ(regs[0], Zero);
1383*795d594fSAndroid Build Coastguard Worker auto regs_no_zero = regs.SubArray(1);
1384*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegisters(f,
1385*795d594fSAndroid Build Coastguard Worker regs_no_zero,
1386*795d594fSAndroid Build Coastguard Worker regs_no_zero,
1387*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1388*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1389*795d594fSAndroid Build Coastguard Worker fmt);
1390*795d594fSAndroid Build Coastguard Worker }
1391*795d594fSAndroid Build Coastguard Worker
RepeatCRShort(void (Riscv64Assembler::* f)(XRegister),const std::string & fmt)1392*795d594fSAndroid Build Coastguard Worker std::string RepeatCRShort(void (Riscv64Assembler::*f)(XRegister), const std::string& fmt) {
1393*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegister(
1394*795d594fSAndroid Build Coastguard Worker f, GetRegistersShort(), &AssemblerRISCV64Test::GetRegisterName, fmt);
1395*795d594fSAndroid Build Coastguard Worker }
1396*795d594fSAndroid Build Coastguard Worker
1397*795d594fSAndroid Build Coastguard Worker template <typename Imm>
RepeatImm(void (Riscv64Assembler::* f)(Imm),bool no_zero_imm,int imm_bits,int shift,const std::string & fmt)1398*795d594fSAndroid Build Coastguard Worker std::string RepeatImm(void (Riscv64Assembler::*f)(Imm),
1399*795d594fSAndroid Build Coastguard Worker bool no_zero_imm,
1400*795d594fSAndroid Build Coastguard Worker int imm_bits,
1401*795d594fSAndroid Build Coastguard Worker int shift,
1402*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1403*795d594fSAndroid Build Coastguard Worker auto imms = CreateImmediateValuesBits(abs(imm_bits), imm_bits > 0, shift);
1404*795d594fSAndroid Build Coastguard Worker std::string str;
1405*795d594fSAndroid Build Coastguard Worker for (int64_t imm_raw : imms) {
1406*795d594fSAndroid Build Coastguard Worker if (no_zero_imm && imm_raw == 0) {
1407*795d594fSAndroid Build Coastguard Worker continue;
1408*795d594fSAndroid Build Coastguard Worker }
1409*795d594fSAndroid Build Coastguard Worker
1410*795d594fSAndroid Build Coastguard Worker Imm imm = CreateImmediate(imm_raw);
1411*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(imm);
1412*795d594fSAndroid Build Coastguard Worker
1413*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1414*795d594fSAndroid Build Coastguard Worker ReplaceImm(imm, /*bias=*/0, /*multiplier=*/1, &base);
1415*795d594fSAndroid Build Coastguard Worker str += base;
1416*795d594fSAndroid Build Coastguard Worker str += "\n";
1417*795d594fSAndroid Build Coastguard Worker }
1418*795d594fSAndroid Build Coastguard Worker
1419*795d594fSAndroid Build Coastguard Worker return str;
1420*795d594fSAndroid Build Coastguard Worker }
1421*795d594fSAndroid Build Coastguard Worker
RepeatRNoZero(void (Riscv64Assembler::* f)(XRegister),const std::string & fmt)1422*795d594fSAndroid Build Coastguard Worker std::string RepeatRNoZero(void (Riscv64Assembler::*f)(XRegister), const std::string& fmt) {
1423*795d594fSAndroid Build Coastguard Worker auto regs = GetRegisters();
1424*795d594fSAndroid Build Coastguard Worker CHECK_EQ(regs[0], Zero);
1425*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegister(
1426*795d594fSAndroid Build Coastguard Worker f, regs.SubArray(1), &AssemblerRISCV64Test::GetRegisterName, fmt);
1427*795d594fSAndroid Build Coastguard Worker }
1428*795d594fSAndroid Build Coastguard Worker
1429*795d594fSAndroid Build Coastguard Worker template <typename Reg1, typename Reg2>
RepeatTemplatedRegistersRoundingMode(void (Riscv64Assembler::* f)(Reg1,Reg2,FPRoundingMode),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)1430*795d594fSAndroid Build Coastguard Worker std::string RepeatTemplatedRegistersRoundingMode(
1431*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(Reg1, Reg2, FPRoundingMode),
1432*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg1> reg1_registers,
1433*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg2> reg2_registers,
1434*795d594fSAndroid Build Coastguard Worker std::string (Base::*GetName1)(const Reg1&),
1435*795d594fSAndroid Build Coastguard Worker std::string (Base::*GetName2)(const Reg2&),
1436*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1437*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1438*795d594fSAndroid Build Coastguard Worker std::string str;
1439*795d594fSAndroid Build Coastguard Worker for (Reg1 reg1 : reg1_registers) {
1440*795d594fSAndroid Build Coastguard Worker for (Reg2 reg2 : reg2_registers) {
1441*795d594fSAndroid Build Coastguard Worker for (FPRoundingMode rm : kRoundingModes) {
1442*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, rm);
1443*795d594fSAndroid Build Coastguard Worker
1444*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1445*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
1446*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
1447*795d594fSAndroid Build Coastguard Worker ReplaceRoundingMode(rm, &base);
1448*795d594fSAndroid Build Coastguard Worker str += base;
1449*795d594fSAndroid Build Coastguard Worker str += "\n";
1450*795d594fSAndroid Build Coastguard Worker }
1451*795d594fSAndroid Build Coastguard Worker }
1452*795d594fSAndroid Build Coastguard Worker }
1453*795d594fSAndroid Build Coastguard Worker return str;
1454*795d594fSAndroid Build Coastguard Worker }
1455*795d594fSAndroid Build Coastguard Worker
RepeatFFRoundingMode(void (Riscv64Assembler::* f)(FRegister,FRegister,FPRoundingMode),const std::string & fmt)1456*795d594fSAndroid Build Coastguard Worker std::string RepeatFFRoundingMode(
1457*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(FRegister, FRegister, FPRoundingMode),
1458*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1459*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersRoundingMode(f,
1460*795d594fSAndroid Build Coastguard Worker GetFPRegisters(),
1461*795d594fSAndroid Build Coastguard Worker GetFPRegisters(),
1462*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetFPRegName,
1463*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetFPRegName,
1464*795d594fSAndroid Build Coastguard Worker fmt);
1465*795d594fSAndroid Build Coastguard Worker }
1466*795d594fSAndroid Build Coastguard Worker
RepeatrFRoundingMode(void (Riscv64Assembler::* f)(XRegister,FRegister,FPRoundingMode),const std::string & fmt)1467*795d594fSAndroid Build Coastguard Worker std::string RepeatrFRoundingMode(
1468*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(XRegister, FRegister, FPRoundingMode),
1469*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1470*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersRoundingMode(f,
1471*795d594fSAndroid Build Coastguard Worker GetRegisters(),
1472*795d594fSAndroid Build Coastguard Worker GetFPRegisters(),
1473*795d594fSAndroid Build Coastguard Worker &Base::GetSecondaryRegisterName,
1474*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetFPRegName,
1475*795d594fSAndroid Build Coastguard Worker fmt);
1476*795d594fSAndroid Build Coastguard Worker }
1477*795d594fSAndroid Build Coastguard Worker
RepeatFrRoundingMode(void (Riscv64Assembler::* f)(FRegister,XRegister,FPRoundingMode),const std::string & fmt)1478*795d594fSAndroid Build Coastguard Worker std::string RepeatFrRoundingMode(
1479*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(FRegister, XRegister, FPRoundingMode),
1480*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1481*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersRoundingMode(f,
1482*795d594fSAndroid Build Coastguard Worker GetFPRegisters(),
1483*795d594fSAndroid Build Coastguard Worker GetRegisters(),
1484*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetFPRegName,
1485*795d594fSAndroid Build Coastguard Worker &Base::GetSecondaryRegisterName,
1486*795d594fSAndroid Build Coastguard Worker fmt);
1487*795d594fSAndroid Build Coastguard Worker }
1488*795d594fSAndroid Build Coastguard Worker
1489*795d594fSAndroid Build Coastguard Worker template <typename InvalidAqRl>
RepeatRRAqRl(void (Riscv64Assembler::* f)(XRegister,XRegister,AqRl),const std::string & fmt,InvalidAqRl && invalid_aqrl)1490*795d594fSAndroid Build Coastguard Worker std::string RepeatRRAqRl(void (Riscv64Assembler::*f)(XRegister, XRegister, AqRl),
1491*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1492*795d594fSAndroid Build Coastguard Worker InvalidAqRl&& invalid_aqrl) {
1493*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1494*795d594fSAndroid Build Coastguard Worker std::string str;
1495*795d594fSAndroid Build Coastguard Worker for (XRegister reg1 : GetRegisters()) {
1496*795d594fSAndroid Build Coastguard Worker for (XRegister reg2 : GetRegisters()) {
1497*795d594fSAndroid Build Coastguard Worker for (AqRl aqrl : kAqRls) {
1498*795d594fSAndroid Build Coastguard Worker if (invalid_aqrl(aqrl)) {
1499*795d594fSAndroid Build Coastguard Worker continue;
1500*795d594fSAndroid Build Coastguard Worker }
1501*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, aqrl);
1502*795d594fSAndroid Build Coastguard Worker
1503*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1504*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetRegisterName(reg1), &base);
1505*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetRegisterName(reg2), &base);
1506*795d594fSAndroid Build Coastguard Worker ReplaceAqRl(aqrl, &base);
1507*795d594fSAndroid Build Coastguard Worker str += base;
1508*795d594fSAndroid Build Coastguard Worker str += "\n";
1509*795d594fSAndroid Build Coastguard Worker }
1510*795d594fSAndroid Build Coastguard Worker }
1511*795d594fSAndroid Build Coastguard Worker }
1512*795d594fSAndroid Build Coastguard Worker return str;
1513*795d594fSAndroid Build Coastguard Worker }
1514*795d594fSAndroid Build Coastguard Worker
1515*795d594fSAndroid Build Coastguard Worker template <typename InvalidAqRl>
RepeatRRRAqRl(void (Riscv64Assembler::* f)(XRegister,XRegister,XRegister,AqRl),const std::string & fmt,InvalidAqRl && invalid_aqrl)1516*795d594fSAndroid Build Coastguard Worker std::string RepeatRRRAqRl(void (Riscv64Assembler::*f)(XRegister, XRegister, XRegister, AqRl),
1517*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1518*795d594fSAndroid Build Coastguard Worker InvalidAqRl&& invalid_aqrl) {
1519*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1520*795d594fSAndroid Build Coastguard Worker std::string str;
1521*795d594fSAndroid Build Coastguard Worker ArrayRef<const XRegister> regs = GetRegisters();
1522*795d594fSAndroid Build Coastguard Worker for (XRegister reg1 : regs) {
1523*795d594fSAndroid Build Coastguard Worker std::string base1 = fmt;
1524*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetRegisterName(reg1), &base1);
1525*795d594fSAndroid Build Coastguard Worker for (XRegister reg2 : regs) {
1526*795d594fSAndroid Build Coastguard Worker std::string base2 = base1;
1527*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetRegisterName(reg2), &base2);
1528*795d594fSAndroid Build Coastguard Worker for (XRegister reg3 : regs) {
1529*795d594fSAndroid Build Coastguard Worker std::string base3 = base2;
1530*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG3_TOKEN, GetRegisterName(reg3), &base3);
1531*795d594fSAndroid Build Coastguard Worker for (AqRl aqrl : kAqRls) {
1532*795d594fSAndroid Build Coastguard Worker if (invalid_aqrl(aqrl)) {
1533*795d594fSAndroid Build Coastguard Worker continue;
1534*795d594fSAndroid Build Coastguard Worker }
1535*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, reg3, aqrl);
1536*795d594fSAndroid Build Coastguard Worker
1537*795d594fSAndroid Build Coastguard Worker std::string base = base3;
1538*795d594fSAndroid Build Coastguard Worker ReplaceAqRl(aqrl, &base);
1539*795d594fSAndroid Build Coastguard Worker str += base;
1540*795d594fSAndroid Build Coastguard Worker str += "\n";
1541*795d594fSAndroid Build Coastguard Worker }
1542*795d594fSAndroid Build Coastguard Worker }
1543*795d594fSAndroid Build Coastguard Worker }
1544*795d594fSAndroid Build Coastguard Worker }
1545*795d594fSAndroid Build Coastguard Worker return str;
1546*795d594fSAndroid Build Coastguard Worker }
1547*795d594fSAndroid Build Coastguard Worker
RepeatRRRAqRl(void (Riscv64Assembler::* f)(XRegister,XRegister,XRegister,AqRl),const std::string & fmt)1548*795d594fSAndroid Build Coastguard Worker std::string RepeatRRRAqRl(void (Riscv64Assembler::*f)(XRegister, XRegister, XRegister, AqRl),
1549*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1550*795d594fSAndroid Build Coastguard Worker return RepeatRRRAqRl(f, fmt, [](AqRl) { return false; });
1551*795d594fSAndroid Build Coastguard Worker }
1552*795d594fSAndroid Build Coastguard Worker
RepeatCsrrX(void (Riscv64Assembler::* f)(XRegister,uint32_t,XRegister),const std::string & fmt)1553*795d594fSAndroid Build Coastguard Worker std::string RepeatCsrrX(void (Riscv64Assembler::*f)(XRegister, uint32_t, XRegister),
1554*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1555*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1556*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> csrs = CreateImmediateValuesBits(12, /*as_uint=*/ true);
1557*795d594fSAndroid Build Coastguard Worker std::string str;
1558*795d594fSAndroid Build Coastguard Worker for (XRegister reg1 : GetRegisters()) {
1559*795d594fSAndroid Build Coastguard Worker for (int64_t csr : csrs) {
1560*795d594fSAndroid Build Coastguard Worker for (XRegister reg2 : GetRegisters()) {
1561*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, dchecked_integral_cast<uint32_t>(csr), reg2);
1562*795d594fSAndroid Build Coastguard Worker
1563*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1564*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetRegisterName(reg1), &base);
1565*795d594fSAndroid Build Coastguard Worker ReplaceCsrrImm(CSR_TOKEN, csr, &base);
1566*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetRegisterName(reg2), &base);
1567*795d594fSAndroid Build Coastguard Worker str += base;
1568*795d594fSAndroid Build Coastguard Worker str += "\n";
1569*795d594fSAndroid Build Coastguard Worker }
1570*795d594fSAndroid Build Coastguard Worker }
1571*795d594fSAndroid Build Coastguard Worker }
1572*795d594fSAndroid Build Coastguard Worker return str;
1573*795d594fSAndroid Build Coastguard Worker }
1574*795d594fSAndroid Build Coastguard Worker
RepeatCsrrXi(void (Riscv64Assembler::* f)(XRegister,uint32_t,uint32_t),const std::string & fmt)1575*795d594fSAndroid Build Coastguard Worker std::string RepeatCsrrXi(void (Riscv64Assembler::*f)(XRegister, uint32_t, uint32_t),
1576*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1577*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1578*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> csrs = CreateImmediateValuesBits(12, /*as_uint=*/ true);
1579*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> uimms = CreateImmediateValuesBits(2, /*as_uint=*/ true);
1580*795d594fSAndroid Build Coastguard Worker std::string str;
1581*795d594fSAndroid Build Coastguard Worker for (XRegister reg : GetRegisters()) {
1582*795d594fSAndroid Build Coastguard Worker for (int64_t csr : csrs) {
1583*795d594fSAndroid Build Coastguard Worker for (int64_t uimm : uimms) {
1584*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(
1585*795d594fSAndroid Build Coastguard Worker reg, dchecked_integral_cast<uint32_t>(csr), dchecked_integral_cast<uint32_t>(uimm));
1586*795d594fSAndroid Build Coastguard Worker
1587*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1588*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG_TOKEN, GetRegisterName(reg), &base);
1589*795d594fSAndroid Build Coastguard Worker ReplaceCsrrImm(CSR_TOKEN, csr, &base);
1590*795d594fSAndroid Build Coastguard Worker ReplaceCsrrImm(UIMM_TOKEN, uimm, &base);
1591*795d594fSAndroid Build Coastguard Worker str += base;
1592*795d594fSAndroid Build Coastguard Worker str += "\n";
1593*795d594fSAndroid Build Coastguard Worker }
1594*795d594fSAndroid Build Coastguard Worker }
1595*795d594fSAndroid Build Coastguard Worker }
1596*795d594fSAndroid Build Coastguard Worker return str;
1597*795d594fSAndroid Build Coastguard Worker }
1598*795d594fSAndroid Build Coastguard Worker
RepeatVRAligned(void (Riscv64Assembler::* f)(VRegister,XRegister),uint32_t alignment,const std::string & fmt)1599*795d594fSAndroid Build Coastguard Worker std::string RepeatVRAligned(void (Riscv64Assembler::*f)(VRegister, XRegister),
1600*795d594fSAndroid Build Coastguard Worker uint32_t alignment,
1601*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1602*795d594fSAndroid Build Coastguard Worker WarnOnCombinations(GetVectorRegisters().size() * GetRegisters().size());
1603*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1604*795d594fSAndroid Build Coastguard Worker
1605*795d594fSAndroid Build Coastguard Worker std::string str;
1606*795d594fSAndroid Build Coastguard Worker for (auto reg1 : GetVectorRegisters()) {
1607*795d594fSAndroid Build Coastguard Worker for (auto reg2 : GetRegisters()) {
1608*795d594fSAndroid Build Coastguard Worker if ((static_cast<uint32_t>(reg1) % alignment) != 0) {
1609*795d594fSAndroid Build Coastguard Worker continue;
1610*795d594fSAndroid Build Coastguard Worker }
1611*795d594fSAndroid Build Coastguard Worker
1612*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2);
1613*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1614*795d594fSAndroid Build Coastguard Worker
1615*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetVecRegName(reg1), &base);
1616*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetRegisterName(reg2), &base);
1617*795d594fSAndroid Build Coastguard Worker
1618*795d594fSAndroid Build Coastguard Worker str += base;
1619*795d594fSAndroid Build Coastguard Worker str += "\n";
1620*795d594fSAndroid Build Coastguard Worker }
1621*795d594fSAndroid Build Coastguard Worker }
1622*795d594fSAndroid Build Coastguard Worker return str;
1623*795d594fSAndroid Build Coastguard Worker }
1624*795d594fSAndroid Build Coastguard Worker
RepeatVVAligned(void (Riscv64Assembler::* f)(VRegister,VRegister),uint32_t alignment,const std::string & fmt)1625*795d594fSAndroid Build Coastguard Worker std::string RepeatVVAligned(void (Riscv64Assembler::*f)(VRegister, VRegister),
1626*795d594fSAndroid Build Coastguard Worker uint32_t alignment,
1627*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1628*795d594fSAndroid Build Coastguard Worker WarnOnCombinations(GetVectorRegisters().size() * GetRegisters().size());
1629*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1630*795d594fSAndroid Build Coastguard Worker
1631*795d594fSAndroid Build Coastguard Worker std::string str;
1632*795d594fSAndroid Build Coastguard Worker for (auto reg1 : GetVectorRegisters()) {
1633*795d594fSAndroid Build Coastguard Worker if ((static_cast<uint32_t>(reg1) % alignment) != 0) {
1634*795d594fSAndroid Build Coastguard Worker continue;
1635*795d594fSAndroid Build Coastguard Worker }
1636*795d594fSAndroid Build Coastguard Worker for (auto reg2 : GetVectorRegisters()) {
1637*795d594fSAndroid Build Coastguard Worker if ((static_cast<uint32_t>(reg2) % alignment) != 0) {
1638*795d594fSAndroid Build Coastguard Worker continue;
1639*795d594fSAndroid Build Coastguard Worker }
1640*795d594fSAndroid Build Coastguard Worker
1641*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2);
1642*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1643*795d594fSAndroid Build Coastguard Worker
1644*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetVecRegName(reg1), &base);
1645*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetVecRegName(reg2), &base);
1646*795d594fSAndroid Build Coastguard Worker
1647*795d594fSAndroid Build Coastguard Worker str += base;
1648*795d594fSAndroid Build Coastguard Worker str += "\n";
1649*795d594fSAndroid Build Coastguard Worker }
1650*795d594fSAndroid Build Coastguard Worker }
1651*795d594fSAndroid Build Coastguard Worker return str;
1652*795d594fSAndroid Build Coastguard Worker }
1653*795d594fSAndroid Build Coastguard Worker
1654*795d594fSAndroid Build Coastguard Worker template <typename Reg1, typename Reg2, typename Reg3, typename Predicate>
RepeatTemplatedRegistersVmFiltered(void (Riscv64Assembler::* f)(Reg1,Reg2,Reg3,Riscv64Assembler::VM),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 &),Predicate && pred,const std::string & fmt)1655*795d594fSAndroid Build Coastguard Worker std::string RepeatTemplatedRegistersVmFiltered(
1656*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(Reg1, Reg2, Reg3, Riscv64Assembler::VM),
1657*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg1> reg1_registers,
1658*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg2> reg2_registers,
1659*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg3> reg3_registers,
1660*795d594fSAndroid Build Coastguard Worker std::string (AssemblerTest::*GetName1)(const Reg1&),
1661*795d594fSAndroid Build Coastguard Worker std::string (AssemblerTest::*GetName2)(const Reg2&),
1662*795d594fSAndroid Build Coastguard Worker std::string (AssemblerTest::*GetName3)(const Reg3&),
1663*795d594fSAndroid Build Coastguard Worker Predicate&& pred,
1664*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1665*795d594fSAndroid Build Coastguard Worker WarnOnCombinations(reg1_registers.size() * reg2_registers.size() * reg3_registers.size());
1666*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1667*795d594fSAndroid Build Coastguard Worker
1668*795d594fSAndroid Build Coastguard Worker std::string str;
1669*795d594fSAndroid Build Coastguard Worker for (auto reg1 : reg1_registers) {
1670*795d594fSAndroid Build Coastguard Worker std::string base1 = fmt;
1671*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base1);
1672*795d594fSAndroid Build Coastguard Worker for (auto reg2 : reg2_registers) {
1673*795d594fSAndroid Build Coastguard Worker std::string base2 = base1;
1674*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base2);
1675*795d594fSAndroid Build Coastguard Worker for (auto reg3 : reg3_registers) {
1676*795d594fSAndroid Build Coastguard Worker std::string base3 = base2;
1677*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG3_TOKEN, (this->*GetName3)(reg3), &base3);
1678*795d594fSAndroid Build Coastguard Worker for (Riscv64Assembler::VM vm : kVMs) {
1679*795d594fSAndroid Build Coastguard Worker if (!pred(reg1, reg2, reg3, vm)) {
1680*795d594fSAndroid Build Coastguard Worker continue;
1681*795d594fSAndroid Build Coastguard Worker }
1682*795d594fSAndroid Build Coastguard Worker
1683*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, reg3, vm);
1684*795d594fSAndroid Build Coastguard Worker std::string base = base3;
1685*795d594fSAndroid Build Coastguard Worker
1686*795d594fSAndroid Build Coastguard Worker ReplaceVm(vm, &base);
1687*795d594fSAndroid Build Coastguard Worker
1688*795d594fSAndroid Build Coastguard Worker str += base;
1689*795d594fSAndroid Build Coastguard Worker str += "\n";
1690*795d594fSAndroid Build Coastguard Worker }
1691*795d594fSAndroid Build Coastguard Worker }
1692*795d594fSAndroid Build Coastguard Worker }
1693*795d594fSAndroid Build Coastguard Worker }
1694*795d594fSAndroid Build Coastguard Worker return str;
1695*795d594fSAndroid Build Coastguard Worker }
1696*795d594fSAndroid Build Coastguard Worker
1697*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVRRVmFiltered(void (Riscv64Assembler::* f)(VRegister,XRegister,XRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)1698*795d594fSAndroid Build Coastguard Worker std::string RepeatVRRVmFiltered(
1699*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, XRegister, XRegister, Riscv64Assembler::VM),
1700*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1701*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1702*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersVmFiltered(f,
1703*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1704*795d594fSAndroid Build Coastguard Worker GetRegisters(),
1705*795d594fSAndroid Build Coastguard Worker GetRegisters(),
1706*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1707*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1708*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1709*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
1710*795d594fSAndroid Build Coastguard Worker fmt);
1711*795d594fSAndroid Build Coastguard Worker }
1712*795d594fSAndroid Build Coastguard Worker
RepeatVRRVm(void (Riscv64Assembler::* f)(VRegister,XRegister,XRegister,Riscv64Assembler::VM),const std::string & fmt)1713*795d594fSAndroid Build Coastguard Worker std::string RepeatVRRVm(
1714*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, XRegister, XRegister, Riscv64Assembler::VM),
1715*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1716*795d594fSAndroid Build Coastguard Worker return RepeatVRRVmFiltered(
1717*795d594fSAndroid Build Coastguard Worker f, fmt, [](VRegister, XRegister, XRegister, Riscv64Assembler::VM) { return true; });
1718*795d594fSAndroid Build Coastguard Worker }
1719*795d594fSAndroid Build Coastguard Worker
1720*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVVRVmFiltered(void (Riscv64Assembler::* f)(VRegister,VRegister,XRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)1721*795d594fSAndroid Build Coastguard Worker std::string RepeatVVRVmFiltered(
1722*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, VRegister, XRegister, Riscv64Assembler::VM),
1723*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1724*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1725*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersVmFiltered(f,
1726*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1727*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1728*795d594fSAndroid Build Coastguard Worker GetRegisters(),
1729*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1730*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1731*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1732*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
1733*795d594fSAndroid Build Coastguard Worker fmt);
1734*795d594fSAndroid Build Coastguard Worker }
1735*795d594fSAndroid Build Coastguard Worker
1736*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVRVVmFiltered(void (Riscv64Assembler::* f)(VRegister,XRegister,VRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)1737*795d594fSAndroid Build Coastguard Worker std::string RepeatVRVVmFiltered(
1738*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, XRegister, VRegister, Riscv64Assembler::VM),
1739*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1740*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1741*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersVmFiltered(f,
1742*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1743*795d594fSAndroid Build Coastguard Worker GetRegisters(),
1744*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1745*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1746*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1747*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1748*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
1749*795d594fSAndroid Build Coastguard Worker fmt);
1750*795d594fSAndroid Build Coastguard Worker }
1751*795d594fSAndroid Build Coastguard Worker
RepeatVRVVm(void (Riscv64Assembler::* f)(VRegister,XRegister,VRegister,Riscv64Assembler::VM),const std::string & fmt)1752*795d594fSAndroid Build Coastguard Worker std::string RepeatVRVVm(
1753*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, XRegister, VRegister, Riscv64Assembler::VM),
1754*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1755*795d594fSAndroid Build Coastguard Worker return RepeatVRVVmFiltered(
1756*795d594fSAndroid Build Coastguard Worker f, fmt, [](VRegister, XRegister, VRegister, Riscv64Assembler::VM) { return true; });
1757*795d594fSAndroid Build Coastguard Worker }
1758*795d594fSAndroid Build Coastguard Worker
1759*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVVVVmFiltered(void (Riscv64Assembler::* f)(VRegister,VRegister,VRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)1760*795d594fSAndroid Build Coastguard Worker std::string RepeatVVVVmFiltered(
1761*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, VRegister, VRegister, Riscv64Assembler::VM),
1762*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1763*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1764*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersVmFiltered(f,
1765*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1766*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1767*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1768*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1769*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1770*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1771*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
1772*795d594fSAndroid Build Coastguard Worker fmt);
1773*795d594fSAndroid Build Coastguard Worker }
1774*795d594fSAndroid Build Coastguard Worker
RepeatVVVVm(void (Riscv64Assembler::* f)(VRegister,VRegister,VRegister,Riscv64Assembler::VM),const std::string & fmt)1775*795d594fSAndroid Build Coastguard Worker std::string RepeatVVVVm(
1776*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, VRegister, VRegister, Riscv64Assembler::VM),
1777*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1778*795d594fSAndroid Build Coastguard Worker return RepeatVVVVmFiltered(
1779*795d594fSAndroid Build Coastguard Worker f, fmt, [](VRegister, VRegister, VRegister, Riscv64Assembler::VM) { return true; });
1780*795d594fSAndroid Build Coastguard Worker }
1781*795d594fSAndroid Build Coastguard Worker
1782*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVVFVmFiltered(void (Riscv64Assembler::* f)(VRegister,VRegister,FRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)1783*795d594fSAndroid Build Coastguard Worker std::string RepeatVVFVmFiltered(
1784*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, VRegister, FRegister, Riscv64Assembler::VM),
1785*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1786*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1787*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersVmFiltered(f,
1788*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1789*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1790*795d594fSAndroid Build Coastguard Worker GetFPRegisters(),
1791*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1792*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1793*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetFPRegName,
1794*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
1795*795d594fSAndroid Build Coastguard Worker fmt);
1796*795d594fSAndroid Build Coastguard Worker }
1797*795d594fSAndroid Build Coastguard Worker
1798*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVFVVmFiltered(void (Riscv64Assembler::* f)(VRegister,FRegister,VRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)1799*795d594fSAndroid Build Coastguard Worker std::string RepeatVFVVmFiltered(
1800*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, FRegister, VRegister, Riscv64Assembler::VM),
1801*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1802*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1803*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersVmFiltered(f,
1804*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1805*795d594fSAndroid Build Coastguard Worker GetFPRegisters(),
1806*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1807*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1808*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetFPRegName,
1809*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1810*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
1811*795d594fSAndroid Build Coastguard Worker fmt);
1812*795d594fSAndroid Build Coastguard Worker }
1813*795d594fSAndroid Build Coastguard Worker
1814*795d594fSAndroid Build Coastguard Worker template <typename Reg1, typename Reg2, typename Reg3, typename Predicate>
RepeatTemplatedRegistersFiltered(void (Riscv64Assembler::* f)(Reg1,Reg2,Reg3),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 &),Predicate && pred,const std::string & fmt)1815*795d594fSAndroid Build Coastguard Worker std::string RepeatTemplatedRegistersFiltered(void (Riscv64Assembler::*f)(Reg1, Reg2, Reg3),
1816*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg1> reg1_registers,
1817*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg2> reg2_registers,
1818*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg3> reg3_registers,
1819*795d594fSAndroid Build Coastguard Worker std::string (AssemblerTest::*GetName1)(const Reg1&),
1820*795d594fSAndroid Build Coastguard Worker std::string (AssemblerTest::*GetName2)(const Reg2&),
1821*795d594fSAndroid Build Coastguard Worker std::string (AssemblerTest::*GetName3)(const Reg3&),
1822*795d594fSAndroid Build Coastguard Worker Predicate&& pred,
1823*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1824*795d594fSAndroid Build Coastguard Worker WarnOnCombinations(reg1_registers.size() * reg2_registers.size() * reg3_registers.size());
1825*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1826*795d594fSAndroid Build Coastguard Worker
1827*795d594fSAndroid Build Coastguard Worker std::string str;
1828*795d594fSAndroid Build Coastguard Worker for (auto reg1 : reg1_registers) {
1829*795d594fSAndroid Build Coastguard Worker for (auto reg2 : reg2_registers) {
1830*795d594fSAndroid Build Coastguard Worker for (auto reg3 : reg3_registers) {
1831*795d594fSAndroid Build Coastguard Worker if (!pred(reg1, reg2, reg3)) {
1832*795d594fSAndroid Build Coastguard Worker continue;
1833*795d594fSAndroid Build Coastguard Worker }
1834*795d594fSAndroid Build Coastguard Worker
1835*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, reg3);
1836*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1837*795d594fSAndroid Build Coastguard Worker
1838*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
1839*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
1840*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG3_TOKEN, (this->*GetName3)(reg3), &base);
1841*795d594fSAndroid Build Coastguard Worker
1842*795d594fSAndroid Build Coastguard Worker str += base;
1843*795d594fSAndroid Build Coastguard Worker str += "\n";
1844*795d594fSAndroid Build Coastguard Worker }
1845*795d594fSAndroid Build Coastguard Worker }
1846*795d594fSAndroid Build Coastguard Worker }
1847*795d594fSAndroid Build Coastguard Worker return str;
1848*795d594fSAndroid Build Coastguard Worker }
1849*795d594fSAndroid Build Coastguard Worker
1850*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVVRFiltered(void (Riscv64Assembler::* f)(VRegister,VRegister,XRegister),const std::string & fmt,Predicate && pred)1851*795d594fSAndroid Build Coastguard Worker std::string RepeatVVRFiltered(void (Riscv64Assembler::*f)(VRegister, VRegister, XRegister),
1852*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1853*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1854*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersFiltered(f,
1855*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1856*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1857*795d594fSAndroid Build Coastguard Worker GetRegisters(),
1858*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1859*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1860*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
1861*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
1862*795d594fSAndroid Build Coastguard Worker fmt);
1863*795d594fSAndroid Build Coastguard Worker }
1864*795d594fSAndroid Build Coastguard Worker
1865*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVVVFiltered(void (Riscv64Assembler::* f)(VRegister,VRegister,VRegister),const std::string & fmt,Predicate && pred)1866*795d594fSAndroid Build Coastguard Worker std::string RepeatVVVFiltered(void (Riscv64Assembler::*f)(VRegister, VRegister, VRegister),
1867*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1868*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1869*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersFiltered(f,
1870*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1871*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1872*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1873*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1874*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1875*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1876*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
1877*795d594fSAndroid Build Coastguard Worker fmt);
1878*795d594fSAndroid Build Coastguard Worker }
1879*795d594fSAndroid Build Coastguard Worker
1880*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVVFFiltered(void (Riscv64Assembler::* f)(VRegister,VRegister,FRegister),const std::string & fmt,Predicate && pred)1881*795d594fSAndroid Build Coastguard Worker std::string RepeatVVFFiltered(void (Riscv64Assembler::*f)(VRegister, VRegister, FRegister),
1882*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1883*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1884*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersFiltered(f,
1885*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1886*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
1887*795d594fSAndroid Build Coastguard Worker GetFPRegisters(),
1888*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1889*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
1890*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetFPRegName,
1891*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
1892*795d594fSAndroid Build Coastguard Worker fmt);
1893*795d594fSAndroid Build Coastguard Worker }
1894*795d594fSAndroid Build Coastguard Worker
1895*795d594fSAndroid Build Coastguard Worker template <typename Predicate, typename ImmType>
RepeatVVIFiltered(void (Riscv64Assembler::* f)(VRegister,VRegister,ImmType),int imm_bits,const std::string & fmt,Predicate && pred)1896*795d594fSAndroid Build Coastguard Worker std::string RepeatVVIFiltered(void (Riscv64Assembler::*f)(VRegister, VRegister, ImmType),
1897*795d594fSAndroid Build Coastguard Worker int imm_bits,
1898*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1899*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
1900*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1901*795d594fSAndroid Build Coastguard Worker std::string str;
1902*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> imms = CreateImmediateValuesBits(abs(imm_bits), (imm_bits > 0));
1903*795d594fSAndroid Build Coastguard Worker
1904*795d594fSAndroid Build Coastguard Worker WarnOnCombinations(GetVectorRegisters().size() * GetVectorRegisters().size() * imms.size());
1905*795d594fSAndroid Build Coastguard Worker
1906*795d594fSAndroid Build Coastguard Worker for (VRegister reg1 : GetVectorRegisters()) {
1907*795d594fSAndroid Build Coastguard Worker for (VRegister reg2 : GetVectorRegisters()) {
1908*795d594fSAndroid Build Coastguard Worker for (int64_t imm : imms) {
1909*795d594fSAndroid Build Coastguard Worker ImmType new_imm = CreateImmediate(imm);
1910*795d594fSAndroid Build Coastguard Worker
1911*795d594fSAndroid Build Coastguard Worker if (!pred(reg1, reg2, new_imm)) {
1912*795d594fSAndroid Build Coastguard Worker continue;
1913*795d594fSAndroid Build Coastguard Worker }
1914*795d594fSAndroid Build Coastguard Worker
1915*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, new_imm);
1916*795d594fSAndroid Build Coastguard Worker
1917*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1918*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetVecRegName(reg1), &base);
1919*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetVecRegName(reg2), &base);
1920*795d594fSAndroid Build Coastguard Worker ReplaceImm(imm, /*bias=*/ 0, /*multiplier=*/ 1, &base);
1921*795d594fSAndroid Build Coastguard Worker str += base;
1922*795d594fSAndroid Build Coastguard Worker str += "\n";
1923*795d594fSAndroid Build Coastguard Worker }
1924*795d594fSAndroid Build Coastguard Worker }
1925*795d594fSAndroid Build Coastguard Worker }
1926*795d594fSAndroid Build Coastguard Worker return str;
1927*795d594fSAndroid Build Coastguard Worker }
1928*795d594fSAndroid Build Coastguard Worker
1929*795d594fSAndroid Build Coastguard Worker template <typename Predicate, typename ImmType>
RepeatVVIbVmFiltered(void (Riscv64Assembler::* f)(VRegister,VRegister,ImmType,Riscv64Assembler::VM),int imm_bits,const std::string & fmt,Predicate && pred,ImmType bias=0)1930*795d594fSAndroid Build Coastguard Worker std::string RepeatVVIbVmFiltered(
1931*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(VRegister, VRegister, ImmType, Riscv64Assembler::VM),
1932*795d594fSAndroid Build Coastguard Worker int imm_bits,
1933*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
1934*795d594fSAndroid Build Coastguard Worker Predicate&& pred,
1935*795d594fSAndroid Build Coastguard Worker ImmType bias = 0) {
1936*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1937*795d594fSAndroid Build Coastguard Worker std::string str;
1938*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> imms = CreateImmediateValuesBits(abs(imm_bits), (imm_bits > 0));
1939*795d594fSAndroid Build Coastguard Worker
1940*795d594fSAndroid Build Coastguard Worker WarnOnCombinations(2 * GetVectorRegisters().size() * GetVectorRegisters().size() * imms.size());
1941*795d594fSAndroid Build Coastguard Worker
1942*795d594fSAndroid Build Coastguard Worker ArrayRef<const VRegister> vector_regs = GetVectorRegisters();
1943*795d594fSAndroid Build Coastguard Worker for (auto reg1 : vector_regs) {
1944*795d594fSAndroid Build Coastguard Worker std::string base1 = fmt;
1945*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetVecRegName(reg1), &base1);
1946*795d594fSAndroid Build Coastguard Worker for (auto reg2 : vector_regs) {
1947*795d594fSAndroid Build Coastguard Worker std::string base2 = base1;
1948*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetVecRegName(reg2), &base2);
1949*795d594fSAndroid Build Coastguard Worker for (int64_t imm : imms) {
1950*795d594fSAndroid Build Coastguard Worker std::string base3 = base2;
1951*795d594fSAndroid Build Coastguard Worker ReplaceImm(imm, bias, /*multiplier=*/ 1, &base3);
1952*795d594fSAndroid Build Coastguard Worker for (Riscv64Assembler::VM vm : kVMs) {
1953*795d594fSAndroid Build Coastguard Worker if (!pred(reg1, reg2, imm, vm)) {
1954*795d594fSAndroid Build Coastguard Worker continue;
1955*795d594fSAndroid Build Coastguard Worker }
1956*795d594fSAndroid Build Coastguard Worker
1957*795d594fSAndroid Build Coastguard Worker ImmType new_imm = CreateImmediate(imm) + bias;
1958*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, new_imm, vm);
1959*795d594fSAndroid Build Coastguard Worker
1960*795d594fSAndroid Build Coastguard Worker std::string base = base3;
1961*795d594fSAndroid Build Coastguard Worker ReplaceVm(vm, &base);
1962*795d594fSAndroid Build Coastguard Worker str += base;
1963*795d594fSAndroid Build Coastguard Worker str += "\n";
1964*795d594fSAndroid Build Coastguard Worker }
1965*795d594fSAndroid Build Coastguard Worker }
1966*795d594fSAndroid Build Coastguard Worker }
1967*795d594fSAndroid Build Coastguard Worker }
1968*795d594fSAndroid Build Coastguard Worker return str;
1969*795d594fSAndroid Build Coastguard Worker }
1970*795d594fSAndroid Build Coastguard Worker
1971*795d594fSAndroid Build Coastguard Worker template <typename Reg1, typename Reg2, typename Predicate>
RepeatTemplatedRegistersVmFiltered(void (Riscv64Assembler::* f)(Reg1,Reg2,Riscv64Assembler::VM),ArrayRef<const Reg1> reg1_registers,ArrayRef<const Reg2> reg2_registers,std::string (AssemblerTest::* GetName1)(const Reg1 &),std::string (AssemblerTest::* GetName2)(const Reg2 &),Predicate && pred,const std::string & fmt)1972*795d594fSAndroid Build Coastguard Worker std::string RepeatTemplatedRegistersVmFiltered(
1973*795d594fSAndroid Build Coastguard Worker void (Riscv64Assembler::*f)(Reg1, Reg2, Riscv64Assembler::VM),
1974*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg1> reg1_registers,
1975*795d594fSAndroid Build Coastguard Worker ArrayRef<const Reg2> reg2_registers,
1976*795d594fSAndroid Build Coastguard Worker std::string (AssemblerTest::*GetName1)(const Reg1&),
1977*795d594fSAndroid Build Coastguard Worker std::string (AssemblerTest::*GetName2)(const Reg2&),
1978*795d594fSAndroid Build Coastguard Worker Predicate&& pred,
1979*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
1980*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
1981*795d594fSAndroid Build Coastguard Worker
1982*795d594fSAndroid Build Coastguard Worker WarnOnCombinations(2 * reg2_registers.size() * reg1_registers.size());
1983*795d594fSAndroid Build Coastguard Worker
1984*795d594fSAndroid Build Coastguard Worker std::string str;
1985*795d594fSAndroid Build Coastguard Worker for (auto reg1 : reg1_registers) {
1986*795d594fSAndroid Build Coastguard Worker for (auto reg2 : reg2_registers) {
1987*795d594fSAndroid Build Coastguard Worker for (Riscv64Assembler::VM vm : kVMs) {
1988*795d594fSAndroid Build Coastguard Worker if (!pred(reg1, reg2, vm)) {
1989*795d594fSAndroid Build Coastguard Worker continue;
1990*795d594fSAndroid Build Coastguard Worker }
1991*795d594fSAndroid Build Coastguard Worker
1992*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, reg2, vm);
1993*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
1994*795d594fSAndroid Build Coastguard Worker
1995*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, (this->*GetName1)(reg1), &base);
1996*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, (this->*GetName2)(reg2), &base);
1997*795d594fSAndroid Build Coastguard Worker ReplaceVm(vm, &base);
1998*795d594fSAndroid Build Coastguard Worker
1999*795d594fSAndroid Build Coastguard Worker str += base;
2000*795d594fSAndroid Build Coastguard Worker str += "\n";
2001*795d594fSAndroid Build Coastguard Worker }
2002*795d594fSAndroid Build Coastguard Worker }
2003*795d594fSAndroid Build Coastguard Worker }
2004*795d594fSAndroid Build Coastguard Worker return str;
2005*795d594fSAndroid Build Coastguard Worker }
2006*795d594fSAndroid Build Coastguard Worker
2007*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatRVVmFiltered(void (Riscv64Assembler::* f)(XRegister,VRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)2008*795d594fSAndroid Build Coastguard Worker std::string RepeatRVVmFiltered(void (Riscv64Assembler::*f)(XRegister,
2009*795d594fSAndroid Build Coastguard Worker VRegister,
2010*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::VM),
2011*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
2012*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
2013*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersVmFiltered(f,
2014*795d594fSAndroid Build Coastguard Worker GetRegisters(),
2015*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
2016*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
2017*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
2018*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
2019*795d594fSAndroid Build Coastguard Worker fmt);
2020*795d594fSAndroid Build Coastguard Worker }
2021*795d594fSAndroid Build Coastguard Worker
RepeatRVVm(void (Riscv64Assembler::* f)(XRegister,VRegister,Riscv64Assembler::VM vm),const std::string & fmt)2022*795d594fSAndroid Build Coastguard Worker std::string RepeatRVVm(void (Riscv64Assembler::*f)(XRegister, VRegister, Riscv64Assembler::VM vm),
2023*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
2024*795d594fSAndroid Build Coastguard Worker return RepeatRVVmFiltered(
2025*795d594fSAndroid Build Coastguard Worker f, fmt, [](XRegister, VRegister, Riscv64Assembler::VM) { return true; });
2026*795d594fSAndroid Build Coastguard Worker }
2027*795d594fSAndroid Build Coastguard Worker
2028*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVRVmFiltered(void (Riscv64Assembler::* f)(VRegister,XRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)2029*795d594fSAndroid Build Coastguard Worker std::string RepeatVRVmFiltered(void (Riscv64Assembler::*f)(VRegister,
2030*795d594fSAndroid Build Coastguard Worker XRegister,
2031*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::VM),
2032*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
2033*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
2034*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersVmFiltered(f,
2035*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
2036*795d594fSAndroid Build Coastguard Worker GetRegisters(),
2037*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
2038*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetRegisterName,
2039*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
2040*795d594fSAndroid Build Coastguard Worker fmt);
2041*795d594fSAndroid Build Coastguard Worker }
2042*795d594fSAndroid Build Coastguard Worker
RepeatVRVm(void (Riscv64Assembler::* f)(VRegister,XRegister,Riscv64Assembler::VM),const std::string & fmt)2043*795d594fSAndroid Build Coastguard Worker std::string RepeatVRVm(void (Riscv64Assembler::*f)(VRegister, XRegister, Riscv64Assembler::VM),
2044*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
2045*795d594fSAndroid Build Coastguard Worker return RepeatVRVmFiltered(
2046*795d594fSAndroid Build Coastguard Worker f, fmt, [](VRegister, XRegister, Riscv64Assembler::VM) { return true; });
2047*795d594fSAndroid Build Coastguard Worker }
2048*795d594fSAndroid Build Coastguard Worker
2049*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVVVmFiltered(void (Riscv64Assembler::* f)(VRegister,VRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)2050*795d594fSAndroid Build Coastguard Worker std::string RepeatVVVmFiltered(void (Riscv64Assembler::*f)(VRegister,
2051*795d594fSAndroid Build Coastguard Worker VRegister,
2052*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::VM),
2053*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
2054*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
2055*795d594fSAndroid Build Coastguard Worker return RepeatTemplatedRegistersVmFiltered(f,
2056*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
2057*795d594fSAndroid Build Coastguard Worker GetVectorRegisters(),
2058*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
2059*795d594fSAndroid Build Coastguard Worker &AssemblerRISCV64Test::GetVecRegName,
2060*795d594fSAndroid Build Coastguard Worker std::forward<Predicate>(pred),
2061*795d594fSAndroid Build Coastguard Worker fmt);
2062*795d594fSAndroid Build Coastguard Worker }
2063*795d594fSAndroid Build Coastguard Worker
2064*795d594fSAndroid Build Coastguard Worker template <typename Predicate>
RepeatVVmFiltered(void (Riscv64Assembler::* f)(VRegister,Riscv64Assembler::VM),const std::string & fmt,Predicate && pred)2065*795d594fSAndroid Build Coastguard Worker std::string RepeatVVmFiltered(void (Riscv64Assembler::*f)(VRegister, Riscv64Assembler::VM),
2066*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
2067*795d594fSAndroid Build Coastguard Worker Predicate&& pred) {
2068*795d594fSAndroid Build Coastguard Worker WarnOnCombinations(2 * GetVectorRegisters().size());
2069*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
2070*795d594fSAndroid Build Coastguard Worker std::string str;
2071*795d594fSAndroid Build Coastguard Worker for (VRegister reg1 : GetVectorRegisters()) {
2072*795d594fSAndroid Build Coastguard Worker for (Riscv64Assembler::VM vm : kVMs) {
2073*795d594fSAndroid Build Coastguard Worker if (!pred(reg1, vm)) {
2074*795d594fSAndroid Build Coastguard Worker continue;
2075*795d594fSAndroid Build Coastguard Worker }
2076*795d594fSAndroid Build Coastguard Worker
2077*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, vm);
2078*795d594fSAndroid Build Coastguard Worker
2079*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
2080*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG_TOKEN, GetVecRegName(reg1), &base);
2081*795d594fSAndroid Build Coastguard Worker ReplaceVm(vm, &base);
2082*795d594fSAndroid Build Coastguard Worker str += base;
2083*795d594fSAndroid Build Coastguard Worker str += "\n";
2084*795d594fSAndroid Build Coastguard Worker }
2085*795d594fSAndroid Build Coastguard Worker }
2086*795d594fSAndroid Build Coastguard Worker return str;
2087*795d594fSAndroid Build Coastguard Worker }
2088*795d594fSAndroid Build Coastguard Worker
IsVdAllowed(VRegister vd,Riscv64Assembler::VM vm)2089*795d594fSAndroid Build Coastguard Worker static constexpr bool IsVdAllowed(VRegister vd, Riscv64Assembler::VM vm) {
2090*795d594fSAndroid Build Coastguard Worker return vm != Riscv64Assembler::VM::kV0_t || vd != V0;
2091*795d594fSAndroid Build Coastguard Worker }
2092*795d594fSAndroid Build Coastguard Worker
2093*795d594fSAndroid Build Coastguard Worker template <typename Reg2>
VXVVmSkipV0VmAndNoR1R3Overlap()2094*795d594fSAndroid Build Coastguard Worker auto VXVVmSkipV0VmAndNoR1R3Overlap() {
2095*795d594fSAndroid Build Coastguard Worker return [](VRegister vd, Reg2, VRegister vs1, Riscv64Assembler::VM vm) {
2096*795d594fSAndroid Build Coastguard Worker return IsVdAllowed(vd, vm) && vd != vs1;
2097*795d594fSAndroid Build Coastguard Worker };
2098*795d594fSAndroid Build Coastguard Worker }
2099*795d594fSAndroid Build Coastguard Worker
2100*795d594fSAndroid Build Coastguard Worker template <typename Reg3>
VXVVmSkipV0VmAndNoR1R2Overlap()2101*795d594fSAndroid Build Coastguard Worker auto VXVVmSkipV0VmAndNoR1R2Overlap() {
2102*795d594fSAndroid Build Coastguard Worker return [](VRegister vd, VRegister vs2, Reg3, Riscv64Assembler::VM vm) {
2103*795d594fSAndroid Build Coastguard Worker return IsVdAllowed(vd, vm) && vd != vs2;
2104*795d594fSAndroid Build Coastguard Worker };
2105*795d594fSAndroid Build Coastguard Worker }
2106*795d594fSAndroid Build Coastguard Worker
VXVVmSkipV0VmAndNoR1R2R3Overlap()2107*795d594fSAndroid Build Coastguard Worker auto VXVVmSkipV0VmAndNoR1R2R3Overlap() {
2108*795d594fSAndroid Build Coastguard Worker return [](VRegister vd, VRegister vs2, VRegister vs1, Riscv64Assembler::VM vm) {
2109*795d594fSAndroid Build Coastguard Worker return IsVdAllowed(vd, vm) && vd != vs1 && vd != vs2;
2110*795d594fSAndroid Build Coastguard Worker };
2111*795d594fSAndroid Build Coastguard Worker }
2112*795d594fSAndroid Build Coastguard Worker
VVVmSkipV0VmAndNoR1R2Overlap()2113*795d594fSAndroid Build Coastguard Worker auto VVVmSkipV0VmAndNoR1R2Overlap() {
2114*795d594fSAndroid Build Coastguard Worker return [](VRegister vd, VRegister vs2, Riscv64Assembler::VM vm) {
2115*795d594fSAndroid Build Coastguard Worker return IsVdAllowed(vd, vm) && vd != vs2;
2116*795d594fSAndroid Build Coastguard Worker };
2117*795d594fSAndroid Build Coastguard Worker }
2118*795d594fSAndroid Build Coastguard Worker
2119*795d594fSAndroid Build Coastguard Worker template <typename Reg2, typename Reg3>
SkipV0Vm()2120*795d594fSAndroid Build Coastguard Worker auto SkipV0Vm() {
2121*795d594fSAndroid Build Coastguard Worker return [](VRegister vd, Reg2, Reg3, Riscv64Assembler::VM vm) { return IsVdAllowed(vd, vm); };
2122*795d594fSAndroid Build Coastguard Worker }
2123*795d594fSAndroid Build Coastguard Worker
2124*795d594fSAndroid Build Coastguard Worker template <typename Reg2>
SkipV0Vm()2125*795d594fSAndroid Build Coastguard Worker auto SkipV0Vm() {
2126*795d594fSAndroid Build Coastguard Worker return [](VRegister vd, Reg2, Riscv64Assembler::VM vm) { return IsVdAllowed(vd, vm); };
2127*795d594fSAndroid Build Coastguard Worker }
2128*795d594fSAndroid Build Coastguard Worker
SkipV0Vm()2129*795d594fSAndroid Build Coastguard Worker auto SkipV0Vm() {
2130*795d594fSAndroid Build Coastguard Worker return [](VRegister vd, Riscv64Assembler::VM vm) { return IsVdAllowed(vd, vm); };
2131*795d594fSAndroid Build Coastguard Worker }
2132*795d594fSAndroid Build Coastguard Worker
2133*795d594fSAndroid Build Coastguard Worker template <typename Reg2, typename Reg3>
SkipV0()2134*795d594fSAndroid Build Coastguard Worker auto SkipV0() {
2135*795d594fSAndroid Build Coastguard Worker return [](VRegister vd, Reg2, Reg3) { return vd != V0; };
2136*795d594fSAndroid Build Coastguard Worker }
2137*795d594fSAndroid Build Coastguard Worker
VVVNoR1R2R3Overlap()2138*795d594fSAndroid Build Coastguard Worker auto VVVNoR1R2R3Overlap() {
2139*795d594fSAndroid Build Coastguard Worker return [](VRegister vd, VRegister vs2, VRegister vs1) { return vd != vs1 && vd != vs2; };
2140*795d594fSAndroid Build Coastguard Worker }
2141*795d594fSAndroid Build Coastguard Worker
2142*795d594fSAndroid Build Coastguard Worker template <typename Arg, typename Args, typename Replacer>
TestVSetI(void (Riscv64Assembler::* f)(XRegister,Arg,uint32_t),Args && arguments,Replacer && replacer,const std::string & fmt)2143*795d594fSAndroid Build Coastguard Worker std::string TestVSetI(void (Riscv64Assembler::*f)(XRegister, Arg, uint32_t),
2144*795d594fSAndroid Build Coastguard Worker Args&& arguments,
2145*795d594fSAndroid Build Coastguard Worker Replacer&& replacer,
2146*795d594fSAndroid Build Coastguard Worker const std::string& fmt) {
2147*795d594fSAndroid Build Coastguard Worker CHECK(f != nullptr);
2148*795d594fSAndroid Build Coastguard Worker
2149*795d594fSAndroid Build Coastguard Worker std::string str;
2150*795d594fSAndroid Build Coastguard Worker for (auto reg1 : GetRegisters()) {
2151*795d594fSAndroid Build Coastguard Worker for (auto arg : arguments) {
2152*795d594fSAndroid Build Coastguard Worker for (Riscv64Assembler::VectorMaskAgnostic vma : kVMAs) {
2153*795d594fSAndroid Build Coastguard Worker for (Riscv64Assembler::VectorTailAgnostic vta : kVTAs) {
2154*795d594fSAndroid Build Coastguard Worker for (Riscv64Assembler::SelectedElementWidth sew : kSEWs) {
2155*795d594fSAndroid Build Coastguard Worker for (Riscv64Assembler::LengthMultiplier lmul : kLMULs) {
2156*795d594fSAndroid Build Coastguard Worker uint32_t vtype = Riscv64Assembler::VTypeiValue(vma, vta, sew, lmul);
2157*795d594fSAndroid Build Coastguard Worker (GetAssembler()->*f)(reg1, arg, vtype);
2158*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
2159*795d594fSAndroid Build Coastguard Worker
2160*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG1_TOKEN, GetRegisterName(reg1), &base);
2161*795d594fSAndroid Build Coastguard Worker replacer(arg, &base);
2162*795d594fSAndroid Build Coastguard Worker ReplaceVMA(vma, &base);
2163*795d594fSAndroid Build Coastguard Worker ReplaceVTA(vta, &base);
2164*795d594fSAndroid Build Coastguard Worker ReplaceSEW(sew, &base);
2165*795d594fSAndroid Build Coastguard Worker ReplaceLMUL(lmul, &base);
2166*795d594fSAndroid Build Coastguard Worker
2167*795d594fSAndroid Build Coastguard Worker str += base;
2168*795d594fSAndroid Build Coastguard Worker str += "\n";
2169*795d594fSAndroid Build Coastguard Worker }
2170*795d594fSAndroid Build Coastguard Worker }
2171*795d594fSAndroid Build Coastguard Worker }
2172*795d594fSAndroid Build Coastguard Worker }
2173*795d594fSAndroid Build Coastguard Worker }
2174*795d594fSAndroid Build Coastguard Worker }
2175*795d594fSAndroid Build Coastguard Worker return str;
2176*795d594fSAndroid Build Coastguard Worker }
2177*795d594fSAndroid Build Coastguard Worker
2178*795d594fSAndroid Build Coastguard Worker template <typename EmitCssrX>
TestCsrrXMacro(const std::string & test_name,const std::string & fmt,EmitCssrX && emit_csrrx)2179*795d594fSAndroid Build Coastguard Worker void TestCsrrXMacro(const std::string& test_name,
2180*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
2181*795d594fSAndroid Build Coastguard Worker EmitCssrX&& emit_csrrx) {
2182*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> csrs = CreateImmediateValuesBits(12, /*as_uint=*/ true);
2183*795d594fSAndroid Build Coastguard Worker std::string expected;
2184*795d594fSAndroid Build Coastguard Worker for (XRegister reg : GetRegisters()) {
2185*795d594fSAndroid Build Coastguard Worker for (int64_t csr : csrs) {
2186*795d594fSAndroid Build Coastguard Worker emit_csrrx(dchecked_integral_cast<uint32_t>(csr), reg);
2187*795d594fSAndroid Build Coastguard Worker
2188*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
2189*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG_TOKEN, GetRegisterName(reg), &base);
2190*795d594fSAndroid Build Coastguard Worker ReplaceCsrrImm(CSR_TOKEN, csr, &base);
2191*795d594fSAndroid Build Coastguard Worker expected += base;
2192*795d594fSAndroid Build Coastguard Worker expected += "\n";
2193*795d594fSAndroid Build Coastguard Worker }
2194*795d594fSAndroid Build Coastguard Worker }
2195*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
2196*795d594fSAndroid Build Coastguard Worker }
2197*795d594fSAndroid Build Coastguard Worker
2198*795d594fSAndroid Build Coastguard Worker template <typename EmitCssrXi>
TestCsrrXiMacro(const std::string & test_name,const std::string & fmt,EmitCssrXi && emit_csrrxi)2199*795d594fSAndroid Build Coastguard Worker void TestCsrrXiMacro(const std::string& test_name,
2200*795d594fSAndroid Build Coastguard Worker const std::string& fmt,
2201*795d594fSAndroid Build Coastguard Worker EmitCssrXi&& emit_csrrxi) {
2202*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> csrs = CreateImmediateValuesBits(12, /*as_uint=*/ true);
2203*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> uimms = CreateImmediateValuesBits(2, /*as_uint=*/ true);
2204*795d594fSAndroid Build Coastguard Worker std::string expected;
2205*795d594fSAndroid Build Coastguard Worker for (int64_t csr : csrs) {
2206*795d594fSAndroid Build Coastguard Worker for (int64_t uimm : uimms) {
2207*795d594fSAndroid Build Coastguard Worker emit_csrrxi(dchecked_integral_cast<uint32_t>(csr), dchecked_integral_cast<uint32_t>(uimm));
2208*795d594fSAndroid Build Coastguard Worker
2209*795d594fSAndroid Build Coastguard Worker std::string base = fmt;
2210*795d594fSAndroid Build Coastguard Worker ReplaceCsrrImm(CSR_TOKEN, csr, &base);
2211*795d594fSAndroid Build Coastguard Worker ReplaceCsrrImm(UIMM_TOKEN, uimm, &base);
2212*795d594fSAndroid Build Coastguard Worker expected += base;
2213*795d594fSAndroid Build Coastguard Worker expected += "\n";
2214*795d594fSAndroid Build Coastguard Worker }
2215*795d594fSAndroid Build Coastguard Worker }
2216*795d594fSAndroid Build Coastguard Worker DriverStr(expected, test_name);
2217*795d594fSAndroid Build Coastguard Worker }
2218*795d594fSAndroid Build Coastguard Worker
2219*795d594fSAndroid Build Coastguard Worker private:
2220*795d594fSAndroid Build Coastguard Worker static constexpr const char* RM_TOKEN = "{rm}";
2221*795d594fSAndroid Build Coastguard Worker static constexpr const char* AQRL_TOKEN = "{aqrl}";
2222*795d594fSAndroid Build Coastguard Worker static constexpr const char* CSR_TOKEN = "{csr}";
2223*795d594fSAndroid Build Coastguard Worker static constexpr const char* UIMM_TOKEN = "{uimm}";
2224*795d594fSAndroid Build Coastguard Worker static constexpr const char* VM_TOKEN = "{vm}";
2225*795d594fSAndroid Build Coastguard Worker static constexpr const char* VMA_TOKEN = "{vma}";
2226*795d594fSAndroid Build Coastguard Worker static constexpr const char* VTA_TOKEN = "{vta}";
2227*795d594fSAndroid Build Coastguard Worker static constexpr const char* SEW_TOKEN = "{sew}";
2228*795d594fSAndroid Build Coastguard Worker static constexpr const char* LMUL_TOKEN = "{lmul}";
2229*795d594fSAndroid Build Coastguard Worker
2230*795d594fSAndroid Build Coastguard Worker static constexpr AqRl kAqRls[] = { AqRl::kNone, AqRl::kRelease, AqRl::kAcquire, AqRl::kAqRl };
2231*795d594fSAndroid Build Coastguard Worker
2232*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64Assembler::VM kVMs[] = {Riscv64Assembler::VM::kUnmasked,
2233*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::VM::kV0_t};
2234*795d594fSAndroid Build Coastguard Worker
2235*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64Assembler::VectorMaskAgnostic kVMAs[] = {
2236*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::VectorMaskAgnostic::kAgnostic,
2237*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::VectorMaskAgnostic::kUndisturbed};
2238*795d594fSAndroid Build Coastguard Worker
2239*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64Assembler::VectorTailAgnostic kVTAs[] = {
2240*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::VectorTailAgnostic::kAgnostic,
2241*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::VectorTailAgnostic::kUndisturbed};
2242*795d594fSAndroid Build Coastguard Worker
2243*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64Assembler::SelectedElementWidth kSEWs[] = {
2244*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::SelectedElementWidth::kE8,
2245*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::SelectedElementWidth::kE16,
2246*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::SelectedElementWidth::kE32,
2247*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::SelectedElementWidth::kE64};
2248*795d594fSAndroid Build Coastguard Worker
2249*795d594fSAndroid Build Coastguard Worker static constexpr Riscv64Assembler::LengthMultiplier kLMULs[] = {
2250*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::LengthMultiplier::kM1Over8,
2251*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::LengthMultiplier::kM1Over4,
2252*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::LengthMultiplier::kM1Over2,
2253*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::LengthMultiplier::kM1,
2254*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::LengthMultiplier::kM2,
2255*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::LengthMultiplier::kM4,
2256*795d594fSAndroid Build Coastguard Worker Riscv64Assembler::LengthMultiplier::kM8};
2257*795d594fSAndroid Build Coastguard Worker
2258*795d594fSAndroid Build Coastguard Worker static constexpr FPRoundingMode kRoundingModes[] = {
2259*795d594fSAndroid Build Coastguard Worker FPRoundingMode::kRNE,
2260*795d594fSAndroid Build Coastguard Worker FPRoundingMode::kRTZ,
2261*795d594fSAndroid Build Coastguard Worker FPRoundingMode::kRDN,
2262*795d594fSAndroid Build Coastguard Worker FPRoundingMode::kRUP,
2263*795d594fSAndroid Build Coastguard Worker FPRoundingMode::kRMM,
2264*795d594fSAndroid Build Coastguard Worker FPRoundingMode::kDYN
2265*795d594fSAndroid Build Coastguard Worker };
2266*795d594fSAndroid Build Coastguard Worker
ReplaceRoundingMode(FPRoundingMode rm,std::string * str)2267*795d594fSAndroid Build Coastguard Worker void ReplaceRoundingMode(FPRoundingMode rm, /*inout*/ std::string* str) {
2268*795d594fSAndroid Build Coastguard Worker const char* replacement;
2269*795d594fSAndroid Build Coastguard Worker switch (rm) {
2270*795d594fSAndroid Build Coastguard Worker case FPRoundingMode::kRNE:
2271*795d594fSAndroid Build Coastguard Worker replacement = "rne";
2272*795d594fSAndroid Build Coastguard Worker break;
2273*795d594fSAndroid Build Coastguard Worker case FPRoundingMode::kRTZ:
2274*795d594fSAndroid Build Coastguard Worker replacement = "rtz";
2275*795d594fSAndroid Build Coastguard Worker break;
2276*795d594fSAndroid Build Coastguard Worker case FPRoundingMode::kRDN:
2277*795d594fSAndroid Build Coastguard Worker replacement = "rdn";
2278*795d594fSAndroid Build Coastguard Worker break;
2279*795d594fSAndroid Build Coastguard Worker case FPRoundingMode::kRUP:
2280*795d594fSAndroid Build Coastguard Worker replacement = "rup";
2281*795d594fSAndroid Build Coastguard Worker break;
2282*795d594fSAndroid Build Coastguard Worker case FPRoundingMode::kRMM:
2283*795d594fSAndroid Build Coastguard Worker replacement = "rmm";
2284*795d594fSAndroid Build Coastguard Worker break;
2285*795d594fSAndroid Build Coastguard Worker case FPRoundingMode::kDYN:
2286*795d594fSAndroid Build Coastguard Worker replacement = "dyn";
2287*795d594fSAndroid Build Coastguard Worker break;
2288*795d594fSAndroid Build Coastguard Worker }
2289*795d594fSAndroid Build Coastguard Worker size_t rm_index = str->find(RM_TOKEN);
2290*795d594fSAndroid Build Coastguard Worker EXPECT_NE(rm_index, std::string::npos);
2291*795d594fSAndroid Build Coastguard Worker if (rm_index != std::string::npos) {
2292*795d594fSAndroid Build Coastguard Worker str->replace(rm_index, ConstexprStrLen(RM_TOKEN), replacement);
2293*795d594fSAndroid Build Coastguard Worker }
2294*795d594fSAndroid Build Coastguard Worker }
2295*795d594fSAndroid Build Coastguard Worker
ReplaceAqRl(AqRl aqrl,std::string * str)2296*795d594fSAndroid Build Coastguard Worker void ReplaceAqRl(AqRl aqrl, /*inout*/ std::string* str) {
2297*795d594fSAndroid Build Coastguard Worker const char* replacement;
2298*795d594fSAndroid Build Coastguard Worker switch (aqrl) {
2299*795d594fSAndroid Build Coastguard Worker case AqRl::kNone:
2300*795d594fSAndroid Build Coastguard Worker replacement = "";
2301*795d594fSAndroid Build Coastguard Worker break;
2302*795d594fSAndroid Build Coastguard Worker case AqRl::kRelease:
2303*795d594fSAndroid Build Coastguard Worker replacement = ".rl";
2304*795d594fSAndroid Build Coastguard Worker break;
2305*795d594fSAndroid Build Coastguard Worker case AqRl::kAcquire:
2306*795d594fSAndroid Build Coastguard Worker replacement = ".aq";
2307*795d594fSAndroid Build Coastguard Worker break;
2308*795d594fSAndroid Build Coastguard Worker case AqRl::kAqRl:
2309*795d594fSAndroid Build Coastguard Worker replacement = ".aqrl";
2310*795d594fSAndroid Build Coastguard Worker break;
2311*795d594fSAndroid Build Coastguard Worker }
2312*795d594fSAndroid Build Coastguard Worker size_t aqrl_index = str->find(AQRL_TOKEN);
2313*795d594fSAndroid Build Coastguard Worker EXPECT_NE(aqrl_index, std::string::npos);
2314*795d594fSAndroid Build Coastguard Worker if (aqrl_index != std::string::npos) {
2315*795d594fSAndroid Build Coastguard Worker str->replace(aqrl_index, ConstexprStrLen(AQRL_TOKEN), replacement);
2316*795d594fSAndroid Build Coastguard Worker }
2317*795d594fSAndroid Build Coastguard Worker }
2318*795d594fSAndroid Build Coastguard Worker
ReplaceVm(Riscv64Assembler::VM vm,std::string * str)2319*795d594fSAndroid Build Coastguard Worker void ReplaceVm(Riscv64Assembler::VM vm, /*inout*/ std::string* str) {
2320*795d594fSAndroid Build Coastguard Worker const char* replacement;
2321*795d594fSAndroid Build Coastguard Worker switch (vm) {
2322*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::VM::kUnmasked:
2323*795d594fSAndroid Build Coastguard Worker replacement = "";
2324*795d594fSAndroid Build Coastguard Worker break;
2325*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::VM::kV0_t:
2326*795d594fSAndroid Build Coastguard Worker replacement = ", v0.t";
2327*795d594fSAndroid Build Coastguard Worker break;
2328*795d594fSAndroid Build Coastguard Worker }
2329*795d594fSAndroid Build Coastguard Worker size_t vm_index = str->find(VM_TOKEN);
2330*795d594fSAndroid Build Coastguard Worker EXPECT_NE(vm_index, std::string::npos);
2331*795d594fSAndroid Build Coastguard Worker if (vm_index != std::string::npos) {
2332*795d594fSAndroid Build Coastguard Worker str->replace(vm_index, ConstexprStrLen(VM_TOKEN), replacement);
2333*795d594fSAndroid Build Coastguard Worker }
2334*795d594fSAndroid Build Coastguard Worker }
2335*795d594fSAndroid Build Coastguard Worker
ReplaceVMA(Riscv64Assembler::VectorMaskAgnostic vma,std::string * str)2336*795d594fSAndroid Build Coastguard Worker void ReplaceVMA(Riscv64Assembler::VectorMaskAgnostic vma, /*inout*/ std::string* str) {
2337*795d594fSAndroid Build Coastguard Worker const char* replacement;
2338*795d594fSAndroid Build Coastguard Worker switch (vma) {
2339*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::VectorMaskAgnostic::kAgnostic:
2340*795d594fSAndroid Build Coastguard Worker replacement = "ma";
2341*795d594fSAndroid Build Coastguard Worker break;
2342*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::VectorMaskAgnostic::kUndisturbed:
2343*795d594fSAndroid Build Coastguard Worker replacement = "mu";
2344*795d594fSAndroid Build Coastguard Worker break;
2345*795d594fSAndroid Build Coastguard Worker }
2346*795d594fSAndroid Build Coastguard Worker size_t vma_index = str->find(VMA_TOKEN);
2347*795d594fSAndroid Build Coastguard Worker EXPECT_NE(vma_index, std::string::npos);
2348*795d594fSAndroid Build Coastguard Worker if (vma_index != std::string::npos) {
2349*795d594fSAndroid Build Coastguard Worker str->replace(vma_index, ConstexprStrLen(VMA_TOKEN), replacement);
2350*795d594fSAndroid Build Coastguard Worker }
2351*795d594fSAndroid Build Coastguard Worker }
2352*795d594fSAndroid Build Coastguard Worker
ReplaceVTA(Riscv64Assembler::VectorTailAgnostic vta,std::string * str)2353*795d594fSAndroid Build Coastguard Worker void ReplaceVTA(Riscv64Assembler::VectorTailAgnostic vta, /*inout*/ std::string* str) {
2354*795d594fSAndroid Build Coastguard Worker const char* replacement;
2355*795d594fSAndroid Build Coastguard Worker switch (vta) {
2356*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::VectorTailAgnostic::kAgnostic:
2357*795d594fSAndroid Build Coastguard Worker replacement = "ta";
2358*795d594fSAndroid Build Coastguard Worker break;
2359*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::VectorTailAgnostic::kUndisturbed:
2360*795d594fSAndroid Build Coastguard Worker replacement = "tu";
2361*795d594fSAndroid Build Coastguard Worker break;
2362*795d594fSAndroid Build Coastguard Worker }
2363*795d594fSAndroid Build Coastguard Worker size_t vta_index = str->find(VTA_TOKEN);
2364*795d594fSAndroid Build Coastguard Worker EXPECT_NE(vta_index, std::string::npos);
2365*795d594fSAndroid Build Coastguard Worker if (vta_index != std::string::npos) {
2366*795d594fSAndroid Build Coastguard Worker str->replace(vta_index, ConstexprStrLen(VTA_TOKEN), replacement);
2367*795d594fSAndroid Build Coastguard Worker }
2368*795d594fSAndroid Build Coastguard Worker }
2369*795d594fSAndroid Build Coastguard Worker
ReplaceSEW(Riscv64Assembler::SelectedElementWidth sew,std::string * str)2370*795d594fSAndroid Build Coastguard Worker void ReplaceSEW(Riscv64Assembler::SelectedElementWidth sew, /*inout*/ std::string* str) {
2371*795d594fSAndroid Build Coastguard Worker const char* replacement;
2372*795d594fSAndroid Build Coastguard Worker switch (sew) {
2373*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::SelectedElementWidth::kE8:
2374*795d594fSAndroid Build Coastguard Worker replacement = "e8";
2375*795d594fSAndroid Build Coastguard Worker break;
2376*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::SelectedElementWidth::kE16:
2377*795d594fSAndroid Build Coastguard Worker replacement = "e16";
2378*795d594fSAndroid Build Coastguard Worker break;
2379*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::SelectedElementWidth::kE32:
2380*795d594fSAndroid Build Coastguard Worker replacement = "e32";
2381*795d594fSAndroid Build Coastguard Worker break;
2382*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::SelectedElementWidth::kE64:
2383*795d594fSAndroid Build Coastguard Worker replacement = "e64";
2384*795d594fSAndroid Build Coastguard Worker break;
2385*795d594fSAndroid Build Coastguard Worker default:
2386*795d594fSAndroid Build Coastguard Worker LOG(FATAL) << "Unexpected value for `SelectedElementWidth`: " << enum_cast<uint32_t>(sew);
2387*795d594fSAndroid Build Coastguard Worker UNREACHABLE();
2388*795d594fSAndroid Build Coastguard Worker }
2389*795d594fSAndroid Build Coastguard Worker size_t sew_index = str->find(SEW_TOKEN);
2390*795d594fSAndroid Build Coastguard Worker EXPECT_NE(sew_index, std::string::npos);
2391*795d594fSAndroid Build Coastguard Worker if (sew_index != std::string::npos) {
2392*795d594fSAndroid Build Coastguard Worker str->replace(sew_index, ConstexprStrLen(SEW_TOKEN), replacement);
2393*795d594fSAndroid Build Coastguard Worker }
2394*795d594fSAndroid Build Coastguard Worker }
2395*795d594fSAndroid Build Coastguard Worker
ReplaceLMUL(Riscv64Assembler::LengthMultiplier lmul,std::string * str)2396*795d594fSAndroid Build Coastguard Worker void ReplaceLMUL(Riscv64Assembler::LengthMultiplier lmul, /*inout*/ std::string* str) {
2397*795d594fSAndroid Build Coastguard Worker const char* replacement;
2398*795d594fSAndroid Build Coastguard Worker switch (lmul) {
2399*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::LengthMultiplier::kM1Over8:
2400*795d594fSAndroid Build Coastguard Worker replacement = "mf8";
2401*795d594fSAndroid Build Coastguard Worker break;
2402*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::LengthMultiplier::kM1Over4:
2403*795d594fSAndroid Build Coastguard Worker replacement = "mf4";
2404*795d594fSAndroid Build Coastguard Worker break;
2405*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::LengthMultiplier::kM1Over2:
2406*795d594fSAndroid Build Coastguard Worker replacement = "mf2";
2407*795d594fSAndroid Build Coastguard Worker break;
2408*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::LengthMultiplier::kM1:
2409*795d594fSAndroid Build Coastguard Worker replacement = "m1";
2410*795d594fSAndroid Build Coastguard Worker break;
2411*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::LengthMultiplier::kM2:
2412*795d594fSAndroid Build Coastguard Worker replacement = "m2";
2413*795d594fSAndroid Build Coastguard Worker break;
2414*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::LengthMultiplier::kM4:
2415*795d594fSAndroid Build Coastguard Worker replacement = "m4";
2416*795d594fSAndroid Build Coastguard Worker break;
2417*795d594fSAndroid Build Coastguard Worker case Riscv64Assembler::LengthMultiplier::kM8:
2418*795d594fSAndroid Build Coastguard Worker replacement = "m8";
2419*795d594fSAndroid Build Coastguard Worker break;
2420*795d594fSAndroid Build Coastguard Worker default:
2421*795d594fSAndroid Build Coastguard Worker LOG(FATAL) << "Unexpected value for `LengthMultiplier`: " << enum_cast<uint32_t>(lmul);
2422*795d594fSAndroid Build Coastguard Worker UNREACHABLE();
2423*795d594fSAndroid Build Coastguard Worker }
2424*795d594fSAndroid Build Coastguard Worker size_t lmul_index = str->find(LMUL_TOKEN);
2425*795d594fSAndroid Build Coastguard Worker EXPECT_NE(lmul_index, std::string::npos);
2426*795d594fSAndroid Build Coastguard Worker if (lmul_index != std::string::npos) {
2427*795d594fSAndroid Build Coastguard Worker str->replace(lmul_index, ConstexprStrLen(LMUL_TOKEN), replacement);
2428*795d594fSAndroid Build Coastguard Worker }
2429*795d594fSAndroid Build Coastguard Worker }
2430*795d594fSAndroid Build Coastguard Worker
ReplaceCsrrImm(const std::string & imm_token,int64_t imm,std::string * str)2431*795d594fSAndroid Build Coastguard Worker static void ReplaceCsrrImm(const std::string& imm_token,
2432*795d594fSAndroid Build Coastguard Worker int64_t imm,
2433*795d594fSAndroid Build Coastguard Worker /*inout*/ std::string* str) {
2434*795d594fSAndroid Build Coastguard Worker size_t imm_index = str->find(imm_token);
2435*795d594fSAndroid Build Coastguard Worker EXPECT_NE(imm_index, std::string::npos);
2436*795d594fSAndroid Build Coastguard Worker if (imm_index != std::string::npos) {
2437*795d594fSAndroid Build Coastguard Worker str->replace(imm_index, imm_token.length(), std::to_string(imm));
2438*795d594fSAndroid Build Coastguard Worker }
2439*795d594fSAndroid Build Coastguard Worker }
2440*795d594fSAndroid Build Coastguard Worker
2441*795d594fSAndroid Build Coastguard Worker std::map<XRegister, std::string, RISCV64CpuRegisterCompare> secondary_register_names_;
2442*795d594fSAndroid Build Coastguard Worker
2443*795d594fSAndroid Build Coastguard Worker std::optional<std::string> march_override_;
2444*795d594fSAndroid Build Coastguard Worker };
2445*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Toolchain)2446*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Toolchain) { EXPECT_TRUE(CheckTools()); }
2447*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lui)2448*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lui) {
2449*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRIb(&Riscv64Assembler::Lui, /*imm_bits=*/20, "lui {reg}, {imm}"), "Lui");
2450*795d594fSAndroid Build Coastguard Worker }
2451*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lui_WithoutC)2452*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lui_WithoutC) {
2453*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2454*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRIb(&Riscv64Assembler::Lui, /*imm_bits=*/20, "lui {reg}, {imm}"), "Lui_WithoutC");
2455*795d594fSAndroid Build Coastguard Worker }
2456*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Auipc)2457*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Auipc) {
2458*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRIb(&Riscv64Assembler::Auipc, /*imm_bits=*/20, "auipc {reg}, {imm}"), "Auipc");
2459*795d594fSAndroid Build Coastguard Worker }
2460*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Jal)2461*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Jal) {
2462*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRIbS(&Riscv64Assembler::Jal, /*imm_bits=*/-20, /*shift=*/1, "jal {reg}, {imm}\n"),
2463*795d594fSAndroid Build Coastguard Worker "Jal");
2464*795d594fSAndroid Build Coastguard Worker }
2465*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Jal_WithoutC)2466*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Jal_WithoutC) {
2467*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2468*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRIbS(&Riscv64Assembler::Jal, /*imm_bits=*/-19, /*shift=*/2, "jal {reg}, {imm}\n"),
2469*795d594fSAndroid Build Coastguard Worker "Jal_WithoutC");
2470*795d594fSAndroid Build Coastguard Worker }
2471*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Jalr)2472*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Jalr) {
2473*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Jalr, /*imm_bits=*/-12, "jalr {reg1}, {reg2}, {imm}\n"),
2474*795d594fSAndroid Build Coastguard Worker "Jalr");
2475*795d594fSAndroid Build Coastguard Worker }
2476*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Jalr_WithoutC)2477*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Jalr_WithoutC) {
2478*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2479*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Jalr, /*imm_bits=*/-12, "jalr {reg1}, {reg2}, {imm}\n"),
2480*795d594fSAndroid Build Coastguard Worker "Jalr_WithoutC");
2481*795d594fSAndroid Build Coastguard Worker }
2482*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Beq)2483*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Beq) {
2484*795d594fSAndroid Build Coastguard Worker DriverStr(
2485*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
2486*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Beq, /*imm_bits=*/-12, /*shift=*/1, "beq {reg1}, {reg2}, {imm}\n"),
2487*795d594fSAndroid Build Coastguard Worker "Beq");
2488*795d594fSAndroid Build Coastguard Worker }
2489*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Beq_WithoutC)2490*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Beq_WithoutC) {
2491*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2492*795d594fSAndroid Build Coastguard Worker DriverStr(
2493*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
2494*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Beq, /*imm_bits=*/-11, /*shift=*/2, "beq {reg1}, {reg2}, {imm}\n"),
2495*795d594fSAndroid Build Coastguard Worker "Beq_WithoutC");
2496*795d594fSAndroid Build Coastguard Worker }
2497*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bne)2498*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bne) {
2499*795d594fSAndroid Build Coastguard Worker DriverStr(
2500*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
2501*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bne, /*imm_bits=*/-12, /*shift=*/1, "bne {reg1}, {reg2}, {imm}\n"),
2502*795d594fSAndroid Build Coastguard Worker "Bne");
2503*795d594fSAndroid Build Coastguard Worker }
2504*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bne_WithoutC)2505*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bne_WithoutC) {
2506*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2507*795d594fSAndroid Build Coastguard Worker DriverStr(
2508*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
2509*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bne, /*imm_bits=*/-11, /*shift=*/2, "bne {reg1}, {reg2}, {imm}\n"),
2510*795d594fSAndroid Build Coastguard Worker "Bne_WithoutC");
2511*795d594fSAndroid Build Coastguard Worker }
2512*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Blt)2513*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Blt) {
2514*795d594fSAndroid Build Coastguard Worker DriverStr(
2515*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
2516*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Blt, /*imm_bits=*/-12, /*shift=*/1, "blt {reg1}, {reg2}, {imm}\n"),
2517*795d594fSAndroid Build Coastguard Worker "Blt");
2518*795d594fSAndroid Build Coastguard Worker }
2519*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bge)2520*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bge) {
2521*795d594fSAndroid Build Coastguard Worker DriverStr(
2522*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
2523*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bge, /*imm_bits=*/-12, /*shift=*/1, "bge {reg1}, {reg2}, {imm}\n"),
2524*795d594fSAndroid Build Coastguard Worker "Bge");
2525*795d594fSAndroid Build Coastguard Worker }
2526*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bltu)2527*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bltu) {
2528*795d594fSAndroid Build Coastguard Worker DriverStr(
2529*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
2530*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bltu, /*imm_bits=*/-12, /*shift=*/1, "bltu {reg1}, {reg2}, {imm}\n"),
2531*795d594fSAndroid Build Coastguard Worker "Bltu");
2532*795d594fSAndroid Build Coastguard Worker }
2533*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bgeu)2534*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bgeu) {
2535*795d594fSAndroid Build Coastguard Worker DriverStr(
2536*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
2537*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bgeu, /*imm_bits=*/-12, /*shift=*/1, "bgeu {reg1}, {reg2}, {imm}\n"),
2538*795d594fSAndroid Build Coastguard Worker "Bgeu");
2539*795d594fSAndroid Build Coastguard Worker }
2540*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lb)2541*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lb) {
2542*795d594fSAndroid Build Coastguard Worker // Note: There is no 16-bit instruction for `Lb()`.
2543*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lb, /*imm_bits=*/-12, "lb {reg1}, {imm}({reg2})"), "Lb");
2544*795d594fSAndroid Build Coastguard Worker }
2545*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lh)2546*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lh) {
2547*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lh, /*imm_bits=*/-12, "lh {reg1}, {imm}({reg2})"), "Lh");
2548*795d594fSAndroid Build Coastguard Worker }
2549*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lh_WithoutC)2550*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lh_WithoutC) {
2551*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2552*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lh, /*imm_bits=*/-12, "lh {reg1}, {imm}({reg2})"),
2553*795d594fSAndroid Build Coastguard Worker "Lh_WithoutC");
2554*795d594fSAndroid Build Coastguard Worker }
2555*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lw)2556*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lw) {
2557*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lw, /*imm_bits=*/-12, "lw {reg1}, {imm}({reg2})"), "Lw");
2558*795d594fSAndroid Build Coastguard Worker }
2559*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lw_WithoutC)2560*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lw_WithoutC) {
2561*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2562*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lw, /*imm_bits=*/-12, "lw {reg1}, {imm}({reg2})"),
2563*795d594fSAndroid Build Coastguard Worker "Lw_WithoutC");
2564*795d594fSAndroid Build Coastguard Worker }
2565*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ld)2566*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ld) {
2567*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Ld, /*imm_bits=*/-12, "ld {reg1}, {imm}({reg2})"), "Ld");
2568*795d594fSAndroid Build Coastguard Worker }
2569*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ld_WithoutC)2570*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ld_WithoutC) {
2571*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2572*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Ld, /*imm_bits=*/-12, "ld {reg1}, {imm}({reg2})"),
2573*795d594fSAndroid Build Coastguard Worker "Ld_WithoutC");
2574*795d594fSAndroid Build Coastguard Worker }
2575*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lbu)2576*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lbu) {
2577*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lbu, /*imm_bits=*/-12, "lbu {reg1}, {imm}({reg2})"), "Lbu");
2578*795d594fSAndroid Build Coastguard Worker }
2579*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lbu_WithoutC)2580*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lbu_WithoutC) {
2581*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2582*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lbu, /*imm_bits=*/-12, "lbu {reg1}, {imm}({reg2})"),
2583*795d594fSAndroid Build Coastguard Worker "Lbu_WithoutC");
2584*795d594fSAndroid Build Coastguard Worker }
2585*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lhu)2586*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lhu) {
2587*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lhu, /*imm_bits=*/-12, "lhu {reg1}, {imm}({reg2})"), "Lhu");
2588*795d594fSAndroid Build Coastguard Worker }
2589*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lhu_WithoutC)2590*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lhu_WithoutC) {
2591*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2592*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lhu, /*imm_bits=*/-12, "lhu {reg1}, {imm}({reg2})"),
2593*795d594fSAndroid Build Coastguard Worker "Lhu_WithoutC");
2594*795d594fSAndroid Build Coastguard Worker }
2595*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Lwu)2596*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Lwu) {
2597*795d594fSAndroid Build Coastguard Worker // Note: There is no 16-bit instruction for `Lwu()`.
2598*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Lwu, /*imm_bits=*/-12, "lwu {reg1}, {imm}({reg2})"), "Lwu");
2599*795d594fSAndroid Build Coastguard Worker }
2600*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sb)2601*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sb) {
2602*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sb, /*imm_bits=*/-12, "sb {reg1}, {imm}({reg2})"), "Sb");
2603*795d594fSAndroid Build Coastguard Worker }
2604*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sb_WithoutC)2605*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sb_WithoutC) {
2606*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2607*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sb, /*imm_bits=*/-12, "sb {reg1}, {imm}({reg2})"),
2608*795d594fSAndroid Build Coastguard Worker "Sb_WithoutC");
2609*795d594fSAndroid Build Coastguard Worker }
2610*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sh)2611*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sh) {
2612*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sh, /*imm_bits=*/-12, "sh {reg1}, {imm}({reg2})"), "Sh");
2613*795d594fSAndroid Build Coastguard Worker }
2614*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sh_WithoutC)2615*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sh_WithoutC) {
2616*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2617*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sh, /*imm_bits=*/-12, "sh {reg1}, {imm}({reg2})"),
2618*795d594fSAndroid Build Coastguard Worker "Sh_WithoutC");
2619*795d594fSAndroid Build Coastguard Worker }
2620*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sw)2621*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sw) {
2622*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sw, /*imm_bits=*/-12, "sw {reg1}, {imm}({reg2})"), "Sw");
2623*795d594fSAndroid Build Coastguard Worker }
2624*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sw_WithoutC)2625*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sw_WithoutC) {
2626*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2627*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sw, /*imm_bits=*/-12, "sw {reg1}, {imm}({reg2})"), "Sw_WithoutC");
2628*795d594fSAndroid Build Coastguard Worker }
2629*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sd)2630*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sd) {
2631*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sd, /*imm_bits=*/-12, "sd {reg1}, {imm}({reg2})"), "Sd");
2632*795d594fSAndroid Build Coastguard Worker }
2633*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sd_WithoutC)2634*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sd_WithoutC) {
2635*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2636*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sd, /*imm_bits=*/-12, "sd {reg1}, {imm}({reg2})"), "Sd_WithoutC");
2637*795d594fSAndroid Build Coastguard Worker }
2638*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Addi)2639*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Addi) {
2640*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Addi, /*imm_bits=*/-12, "addi {reg1}, {reg2}, {imm}"), "Addi");
2641*795d594fSAndroid Build Coastguard Worker }
2642*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Addi_WithoutC)2643*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Addi_WithoutC) {
2644*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2645*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Addi, /*imm_bits=*/-12, "addi {reg1}, {reg2}, {imm}"),
2646*795d594fSAndroid Build Coastguard Worker "Addi_WithoutC");
2647*795d594fSAndroid Build Coastguard Worker }
2648*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Slti)2649*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Slti) {
2650*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Slti, /*imm_bits=*/-12, "slti {reg1}, {reg2}, {imm}"), "Slti");
2651*795d594fSAndroid Build Coastguard Worker }
2652*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sltiu)2653*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sltiu) {
2654*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sltiu, /*imm_bits=*/-12, "sltiu {reg1}, {reg2}, {imm}"), "Sltiu");
2655*795d594fSAndroid Build Coastguard Worker }
2656*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Xori)2657*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Xori) {
2658*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Xori, /*imm_bits=*/-12, "xori {reg1}, {reg2}, {imm}"),
2659*795d594fSAndroid Build Coastguard Worker "Xori");
2660*795d594fSAndroid Build Coastguard Worker }
2661*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Xori_WithoutC)2662*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Xori_WithoutC) {
2663*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2664*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Xori, /*imm_bits=*/-12, "xori {reg1}, {reg2}, {imm}"),
2665*795d594fSAndroid Build Coastguard Worker "Xori_WithoutC");
2666*795d594fSAndroid Build Coastguard Worker }
2667*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ori)2668*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ori) {
2669*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Ori, /*imm_bits=*/-12, "ori {reg1}, {reg2}, {imm}"), "Ori");
2670*795d594fSAndroid Build Coastguard Worker }
2671*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Andi)2672*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Andi) {
2673*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Andi, /*imm_bits=*/-12, "andi {reg1}, {reg2}, {imm}"), "Andi");
2674*795d594fSAndroid Build Coastguard Worker }
2675*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Andi_WithoutC)2676*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Andi_WithoutC) {
2677*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2678*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Andi, /*imm_bits=*/6, "andi {reg1}, {reg2}, {imm}"), "Andi_WithoutC");
2679*795d594fSAndroid Build Coastguard Worker }
2680*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Slli)2681*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Slli) {
2682*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Slli, /*imm_bits=*/6, "slli {reg1}, {reg2}, {imm}"), "Slli");
2683*795d594fSAndroid Build Coastguard Worker }
2684*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Slli_WithoutC)2685*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Slli_WithoutC) {
2686*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2687*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Slli, /*imm_bits=*/6, "slli {reg1}, {reg2}, {imm}"), "Slli_WithoutC");
2688*795d594fSAndroid Build Coastguard Worker }
2689*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Srli)2690*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Srli) {
2691*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Srli, /*imm_bits=*/6, "srli {reg1}, {reg2}, {imm}"), "Srli");
2692*795d594fSAndroid Build Coastguard Worker }
2693*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Srli_WithoutC)2694*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Srli_WithoutC) {
2695*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2696*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Srli, /*imm_bits=*/6, "srli {reg1}, {reg2}, {imm}"), "Slli_WithoutC");
2697*795d594fSAndroid Build Coastguard Worker }
2698*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Srai)2699*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Srai) {
2700*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Srai, /*imm_bits=*/6, "srai {reg1}, {reg2}, {imm}"), "Srai");
2701*795d594fSAndroid Build Coastguard Worker }
2702*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Srai_WithoutC)2703*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Srai_WithoutC) {
2704*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2705*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Srai, /*imm_bits=*/6, "srai {reg1}, {reg2}, {imm}"), "Srai_WithoutC");
2706*795d594fSAndroid Build Coastguard Worker }
2707*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Add)2708*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Add) {
2709*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Add, "add {reg1}, {reg2}, {reg3}"), "Add");
2710*795d594fSAndroid Build Coastguard Worker }
2711*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Add_WithoutC)2712*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Add_WithoutC) {
2713*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2714*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Add, "add {reg1}, {reg2}, {reg3}"), "Add_WithoutC");
2715*795d594fSAndroid Build Coastguard Worker }
2716*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sub)2717*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sub) {
2718*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sub, "sub {reg1}, {reg2}, {reg3}"), "Sub");
2719*795d594fSAndroid Build Coastguard Worker }
2720*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sub_WithoutC)2721*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sub_WithoutC) {
2722*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2723*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sub, "sub {reg1}, {reg2}, {reg3}"), "Sub_WithoutC");
2724*795d594fSAndroid Build Coastguard Worker }
2725*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Slt)2726*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Slt) {
2727*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Slt, "slt {reg1}, {reg2}, {reg3}"), "Slt");
2728*795d594fSAndroid Build Coastguard Worker }
2729*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sltu)2730*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sltu) {
2731*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sltu, "sltu {reg1}, {reg2}, {reg3}"), "Sltu");
2732*795d594fSAndroid Build Coastguard Worker }
2733*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Xor)2734*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Xor) {
2735*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Xor, "xor {reg1}, {reg2}, {reg3}"), "Xor");
2736*795d594fSAndroid Build Coastguard Worker }
2737*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Xor_WithoutC)2738*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Xor_WithoutC) {
2739*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2740*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Xor, "xor {reg1}, {reg2}, {reg3}"), "Xor_WithoutC");
2741*795d594fSAndroid Build Coastguard Worker }
2742*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Or)2743*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Or) {
2744*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Or, "or {reg1}, {reg2}, {reg3}"), "Or");
2745*795d594fSAndroid Build Coastguard Worker }
2746*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Or_WithoutC)2747*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Or_WithoutC) {
2748*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2749*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Or, "or {reg1}, {reg2}, {reg3}"), "Or_WithoutC");
2750*795d594fSAndroid Build Coastguard Worker }
2751*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,And)2752*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, And) {
2753*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::And, "and {reg1}, {reg2}, {reg3}"), "And");
2754*795d594fSAndroid Build Coastguard Worker }
2755*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,And_WithoutC)2756*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, And_WithoutC) {
2757*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2758*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::And, "and {reg1}, {reg2}, {reg3}"), "And_WithoutC");
2759*795d594fSAndroid Build Coastguard Worker }
2760*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sll)2761*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sll) {
2762*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sll, "sll {reg1}, {reg2}, {reg3}"), "Sll");
2763*795d594fSAndroid Build Coastguard Worker }
2764*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Srl)2765*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Srl) {
2766*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Srl, "srl {reg1}, {reg2}, {reg3}"), "Srl");
2767*795d594fSAndroid Build Coastguard Worker }
2768*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sra)2769*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sra) {
2770*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sra, "sra {reg1}, {reg2}, {reg3}"), "Sra");
2771*795d594fSAndroid Build Coastguard Worker }
2772*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Addiw)2773*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Addiw) {
2774*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Addiw, /*imm_bits=*/-12, "addiw {reg1}, {reg2}, {imm}"), "Addiw");
2775*795d594fSAndroid Build Coastguard Worker }
2776*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Addiw_WithoutC)2777*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Addiw_WithoutC) {
2778*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2779*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Addiw, /*imm_bits=*/-12, "addiw {reg1}, {reg2}, {imm}"),
2780*795d594fSAndroid Build Coastguard Worker "Addiw_WithoutC");
2781*795d594fSAndroid Build Coastguard Worker }
2782*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Slliw)2783*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Slliw) {
2784*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Slliw, /*imm_bits=*/5, "slliw {reg1}, {reg2}, {imm}"),
2785*795d594fSAndroid Build Coastguard Worker "Slliw");
2786*795d594fSAndroid Build Coastguard Worker }
2787*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Srliw)2788*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Srliw) {
2789*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Srliw, /*imm_bits=*/5, "srliw {reg1}, {reg2}, {imm}"),
2790*795d594fSAndroid Build Coastguard Worker "Srliw");
2791*795d594fSAndroid Build Coastguard Worker }
2792*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sraiw)2793*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sraiw) {
2794*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Sraiw, /*imm_bits=*/5, "sraiw {reg1}, {reg2}, {imm}"),
2795*795d594fSAndroid Build Coastguard Worker "Sraiw");
2796*795d594fSAndroid Build Coastguard Worker }
2797*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Addw)2798*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Addw) {
2799*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Addw, "addw {reg1}, {reg2}, {reg3}"), "Addw");
2800*795d594fSAndroid Build Coastguard Worker }
2801*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Addw_WithoutC)2802*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Addw_WithoutC) {
2803*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2804*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Addw, "addw {reg1}, {reg2}, {reg3}"), "Addw_WithoutC");
2805*795d594fSAndroid Build Coastguard Worker }
2806*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Subw)2807*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Subw) {
2808*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Subw, "subw {reg1}, {reg2}, {reg3}"), "Subw");
2809*795d594fSAndroid Build Coastguard Worker }
2810*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Subw_WithoutC)2811*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Subw_WithoutC) {
2812*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2813*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Subw, "subw {reg1}, {reg2}, {reg3}"), "Subw_WithoutC");
2814*795d594fSAndroid Build Coastguard Worker }
2815*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sllw)2816*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sllw) {
2817*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sllw, "sllw {reg1}, {reg2}, {reg3}"), "Sllw");
2818*795d594fSAndroid Build Coastguard Worker }
2819*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Srlw)2820*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Srlw) {
2821*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Srlw, "srlw {reg1}, {reg2}, {reg3}"), "Srlw");
2822*795d594fSAndroid Build Coastguard Worker }
2823*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sraw)2824*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sraw) {
2825*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sraw, "sraw {reg1}, {reg2}, {reg3}"), "Sraw");
2826*795d594fSAndroid Build Coastguard Worker }
2827*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ecall)2828*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ecall) {
2829*795d594fSAndroid Build Coastguard Worker __ Ecall();
2830*795d594fSAndroid Build Coastguard Worker DriverStr("ecall\n", "Ecall");
2831*795d594fSAndroid Build Coastguard Worker }
2832*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ebreak)2833*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ebreak) {
2834*795d594fSAndroid Build Coastguard Worker __ Ebreak();
2835*795d594fSAndroid Build Coastguard Worker DriverStr("ebreak\n", "Ebreak");
2836*795d594fSAndroid Build Coastguard Worker }
2837*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ebreak_WithoutC)2838*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ebreak_WithoutC) {
2839*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2840*795d594fSAndroid Build Coastguard Worker __ Ebreak();
2841*795d594fSAndroid Build Coastguard Worker DriverStr("ebreak\n", "Ebreak_WithoutC");
2842*795d594fSAndroid Build Coastguard Worker }
2843*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Fence)2844*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Fence) {
2845*795d594fSAndroid Build Coastguard Worker auto get_fence_type_string = [](uint32_t fence_type) {
2846*795d594fSAndroid Build Coastguard Worker CHECK_LE(fence_type, 0xfu);
2847*795d594fSAndroid Build Coastguard Worker std::string result;
2848*795d594fSAndroid Build Coastguard Worker if ((fence_type & kFenceInput) != 0u) {
2849*795d594fSAndroid Build Coastguard Worker result += "i";
2850*795d594fSAndroid Build Coastguard Worker }
2851*795d594fSAndroid Build Coastguard Worker if ((fence_type & kFenceOutput) != 0u) {
2852*795d594fSAndroid Build Coastguard Worker result += "o";
2853*795d594fSAndroid Build Coastguard Worker }
2854*795d594fSAndroid Build Coastguard Worker if ((fence_type & kFenceRead) != 0u) {
2855*795d594fSAndroid Build Coastguard Worker result += "r";
2856*795d594fSAndroid Build Coastguard Worker }
2857*795d594fSAndroid Build Coastguard Worker if ((fence_type & kFenceWrite) != 0u) {
2858*795d594fSAndroid Build Coastguard Worker result += "w";
2859*795d594fSAndroid Build Coastguard Worker }
2860*795d594fSAndroid Build Coastguard Worker if (result.empty()) {
2861*795d594fSAndroid Build Coastguard Worker result += "0";
2862*795d594fSAndroid Build Coastguard Worker }
2863*795d594fSAndroid Build Coastguard Worker return result;
2864*795d594fSAndroid Build Coastguard Worker };
2865*795d594fSAndroid Build Coastguard Worker
2866*795d594fSAndroid Build Coastguard Worker std::string expected;
2867*795d594fSAndroid Build Coastguard Worker // Note: The `pred` and `succ` are 4 bits each.
2868*795d594fSAndroid Build Coastguard Worker // Some combinations are not really useful but the assembler can emit them all.
2869*795d594fSAndroid Build Coastguard Worker for (uint32_t pred = 0u; pred != 0x10; ++pred) {
2870*795d594fSAndroid Build Coastguard Worker for (uint32_t succ = 0u; succ != 0x10; ++succ) {
2871*795d594fSAndroid Build Coastguard Worker __ Fence(pred, succ);
2872*795d594fSAndroid Build Coastguard Worker expected +=
2873*795d594fSAndroid Build Coastguard Worker "fence " + get_fence_type_string(pred) + ", " + get_fence_type_string(succ) + "\n";
2874*795d594fSAndroid Build Coastguard Worker }
2875*795d594fSAndroid Build Coastguard Worker }
2876*795d594fSAndroid Build Coastguard Worker DriverStr(expected, "Fence");
2877*795d594fSAndroid Build Coastguard Worker }
2878*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FenceTso)2879*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FenceTso) {
2880*795d594fSAndroid Build Coastguard Worker __ FenceTso();
2881*795d594fSAndroid Build Coastguard Worker DriverStr("fence.tso", "FenceTso");
2882*795d594fSAndroid Build Coastguard Worker }
2883*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FenceI)2884*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FenceI) {
2885*795d594fSAndroid Build Coastguard Worker __ FenceI();
2886*795d594fSAndroid Build Coastguard Worker DriverStr("fence.i", "FenceI");
2887*795d594fSAndroid Build Coastguard Worker }
2888*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Mul)2889*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Mul) {
2890*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Mul, "mul {reg1}, {reg2}, {reg3}"), "Mul");
2891*795d594fSAndroid Build Coastguard Worker }
2892*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Mul_WithoutC)2893*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Mul_WithoutC) {
2894*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
2895*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Mul, "mul {reg1}, {reg2}, {reg3}"), "Mul_WithoutC");
2896*795d594fSAndroid Build Coastguard Worker }
2897*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Mulh)2898*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Mulh) {
2899*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Mulh, "mulh {reg1}, {reg2}, {reg3}"), "Mulh");
2900*795d594fSAndroid Build Coastguard Worker }
2901*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Mulhsu)2902*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Mulhsu) {
2903*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Mulhsu, "mulhsu {reg1}, {reg2}, {reg3}"), "Mulhsu");
2904*795d594fSAndroid Build Coastguard Worker }
2905*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Mulhu)2906*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Mulhu) {
2907*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Mulhu, "mulhu {reg1}, {reg2}, {reg3}"), "Mulhu");
2908*795d594fSAndroid Build Coastguard Worker }
2909*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Div)2910*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Div) {
2911*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Div, "div {reg1}, {reg2}, {reg3}"), "Div");
2912*795d594fSAndroid Build Coastguard Worker }
2913*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Divu)2914*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Divu) {
2915*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Divu, "divu {reg1}, {reg2}, {reg3}"), "Divu");
2916*795d594fSAndroid Build Coastguard Worker }
2917*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Rem)2918*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Rem) {
2919*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Rem, "rem {reg1}, {reg2}, {reg3}"), "Rem");
2920*795d594fSAndroid Build Coastguard Worker }
2921*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Remu)2922*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Remu) {
2923*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Remu, "remu {reg1}, {reg2}, {reg3}"), "Remu");
2924*795d594fSAndroid Build Coastguard Worker }
2925*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Mulw)2926*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Mulw) {
2927*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Mulw, "mulw {reg1}, {reg2}, {reg3}"), "Mulw");
2928*795d594fSAndroid Build Coastguard Worker }
2929*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Divw)2930*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Divw) {
2931*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Divw, "divw {reg1}, {reg2}, {reg3}"), "Divw");
2932*795d594fSAndroid Build Coastguard Worker }
2933*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Divuw)2934*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Divuw) {
2935*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Divuw, "divuw {reg1}, {reg2}, {reg3}"), "Divuw");
2936*795d594fSAndroid Build Coastguard Worker }
2937*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Remw)2938*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Remw) {
2939*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Remw, "remw {reg1}, {reg2}, {reg3}"), "Remw");
2940*795d594fSAndroid Build Coastguard Worker }
2941*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Remuw)2942*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Remuw) {
2943*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Remuw, "remuw {reg1}, {reg2}, {reg3}"), "Remuw");
2944*795d594fSAndroid Build Coastguard Worker }
2945*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,LrW)2946*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, LrW) {
2947*795d594fSAndroid Build Coastguard Worker auto invalid_aqrl = [](AqRl aqrl) { return aqrl == AqRl::kRelease; };
2948*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRAqRl(&Riscv64Assembler::LrW, "lr.w{aqrl} {reg1}, ({reg2})", invalid_aqrl),
2949*795d594fSAndroid Build Coastguard Worker "LrW");
2950*795d594fSAndroid Build Coastguard Worker }
2951*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,LrD)2952*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, LrD) {
2953*795d594fSAndroid Build Coastguard Worker auto invalid_aqrl = [](AqRl aqrl) { return aqrl == AqRl::kRelease; };
2954*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRAqRl(&Riscv64Assembler::LrD, "lr.d{aqrl} {reg1}, ({reg2})", invalid_aqrl),
2955*795d594fSAndroid Build Coastguard Worker "LrD");
2956*795d594fSAndroid Build Coastguard Worker }
2957*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ScW)2958*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ScW) {
2959*795d594fSAndroid Build Coastguard Worker auto invalid_aqrl = [](AqRl aqrl) { return aqrl == AqRl::kAcquire; };
2960*795d594fSAndroid Build Coastguard Worker DriverStr(
2961*795d594fSAndroid Build Coastguard Worker RepeatRRRAqRl(&Riscv64Assembler::ScW, "sc.w{aqrl} {reg1}, {reg2}, ({reg3})", invalid_aqrl),
2962*795d594fSAndroid Build Coastguard Worker "ScW");
2963*795d594fSAndroid Build Coastguard Worker }
2964*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ScD)2965*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ScD) {
2966*795d594fSAndroid Build Coastguard Worker auto invalid_aqrl = [](AqRl aqrl) { return aqrl == AqRl::kAcquire; };
2967*795d594fSAndroid Build Coastguard Worker DriverStr(
2968*795d594fSAndroid Build Coastguard Worker RepeatRRRAqRl(&Riscv64Assembler::ScD, "sc.d{aqrl} {reg1}, {reg2}, ({reg3})", invalid_aqrl),
2969*795d594fSAndroid Build Coastguard Worker "ScD");
2970*795d594fSAndroid Build Coastguard Worker }
2971*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoSwapW)2972*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoSwapW) {
2973*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoSwapW, "amoswap.w{aqrl} {reg1}, {reg2}, ({reg3})"),
2974*795d594fSAndroid Build Coastguard Worker "AmoSwapW");
2975*795d594fSAndroid Build Coastguard Worker }
2976*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoSwapD)2977*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoSwapD) {
2978*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoSwapD, "amoswap.d{aqrl} {reg1}, {reg2}, ({reg3})"),
2979*795d594fSAndroid Build Coastguard Worker "AmoSwapD");
2980*795d594fSAndroid Build Coastguard Worker }
2981*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoAddW)2982*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoAddW) {
2983*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoAddW, "amoadd.w{aqrl} {reg1}, {reg2}, ({reg3})"),
2984*795d594fSAndroid Build Coastguard Worker "AmoAddW");
2985*795d594fSAndroid Build Coastguard Worker }
2986*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoAddD)2987*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoAddD) {
2988*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoAddD, "amoadd.d{aqrl} {reg1}, {reg2}, ({reg3})"),
2989*795d594fSAndroid Build Coastguard Worker "AmoAddD");
2990*795d594fSAndroid Build Coastguard Worker }
2991*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoXorW)2992*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoXorW) {
2993*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoXorW, "amoxor.w{aqrl} {reg1}, {reg2}, ({reg3})"),
2994*795d594fSAndroid Build Coastguard Worker "AmoXorW");
2995*795d594fSAndroid Build Coastguard Worker }
2996*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoXorD)2997*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoXorD) {
2998*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoXorD, "amoxor.d{aqrl} {reg1}, {reg2}, ({reg3})"),
2999*795d594fSAndroid Build Coastguard Worker "AmoXorD");
3000*795d594fSAndroid Build Coastguard Worker }
3001*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoAndW)3002*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoAndW) {
3003*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoAndW, "amoand.w{aqrl} {reg1}, {reg2}, ({reg3})"),
3004*795d594fSAndroid Build Coastguard Worker "AmoAndW");
3005*795d594fSAndroid Build Coastguard Worker }
3006*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoAndD)3007*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoAndD) {
3008*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoAndD, "amoand.d{aqrl} {reg1}, {reg2}, ({reg3})"),
3009*795d594fSAndroid Build Coastguard Worker "AmoAndD");
3010*795d594fSAndroid Build Coastguard Worker }
3011*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoOrW)3012*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoOrW) {
3013*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoOrW, "amoor.w{aqrl} {reg1}, {reg2}, ({reg3})"),
3014*795d594fSAndroid Build Coastguard Worker "AmoOrW");
3015*795d594fSAndroid Build Coastguard Worker }
3016*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoOrD)3017*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoOrD) {
3018*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoOrD, "amoor.d{aqrl} {reg1}, {reg2}, ({reg3})"),
3019*795d594fSAndroid Build Coastguard Worker "AmoOrD");
3020*795d594fSAndroid Build Coastguard Worker }
3021*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoMinW)3022*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoMinW) {
3023*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMinW, "amomin.w{aqrl} {reg1}, {reg2}, ({reg3})"),
3024*795d594fSAndroid Build Coastguard Worker "AmoMinW");
3025*795d594fSAndroid Build Coastguard Worker }
3026*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoMinD)3027*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoMinD) {
3028*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMinD, "amomin.d{aqrl} {reg1}, {reg2}, ({reg3})"),
3029*795d594fSAndroid Build Coastguard Worker "AmoMinD");
3030*795d594fSAndroid Build Coastguard Worker }
3031*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoMaxW)3032*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoMaxW) {
3033*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMaxW, "amomax.w{aqrl} {reg1}, {reg2}, ({reg3})"),
3034*795d594fSAndroid Build Coastguard Worker "AmoMaxW");
3035*795d594fSAndroid Build Coastguard Worker }
3036*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoMaxD)3037*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoMaxD) {
3038*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMaxD, "amomax.d{aqrl} {reg1}, {reg2}, ({reg3})"),
3039*795d594fSAndroid Build Coastguard Worker "AmoMaxD");
3040*795d594fSAndroid Build Coastguard Worker }
3041*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoMinuW)3042*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoMinuW) {
3043*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMinuW, "amominu.w{aqrl} {reg1}, {reg2}, ({reg3})"),
3044*795d594fSAndroid Build Coastguard Worker "AmoMinuW");
3045*795d594fSAndroid Build Coastguard Worker }
3046*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoMinuD)3047*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoMinuD) {
3048*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMinuD, "amominu.d{aqrl} {reg1}, {reg2}, ({reg3})"),
3049*795d594fSAndroid Build Coastguard Worker "AmoMinuD");
3050*795d594fSAndroid Build Coastguard Worker }
3051*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoMaxuW)3052*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoMaxuW) {
3053*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMaxuW, "amomaxu.w{aqrl} {reg1}, {reg2}, ({reg3})"),
3054*795d594fSAndroid Build Coastguard Worker "AmoMaxuW");
3055*795d594fSAndroid Build Coastguard Worker }
3056*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AmoMaxuD)3057*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AmoMaxuD) {
3058*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRRAqRl(&Riscv64Assembler::AmoMaxuD, "amomaxu.d{aqrl} {reg1}, {reg2}, ({reg3})"),
3059*795d594fSAndroid Build Coastguard Worker "AmoMaxuD");
3060*795d594fSAndroid Build Coastguard Worker }
3061*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrrw)3062*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrrw) {
3063*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCsrrX(&Riscv64Assembler::Csrrw, "csrrw {reg1}, {csr}, {reg2}"), "Csrrw");
3064*795d594fSAndroid Build Coastguard Worker }
3065*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrrs)3066*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrrs) {
3067*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCsrrX(&Riscv64Assembler::Csrrs, "csrrs {reg1}, {csr}, {reg2}"), "Csrrs");
3068*795d594fSAndroid Build Coastguard Worker }
3069*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrrc)3070*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrrc) {
3071*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCsrrX(&Riscv64Assembler::Csrrc, "csrrc {reg1}, {csr}, {reg2}"), "Csrrc");
3072*795d594fSAndroid Build Coastguard Worker }
3073*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrrwi)3074*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrrwi) {
3075*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCsrrXi(&Riscv64Assembler::Csrrwi, "csrrwi {reg}, {csr}, {uimm}"), "Csrrwi");
3076*795d594fSAndroid Build Coastguard Worker }
3077*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrrsi)3078*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrrsi) {
3079*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCsrrXi(&Riscv64Assembler::Csrrsi, "csrrsi {reg}, {csr}, {uimm}"), "Csrrsi");
3080*795d594fSAndroid Build Coastguard Worker }
3081*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrrci)3082*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrrci) {
3083*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCsrrXi(&Riscv64Assembler::Csrrci, "csrrci {reg}, {csr}, {uimm}"), "Csrrci");
3084*795d594fSAndroid Build Coastguard Worker }
3085*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FLw)3086*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FLw) {
3087*795d594fSAndroid Build Coastguard Worker // Note: 16-bit variants of `flw` are not available on riscv64.
3088*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFRIb(&Riscv64Assembler::FLw, /*imm_bits=*/-12, "flw {reg1}, {imm}({reg2})"), "FLw");
3089*795d594fSAndroid Build Coastguard Worker }
3090*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FLd)3091*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FLd) {
3092*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFRIb(&Riscv64Assembler::FLd, /*imm_bits=*/-12, "fld {reg1}, {imm}({reg2})"), "FLd");
3093*795d594fSAndroid Build Coastguard Worker }
3094*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FLd_WithoutC)3095*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FLd_WithoutC) {
3096*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
3097*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFRIb(&Riscv64Assembler::FLd, /*imm_bits=*/-12, "fld {reg1}, {imm}({reg2})"),
3098*795d594fSAndroid Build Coastguard Worker "FLd_WithoutC");
3099*795d594fSAndroid Build Coastguard Worker }
3100*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSw)3101*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSw) {
3102*795d594fSAndroid Build Coastguard Worker // Note: 16-bit variants of `fsw` are not available on riscv64.
3103*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFRIb(&Riscv64Assembler::FSw, /*imm_bits=*/2, "fsw {reg1}, {imm}({reg2})"), "FSw");
3104*795d594fSAndroid Build Coastguard Worker }
3105*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSd)3106*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSd) {
3107*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFRIb(&Riscv64Assembler::FSd, /*imm_bits=*/2, "fsd {reg1}, {imm}({reg2})"), "FSd");
3108*795d594fSAndroid Build Coastguard Worker }
3109*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSd_WithoutC)3110*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSd_WithoutC) {
3111*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
3112*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFRIb(&Riscv64Assembler::FSd, /*imm_bits=*/-12, "fsd {reg1}, {imm}({reg2})"),
3113*795d594fSAndroid Build Coastguard Worker "FSd_WithoutC");
3114*795d594fSAndroid Build Coastguard Worker }
3115*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMAddS)3116*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMAddS) {
3117*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FMAddS,
3118*795d594fSAndroid Build Coastguard Worker "fmadd.s {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FMAddS");
3119*795d594fSAndroid Build Coastguard Worker }
3120*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMAddS_Default)3121*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMAddS_Default) {
3122*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFF(&Riscv64Assembler::FMAddS, "fmadd.s {reg1}, {reg2}, {reg3}, {reg4}"),
3123*795d594fSAndroid Build Coastguard Worker "FMAddS_Default");
3124*795d594fSAndroid Build Coastguard Worker }
3125*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMAddD)3126*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMAddD) {
3127*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FMAddD,
3128*795d594fSAndroid Build Coastguard Worker "fmadd.d {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FMAddD");
3129*795d594fSAndroid Build Coastguard Worker }
3130*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMAddD_Default)3131*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMAddD_Default) {
3132*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFF(&Riscv64Assembler::FMAddD, "fmadd.d {reg1}, {reg2}, {reg3}, {reg4}"),
3133*795d594fSAndroid Build Coastguard Worker "FMAddD_Default");
3134*795d594fSAndroid Build Coastguard Worker }
3135*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMSubS)3136*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMSubS) {
3137*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FMSubS,
3138*795d594fSAndroid Build Coastguard Worker "fmsub.s {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FMSubS");
3139*795d594fSAndroid Build Coastguard Worker }
3140*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMSubS_Default)3141*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMSubS_Default) {
3142*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFF(&Riscv64Assembler::FMSubS, "fmsub.s {reg1}, {reg2}, {reg3}, {reg4}"),
3143*795d594fSAndroid Build Coastguard Worker "FMSubS_Default");
3144*795d594fSAndroid Build Coastguard Worker }
3145*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMSubD)3146*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMSubD) {
3147*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FMSubD,
3148*795d594fSAndroid Build Coastguard Worker "fmsub.d {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FMSubD");
3149*795d594fSAndroid Build Coastguard Worker }
3150*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMSubD_Default)3151*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMSubD_Default) {
3152*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFF(&Riscv64Assembler::FMSubD, "fmsub.d {reg1}, {reg2}, {reg3}, {reg4}"),
3153*795d594fSAndroid Build Coastguard Worker "FMSubD_Default");
3154*795d594fSAndroid Build Coastguard Worker }
3155*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNMSubS)3156*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNMSubS) {
3157*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FNMSubS,
3158*795d594fSAndroid Build Coastguard Worker "fnmsub.s {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FNMSubS");
3159*795d594fSAndroid Build Coastguard Worker }
3160*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNMSubS_Default)3161*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNMSubS_Default) {
3162*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFF(&Riscv64Assembler::FNMSubS, "fnmsub.s {reg1}, {reg2}, {reg3}, {reg4}"),
3163*795d594fSAndroid Build Coastguard Worker "FNMSubS_Default");
3164*795d594fSAndroid Build Coastguard Worker }
3165*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNMSubD)3166*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNMSubD) {
3167*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FNMSubD,
3168*795d594fSAndroid Build Coastguard Worker "fnmsub.d {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FNMSubD");
3169*795d594fSAndroid Build Coastguard Worker }
3170*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNMSubD_Default)3171*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNMSubD_Default) {
3172*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFF(&Riscv64Assembler::FNMSubD, "fnmsub.d {reg1}, {reg2}, {reg3}, {reg4}"),
3173*795d594fSAndroid Build Coastguard Worker "FNMSubD_Default");
3174*795d594fSAndroid Build Coastguard Worker }
3175*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNMAddS)3176*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNMAddS) {
3177*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FNMAddS,
3178*795d594fSAndroid Build Coastguard Worker "fnmadd.s {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FNMAddS");
3179*795d594fSAndroid Build Coastguard Worker }
3180*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNMAddS_Default)3181*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNMAddS_Default) {
3182*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFF(&Riscv64Assembler::FNMAddS, "fnmadd.s {reg1}, {reg2}, {reg3}, {reg4}"),
3183*795d594fSAndroid Build Coastguard Worker "FNMAddS_Default");
3184*795d594fSAndroid Build Coastguard Worker }
3185*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNMAddD)3186*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNMAddD) {
3187*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFFRoundingMode(&Riscv64Assembler::FNMAddD,
3188*795d594fSAndroid Build Coastguard Worker "fnmadd.d {reg1}, {reg2}, {reg3}, {reg4}, {rm}"), "FNMAddD");
3189*795d594fSAndroid Build Coastguard Worker }
3190*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNMAddD_Default)3191*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNMAddD_Default) {
3192*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFF(&Riscv64Assembler::FNMAddD, "fnmadd.d {reg1}, {reg2}, {reg3}, {reg4}"),
3193*795d594fSAndroid Build Coastguard Worker "FNMAddD_Default");
3194*795d594fSAndroid Build Coastguard Worker }
3195*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FAddS)3196*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FAddS) {
3197*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FAddS, "fadd.s {reg1}, {reg2}, {reg3}, {rm}"),
3198*795d594fSAndroid Build Coastguard Worker "FAddS");
3199*795d594fSAndroid Build Coastguard Worker }
3200*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FAddS_Default)3201*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FAddS_Default) {
3202*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FAddS, "fadd.s {reg1}, {reg2}, {reg3}"), "FAddS_Default");
3203*795d594fSAndroid Build Coastguard Worker }
3204*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FAddD)3205*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FAddD) {
3206*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FAddD, "fadd.d {reg1}, {reg2}, {reg3}, {rm}"),
3207*795d594fSAndroid Build Coastguard Worker "FAddD");
3208*795d594fSAndroid Build Coastguard Worker }
3209*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FAddD_Default)3210*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FAddD_Default) {
3211*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FAddD, "fadd.d {reg1}, {reg2}, {reg3}"), "FAddD_Default");
3212*795d594fSAndroid Build Coastguard Worker }
3213*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSubS)3214*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSubS) {
3215*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FSubS, "fsub.s {reg1}, {reg2}, {reg3}, {rm}"),
3216*795d594fSAndroid Build Coastguard Worker "FSubS");
3217*795d594fSAndroid Build Coastguard Worker }
3218*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSubS_Default)3219*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSubS_Default) {
3220*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FSubS, "fsub.s {reg1}, {reg2}, {reg3}"), "FSubS_Default");
3221*795d594fSAndroid Build Coastguard Worker }
3222*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSubD)3223*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSubD) {
3224*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FSubD, "fsub.d {reg1}, {reg2}, {reg3}, {rm}"),
3225*795d594fSAndroid Build Coastguard Worker "FSubD");
3226*795d594fSAndroid Build Coastguard Worker }
3227*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSubD_Default)3228*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSubD_Default) {
3229*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FSubD, "fsub.d {reg1}, {reg2}, {reg3}"), "FSubD_Default");
3230*795d594fSAndroid Build Coastguard Worker }
3231*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMulS)3232*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMulS) {
3233*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FMulS, "fmul.s {reg1}, {reg2}, {reg3}, {rm}"),
3234*795d594fSAndroid Build Coastguard Worker "FMulS");
3235*795d594fSAndroid Build Coastguard Worker }
3236*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMulS_Default)3237*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMulS_Default) {
3238*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FMulS, "fmul.s {reg1}, {reg2}, {reg3}"), "FMulS_Default");
3239*795d594fSAndroid Build Coastguard Worker }
3240*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMulD)3241*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMulD) {
3242*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FMulD, "fmul.d {reg1}, {reg2}, {reg3}, {rm}"),
3243*795d594fSAndroid Build Coastguard Worker "FMulD");
3244*795d594fSAndroid Build Coastguard Worker }
3245*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMulD_Default)3246*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMulD_Default) {
3247*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FMulD, "fmul.d {reg1}, {reg2}, {reg3}"), "FMulD_Default");
3248*795d594fSAndroid Build Coastguard Worker }
3249*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FDivS)3250*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FDivS) {
3251*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FDivS, "fdiv.s {reg1}, {reg2}, {reg3}, {rm}"),
3252*795d594fSAndroid Build Coastguard Worker "FDivS");
3253*795d594fSAndroid Build Coastguard Worker }
3254*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FDivS_Default)3255*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FDivS_Default) {
3256*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FDivS, "fdiv.s {reg1}, {reg2}, {reg3}"), "FDivS_Default");
3257*795d594fSAndroid Build Coastguard Worker }
3258*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FDivD)3259*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FDivD) {
3260*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFFRoundingMode(&Riscv64Assembler::FDivD, "fdiv.d {reg1}, {reg2}, {reg3}, {rm}"),
3261*795d594fSAndroid Build Coastguard Worker "FDivD");
3262*795d594fSAndroid Build Coastguard Worker }
3263*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FDivD_Default)3264*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FDivD_Default) {
3265*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FDivD, "fdiv.d {reg1}, {reg2}, {reg3}"), "FDivD_Default");
3266*795d594fSAndroid Build Coastguard Worker }
3267*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSqrtS)3268*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSqrtS) {
3269*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFRoundingMode(&Riscv64Assembler::FSqrtS, "fsqrt.s {reg1}, {reg2}, {rm}"),
3270*795d594fSAndroid Build Coastguard Worker "FSqrtS");
3271*795d594fSAndroid Build Coastguard Worker }
3272*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSqrtS_Default)3273*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSqrtS_Default) {
3274*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FSqrtS, "fsqrt.s {reg1}, {reg2}"), "FSqrtS_Default");
3275*795d594fSAndroid Build Coastguard Worker }
3276*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSqrtD)3277*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSqrtD) {
3278*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFRoundingMode(&Riscv64Assembler::FSqrtD, "fsqrt.d {reg1}, {reg2}, {rm}"),
3279*795d594fSAndroid Build Coastguard Worker "FSqrtD");
3280*795d594fSAndroid Build Coastguard Worker }
3281*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSqrtD_Default)3282*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSqrtD_Default) {
3283*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FSqrtD, "fsqrt.d {reg1}, {reg2}"), "FSqrtD_Default");
3284*795d594fSAndroid Build Coastguard Worker }
3285*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSgnjS)3286*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSgnjS) {
3287*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjS, "fsgnj.s {reg1}, {reg2}, {reg3}"), "FSgnjS");
3288*795d594fSAndroid Build Coastguard Worker }
3289*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSgnjD)3290*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSgnjD) {
3291*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjD, "fsgnj.d {reg1}, {reg2}, {reg3}"), "FSgnjD");
3292*795d594fSAndroid Build Coastguard Worker }
3293*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSgnjnS)3294*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSgnjnS) {
3295*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjnS, "fsgnjn.s {reg1}, {reg2}, {reg3}"), "FSgnjnS");
3296*795d594fSAndroid Build Coastguard Worker }
3297*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSgnjnD)3298*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSgnjnD) {
3299*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjnD, "fsgnjn.d {reg1}, {reg2}, {reg3}"), "FSgnjnD");
3300*795d594fSAndroid Build Coastguard Worker }
3301*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSgnjxS)3302*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSgnjxS) {
3303*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjxS, "fsgnjx.s {reg1}, {reg2}, {reg3}"), "FSgnjxS");
3304*795d594fSAndroid Build Coastguard Worker }
3305*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FSgnjxD)3306*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FSgnjxD) {
3307*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FSgnjxD, "fsgnjx.d {reg1}, {reg2}, {reg3}"), "FSgnjxD");
3308*795d594fSAndroid Build Coastguard Worker }
3309*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMinS)3310*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMinS) {
3311*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FMinS, "fmin.s {reg1}, {reg2}, {reg3}"), "FMinS");
3312*795d594fSAndroid Build Coastguard Worker }
3313*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMinD)3314*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMinD) {
3315*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FMinD, "fmin.d {reg1}, {reg2}, {reg3}"), "FMinD");
3316*795d594fSAndroid Build Coastguard Worker }
3317*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMaxS)3318*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMaxS) {
3319*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FMaxS, "fmax.s {reg1}, {reg2}, {reg3}"), "FMaxS");
3320*795d594fSAndroid Build Coastguard Worker }
3321*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMaxD)3322*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMaxD) {
3323*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFF(&Riscv64Assembler::FMaxD, "fmax.d {reg1}, {reg2}, {reg3}"), "FMaxD");
3324*795d594fSAndroid Build Coastguard Worker }
3325*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSD)3326*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSD) {
3327*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFRoundingMode(&Riscv64Assembler::FCvtSD, "fcvt.s.d {reg1}, {reg2}, {rm}"),
3328*795d594fSAndroid Build Coastguard Worker "FCvtSD");
3329*795d594fSAndroid Build Coastguard Worker }
3330*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSD_Default)3331*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSD_Default) {
3332*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FCvtSD, "fcvt.s.d {reg1}, {reg2}"), "FCvtSD_Default");
3333*795d594fSAndroid Build Coastguard Worker }
3334*795d594fSAndroid Build Coastguard Worker
3335*795d594fSAndroid Build Coastguard Worker // This conversion is lossless, so the rounding mode is meaningless and the assembler we're
3336*795d594fSAndroid Build Coastguard Worker // testing against does not even accept the rounding mode argument, so this test is disabled.
TEST_F(AssemblerRISCV64Test,DISABLED_FCvtDS)3337*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, DISABLED_FCvtDS) {
3338*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFFRoundingMode(&Riscv64Assembler::FCvtDS, "fcvt.d.s {reg1}, {reg2}, {rm}"),
3339*795d594fSAndroid Build Coastguard Worker "FCvtDS");
3340*795d594fSAndroid Build Coastguard Worker }
3341*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtDS_Default)3342*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtDS_Default) {
3343*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FCvtDS, "fcvt.d.s {reg1}, {reg2}"), "FCvtDS_Default");
3344*795d594fSAndroid Build Coastguard Worker }
3345*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FEqS)3346*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FEqS) {
3347*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRFF(&Riscv64Assembler::FEqS, "feq.s {reg1}, {reg2}, {reg3}"), "FEqS");
3348*795d594fSAndroid Build Coastguard Worker }
3349*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FEqD)3350*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FEqD) {
3351*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRFF(&Riscv64Assembler::FEqD, "feq.d {reg1}, {reg2}, {reg3}"), "FEqD");
3352*795d594fSAndroid Build Coastguard Worker }
3353*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FLtS)3354*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FLtS) {
3355*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRFF(&Riscv64Assembler::FLtS, "flt.s {reg1}, {reg2}, {reg3}"), "FLtS");
3356*795d594fSAndroid Build Coastguard Worker }
3357*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FLtD)3358*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FLtD) {
3359*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRFF(&Riscv64Assembler::FLtD, "flt.d {reg1}, {reg2}, {reg3}"), "FLtD");
3360*795d594fSAndroid Build Coastguard Worker }
3361*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FLeS)3362*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FLeS) {
3363*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRFF(&Riscv64Assembler::FLeS, "fle.s {reg1}, {reg2}, {reg3}"), "FLeS");
3364*795d594fSAndroid Build Coastguard Worker }
3365*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FLeD)3366*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FLeD) {
3367*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRFF(&Riscv64Assembler::FLeD, "fle.d {reg1}, {reg2}, {reg3}"), "FLeD");
3368*795d594fSAndroid Build Coastguard Worker }
3369*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtWS)3370*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtWS) {
3371*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrFRoundingMode(&Riscv64Assembler::FCvtWS, "fcvt.w.s {reg1}, {reg2}, {rm}"),
3372*795d594fSAndroid Build Coastguard Worker "FCvtWS");
3373*795d594fSAndroid Build Coastguard Worker }
3374*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtWS_Default)3375*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtWS_Default) {
3376*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrF(&Riscv64Assembler::FCvtWS, "fcvt.w.s {reg1}, {reg2}"), "FCvtWS_Default");
3377*795d594fSAndroid Build Coastguard Worker }
3378*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtWD)3379*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtWD) {
3380*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrFRoundingMode(&Riscv64Assembler::FCvtWD, "fcvt.w.d {reg1}, {reg2}, {rm}"),
3381*795d594fSAndroid Build Coastguard Worker "FCvtWD");
3382*795d594fSAndroid Build Coastguard Worker }
3383*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtWD_Default)3384*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtWD_Default) {
3385*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrF(&Riscv64Assembler::FCvtWD, "fcvt.w.d {reg1}, {reg2}"), "FCvtWD_Default");
3386*795d594fSAndroid Build Coastguard Worker }
3387*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtWuS)3388*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtWuS) {
3389*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrFRoundingMode(&Riscv64Assembler::FCvtWuS, "fcvt.wu.s {reg1}, {reg2}, {rm}"),
3390*795d594fSAndroid Build Coastguard Worker "FCvtWuS");
3391*795d594fSAndroid Build Coastguard Worker }
3392*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtWuS_Default)3393*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtWuS_Default) {
3394*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrF(&Riscv64Assembler::FCvtWuS, "fcvt.wu.s {reg1}, {reg2}"), "FCvtWuS_Default");
3395*795d594fSAndroid Build Coastguard Worker }
3396*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtWuD)3397*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtWuD) {
3398*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrFRoundingMode(&Riscv64Assembler::FCvtWuD, "fcvt.wu.d {reg1}, {reg2}, {rm}"),
3399*795d594fSAndroid Build Coastguard Worker "FCvtWuD");
3400*795d594fSAndroid Build Coastguard Worker }
3401*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtWuD_Default)3402*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtWuD_Default) {
3403*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrF(&Riscv64Assembler::FCvtWuD, "fcvt.wu.d {reg1}, {reg2}"), "FCvtWuD_Default");
3404*795d594fSAndroid Build Coastguard Worker }
3405*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtLS)3406*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtLS) {
3407*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrFRoundingMode(&Riscv64Assembler::FCvtLS, "fcvt.l.s {reg1}, {reg2}, {rm}"),
3408*795d594fSAndroid Build Coastguard Worker "FCvtLS");
3409*795d594fSAndroid Build Coastguard Worker }
3410*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtLS_Default)3411*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtLS_Default) {
3412*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrF(&Riscv64Assembler::FCvtLS, "fcvt.l.s {reg1}, {reg2}"), "FCvtLS_Default");
3413*795d594fSAndroid Build Coastguard Worker }
3414*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtLD)3415*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtLD) {
3416*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrFRoundingMode(&Riscv64Assembler::FCvtLD, "fcvt.l.d {reg1}, {reg2}, {rm}"),
3417*795d594fSAndroid Build Coastguard Worker "FCvtLD");
3418*795d594fSAndroid Build Coastguard Worker }
3419*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtLD_Default)3420*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtLD_Default) {
3421*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrF(&Riscv64Assembler::FCvtLD, "fcvt.l.d {reg1}, {reg2}"), "FCvtLD_Default");
3422*795d594fSAndroid Build Coastguard Worker }
3423*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtLuS)3424*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtLuS) {
3425*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrFRoundingMode(&Riscv64Assembler::FCvtLuS, "fcvt.lu.s {reg1}, {reg2}, {rm}"),
3426*795d594fSAndroid Build Coastguard Worker "FCvtLuS");
3427*795d594fSAndroid Build Coastguard Worker }
3428*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtLuS_Default)3429*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtLuS_Default) {
3430*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrF(&Riscv64Assembler::FCvtLuS, "fcvt.lu.s {reg1}, {reg2}"), "FCvtLuS_Default");
3431*795d594fSAndroid Build Coastguard Worker }
3432*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtLuD)3433*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtLuD) {
3434*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrFRoundingMode(&Riscv64Assembler::FCvtLuD, "fcvt.lu.d {reg1}, {reg2}, {rm}"),
3435*795d594fSAndroid Build Coastguard Worker "FCvtLuD");
3436*795d594fSAndroid Build Coastguard Worker }
3437*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtLuD_Default)3438*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtLuD_Default) {
3439*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrF(&Riscv64Assembler::FCvtLuD, "fcvt.lu.d {reg1}, {reg2}"), "FCvtLuD_Default");
3440*795d594fSAndroid Build Coastguard Worker }
3441*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSW)3442*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSW) {
3443*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFrRoundingMode(&Riscv64Assembler::FCvtSW, "fcvt.s.w {reg1}, {reg2}, {rm}"),
3444*795d594fSAndroid Build Coastguard Worker "FCvtSW");
3445*795d594fSAndroid Build Coastguard Worker }
3446*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSW_Default)3447*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSW_Default) {
3448*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFr(&Riscv64Assembler::FCvtSW, "fcvt.s.w {reg1}, {reg2}"), "FCvtSW_Default");
3449*795d594fSAndroid Build Coastguard Worker }
3450*795d594fSAndroid Build Coastguard Worker
3451*795d594fSAndroid Build Coastguard Worker // This conversion is lossless, so the rounding mode is meaningless and the assembler we're
3452*795d594fSAndroid Build Coastguard Worker // testing against does not even accept the rounding mode argument, so this test is disabled.
TEST_F(AssemblerRISCV64Test,DISABLED_FCvtDW)3453*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, DISABLED_FCvtDW) {
3454*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFrRoundingMode(&Riscv64Assembler::FCvtDW, "fcvt.d.w {reg1}, {reg2}, {rm}"),
3455*795d594fSAndroid Build Coastguard Worker "FCvtDW");
3456*795d594fSAndroid Build Coastguard Worker }
3457*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtDW_Default)3458*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtDW_Default) {
3459*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFr(&Riscv64Assembler::FCvtDW, "fcvt.d.w {reg1}, {reg2}"), "FCvtDW_Default");
3460*795d594fSAndroid Build Coastguard Worker }
3461*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSWu)3462*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSWu) {
3463*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFrRoundingMode(&Riscv64Assembler::FCvtSWu, "fcvt.s.wu {reg1}, {reg2}, {rm}"),
3464*795d594fSAndroid Build Coastguard Worker "FCvtSWu");
3465*795d594fSAndroid Build Coastguard Worker }
3466*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSWu_Default)3467*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSWu_Default) {
3468*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFr(&Riscv64Assembler::FCvtSWu, "fcvt.s.wu {reg1}, {reg2}"), "FCvtSWu_Default");
3469*795d594fSAndroid Build Coastguard Worker }
3470*795d594fSAndroid Build Coastguard Worker
3471*795d594fSAndroid Build Coastguard Worker // This conversion is lossless, so the rounding mode is meaningless and the assembler we're
3472*795d594fSAndroid Build Coastguard Worker // testing against does not even accept the rounding mode argument, so this test is disabled.
TEST_F(AssemblerRISCV64Test,DISABLED_FCvtDWu)3473*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, DISABLED_FCvtDWu) {
3474*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFrRoundingMode(&Riscv64Assembler::FCvtDWu, "fcvt.d.wu {reg1}, {reg2}, {rm}"),
3475*795d594fSAndroid Build Coastguard Worker "FCvtDWu");
3476*795d594fSAndroid Build Coastguard Worker }
3477*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtDWu_Default)3478*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtDWu_Default) {
3479*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFr(&Riscv64Assembler::FCvtDWu, "fcvt.d.wu {reg1}, {reg2}"), "FCvtDWu_Default");
3480*795d594fSAndroid Build Coastguard Worker }
3481*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSL)3482*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSL) {
3483*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFrRoundingMode(&Riscv64Assembler::FCvtSL, "fcvt.s.l {reg1}, {reg2}, {rm}"),
3484*795d594fSAndroid Build Coastguard Worker "FCvtSL");
3485*795d594fSAndroid Build Coastguard Worker }
3486*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSL_Default)3487*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSL_Default) {
3488*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFr(&Riscv64Assembler::FCvtSL, "fcvt.s.l {reg1}, {reg2}"), "FCvtSL_Default");
3489*795d594fSAndroid Build Coastguard Worker }
3490*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtDL)3491*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtDL) {
3492*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFrRoundingMode(&Riscv64Assembler::FCvtDL, "fcvt.d.l {reg1}, {reg2}, {rm}"),
3493*795d594fSAndroid Build Coastguard Worker "FCvtDL");
3494*795d594fSAndroid Build Coastguard Worker }
3495*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtDL_Default)3496*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtDL_Default) {
3497*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFr(&Riscv64Assembler::FCvtDL, "fcvt.d.l {reg1}, {reg2}"), "FCvtDL_Default");
3498*795d594fSAndroid Build Coastguard Worker }
3499*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSLu)3500*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSLu) {
3501*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFrRoundingMode(&Riscv64Assembler::FCvtSLu, "fcvt.s.lu {reg1}, {reg2}, {rm}"),
3502*795d594fSAndroid Build Coastguard Worker "FCvtSLu");
3503*795d594fSAndroid Build Coastguard Worker }
3504*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtSLu_Default)3505*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtSLu_Default) {
3506*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFr(&Riscv64Assembler::FCvtSLu, "fcvt.s.lu {reg1}, {reg2}"), "FCvtSLu_Default");
3507*795d594fSAndroid Build Coastguard Worker }
3508*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtDLu)3509*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtDLu) {
3510*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFrRoundingMode(&Riscv64Assembler::FCvtDLu, "fcvt.d.lu {reg1}, {reg2}, {rm}"),
3511*795d594fSAndroid Build Coastguard Worker "FCvtDLu");
3512*795d594fSAndroid Build Coastguard Worker }
3513*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FCvtDLu_Default)3514*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FCvtDLu_Default) {
3515*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFr(&Riscv64Assembler::FCvtDLu, "fcvt.d.lu {reg1}, {reg2}"), "FCvtDLu_Default");
3516*795d594fSAndroid Build Coastguard Worker }
3517*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMvXW)3518*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMvXW) {
3519*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRF(&Riscv64Assembler::FMvXW, "fmv.x.w {reg1}, {reg2}"), "FMvXW");
3520*795d594fSAndroid Build Coastguard Worker }
3521*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMvXD)3522*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMvXD) {
3523*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRF(&Riscv64Assembler::FMvXD, "fmv.x.d {reg1}, {reg2}"), "FMvXD");
3524*795d594fSAndroid Build Coastguard Worker }
3525*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMvWX)3526*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMvWX) {
3527*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFR(&Riscv64Assembler::FMvWX, "fmv.w.x {reg1}, {reg2}"), "FMvWX");
3528*795d594fSAndroid Build Coastguard Worker }
3529*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMvDX)3530*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMvDX) {
3531*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFR(&Riscv64Assembler::FMvDX, "fmv.d.x {reg1}, {reg2}"), "FMvDX");
3532*795d594fSAndroid Build Coastguard Worker }
3533*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FClassS)3534*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FClassS) {
3535*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRF(&Riscv64Assembler::FClassS, "fclass.s {reg1}, {reg2}"), "FClassS");
3536*795d594fSAndroid Build Coastguard Worker }
3537*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FClassD)3538*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FClassD) {
3539*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatrF(&Riscv64Assembler::FClassD, "fclass.d {reg1}, {reg2}"), "FClassD");
3540*795d594fSAndroid Build Coastguard Worker }
3541*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CLwsp)3542*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CLwsp) {
3543*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CLwsp,
3544*795d594fSAndroid Build Coastguard Worker /*is_short=*/false,
3545*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/true,
3546*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
3547*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/6,
3548*795d594fSAndroid Build Coastguard Worker /*shift=*/2,
3549*795d594fSAndroid Build Coastguard Worker "c.lwsp {reg}, {imm}(sp)"),
3550*795d594fSAndroid Build Coastguard Worker "CLwsp");
3551*795d594fSAndroid Build Coastguard Worker }
3552*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CLdsp)3553*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CLdsp) {
3554*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CLdsp,
3555*795d594fSAndroid Build Coastguard Worker /*is_short=*/false,
3556*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/true,
3557*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
3558*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/6,
3559*795d594fSAndroid Build Coastguard Worker /*shift=*/3,
3560*795d594fSAndroid Build Coastguard Worker "c.ldsp {reg}, {imm}(sp)"),
3561*795d594fSAndroid Build Coastguard Worker "CLdsp");
3562*795d594fSAndroid Build Coastguard Worker }
3563*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CFLdsp)3564*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CFLdsp) {
3565*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCFImm(
3566*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::CFLdsp, /*imm_bits=*/6, /*shift=*/3, "c.fldsp {reg}, {imm}(sp)"),
3567*795d594fSAndroid Build Coastguard Worker "CFLdsp");
3568*795d594fSAndroid Build Coastguard Worker }
3569*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSwsp)3570*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSwsp) {
3571*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CSwsp,
3572*795d594fSAndroid Build Coastguard Worker /*is_short=*/false,
3573*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/false,
3574*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
3575*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/6,
3576*795d594fSAndroid Build Coastguard Worker /*shift=*/2,
3577*795d594fSAndroid Build Coastguard Worker "c.swsp {reg}, {imm}(sp)"),
3578*795d594fSAndroid Build Coastguard Worker "CLwsp");
3579*795d594fSAndroid Build Coastguard Worker }
3580*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSdsp)3581*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSdsp) {
3582*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CSdsp,
3583*795d594fSAndroid Build Coastguard Worker /*is_short=*/false,
3584*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/false,
3585*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
3586*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/6,
3587*795d594fSAndroid Build Coastguard Worker /*shift=*/3,
3588*795d594fSAndroid Build Coastguard Worker "c.sdsp {reg}, {imm}(sp)"),
3589*795d594fSAndroid Build Coastguard Worker "CLdsp");
3590*795d594fSAndroid Build Coastguard Worker }
3591*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CFSdsp)3592*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CFSdsp) {
3593*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCFImm(
3594*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::CFSdsp, /*imm_bits=*/6, /*shift=*/3, "c.fsdsp {reg}, {imm}(sp)"),
3595*795d594fSAndroid Build Coastguard Worker "CFLdsp");
3596*795d594fSAndroid Build Coastguard Worker }
3597*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CLw)3598*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CLw) {
3599*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRImm(
3600*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::CLw, /*imm_bits=*/5, /*shift=*/2, "c.lw {reg1}, {imm}({reg2})"),
3601*795d594fSAndroid Build Coastguard Worker "CLw");
3602*795d594fSAndroid Build Coastguard Worker }
3603*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CLd)3604*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CLd) {
3605*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRImm(
3606*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::CLd, /*imm_bits=*/5, /*shift=*/3, "c.ld {reg1}, {imm}({reg2})"),
3607*795d594fSAndroid Build Coastguard Worker "CLd");
3608*795d594fSAndroid Build Coastguard Worker }
3609*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CFLd)3610*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CFLd) {
3611*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCFRImm(&Riscv64Assembler::CFLd,
3612*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/5,
3613*795d594fSAndroid Build Coastguard Worker /*shift=*/3,
3614*795d594fSAndroid Build Coastguard Worker "c.fld {reg1}, {imm}({reg2})"),
3615*795d594fSAndroid Build Coastguard Worker "CFLd");
3616*795d594fSAndroid Build Coastguard Worker }
3617*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSw)3618*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSw) {
3619*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRImm(
3620*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::CSw, /*imm_bits=*/5, /*shift=*/2, "c.sw {reg1}, {imm}({reg2})"),
3621*795d594fSAndroid Build Coastguard Worker "CSw");
3622*795d594fSAndroid Build Coastguard Worker }
3623*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSd)3624*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSd) {
3625*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRImm(
3626*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::CSd, /*imm_bits=*/5, /*shift=*/3, "c.sd {reg1}, {imm}({reg2})"),
3627*795d594fSAndroid Build Coastguard Worker "CSd");
3628*795d594fSAndroid Build Coastguard Worker }
3629*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CFSd)3630*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CFSd) {
3631*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCFRImm(&Riscv64Assembler::CFSd,
3632*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/5,
3633*795d594fSAndroid Build Coastguard Worker /*shift=*/3,
3634*795d594fSAndroid Build Coastguard Worker "c.fsd {reg1}, {imm}({reg2})"),
3635*795d594fSAndroid Build Coastguard Worker "CFSd");
3636*795d594fSAndroid Build Coastguard Worker }
3637*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CLi)3638*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CLi) {
3639*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CLi,
3640*795d594fSAndroid Build Coastguard Worker /*is_short=*/false,
3641*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/true,
3642*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
3643*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/-6,
3644*795d594fSAndroid Build Coastguard Worker /*shift=*/0,
3645*795d594fSAndroid Build Coastguard Worker "c.li {reg}, {imm}"),
3646*795d594fSAndroid Build Coastguard Worker "CLi");
3647*795d594fSAndroid Build Coastguard Worker }
3648*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CLui)3649*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CLui) {
3650*795d594fSAndroid Build Coastguard Worker std::string str;
3651*795d594fSAndroid Build Coastguard Worker auto imms = CreateImmediateValuesBits(/*imm_bits=*/5, /*as_uint=*/true);
3652*795d594fSAndroid Build Coastguard Worker for (uint32_t v = 0xfffe0; v <= 0xfffff; ++v) {
3653*795d594fSAndroid Build Coastguard Worker imms.push_back(v);
3654*795d594fSAndroid Build Coastguard Worker }
3655*795d594fSAndroid Build Coastguard Worker
3656*795d594fSAndroid Build Coastguard Worker for (XRegister reg : GetRegisters()) {
3657*795d594fSAndroid Build Coastguard Worker for (int64_t imm_raw : imms) {
3658*795d594fSAndroid Build Coastguard Worker if (imm_raw == 0) {
3659*795d594fSAndroid Build Coastguard Worker continue;
3660*795d594fSAndroid Build Coastguard Worker }
3661*795d594fSAndroid Build Coastguard Worker
3662*795d594fSAndroid Build Coastguard Worker if (reg == Zero || reg == SP) {
3663*795d594fSAndroid Build Coastguard Worker continue;
3664*795d594fSAndroid Build Coastguard Worker }
3665*795d594fSAndroid Build Coastguard Worker
3666*795d594fSAndroid Build Coastguard Worker uint32_t imm = CreateImmediate(imm_raw);
3667*795d594fSAndroid Build Coastguard Worker GetAssembler()->CLui(reg, imm);
3668*795d594fSAndroid Build Coastguard Worker
3669*795d594fSAndroid Build Coastguard Worker std::string base = "c.lui {reg}, {imm}";
3670*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG_TOKEN, GetRegisterName(reg), &base);
3671*795d594fSAndroid Build Coastguard Worker ReplaceImm(imm, /*bias=*/0, /*multiplier=*/1, &base);
3672*795d594fSAndroid Build Coastguard Worker str += base;
3673*795d594fSAndroid Build Coastguard Worker str += "\n";
3674*795d594fSAndroid Build Coastguard Worker }
3675*795d594fSAndroid Build Coastguard Worker }
3676*795d594fSAndroid Build Coastguard Worker
3677*795d594fSAndroid Build Coastguard Worker DriverStr(str, "CLui");
3678*795d594fSAndroid Build Coastguard Worker }
3679*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CAddi)3680*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CAddi) {
3681*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CAddi,
3682*795d594fSAndroid Build Coastguard Worker /*is_short=*/false,
3683*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/true,
3684*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/true,
3685*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/-6,
3686*795d594fSAndroid Build Coastguard Worker /*shift=*/0,
3687*795d594fSAndroid Build Coastguard Worker "c.addi {reg}, {imm}"),
3688*795d594fSAndroid Build Coastguard Worker "CAddi");
3689*795d594fSAndroid Build Coastguard Worker }
3690*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CAddiw)3691*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CAddiw) {
3692*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CAddiw,
3693*795d594fSAndroid Build Coastguard Worker /*is_short=*/false,
3694*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/true,
3695*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
3696*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/-6,
3697*795d594fSAndroid Build Coastguard Worker /*shift=*/0,
3698*795d594fSAndroid Build Coastguard Worker "c.addiw {reg}, {imm}"),
3699*795d594fSAndroid Build Coastguard Worker "CAddiw");
3700*795d594fSAndroid Build Coastguard Worker }
3701*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CAddi16Sp)3702*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CAddi16Sp) {
3703*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatImm(&Riscv64Assembler::CAddi16Sp,
3704*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/true,
3705*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/-6,
3706*795d594fSAndroid Build Coastguard Worker /*shift=*/4,
3707*795d594fSAndroid Build Coastguard Worker "c.addi16sp sp, {imm}"),
3708*795d594fSAndroid Build Coastguard Worker "CAddi16Sp");
3709*795d594fSAndroid Build Coastguard Worker }
3710*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CAddi4Spn)3711*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CAddi4Spn) {
3712*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CAddi4Spn,
3713*795d594fSAndroid Build Coastguard Worker /*is_short=*/true,
3714*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/false,
3715*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/true,
3716*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/8,
3717*795d594fSAndroid Build Coastguard Worker /*shift=*/2,
3718*795d594fSAndroid Build Coastguard Worker "c.addi4spn {reg}, sp, {imm}"),
3719*795d594fSAndroid Build Coastguard Worker "CAddi4Spn");
3720*795d594fSAndroid Build Coastguard Worker }
3721*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSlli)3722*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSlli) {
3723*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CSlli,
3724*795d594fSAndroid Build Coastguard Worker /*is_short=*/false,
3725*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/true,
3726*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/true,
3727*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/6,
3728*795d594fSAndroid Build Coastguard Worker /*shift=*/0,
3729*795d594fSAndroid Build Coastguard Worker "c.slli {reg}, {imm}"),
3730*795d594fSAndroid Build Coastguard Worker "CSlli");
3731*795d594fSAndroid Build Coastguard Worker }
3732*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSRli)3733*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSRli) {
3734*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CSrli,
3735*795d594fSAndroid Build Coastguard Worker /*is_short=*/true,
3736*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/false,
3737*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/true,
3738*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/6,
3739*795d594fSAndroid Build Coastguard Worker /*shift=*/0,
3740*795d594fSAndroid Build Coastguard Worker "c.srli {reg}, {imm}"),
3741*795d594fSAndroid Build Coastguard Worker "CSRli");
3742*795d594fSAndroid Build Coastguard Worker }
3743*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSRai)3744*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSRai) {
3745*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CSrai,
3746*795d594fSAndroid Build Coastguard Worker /*is_short=*/true,
3747*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/false,
3748*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/true,
3749*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/6,
3750*795d594fSAndroid Build Coastguard Worker /*shift=*/0,
3751*795d594fSAndroid Build Coastguard Worker "c.srai {reg}, {imm}"),
3752*795d594fSAndroid Build Coastguard Worker "CSRai");
3753*795d594fSAndroid Build Coastguard Worker }
3754*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CAndi)3755*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CAndi) {
3756*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CAndi,
3757*795d594fSAndroid Build Coastguard Worker /*is_short=*/true,
3758*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/false,
3759*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
3760*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/-6,
3761*795d594fSAndroid Build Coastguard Worker /*shift=*/0,
3762*795d594fSAndroid Build Coastguard Worker "c.andi {reg}, {imm}"),
3763*795d594fSAndroid Build Coastguard Worker "CAndi");
3764*795d594fSAndroid Build Coastguard Worker }
3765*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CMv)3766*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CMv) {
3767*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRNonZero(&Riscv64Assembler::CMv, "c.mv {reg1}, {reg2}"), "CMv");
3768*795d594fSAndroid Build Coastguard Worker }
3769*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CAdd)3770*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CAdd) {
3771*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRNonZero(&Riscv64Assembler::CAdd, "c.add {reg1}, {reg2}"), "CAdd");
3772*795d594fSAndroid Build Coastguard Worker }
3773*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CAnd)3774*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CAnd) {
3775*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRShort(&Riscv64Assembler::CAnd, "c.and {reg1}, {reg2}"), "CAnd");
3776*795d594fSAndroid Build Coastguard Worker }
3777*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,COr)3778*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, COr) {
3779*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRShort(&Riscv64Assembler::COr, "c.or {reg1}, {reg2}"), "COr");
3780*795d594fSAndroid Build Coastguard Worker }
3781*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CXor)3782*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CXor) {
3783*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRShort(&Riscv64Assembler::CXor, "c.xor {reg1}, {reg2}"), "CXor");
3784*795d594fSAndroid Build Coastguard Worker }
3785*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSub)3786*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSub) {
3787*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRShort(&Riscv64Assembler::CSub, "c.sub {reg1}, {reg2}"), "CSub");
3788*795d594fSAndroid Build Coastguard Worker }
3789*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CAddw)3790*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CAddw) {
3791*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRShort(&Riscv64Assembler::CAddw, "c.addw {reg1}, {reg2}"), "CAddw");
3792*795d594fSAndroid Build Coastguard Worker }
3793*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSubw)3794*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSubw) {
3795*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRShort(&Riscv64Assembler::CSubw, "c.subw {reg1}, {reg2}"), "CSubw");
3796*795d594fSAndroid Build Coastguard Worker }
3797*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CLbu)3798*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CLbu) {
3799*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRImm(&Riscv64Assembler::CLbu,
3800*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/2,
3801*795d594fSAndroid Build Coastguard Worker /*shift=*/0,
3802*795d594fSAndroid Build Coastguard Worker "c.lbu {reg1}, {imm}({reg2})"),
3803*795d594fSAndroid Build Coastguard Worker "CLbu");
3804*795d594fSAndroid Build Coastguard Worker }
3805*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CLhu)3806*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CLhu) {
3807*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRImm(&Riscv64Assembler::CLhu,
3808*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/1,
3809*795d594fSAndroid Build Coastguard Worker /*shift=*/1,
3810*795d594fSAndroid Build Coastguard Worker "c.lhu {reg1}, {imm}({reg2})"),
3811*795d594fSAndroid Build Coastguard Worker "CLhu");
3812*795d594fSAndroid Build Coastguard Worker }
3813*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CLh)3814*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CLh) {
3815*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRImm(&Riscv64Assembler::CLh,
3816*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/1,
3817*795d594fSAndroid Build Coastguard Worker /*shift=*/1,
3818*795d594fSAndroid Build Coastguard Worker "c.lh {reg1}, {imm}({reg2})"),
3819*795d594fSAndroid Build Coastguard Worker "CLh");
3820*795d594fSAndroid Build Coastguard Worker }
3821*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSb)3822*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSb) {
3823*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRImm(&Riscv64Assembler::CSb,
3824*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/2,
3825*795d594fSAndroid Build Coastguard Worker /*shift=*/0,
3826*795d594fSAndroid Build Coastguard Worker "c.sb {reg1}, {imm}({reg2})"),
3827*795d594fSAndroid Build Coastguard Worker "CSb");
3828*795d594fSAndroid Build Coastguard Worker }
3829*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSh)3830*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSh) {
3831*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRImm(&Riscv64Assembler::CSh,
3832*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/1,
3833*795d594fSAndroid Build Coastguard Worker /*shift=*/1,
3834*795d594fSAndroid Build Coastguard Worker "c.sh {reg1}, {imm}({reg2})"),
3835*795d594fSAndroid Build Coastguard Worker "CSh");
3836*795d594fSAndroid Build Coastguard Worker }
3837*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CZextB)3838*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CZextB) {
3839*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRShort(&Riscv64Assembler::CZextB, "c.zext.b {reg}"), "CZextB");
3840*795d594fSAndroid Build Coastguard Worker }
3841*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSextB)3842*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSextB) {
3843*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRShort(&Riscv64Assembler::CSextB, "c.sext.b {reg}"), "CSextB");
3844*795d594fSAndroid Build Coastguard Worker }
3845*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CZextH)3846*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CZextH) {
3847*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRShort(&Riscv64Assembler::CZextH, "c.zext.h {reg}"), "CZextH");
3848*795d594fSAndroid Build Coastguard Worker }
3849*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CSextH)3850*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CSextH) {
3851*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRShort(&Riscv64Assembler::CSextH, "c.sext.h {reg}"), "CSextH");
3852*795d594fSAndroid Build Coastguard Worker }
3853*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CZextW)3854*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CZextW) {
3855*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRShort(&Riscv64Assembler::CZextW, "c.zext.w {reg}"), "CZextW");
3856*795d594fSAndroid Build Coastguard Worker }
3857*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CNot)3858*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CNot) {
3859*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRShort(&Riscv64Assembler::CNot, "c.not {reg}"), "CNot");
3860*795d594fSAndroid Build Coastguard Worker }
3861*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CMul)3862*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CMul) {
3863*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRRShort(&Riscv64Assembler::CMul, "c.mul {reg1}, {reg2}"), "CMul");
3864*795d594fSAndroid Build Coastguard Worker }
3865*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CJ)3866*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CJ) {
3867*795d594fSAndroid Build Coastguard Worker DriverStr(
3868*795d594fSAndroid Build Coastguard Worker RepeatImm(
3869*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::CJ, /*no_zero_imm=*/false, /*imm_bits=*/-11, /*shift=*/1, "c.j {imm}"),
3870*795d594fSAndroid Build Coastguard Worker "CJ");
3871*795d594fSAndroid Build Coastguard Worker }
3872*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CJr)3873*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CJr) {
3874*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRNoZero(&Riscv64Assembler::CJr, "c.jr {reg}"), "CJr");
3875*795d594fSAndroid Build Coastguard Worker }
3876*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CJalr)3877*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CJalr) {
3878*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRNoZero(&Riscv64Assembler::CJalr, "c.jalr {reg}"), "CJalr");
3879*795d594fSAndroid Build Coastguard Worker }
3880*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CBeqz)3881*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CBeqz) {
3882*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CBeqz,
3883*795d594fSAndroid Build Coastguard Worker /*is_short=*/true,
3884*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/false,
3885*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
3886*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/-8,
3887*795d594fSAndroid Build Coastguard Worker /*shift=*/1,
3888*795d594fSAndroid Build Coastguard Worker "c.beqz {reg}, {imm}"),
3889*795d594fSAndroid Build Coastguard Worker "CBeqz");
3890*795d594fSAndroid Build Coastguard Worker }
3891*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CBnez)3892*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CBnez) {
3893*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatCRImm(&Riscv64Assembler::CBnez,
3894*795d594fSAndroid Build Coastguard Worker /*is_short=*/true,
3895*795d594fSAndroid Build Coastguard Worker /*no_zero_reg=*/false,
3896*795d594fSAndroid Build Coastguard Worker /*no_zero_imm=*/false,
3897*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/-8,
3898*795d594fSAndroid Build Coastguard Worker /*shift=*/1,
3899*795d594fSAndroid Build Coastguard Worker "c.bnez {reg}, {imm}"),
3900*795d594fSAndroid Build Coastguard Worker "CBnez");
3901*795d594fSAndroid Build Coastguard Worker }
3902*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CEbreak)3903*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CEbreak) {
3904*795d594fSAndroid Build Coastguard Worker __ CEbreak();
3905*795d594fSAndroid Build Coastguard Worker DriverStr("c.ebreak", "CEbreak");
3906*795d594fSAndroid Build Coastguard Worker }
3907*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CNop)3908*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CNop) {
3909*795d594fSAndroid Build Coastguard Worker __ CNop();
3910*795d594fSAndroid Build Coastguard Worker DriverStr("c.nop", "CNop");
3911*795d594fSAndroid Build Coastguard Worker }
3912*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CUnimp)3913*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CUnimp) {
3914*795d594fSAndroid Build Coastguard Worker __ CUnimp();
3915*795d594fSAndroid Build Coastguard Worker DriverStr("c.unimp", "CUnimp");
3916*795d594fSAndroid Build Coastguard Worker }
3917*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AddUw)3918*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AddUw) {
3919*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this); // Avoid `c.zext.w`.
3920*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::AddUw, "add.uw {reg1}, {reg2}, {reg3}"), "AddUw");
3921*795d594fSAndroid Build Coastguard Worker }
3922*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sh1Add)3923*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sh1Add) {
3924*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sh1Add, "sh1add {reg1}, {reg2}, {reg3}"), "Sh1Add");
3925*795d594fSAndroid Build Coastguard Worker }
3926*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sh1AddUw)3927*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sh1AddUw) {
3928*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sh1AddUw, "sh1add.uw {reg1}, {reg2}, {reg3}"), "Sh1AddUw");
3929*795d594fSAndroid Build Coastguard Worker }
3930*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sh2Add)3931*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sh2Add) {
3932*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sh2Add, "sh2add {reg1}, {reg2}, {reg3}"), "Sh2Add");
3933*795d594fSAndroid Build Coastguard Worker }
3934*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sh2AddUw)3935*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sh2AddUw) {
3936*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sh2AddUw, "sh2add.uw {reg1}, {reg2}, {reg3}"), "Sh2AddUw");
3937*795d594fSAndroid Build Coastguard Worker }
3938*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sh3Add)3939*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sh3Add) {
3940*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sh3Add, "sh3add {reg1}, {reg2}, {reg3}"), "Sh3Add");
3941*795d594fSAndroid Build Coastguard Worker }
3942*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sh3AddUw)3943*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sh3AddUw) {
3944*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Sh3AddUw, "sh3add.uw {reg1}, {reg2}, {reg3}"), "Sh3AddUw");
3945*795d594fSAndroid Build Coastguard Worker }
3946*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SlliUw)3947*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SlliUw) {
3948*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::SlliUw, /*imm_bits=*/6, "slli.uw {reg1}, {reg2}, {imm}"), "SlliUw");
3949*795d594fSAndroid Build Coastguard Worker }
3950*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Andn)3951*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Andn) {
3952*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Andn, "andn {reg1}, {reg2}, {reg3}"), "Andn");
3953*795d594fSAndroid Build Coastguard Worker }
3954*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Orn)3955*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Orn) {
3956*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Orn, "orn {reg1}, {reg2}, {reg3}"), "Orn");
3957*795d594fSAndroid Build Coastguard Worker }
3958*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Xnor)3959*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Xnor) {
3960*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Xnor, "xnor {reg1}, {reg2}, {reg3}"), "Xnor");
3961*795d594fSAndroid Build Coastguard Worker }
3962*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Clz)3963*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Clz) {
3964*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Clz, "clz {reg1}, {reg2}"), "Clz");
3965*795d594fSAndroid Build Coastguard Worker }
3966*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Clzw)3967*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Clzw) {
3968*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Clzw, "clzw {reg1}, {reg2}"), "Clzw");
3969*795d594fSAndroid Build Coastguard Worker }
3970*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ctz)3971*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ctz) {
3972*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Ctz, "ctz {reg1}, {reg2}"), "Ctz");
3973*795d594fSAndroid Build Coastguard Worker }
3974*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ctzw)3975*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ctzw) {
3976*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Ctzw, "ctzw {reg1}, {reg2}"), "Ctzw");
3977*795d594fSAndroid Build Coastguard Worker }
3978*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Cpop)3979*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Cpop) {
3980*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Cpop, "cpop {reg1}, {reg2}"), "Cpop");
3981*795d594fSAndroid Build Coastguard Worker }
3982*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Cpopw)3983*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Cpopw) {
3984*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Cpopw, "cpopw {reg1}, {reg2}"), "Cpopw");
3985*795d594fSAndroid Build Coastguard Worker }
3986*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Min)3987*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Min) {
3988*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Min, "min {reg1}, {reg2}, {reg3}"), "Min");
3989*795d594fSAndroid Build Coastguard Worker }
3990*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Minu)3991*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Minu) {
3992*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Minu, "minu {reg1}, {reg2}, {reg3}"), "Minu");
3993*795d594fSAndroid Build Coastguard Worker }
3994*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Max)3995*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Max) {
3996*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Max, "max {reg1}, {reg2}, {reg3}"), "Max");
3997*795d594fSAndroid Build Coastguard Worker }
3998*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Maxu)3999*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Maxu) {
4000*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Maxu, "maxu {reg1}, {reg2}, {reg3}"), "Maxu");
4001*795d594fSAndroid Build Coastguard Worker }
4002*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Rol)4003*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Rol) {
4004*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Rol, "rol {reg1}, {reg2}, {reg3}"), "Rol");
4005*795d594fSAndroid Build Coastguard Worker }
4006*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Rolw)4007*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Rolw) {
4008*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Rolw, "rolw {reg1}, {reg2}, {reg3}"), "Rolw");
4009*795d594fSAndroid Build Coastguard Worker }
4010*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ror)4011*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ror) {
4012*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Ror, "ror {reg1}, {reg2}, {reg3}"), "Ror");
4013*795d594fSAndroid Build Coastguard Worker }
4014*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Rorw)4015*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Rorw) {
4016*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Rorw, "rorw {reg1}, {reg2}, {reg3}"), "Rorw");
4017*795d594fSAndroid Build Coastguard Worker }
4018*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Rori)4019*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Rori) {
4020*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Rori, /*imm_bits=*/6, "rori {reg1}, {reg2}, {imm}"), "Rori");
4021*795d594fSAndroid Build Coastguard Worker }
4022*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Roriw)4023*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Roriw) {
4024*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Roriw, /*imm_bits=*/5, "roriw {reg1}, {reg2}, {imm}"),
4025*795d594fSAndroid Build Coastguard Worker "Roriw");
4026*795d594fSAndroid Build Coastguard Worker }
4027*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,OrcB)4028*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, OrcB) {
4029*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::OrcB, "orc.b {reg1}, {reg2}"), "OrcB");
4030*795d594fSAndroid Build Coastguard Worker }
4031*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Rev8)4032*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Rev8) {
4033*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Rev8, "rev8 {reg1}, {reg2}"), "Rev8");
4034*795d594fSAndroid Build Coastguard Worker }
4035*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZbbSextB)4036*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZbbSextB) {
4037*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
4038*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZbbSextB, "sext.b {reg1}, {reg2}"), "ZbbSextB");
4039*795d594fSAndroid Build Coastguard Worker }
4040*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZbbSextH)4041*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZbbSextH) {
4042*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
4043*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZbbSextH, "sext.h {reg1}, {reg2}"), "ZbbSextH");
4044*795d594fSAndroid Build Coastguard Worker }
4045*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZbbZextH)4046*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZbbZextH) {
4047*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
4048*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZbbZextH, "zext.h {reg1}, {reg2}"), "ZbbZextH");
4049*795d594fSAndroid Build Coastguard Worker }
4050*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bclr)4051*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bclr) {
4052*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Bclr, "bclr {reg1}, {reg2}, {reg3}"), "Bclr");
4053*795d594fSAndroid Build Coastguard Worker }
4054*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bclri)4055*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bclri) {
4056*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Bclri, /*imm_bits=*/6, "bclri {reg1}, {reg2}, {imm}"),
4057*795d594fSAndroid Build Coastguard Worker "Bclri");
4058*795d594fSAndroid Build Coastguard Worker }
4059*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bext)4060*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bext) {
4061*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Bext, "bext {reg1}, {reg2}, {reg3}"), "Bext");
4062*795d594fSAndroid Build Coastguard Worker }
4063*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bexti)4064*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bexti) {
4065*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Bexti, /*imm_bits=*/6, "bexti {reg1}, {reg2}, {imm}"),
4066*795d594fSAndroid Build Coastguard Worker "Bexti");
4067*795d594fSAndroid Build Coastguard Worker }
4068*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Binv)4069*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Binv) {
4070*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Binv, "binv {reg1}, {reg2}, {reg3}"), "Binv");
4071*795d594fSAndroid Build Coastguard Worker }
4072*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Binvi)4073*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Binvi) {
4074*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Binvi, /*imm_bits=*/6, "binvi {reg1}, {reg2}, {imm}"),
4075*795d594fSAndroid Build Coastguard Worker "Binvi");
4076*795d594fSAndroid Build Coastguard Worker }
4077*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bset)4078*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bset) {
4079*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::Bset, "bset {reg1}, {reg2}, {reg3}"), "Bset");
4080*795d594fSAndroid Build Coastguard Worker }
4081*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bseti)4082*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bseti) {
4083*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRIb(&Riscv64Assembler::Bseti, /*imm_bits=*/6, "bseti {reg1}, {reg2}, {imm}"),
4084*795d594fSAndroid Build Coastguard Worker "Bseti");
4085*795d594fSAndroid Build Coastguard Worker }
4086*795d594fSAndroid Build Coastguard Worker
4087*795d594fSAndroid Build Coastguard Worker // Vector Instructions
4088*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSetvl)4089*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSetvl) {
4090*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRRR(&Riscv64Assembler::VSetvl, "vsetvl {reg1}, {reg2}, {reg3}"), "VSetvl");
4091*795d594fSAndroid Build Coastguard Worker }
4092*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSetivli)4093*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSetivli) {
4094*795d594fSAndroid Build Coastguard Worker auto replacer = [=](uint32_t uimm, std::string* s) {
4095*795d594fSAndroid Build Coastguard Worker ReplaceImm(uimm, /*bias=*/ 0, /*multiplier=*/ 1, s);
4096*795d594fSAndroid Build Coastguard Worker };
4097*795d594fSAndroid Build Coastguard Worker
4098*795d594fSAndroid Build Coastguard Worker std::vector<int64_t> imms = CreateImmediateValuesBits(5, true);
4099*795d594fSAndroid Build Coastguard Worker
4100*795d594fSAndroid Build Coastguard Worker DriverStr(TestVSetI(&Riscv64Assembler::VSetivli,
4101*795d594fSAndroid Build Coastguard Worker imms,
4102*795d594fSAndroid Build Coastguard Worker replacer,
4103*795d594fSAndroid Build Coastguard Worker "vsetivli {reg1}, {imm}, {sew}, {lmul}, {vta}, {vma}"),
4104*795d594fSAndroid Build Coastguard Worker "VSetivli");
4105*795d594fSAndroid Build Coastguard Worker }
4106*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSetvli)4107*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSetvli) {
4108*795d594fSAndroid Build Coastguard Worker auto replacer = [=](XRegister reg, std::string* s) {
4109*795d594fSAndroid Build Coastguard Worker ReplaceReg(REG2_TOKEN, GetRegisterName(reg), s);
4110*795d594fSAndroid Build Coastguard Worker };
4111*795d594fSAndroid Build Coastguard Worker
4112*795d594fSAndroid Build Coastguard Worker DriverStr(TestVSetI(&Riscv64Assembler::VSetvli,
4113*795d594fSAndroid Build Coastguard Worker GetRegisters(),
4114*795d594fSAndroid Build Coastguard Worker replacer,
4115*795d594fSAndroid Build Coastguard Worker "vsetvli {reg1}, {reg2}, {sew}, {lmul}, {vta}, {vma}"),
4116*795d594fSAndroid Build Coastguard Worker "VSetvli");
4117*795d594fSAndroid Build Coastguard Worker }
4118*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLe8)4119*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLe8) {
4120*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(
4121*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLe8, "vle8.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4122*795d594fSAndroid Build Coastguard Worker "VLe8");
4123*795d594fSAndroid Build Coastguard Worker }
4124*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLe16)4125*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLe16) {
4126*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(
4127*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLe16, "vle16.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4128*795d594fSAndroid Build Coastguard Worker "VLe16");
4129*795d594fSAndroid Build Coastguard Worker }
4130*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLe32)4131*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLe32) {
4132*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(
4133*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLe32, "vle32.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4134*795d594fSAndroid Build Coastguard Worker "VLe32");
4135*795d594fSAndroid Build Coastguard Worker }
4136*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLe64)4137*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLe64) {
4138*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(
4139*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLe64, "vle64.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4140*795d594fSAndroid Build Coastguard Worker "VLe64");
4141*795d594fSAndroid Build Coastguard Worker }
4142*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLm)4143*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLm) {
4144*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVR(&Riscv64Assembler::VLm, "vlm.v {reg1}, ({reg2})"), "VLm");
4145*795d594fSAndroid Build Coastguard Worker }
4146*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSe8)4147*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSe8) {
4148*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSe8, "vse8.v {reg1}, ({reg2}){vm}"), "VSe8");
4149*795d594fSAndroid Build Coastguard Worker }
4150*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSe16)4151*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSe16) {
4152*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSe16, "vse16.v {reg1}, ({reg2}){vm}"), "VSe16");
4153*795d594fSAndroid Build Coastguard Worker }
4154*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSe32)4155*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSe32) {
4156*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSe32, "vse32.v {reg1}, ({reg2}){vm}"), "VSe32");
4157*795d594fSAndroid Build Coastguard Worker }
4158*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSe64)4159*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSe64) {
4160*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSe64, "vse64.v {reg1}, ({reg2}){vm}"), "VSe64");
4161*795d594fSAndroid Build Coastguard Worker }
4162*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSm)4163*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSm) {
4164*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVR(&Riscv64Assembler::VSm, "vsm.v {reg1}, ({reg2})"), "VSm");
4165*795d594fSAndroid Build Coastguard Worker }
4166*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLe8ff)4167*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLe8ff) {
4168*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVR(&Riscv64Assembler::VLe8ff, "vle8ff.v {reg1}, ({reg2})"), "VLe8ff");
4169*795d594fSAndroid Build Coastguard Worker }
4170*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLe16ff)4171*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLe16ff) {
4172*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVR(&Riscv64Assembler::VLe16ff, "vle16ff.v {reg1}, ({reg2})"), "VLe16ff");
4173*795d594fSAndroid Build Coastguard Worker }
4174*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLe32ff)4175*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLe32ff) {
4176*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVR(&Riscv64Assembler::VLe32ff, "vle32ff.v {reg1}, ({reg2})"), "VLe32ff");
4177*795d594fSAndroid Build Coastguard Worker }
4178*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLe64ff)4179*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLe64ff) {
4180*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVR(&Riscv64Assembler::VLe64ff, "vle64ff.v {reg1}, ({reg2})"), "VLe64ff");
4181*795d594fSAndroid Build Coastguard Worker }
4182*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLse8)4183*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLse8) {
4184*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLse8,
4185*795d594fSAndroid Build Coastguard Worker "vlse8.v {reg1}, ({reg2}), {reg3}{vm}",
4186*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4187*795d594fSAndroid Build Coastguard Worker "VLse8");
4188*795d594fSAndroid Build Coastguard Worker }
4189*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLse16)4190*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLse16) {
4191*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLse16,
4192*795d594fSAndroid Build Coastguard Worker "vlse16.v {reg1}, ({reg2}), {reg3}{vm}",
4193*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4194*795d594fSAndroid Build Coastguard Worker "VLse16");
4195*795d594fSAndroid Build Coastguard Worker }
4196*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLse32)4197*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLse32) {
4198*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLse32,
4199*795d594fSAndroid Build Coastguard Worker "vlse32.v {reg1}, ({reg2}), {reg3}{vm}",
4200*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4201*795d594fSAndroid Build Coastguard Worker "VLse32");
4202*795d594fSAndroid Build Coastguard Worker }
4203*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLse64)4204*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLse64) {
4205*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLse64,
4206*795d594fSAndroid Build Coastguard Worker "vlse64.v {reg1}, ({reg2}), {reg3}{vm}",
4207*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4208*795d594fSAndroid Build Coastguard Worker "VLse64");
4209*795d594fSAndroid Build Coastguard Worker }
4210*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSse8)4211*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSse8) {
4212*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSse8, "vsse8.v {reg1}, ({reg2}), {reg3}{vm}"), "VSse8");
4213*795d594fSAndroid Build Coastguard Worker }
4214*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSse16)4215*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSse16) {
4216*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSse16, "vsse16.v {reg1}, ({reg2}), {reg3}{vm}"),
4217*795d594fSAndroid Build Coastguard Worker "VSse16");
4218*795d594fSAndroid Build Coastguard Worker }
4219*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSse32)4220*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSse32) {
4221*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSse32, "vsse32.v {reg1}, ({reg2}), {reg3}{vm}"),
4222*795d594fSAndroid Build Coastguard Worker "VSse32");
4223*795d594fSAndroid Build Coastguard Worker }
4224*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSse64)4225*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSse64) {
4226*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSse64, "vsse64.v {reg1}, ({reg2}), {reg3}{vm}"),
4227*795d594fSAndroid Build Coastguard Worker "VSse64");
4228*795d594fSAndroid Build Coastguard Worker }
4229*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxei8)4230*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxei8) {
4231*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxei8,
4232*795d594fSAndroid Build Coastguard Worker "vloxei8.v {reg1}, ({reg2}), {reg3}{vm}",
4233*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
4234*795d594fSAndroid Build Coastguard Worker "VLoxei8");
4235*795d594fSAndroid Build Coastguard Worker }
4236*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxei16)4237*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxei16) {
4238*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxei16,
4239*795d594fSAndroid Build Coastguard Worker "vloxei16.v {reg1}, ({reg2}), {reg3}{vm}",
4240*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
4241*795d594fSAndroid Build Coastguard Worker "VLoxei16");
4242*795d594fSAndroid Build Coastguard Worker }
4243*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxei32)4244*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxei32) {
4245*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxei32,
4246*795d594fSAndroid Build Coastguard Worker "vloxei32.v {reg1}, ({reg2}), {reg3}{vm}",
4247*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
4248*795d594fSAndroid Build Coastguard Worker "VLoxei32");
4249*795d594fSAndroid Build Coastguard Worker }
4250*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxei64)4251*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxei64) {
4252*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxei64,
4253*795d594fSAndroid Build Coastguard Worker "vloxei64.v {reg1}, ({reg2}), {reg3}{vm}",
4254*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
4255*795d594fSAndroid Build Coastguard Worker "VLoxei64");
4256*795d594fSAndroid Build Coastguard Worker }
4257*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxei8)4258*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxei8) {
4259*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxei8,
4260*795d594fSAndroid Build Coastguard Worker "vluxei8.v {reg1}, ({reg2}), {reg3}{vm}",
4261*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
4262*795d594fSAndroid Build Coastguard Worker "VLuxei8");
4263*795d594fSAndroid Build Coastguard Worker }
4264*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxei16)4265*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxei16) {
4266*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxei16,
4267*795d594fSAndroid Build Coastguard Worker "vluxei16.v {reg1}, ({reg2}), {reg3}{vm}",
4268*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
4269*795d594fSAndroid Build Coastguard Worker "VLuxei16");
4270*795d594fSAndroid Build Coastguard Worker }
4271*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxei32)4272*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxei32) {
4273*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxei32,
4274*795d594fSAndroid Build Coastguard Worker "vluxei32.v {reg1}, ({reg2}), {reg3}{vm}",
4275*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
4276*795d594fSAndroid Build Coastguard Worker "VLuxei32");
4277*795d594fSAndroid Build Coastguard Worker }
4278*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxei64)4279*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxei64) {
4280*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxei64,
4281*795d594fSAndroid Build Coastguard Worker "vluxei64.v {reg1}, ({reg2}), {reg3}{vm}",
4282*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
4283*795d594fSAndroid Build Coastguard Worker "VLuxei64");
4284*795d594fSAndroid Build Coastguard Worker }
4285*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxei8)4286*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxei8) {
4287*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVm(&Riscv64Assembler::VSoxei8, "vsoxei8.v {reg1}, ({reg2}), {reg3}{vm}"),
4288*795d594fSAndroid Build Coastguard Worker "VSoxei8");
4289*795d594fSAndroid Build Coastguard Worker }
4290*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxei16)4291*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxei16) {
4292*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVm(&Riscv64Assembler::VSoxei16, "vsoxei16.v {reg1}, ({reg2}), {reg3}{vm}"),
4293*795d594fSAndroid Build Coastguard Worker "VSoxei16");
4294*795d594fSAndroid Build Coastguard Worker }
4295*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxei32)4296*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxei32) {
4297*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVm(&Riscv64Assembler::VSoxei32, "vsoxei32.v {reg1}, ({reg2}), {reg3}{vm}"),
4298*795d594fSAndroid Build Coastguard Worker "VSoxei32");
4299*795d594fSAndroid Build Coastguard Worker }
4300*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxei64)4301*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxei64) {
4302*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVm(&Riscv64Assembler::VSoxei64, "vsoxei64.v {reg1}, ({reg2}), {reg3}{vm}"),
4303*795d594fSAndroid Build Coastguard Worker "VSoxei64");
4304*795d594fSAndroid Build Coastguard Worker }
4305*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxei8)4306*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxei8) {
4307*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVm(&Riscv64Assembler::VSuxei8, "vsuxei8.v {reg1}, ({reg2}), {reg3}{vm}"),
4308*795d594fSAndroid Build Coastguard Worker "VSuxei8");
4309*795d594fSAndroid Build Coastguard Worker }
4310*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxei16)4311*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxei16) {
4312*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVm(&Riscv64Assembler::VSuxei16, "vsuxei16.v {reg1}, ({reg2}), {reg3}{vm}"),
4313*795d594fSAndroid Build Coastguard Worker "VSuxei16");
4314*795d594fSAndroid Build Coastguard Worker }
4315*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxei32)4316*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxei32) {
4317*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVm(&Riscv64Assembler::VSuxei32, "vsuxei32.v {reg1}, ({reg2}), {reg3}{vm}"),
4318*795d594fSAndroid Build Coastguard Worker "VSuxei32");
4319*795d594fSAndroid Build Coastguard Worker }
4320*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxei64)4321*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxei64) {
4322*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVm(&Riscv64Assembler::VSuxei64, "vsuxei64.v {reg1}, ({reg2}), {reg3}{vm}"),
4323*795d594fSAndroid Build Coastguard Worker "VSuxei64");
4324*795d594fSAndroid Build Coastguard Worker }
4325*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg2e8)4326*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg2e8) {
4327*795d594fSAndroid Build Coastguard Worker DriverStr(
4328*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4329*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg2e8, "vlseg2e8.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4330*795d594fSAndroid Build Coastguard Worker "VLseg2e8");
4331*795d594fSAndroid Build Coastguard Worker }
4332*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg2e16)4333*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg2e16) {
4334*795d594fSAndroid Build Coastguard Worker DriverStr(
4335*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4336*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg2e16, "vlseg2e16.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4337*795d594fSAndroid Build Coastguard Worker "VLseg2e16");
4338*795d594fSAndroid Build Coastguard Worker }
4339*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg2e32)4340*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg2e32) {
4341*795d594fSAndroid Build Coastguard Worker DriverStr(
4342*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4343*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg2e32, "vlseg2e32.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4344*795d594fSAndroid Build Coastguard Worker "VLseg2e32");
4345*795d594fSAndroid Build Coastguard Worker }
4346*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg2e64)4347*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg2e64) {
4348*795d594fSAndroid Build Coastguard Worker DriverStr(
4349*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4350*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg2e64, "vlseg2e64.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4351*795d594fSAndroid Build Coastguard Worker "VLseg2e64");
4352*795d594fSAndroid Build Coastguard Worker }
4353*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg3e8)4354*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg3e8) {
4355*795d594fSAndroid Build Coastguard Worker DriverStr(
4356*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4357*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg3e8, "vlseg3e8.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4358*795d594fSAndroid Build Coastguard Worker "VLseg3e8");
4359*795d594fSAndroid Build Coastguard Worker }
4360*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg3e16)4361*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg3e16) {
4362*795d594fSAndroid Build Coastguard Worker DriverStr(
4363*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4364*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg3e16, "vlseg3e16.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4365*795d594fSAndroid Build Coastguard Worker "VLseg3e16");
4366*795d594fSAndroid Build Coastguard Worker }
4367*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg3e32)4368*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg3e32) {
4369*795d594fSAndroid Build Coastguard Worker DriverStr(
4370*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4371*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg3e32, "vlseg3e32.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4372*795d594fSAndroid Build Coastguard Worker "VLseg3e32");
4373*795d594fSAndroid Build Coastguard Worker }
4374*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg3e64)4375*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg3e64) {
4376*795d594fSAndroid Build Coastguard Worker DriverStr(
4377*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4378*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg3e64, "vlseg3e64.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4379*795d594fSAndroid Build Coastguard Worker "VLseg3e64");
4380*795d594fSAndroid Build Coastguard Worker }
4381*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg4e8)4382*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg4e8) {
4383*795d594fSAndroid Build Coastguard Worker DriverStr(
4384*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4385*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg4e8, "vlseg4e8.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4386*795d594fSAndroid Build Coastguard Worker "VLseg4e8");
4387*795d594fSAndroid Build Coastguard Worker }
4388*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg4e16)4389*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg4e16) {
4390*795d594fSAndroid Build Coastguard Worker DriverStr(
4391*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4392*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg4e16, "vlseg4e16.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4393*795d594fSAndroid Build Coastguard Worker "VLseg4e16");
4394*795d594fSAndroid Build Coastguard Worker }
4395*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg4e32)4396*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg4e32) {
4397*795d594fSAndroid Build Coastguard Worker DriverStr(
4398*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4399*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg4e32, "vlseg4e32.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4400*795d594fSAndroid Build Coastguard Worker "VLseg4e32");
4401*795d594fSAndroid Build Coastguard Worker }
4402*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg4e64)4403*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg4e64) {
4404*795d594fSAndroid Build Coastguard Worker DriverStr(
4405*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4406*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg4e64, "vlseg4e64.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4407*795d594fSAndroid Build Coastguard Worker "VLseg4e64");
4408*795d594fSAndroid Build Coastguard Worker }
4409*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg5e8)4410*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg5e8) {
4411*795d594fSAndroid Build Coastguard Worker DriverStr(
4412*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4413*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg5e8, "vlseg5e8.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4414*795d594fSAndroid Build Coastguard Worker "VLseg5e8");
4415*795d594fSAndroid Build Coastguard Worker }
4416*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg5e16)4417*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg5e16) {
4418*795d594fSAndroid Build Coastguard Worker DriverStr(
4419*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4420*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg5e16, "vlseg5e16.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4421*795d594fSAndroid Build Coastguard Worker "VLseg5e16");
4422*795d594fSAndroid Build Coastguard Worker }
4423*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg5e32)4424*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg5e32) {
4425*795d594fSAndroid Build Coastguard Worker DriverStr(
4426*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4427*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg5e32, "vlseg5e32.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4428*795d594fSAndroid Build Coastguard Worker "VLseg5e32");
4429*795d594fSAndroid Build Coastguard Worker }
4430*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg5e64)4431*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg5e64) {
4432*795d594fSAndroid Build Coastguard Worker DriverStr(
4433*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4434*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg5e64, "vlseg5e64.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4435*795d594fSAndroid Build Coastguard Worker "VLseg5e64");
4436*795d594fSAndroid Build Coastguard Worker }
4437*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg6e8)4438*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg6e8) {
4439*795d594fSAndroid Build Coastguard Worker DriverStr(
4440*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4441*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg6e8, "vlseg6e8.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4442*795d594fSAndroid Build Coastguard Worker "VLseg6e8");
4443*795d594fSAndroid Build Coastguard Worker }
4444*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg6e16)4445*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg6e16) {
4446*795d594fSAndroid Build Coastguard Worker DriverStr(
4447*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4448*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg6e16, "vlseg6e16.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4449*795d594fSAndroid Build Coastguard Worker "VLseg6e16");
4450*795d594fSAndroid Build Coastguard Worker }
4451*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg6e32)4452*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg6e32) {
4453*795d594fSAndroid Build Coastguard Worker DriverStr(
4454*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4455*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg6e32, "vlseg6e32.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4456*795d594fSAndroid Build Coastguard Worker "VLseg6e32");
4457*795d594fSAndroid Build Coastguard Worker }
4458*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg6e64)4459*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg6e64) {
4460*795d594fSAndroid Build Coastguard Worker DriverStr(
4461*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4462*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg6e64, "vlseg6e64.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4463*795d594fSAndroid Build Coastguard Worker "VLseg6e64");
4464*795d594fSAndroid Build Coastguard Worker }
4465*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg7e8)4466*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg7e8) {
4467*795d594fSAndroid Build Coastguard Worker DriverStr(
4468*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4469*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg7e8, "vlseg7e8.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4470*795d594fSAndroid Build Coastguard Worker "VLseg7e8");
4471*795d594fSAndroid Build Coastguard Worker }
4472*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg7e16)4473*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg7e16) {
4474*795d594fSAndroid Build Coastguard Worker DriverStr(
4475*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4476*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg7e16, "vlseg7e16.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4477*795d594fSAndroid Build Coastguard Worker "VLseg7e16");
4478*795d594fSAndroid Build Coastguard Worker }
4479*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg7e32)4480*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg7e32) {
4481*795d594fSAndroid Build Coastguard Worker DriverStr(
4482*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4483*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg7e32, "vlseg7e32.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4484*795d594fSAndroid Build Coastguard Worker "VLseg7e32");
4485*795d594fSAndroid Build Coastguard Worker }
4486*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg7e64)4487*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg7e64) {
4488*795d594fSAndroid Build Coastguard Worker DriverStr(
4489*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4490*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg7e64, "vlseg7e64.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4491*795d594fSAndroid Build Coastguard Worker "VLseg7e64");
4492*795d594fSAndroid Build Coastguard Worker }
4493*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg8e8)4494*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg8e8) {
4495*795d594fSAndroid Build Coastguard Worker DriverStr(
4496*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4497*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg8e8, "vlseg8e8.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4498*795d594fSAndroid Build Coastguard Worker "VLseg8e8");
4499*795d594fSAndroid Build Coastguard Worker }
4500*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg8e16)4501*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg8e16) {
4502*795d594fSAndroid Build Coastguard Worker DriverStr(
4503*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4504*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg8e16, "vlseg8e16.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4505*795d594fSAndroid Build Coastguard Worker "VLseg8e16");
4506*795d594fSAndroid Build Coastguard Worker }
4507*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg8e32)4508*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg8e32) {
4509*795d594fSAndroid Build Coastguard Worker DriverStr(
4510*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4511*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg8e32, "vlseg8e32.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4512*795d594fSAndroid Build Coastguard Worker "VLseg8e32");
4513*795d594fSAndroid Build Coastguard Worker }
4514*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg8e64)4515*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg8e64) {
4516*795d594fSAndroid Build Coastguard Worker DriverStr(
4517*795d594fSAndroid Build Coastguard Worker RepeatVRVmFiltered(
4518*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VLseg8e64, "vlseg8e64.v {reg1}, ({reg2}){vm}", SkipV0Vm<XRegister>()),
4519*795d594fSAndroid Build Coastguard Worker "VLseg8e64");
4520*795d594fSAndroid Build Coastguard Worker }
4521*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg2e8)4522*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg2e8) {
4523*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg2e8, "vsseg2e8.v {reg1}, ({reg2}){vm}"), "VSseg2e8");
4524*795d594fSAndroid Build Coastguard Worker }
4525*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg2e16)4526*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg2e16) {
4527*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg2e16, "vsseg2e16.v {reg1}, ({reg2}){vm}"),
4528*795d594fSAndroid Build Coastguard Worker "VSseg2e16");
4529*795d594fSAndroid Build Coastguard Worker }
4530*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg2e32)4531*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg2e32) {
4532*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg2e32, "vsseg2e32.v {reg1}, ({reg2}){vm}"),
4533*795d594fSAndroid Build Coastguard Worker "VSseg2e32");
4534*795d594fSAndroid Build Coastguard Worker }
4535*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg2e64)4536*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg2e64) {
4537*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg2e64, "vsseg2e64.v {reg1}, ({reg2}){vm}"),
4538*795d594fSAndroid Build Coastguard Worker "VSseg2e64");
4539*795d594fSAndroid Build Coastguard Worker }
4540*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg3e8)4541*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg3e8) {
4542*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg3e8, "vsseg3e8.v {reg1}, ({reg2}){vm}"), "VSseg3e8");
4543*795d594fSAndroid Build Coastguard Worker }
4544*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg3e16)4545*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg3e16) {
4546*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg3e16, "vsseg3e16.v {reg1}, ({reg2}){vm}"),
4547*795d594fSAndroid Build Coastguard Worker "VSseg3e16");
4548*795d594fSAndroid Build Coastguard Worker }
4549*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg3e32)4550*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg3e32) {
4551*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg3e32, "vsseg3e32.v {reg1}, ({reg2}){vm}"),
4552*795d594fSAndroid Build Coastguard Worker "VSseg3e32");
4553*795d594fSAndroid Build Coastguard Worker }
4554*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg3e64)4555*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg3e64) {
4556*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg3e64, "vsseg3e64.v {reg1}, ({reg2}){vm}"),
4557*795d594fSAndroid Build Coastguard Worker "VSseg3e64");
4558*795d594fSAndroid Build Coastguard Worker }
4559*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg4e8)4560*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg4e8) {
4561*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg4e8, "vsseg4e8.v {reg1}, ({reg2}){vm}"), "VSseg4e8");
4562*795d594fSAndroid Build Coastguard Worker }
4563*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg4e16)4564*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg4e16) {
4565*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg4e16, "vsseg4e16.v {reg1}, ({reg2}){vm}"),
4566*795d594fSAndroid Build Coastguard Worker "VSseg4e16");
4567*795d594fSAndroid Build Coastguard Worker }
4568*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg4e32)4569*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg4e32) {
4570*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg4e32, "vsseg4e32.v {reg1}, ({reg2}){vm}"),
4571*795d594fSAndroid Build Coastguard Worker "VSseg4e32");
4572*795d594fSAndroid Build Coastguard Worker }
4573*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg4e64)4574*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg4e64) {
4575*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg4e64, "vsseg4e64.v {reg1}, ({reg2}){vm}"),
4576*795d594fSAndroid Build Coastguard Worker "VSseg4e64");
4577*795d594fSAndroid Build Coastguard Worker }
4578*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg5e8)4579*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg5e8) {
4580*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg5e8, "vsseg5e8.v {reg1}, ({reg2}){vm}"), "VSseg5e8");
4581*795d594fSAndroid Build Coastguard Worker }
4582*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg5e16)4583*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg5e16) {
4584*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg5e16, "vsseg5e16.v {reg1}, ({reg2}){vm}"),
4585*795d594fSAndroid Build Coastguard Worker "VSseg5e16");
4586*795d594fSAndroid Build Coastguard Worker }
4587*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg5e32)4588*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg5e32) {
4589*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg5e32, "vsseg5e32.v {reg1}, ({reg2}){vm}"),
4590*795d594fSAndroid Build Coastguard Worker "VSseg5e32");
4591*795d594fSAndroid Build Coastguard Worker }
4592*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg5e64)4593*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg5e64) {
4594*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg5e64, "vsseg5e64.v {reg1}, ({reg2}){vm}"),
4595*795d594fSAndroid Build Coastguard Worker "VSseg5e64");
4596*795d594fSAndroid Build Coastguard Worker }
4597*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg6e8)4598*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg6e8) {
4599*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg6e8, "vsseg6e8.v {reg1}, ({reg2}){vm}"), "VSseg6e8");
4600*795d594fSAndroid Build Coastguard Worker }
4601*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg6e16)4602*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg6e16) {
4603*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg6e16, "vsseg6e16.v {reg1}, ({reg2}){vm}"),
4604*795d594fSAndroid Build Coastguard Worker "VSseg6e16");
4605*795d594fSAndroid Build Coastguard Worker }
4606*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg6e32)4607*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg6e32) {
4608*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg6e32, "vsseg6e32.v {reg1}, ({reg2}){vm}"),
4609*795d594fSAndroid Build Coastguard Worker "VSseg6e32");
4610*795d594fSAndroid Build Coastguard Worker }
4611*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg6e64)4612*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg6e64) {
4613*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg6e64, "vsseg6e64.v {reg1}, ({reg2}){vm}"),
4614*795d594fSAndroid Build Coastguard Worker "VSseg6e64");
4615*795d594fSAndroid Build Coastguard Worker }
4616*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg7e8)4617*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg7e8) {
4618*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg7e8, "vsseg7e8.v {reg1}, ({reg2}){vm}"), "VSseg7e8");
4619*795d594fSAndroid Build Coastguard Worker }
4620*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg7e16)4621*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg7e16) {
4622*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg7e16, "vsseg7e16.v {reg1}, ({reg2}){vm}"),
4623*795d594fSAndroid Build Coastguard Worker "VSseg7e16");
4624*795d594fSAndroid Build Coastguard Worker }
4625*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg7e32)4626*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg7e32) {
4627*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg7e32, "vsseg7e32.v {reg1}, ({reg2}){vm}"),
4628*795d594fSAndroid Build Coastguard Worker "VSseg7e32");
4629*795d594fSAndroid Build Coastguard Worker }
4630*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg7e64)4631*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg7e64) {
4632*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg7e64, "vsseg7e64.v {reg1}, ({reg2}){vm}"),
4633*795d594fSAndroid Build Coastguard Worker "VSseg7e64");
4634*795d594fSAndroid Build Coastguard Worker }
4635*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg8e8)4636*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg8e8) {
4637*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg8e8, "vsseg8e8.v {reg1}, ({reg2}){vm}"), "VSseg8e8");
4638*795d594fSAndroid Build Coastguard Worker }
4639*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg8e16)4640*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg8e16) {
4641*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg8e16, "vsseg8e16.v {reg1}, ({reg2}){vm}"),
4642*795d594fSAndroid Build Coastguard Worker "VSseg8e16");
4643*795d594fSAndroid Build Coastguard Worker }
4644*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg8e32)4645*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg8e32) {
4646*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg8e32, "vsseg8e32.v {reg1}, ({reg2}){vm}"),
4647*795d594fSAndroid Build Coastguard Worker "VSseg8e32");
4648*795d594fSAndroid Build Coastguard Worker }
4649*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSseg8e64)4650*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSseg8e64) {
4651*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVm(&Riscv64Assembler::VSseg8e64, "vsseg8e64.v {reg1}, ({reg2}){vm}"),
4652*795d594fSAndroid Build Coastguard Worker "VSseg8e64");
4653*795d594fSAndroid Build Coastguard Worker }
4654*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg2e8ff)4655*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg2e8ff) {
4656*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg2e8ff,
4657*795d594fSAndroid Build Coastguard Worker "vlseg2e8ff.v {reg1}, ({reg2}){vm}",
4658*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4659*795d594fSAndroid Build Coastguard Worker "VLseg2e8ff");
4660*795d594fSAndroid Build Coastguard Worker }
4661*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg2e16ff)4662*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg2e16ff) {
4663*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg2e16ff,
4664*795d594fSAndroid Build Coastguard Worker "vlseg2e16ff.v {reg1}, ({reg2}){vm}",
4665*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4666*795d594fSAndroid Build Coastguard Worker "VLseg2e16ff");
4667*795d594fSAndroid Build Coastguard Worker }
4668*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg2e32ff)4669*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg2e32ff) {
4670*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg2e32ff,
4671*795d594fSAndroid Build Coastguard Worker "vlseg2e32ff.v {reg1}, ({reg2}){vm}",
4672*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4673*795d594fSAndroid Build Coastguard Worker "VLseg2e32ff");
4674*795d594fSAndroid Build Coastguard Worker }
4675*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg2e64ff)4676*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg2e64ff) {
4677*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg2e64ff,
4678*795d594fSAndroid Build Coastguard Worker "vlseg2e64ff.v {reg1}, ({reg2}){vm}",
4679*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4680*795d594fSAndroid Build Coastguard Worker "VLseg2e64ff");
4681*795d594fSAndroid Build Coastguard Worker }
4682*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg3e8ff)4683*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg3e8ff) {
4684*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg3e8ff,
4685*795d594fSAndroid Build Coastguard Worker "vlseg3e8ff.v {reg1}, ({reg2}){vm}",
4686*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4687*795d594fSAndroid Build Coastguard Worker "VLseg3e8ff");
4688*795d594fSAndroid Build Coastguard Worker }
4689*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg3e16ff)4690*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg3e16ff) {
4691*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg3e16ff,
4692*795d594fSAndroid Build Coastguard Worker "vlseg3e16ff.v {reg1}, ({reg2}){vm}",
4693*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4694*795d594fSAndroid Build Coastguard Worker "VLseg3e16ff");
4695*795d594fSAndroid Build Coastguard Worker }
4696*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg3e32ff)4697*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg3e32ff) {
4698*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg3e32ff,
4699*795d594fSAndroid Build Coastguard Worker "vlseg3e32ff.v {reg1}, ({reg2}){vm}",
4700*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4701*795d594fSAndroid Build Coastguard Worker "VLseg3e32ff");
4702*795d594fSAndroid Build Coastguard Worker }
4703*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg3e64ff)4704*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg3e64ff) {
4705*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg3e64ff,
4706*795d594fSAndroid Build Coastguard Worker "vlseg3e64ff.v {reg1}, ({reg2}){vm}",
4707*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4708*795d594fSAndroid Build Coastguard Worker "VLseg3e64ff");
4709*795d594fSAndroid Build Coastguard Worker }
4710*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg4e8ff)4711*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg4e8ff) {
4712*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg4e8ff,
4713*795d594fSAndroid Build Coastguard Worker "vlseg4e8ff.v {reg1}, ({reg2}){vm}",
4714*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4715*795d594fSAndroid Build Coastguard Worker "VLseg4e8ff");
4716*795d594fSAndroid Build Coastguard Worker }
4717*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg4e16ff)4718*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg4e16ff) {
4719*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg4e16ff,
4720*795d594fSAndroid Build Coastguard Worker "vlseg4e16ff.v {reg1}, ({reg2}){vm}",
4721*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4722*795d594fSAndroid Build Coastguard Worker "VLseg4e16ff");
4723*795d594fSAndroid Build Coastguard Worker }
4724*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg4e32ff)4725*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg4e32ff) {
4726*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg4e32ff,
4727*795d594fSAndroid Build Coastguard Worker "vlseg4e32ff.v {reg1}, ({reg2}){vm}",
4728*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4729*795d594fSAndroid Build Coastguard Worker "VLseg4e32ff");
4730*795d594fSAndroid Build Coastguard Worker }
4731*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg4e64ff)4732*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg4e64ff) {
4733*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg4e64ff,
4734*795d594fSAndroid Build Coastguard Worker "vlseg4e64ff.v {reg1}, ({reg2}){vm}",
4735*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4736*795d594fSAndroid Build Coastguard Worker "VLseg4e64ff");
4737*795d594fSAndroid Build Coastguard Worker }
4738*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg5e8ff)4739*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg5e8ff) {
4740*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg5e8ff,
4741*795d594fSAndroid Build Coastguard Worker "vlseg5e8ff.v {reg1}, ({reg2}){vm}",
4742*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4743*795d594fSAndroid Build Coastguard Worker "VLseg5e8ff");
4744*795d594fSAndroid Build Coastguard Worker }
4745*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg5e16ff)4746*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg5e16ff) {
4747*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg5e16ff,
4748*795d594fSAndroid Build Coastguard Worker "vlseg5e16ff.v {reg1}, ({reg2}){vm}",
4749*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4750*795d594fSAndroid Build Coastguard Worker "VLseg5e16ff");
4751*795d594fSAndroid Build Coastguard Worker }
4752*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg5e32ff)4753*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg5e32ff) {
4754*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg5e32ff,
4755*795d594fSAndroid Build Coastguard Worker "vlseg5e32ff.v {reg1}, ({reg2}){vm}",
4756*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4757*795d594fSAndroid Build Coastguard Worker "VLseg5e32ff");
4758*795d594fSAndroid Build Coastguard Worker }
4759*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg5e64ff)4760*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg5e64ff) {
4761*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg5e64ff,
4762*795d594fSAndroid Build Coastguard Worker "vlseg5e64ff.v {reg1}, ({reg2}){vm}",
4763*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4764*795d594fSAndroid Build Coastguard Worker "VLseg5e64ff");
4765*795d594fSAndroid Build Coastguard Worker }
4766*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg6e8ff)4767*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg6e8ff) {
4768*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg6e8ff,
4769*795d594fSAndroid Build Coastguard Worker "vlseg6e8ff.v {reg1}, ({reg2}){vm}",
4770*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4771*795d594fSAndroid Build Coastguard Worker "VLseg6e8ff");
4772*795d594fSAndroid Build Coastguard Worker }
4773*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg6e16ff)4774*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg6e16ff) {
4775*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg6e16ff,
4776*795d594fSAndroid Build Coastguard Worker "vlseg6e16ff.v {reg1}, ({reg2}){vm}",
4777*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4778*795d594fSAndroid Build Coastguard Worker "VLseg6e16ff");
4779*795d594fSAndroid Build Coastguard Worker }
4780*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg6e32ff)4781*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg6e32ff) {
4782*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg6e32ff,
4783*795d594fSAndroid Build Coastguard Worker "vlseg6e32ff.v {reg1}, ({reg2}){vm}",
4784*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4785*795d594fSAndroid Build Coastguard Worker "VLseg6e32ff");
4786*795d594fSAndroid Build Coastguard Worker }
4787*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg6e64ff)4788*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg6e64ff) {
4789*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg6e64ff,
4790*795d594fSAndroid Build Coastguard Worker "vlseg6e64ff.v {reg1}, ({reg2}){vm}",
4791*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4792*795d594fSAndroid Build Coastguard Worker "VLseg6e64ff");
4793*795d594fSAndroid Build Coastguard Worker }
4794*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg7e8ff)4795*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg7e8ff) {
4796*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg7e8ff,
4797*795d594fSAndroid Build Coastguard Worker "vlseg7e8ff.v {reg1}, ({reg2}){vm}",
4798*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4799*795d594fSAndroid Build Coastguard Worker "VLseg7e8ff");
4800*795d594fSAndroid Build Coastguard Worker }
4801*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg7e16ff)4802*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg7e16ff) {
4803*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg7e16ff,
4804*795d594fSAndroid Build Coastguard Worker "vlseg7e16ff.v {reg1}, ({reg2}){vm}",
4805*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4806*795d594fSAndroid Build Coastguard Worker "VLseg7e16ff");
4807*795d594fSAndroid Build Coastguard Worker }
4808*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg7e32ff)4809*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg7e32ff) {
4810*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg7e32ff,
4811*795d594fSAndroid Build Coastguard Worker "vlseg7e32ff.v {reg1}, ({reg2}){vm}",
4812*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4813*795d594fSAndroid Build Coastguard Worker "VLseg7e32ff");
4814*795d594fSAndroid Build Coastguard Worker }
4815*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg7e64ff)4816*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg7e64ff) {
4817*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg7e64ff,
4818*795d594fSAndroid Build Coastguard Worker "vlseg7e64ff.v {reg1}, ({reg2}){vm}",
4819*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4820*795d594fSAndroid Build Coastguard Worker "VLseg7e64ff");
4821*795d594fSAndroid Build Coastguard Worker }
4822*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg8e8ff)4823*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg8e8ff) {
4824*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg8e8ff,
4825*795d594fSAndroid Build Coastguard Worker "vlseg8e8ff.v {reg1}, ({reg2}){vm}",
4826*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4827*795d594fSAndroid Build Coastguard Worker "VLseg8e8ff");
4828*795d594fSAndroid Build Coastguard Worker }
4829*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg8e16ff)4830*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg8e16ff) {
4831*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg8e16ff,
4832*795d594fSAndroid Build Coastguard Worker "vlseg8e16ff.v {reg1}, ({reg2}){vm}",
4833*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4834*795d594fSAndroid Build Coastguard Worker "VLseg8e16ff");
4835*795d594fSAndroid Build Coastguard Worker }
4836*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg8e32ff)4837*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg8e32ff) {
4838*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg8e32ff,
4839*795d594fSAndroid Build Coastguard Worker "vlseg8e32ff.v {reg1}, ({reg2}){vm}",
4840*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4841*795d594fSAndroid Build Coastguard Worker "VLseg8e32ff");
4842*795d594fSAndroid Build Coastguard Worker }
4843*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLseg8e64ff)4844*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLseg8e64ff) {
4845*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVmFiltered(&Riscv64Assembler::VLseg8e64ff,
4846*795d594fSAndroid Build Coastguard Worker "vlseg8e64ff.v {reg1}, ({reg2}){vm}",
4847*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister>()),
4848*795d594fSAndroid Build Coastguard Worker "VLseg8e64ff");
4849*795d594fSAndroid Build Coastguard Worker }
4850*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg2e8)4851*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg2e8) {
4852*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg2e8,
4853*795d594fSAndroid Build Coastguard Worker "vlsseg2e8.v {reg1}, ({reg2}), {reg3}{vm}",
4854*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4855*795d594fSAndroid Build Coastguard Worker "VLsseg2e8");
4856*795d594fSAndroid Build Coastguard Worker }
4857*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg2e16)4858*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg2e16) {
4859*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg2e16,
4860*795d594fSAndroid Build Coastguard Worker "vlsseg2e16.v {reg1}, ({reg2}), {reg3}{vm}",
4861*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4862*795d594fSAndroid Build Coastguard Worker "VLsseg2e16");
4863*795d594fSAndroid Build Coastguard Worker }
4864*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg2e32)4865*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg2e32) {
4866*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg2e32,
4867*795d594fSAndroid Build Coastguard Worker "vlsseg2e32.v {reg1}, ({reg2}), {reg3}{vm}",
4868*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4869*795d594fSAndroid Build Coastguard Worker "VLsseg2e32");
4870*795d594fSAndroid Build Coastguard Worker }
4871*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg2e64)4872*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg2e64) {
4873*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg2e64,
4874*795d594fSAndroid Build Coastguard Worker "vlsseg2e64.v {reg1}, ({reg2}), {reg3}{vm}",
4875*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4876*795d594fSAndroid Build Coastguard Worker "VLsseg2e64");
4877*795d594fSAndroid Build Coastguard Worker }
4878*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg3e8)4879*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg3e8) {
4880*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg3e8,
4881*795d594fSAndroid Build Coastguard Worker "vlsseg3e8.v {reg1}, ({reg2}), {reg3}{vm}",
4882*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4883*795d594fSAndroid Build Coastguard Worker "VLsseg3e8");
4884*795d594fSAndroid Build Coastguard Worker }
4885*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg3e16)4886*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg3e16) {
4887*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg3e16,
4888*795d594fSAndroid Build Coastguard Worker "vlsseg3e16.v {reg1}, ({reg2}), {reg3}{vm}",
4889*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4890*795d594fSAndroid Build Coastguard Worker "VLsseg3e16");
4891*795d594fSAndroid Build Coastguard Worker }
4892*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg3e32)4893*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg3e32) {
4894*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg3e32,
4895*795d594fSAndroid Build Coastguard Worker "vlsseg3e32.v {reg1}, ({reg2}), {reg3}{vm}",
4896*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4897*795d594fSAndroid Build Coastguard Worker "VLsseg3e32");
4898*795d594fSAndroid Build Coastguard Worker }
4899*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg3e64)4900*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg3e64) {
4901*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg3e64,
4902*795d594fSAndroid Build Coastguard Worker "vlsseg3e64.v {reg1}, ({reg2}), {reg3}{vm}",
4903*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4904*795d594fSAndroid Build Coastguard Worker "VLsseg3e64");
4905*795d594fSAndroid Build Coastguard Worker }
4906*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg4e8)4907*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg4e8) {
4908*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg4e8,
4909*795d594fSAndroid Build Coastguard Worker "vlsseg4e8.v {reg1}, ({reg2}), {reg3}{vm}",
4910*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4911*795d594fSAndroid Build Coastguard Worker "VLsseg4e8");
4912*795d594fSAndroid Build Coastguard Worker }
4913*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg4e16)4914*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg4e16) {
4915*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg4e16,
4916*795d594fSAndroid Build Coastguard Worker "vlsseg4e16.v {reg1}, ({reg2}), {reg3}{vm}",
4917*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4918*795d594fSAndroid Build Coastguard Worker "VLsseg4e16");
4919*795d594fSAndroid Build Coastguard Worker }
4920*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg4e32)4921*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg4e32) {
4922*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg4e32,
4923*795d594fSAndroid Build Coastguard Worker "vlsseg4e32.v {reg1}, ({reg2}), {reg3}{vm}",
4924*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4925*795d594fSAndroid Build Coastguard Worker "VLsseg4e32");
4926*795d594fSAndroid Build Coastguard Worker }
4927*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg4e64)4928*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg4e64) {
4929*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg4e64,
4930*795d594fSAndroid Build Coastguard Worker "vlsseg4e64.v {reg1}, ({reg2}), {reg3}{vm}",
4931*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4932*795d594fSAndroid Build Coastguard Worker "VLsseg4e64");
4933*795d594fSAndroid Build Coastguard Worker }
4934*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg5e8)4935*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg5e8) {
4936*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg5e8,
4937*795d594fSAndroid Build Coastguard Worker "vlsseg5e8.v {reg1}, ({reg2}), {reg3}{vm}",
4938*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4939*795d594fSAndroid Build Coastguard Worker "VLsseg5e8");
4940*795d594fSAndroid Build Coastguard Worker }
4941*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg5e16)4942*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg5e16) {
4943*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg5e16,
4944*795d594fSAndroid Build Coastguard Worker "vlsseg5e16.v {reg1}, ({reg2}), {reg3}{vm}",
4945*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4946*795d594fSAndroid Build Coastguard Worker "VLsseg5e16");
4947*795d594fSAndroid Build Coastguard Worker }
4948*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg5e32)4949*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg5e32) {
4950*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg5e32,
4951*795d594fSAndroid Build Coastguard Worker "vlsseg5e32.v {reg1}, ({reg2}), {reg3}{vm}",
4952*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4953*795d594fSAndroid Build Coastguard Worker "VLsseg5e32");
4954*795d594fSAndroid Build Coastguard Worker }
4955*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg5e64)4956*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg5e64) {
4957*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg5e64,
4958*795d594fSAndroid Build Coastguard Worker "vlsseg5e64.v {reg1}, ({reg2}), {reg3}{vm}",
4959*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4960*795d594fSAndroid Build Coastguard Worker "VLsseg5e64");
4961*795d594fSAndroid Build Coastguard Worker }
4962*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg6e8)4963*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg6e8) {
4964*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg6e8,
4965*795d594fSAndroid Build Coastguard Worker "vlsseg6e8.v {reg1}, ({reg2}), {reg3}{vm}",
4966*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4967*795d594fSAndroid Build Coastguard Worker "VLsseg6e8");
4968*795d594fSAndroid Build Coastguard Worker }
4969*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg6e16)4970*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg6e16) {
4971*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg6e16,
4972*795d594fSAndroid Build Coastguard Worker "vlsseg6e16.v {reg1}, ({reg2}), {reg3}{vm}",
4973*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4974*795d594fSAndroid Build Coastguard Worker "VLsseg6e16");
4975*795d594fSAndroid Build Coastguard Worker }
4976*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg6e32)4977*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg6e32) {
4978*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg6e32,
4979*795d594fSAndroid Build Coastguard Worker "vlsseg6e32.v {reg1}, ({reg2}), {reg3}{vm}",
4980*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4981*795d594fSAndroid Build Coastguard Worker "VLsseg6e32");
4982*795d594fSAndroid Build Coastguard Worker }
4983*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg6e64)4984*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg6e64) {
4985*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg6e64,
4986*795d594fSAndroid Build Coastguard Worker "vlsseg6e64.v {reg1}, ({reg2}), {reg3}{vm}",
4987*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4988*795d594fSAndroid Build Coastguard Worker "VLsseg6e64");
4989*795d594fSAndroid Build Coastguard Worker }
4990*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg7e8)4991*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg7e8) {
4992*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg7e8,
4993*795d594fSAndroid Build Coastguard Worker "vlsseg7e8.v {reg1}, ({reg2}), {reg3}{vm}",
4994*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
4995*795d594fSAndroid Build Coastguard Worker "VLsseg7e8");
4996*795d594fSAndroid Build Coastguard Worker }
4997*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg7e16)4998*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg7e16) {
4999*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg7e16,
5000*795d594fSAndroid Build Coastguard Worker "vlsseg7e16.v {reg1}, ({reg2}), {reg3}{vm}",
5001*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
5002*795d594fSAndroid Build Coastguard Worker "VLsseg7e16");
5003*795d594fSAndroid Build Coastguard Worker }
5004*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg7e32)5005*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg7e32) {
5006*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg7e32,
5007*795d594fSAndroid Build Coastguard Worker "vlsseg7e32.v {reg1}, ({reg2}), {reg3}{vm}",
5008*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
5009*795d594fSAndroid Build Coastguard Worker "VLsseg7e32");
5010*795d594fSAndroid Build Coastguard Worker }
5011*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg7e64)5012*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg7e64) {
5013*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg7e64,
5014*795d594fSAndroid Build Coastguard Worker "vlsseg7e64.v {reg1}, ({reg2}), {reg3}{vm}",
5015*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
5016*795d594fSAndroid Build Coastguard Worker "VLsseg7e64");
5017*795d594fSAndroid Build Coastguard Worker }
5018*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg8e8)5019*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg8e8) {
5020*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg8e8,
5021*795d594fSAndroid Build Coastguard Worker "vlsseg8e8.v {reg1}, ({reg2}), {reg3}{vm}",
5022*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
5023*795d594fSAndroid Build Coastguard Worker "VLsseg8e8");
5024*795d594fSAndroid Build Coastguard Worker }
5025*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg8e16)5026*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg8e16) {
5027*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg8e16,
5028*795d594fSAndroid Build Coastguard Worker "vlsseg8e16.v {reg1}, ({reg2}), {reg3}{vm}",
5029*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
5030*795d594fSAndroid Build Coastguard Worker "VLsseg8e16");
5031*795d594fSAndroid Build Coastguard Worker }
5032*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg8e32)5033*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg8e32) {
5034*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg8e32,
5035*795d594fSAndroid Build Coastguard Worker "vlsseg8e32.v {reg1}, ({reg2}), {reg3}{vm}",
5036*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
5037*795d594fSAndroid Build Coastguard Worker "VLsseg8e32");
5038*795d594fSAndroid Build Coastguard Worker }
5039*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLsseg8e64)5040*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLsseg8e64) {
5041*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVmFiltered(&Riscv64Assembler::VLsseg8e64,
5042*795d594fSAndroid Build Coastguard Worker "vlsseg8e64.v {reg1}, ({reg2}), {reg3}{vm}",
5043*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, XRegister>()),
5044*795d594fSAndroid Build Coastguard Worker "VLsseg8e64");
5045*795d594fSAndroid Build Coastguard Worker }
5046*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg2e8)5047*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg2e8) {
5048*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg2e8, "vssseg2e8.v {reg1}, ({reg2}), {reg3}{vm}"),
5049*795d594fSAndroid Build Coastguard Worker "VSsseg2e8");
5050*795d594fSAndroid Build Coastguard Worker }
5051*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg2e16)5052*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg2e16) {
5053*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg2e16, "vssseg2e16.v {reg1}, ({reg2}), {reg3}{vm}"),
5054*795d594fSAndroid Build Coastguard Worker "VSsseg2e16");
5055*795d594fSAndroid Build Coastguard Worker }
5056*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg2e32)5057*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg2e32) {
5058*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg2e32, "vssseg2e32.v {reg1}, ({reg2}), {reg3}{vm}"),
5059*795d594fSAndroid Build Coastguard Worker "VSsseg2e32");
5060*795d594fSAndroid Build Coastguard Worker }
5061*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg2e64)5062*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg2e64) {
5063*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg2e64, "vssseg2e64.v {reg1}, ({reg2}), {reg3}{vm}"),
5064*795d594fSAndroid Build Coastguard Worker "VSsseg2e64");
5065*795d594fSAndroid Build Coastguard Worker }
5066*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg3e8)5067*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg3e8) {
5068*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg3e8, "vssseg3e8.v {reg1}, ({reg2}), {reg3}{vm}"),
5069*795d594fSAndroid Build Coastguard Worker "VSsseg3e8");
5070*795d594fSAndroid Build Coastguard Worker }
5071*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg3e16)5072*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg3e16) {
5073*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg3e16, "vssseg3e16.v {reg1}, ({reg2}), {reg3}{vm}"),
5074*795d594fSAndroid Build Coastguard Worker "VSsseg3e16");
5075*795d594fSAndroid Build Coastguard Worker }
5076*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg3e32)5077*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg3e32) {
5078*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg3e32, "vssseg3e32.v {reg1}, ({reg2}), {reg3}{vm}"),
5079*795d594fSAndroid Build Coastguard Worker "VSsseg3e32");
5080*795d594fSAndroid Build Coastguard Worker }
5081*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg3e64)5082*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg3e64) {
5083*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg3e64, "vssseg3e64.v {reg1}, ({reg2}), {reg3}{vm}"),
5084*795d594fSAndroid Build Coastguard Worker "VSsseg3e64");
5085*795d594fSAndroid Build Coastguard Worker }
5086*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg4e8)5087*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg4e8) {
5088*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg4e8, "vssseg4e8.v {reg1}, ({reg2}), {reg3}{vm}"),
5089*795d594fSAndroid Build Coastguard Worker "VSsseg4e8");
5090*795d594fSAndroid Build Coastguard Worker }
5091*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg4e16)5092*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg4e16) {
5093*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg4e16, "vssseg4e16.v {reg1}, ({reg2}), {reg3}{vm}"),
5094*795d594fSAndroid Build Coastguard Worker "VSsseg4e16");
5095*795d594fSAndroid Build Coastguard Worker }
5096*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg4e32)5097*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg4e32) {
5098*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg4e32, "vssseg4e32.v {reg1}, ({reg2}), {reg3}{vm}"),
5099*795d594fSAndroid Build Coastguard Worker "VSsseg4e32");
5100*795d594fSAndroid Build Coastguard Worker }
5101*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg4e64)5102*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg4e64) {
5103*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg4e64, "vssseg4e64.v {reg1}, ({reg2}), {reg3}{vm}"),
5104*795d594fSAndroid Build Coastguard Worker "VSsseg4e64");
5105*795d594fSAndroid Build Coastguard Worker }
5106*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg5e8)5107*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg5e8) {
5108*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg5e8, "vssseg5e8.v {reg1}, ({reg2}), {reg3}{vm}"),
5109*795d594fSAndroid Build Coastguard Worker "VSsseg5e8");
5110*795d594fSAndroid Build Coastguard Worker }
5111*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg5e16)5112*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg5e16) {
5113*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg5e16, "vssseg5e16.v {reg1}, ({reg2}), {reg3}{vm}"),
5114*795d594fSAndroid Build Coastguard Worker "VSsseg5e16");
5115*795d594fSAndroid Build Coastguard Worker }
5116*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg5e32)5117*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg5e32) {
5118*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg5e32, "vssseg5e32.v {reg1}, ({reg2}), {reg3}{vm}"),
5119*795d594fSAndroid Build Coastguard Worker "VSsseg5e32");
5120*795d594fSAndroid Build Coastguard Worker }
5121*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg5e64)5122*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg5e64) {
5123*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg5e64, "vssseg5e64.v {reg1}, ({reg2}), {reg3}{vm}"),
5124*795d594fSAndroid Build Coastguard Worker "VSsseg5e64");
5125*795d594fSAndroid Build Coastguard Worker }
5126*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg6e8)5127*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg6e8) {
5128*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg6e8, "vssseg6e8.v {reg1}, ({reg2}), {reg3}{vm}"),
5129*795d594fSAndroid Build Coastguard Worker "VSsseg6e8");
5130*795d594fSAndroid Build Coastguard Worker }
5131*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg6e16)5132*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg6e16) {
5133*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg6e16, "vssseg6e16.v {reg1}, ({reg2}), {reg3}{vm}"),
5134*795d594fSAndroid Build Coastguard Worker "VSsseg6e16");
5135*795d594fSAndroid Build Coastguard Worker }
5136*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg6e32)5137*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg6e32) {
5138*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg6e32, "vssseg6e32.v {reg1}, ({reg2}), {reg3}{vm}"),
5139*795d594fSAndroid Build Coastguard Worker "VSsseg6e32");
5140*795d594fSAndroid Build Coastguard Worker }
5141*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg6e64)5142*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg6e64) {
5143*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg6e64, "vssseg6e64.v {reg1}, ({reg2}), {reg3}{vm}"),
5144*795d594fSAndroid Build Coastguard Worker "VSsseg6e64");
5145*795d594fSAndroid Build Coastguard Worker }
5146*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg7e8)5147*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg7e8) {
5148*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg7e8, "vssseg7e8.v {reg1}, ({reg2}), {reg3}{vm}"),
5149*795d594fSAndroid Build Coastguard Worker "VSsseg7e8");
5150*795d594fSAndroid Build Coastguard Worker }
5151*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg7e16)5152*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg7e16) {
5153*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg7e16, "vssseg7e16.v {reg1}, ({reg2}), {reg3}{vm}"),
5154*795d594fSAndroid Build Coastguard Worker "VSsseg7e16");
5155*795d594fSAndroid Build Coastguard Worker }
5156*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg7e32)5157*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg7e32) {
5158*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg7e32, "vssseg7e32.v {reg1}, ({reg2}), {reg3}{vm}"),
5159*795d594fSAndroid Build Coastguard Worker "VSsseg7e32");
5160*795d594fSAndroid Build Coastguard Worker }
5161*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg7e64)5162*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg7e64) {
5163*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg7e64, "vssseg7e64.v {reg1}, ({reg2}), {reg3}{vm}"),
5164*795d594fSAndroid Build Coastguard Worker "VSsseg7e64");
5165*795d594fSAndroid Build Coastguard Worker }
5166*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg8e8)5167*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg8e8) {
5168*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg8e8, "vssseg8e8.v {reg1}, ({reg2}), {reg3}{vm}"),
5169*795d594fSAndroid Build Coastguard Worker "VSsseg8e8");
5170*795d594fSAndroid Build Coastguard Worker }
5171*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg8e16)5172*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg8e16) {
5173*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg8e16, "vssseg8e16.v {reg1}, ({reg2}), {reg3}{vm}"),
5174*795d594fSAndroid Build Coastguard Worker "VSsseg8e16");
5175*795d594fSAndroid Build Coastguard Worker }
5176*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg8e32)5177*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg8e32) {
5178*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg8e32, "vssseg8e32.v {reg1}, ({reg2}), {reg3}{vm}"),
5179*795d594fSAndroid Build Coastguard Worker "VSsseg8e32");
5180*795d594fSAndroid Build Coastguard Worker }
5181*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsseg8e64)5182*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsseg8e64) {
5183*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRRVm(&Riscv64Assembler::VSsseg8e64, "vssseg8e64.v {reg1}, ({reg2}), {reg3}{vm}"),
5184*795d594fSAndroid Build Coastguard Worker "VSsseg8e64");
5185*795d594fSAndroid Build Coastguard Worker }
5186*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg2ei8)5187*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg2ei8) {
5188*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg2ei8,
5189*795d594fSAndroid Build Coastguard Worker "vluxseg2ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5190*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5191*795d594fSAndroid Build Coastguard Worker "VLuxseg2ei8");
5192*795d594fSAndroid Build Coastguard Worker }
5193*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg2ei16)5194*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg2ei16) {
5195*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg2ei16,
5196*795d594fSAndroid Build Coastguard Worker "vluxseg2ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5197*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5198*795d594fSAndroid Build Coastguard Worker "VLuxseg2ei16");
5199*795d594fSAndroid Build Coastguard Worker }
5200*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg2ei32)5201*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg2ei32) {
5202*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg2ei32,
5203*795d594fSAndroid Build Coastguard Worker "vluxseg2ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5204*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5205*795d594fSAndroid Build Coastguard Worker "VLuxseg2ei32");
5206*795d594fSAndroid Build Coastguard Worker }
5207*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg2ei64)5208*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg2ei64) {
5209*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg2ei64,
5210*795d594fSAndroid Build Coastguard Worker "vluxseg2ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5211*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5212*795d594fSAndroid Build Coastguard Worker "VLuxseg2ei64");
5213*795d594fSAndroid Build Coastguard Worker }
5214*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg3ei8)5215*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg3ei8) {
5216*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg3ei8,
5217*795d594fSAndroid Build Coastguard Worker "vluxseg3ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5218*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5219*795d594fSAndroid Build Coastguard Worker "VLuxseg3ei8");
5220*795d594fSAndroid Build Coastguard Worker }
5221*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg3ei16)5222*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg3ei16) {
5223*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg3ei16,
5224*795d594fSAndroid Build Coastguard Worker "vluxseg3ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5225*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5226*795d594fSAndroid Build Coastguard Worker "VLuxseg3ei16");
5227*795d594fSAndroid Build Coastguard Worker }
5228*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg3ei32)5229*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg3ei32) {
5230*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg3ei32,
5231*795d594fSAndroid Build Coastguard Worker "vluxseg3ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5232*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5233*795d594fSAndroid Build Coastguard Worker "VLuxseg3ei32");
5234*795d594fSAndroid Build Coastguard Worker }
5235*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg3ei64)5236*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg3ei64) {
5237*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg3ei64,
5238*795d594fSAndroid Build Coastguard Worker "vluxseg3ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5239*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5240*795d594fSAndroid Build Coastguard Worker "VLuxseg3ei64");
5241*795d594fSAndroid Build Coastguard Worker }
5242*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg4ei8)5243*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg4ei8) {
5244*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg4ei8,
5245*795d594fSAndroid Build Coastguard Worker "vluxseg4ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5246*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5247*795d594fSAndroid Build Coastguard Worker "VLuxseg4ei8");
5248*795d594fSAndroid Build Coastguard Worker }
5249*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg4ei16)5250*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg4ei16) {
5251*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg4ei16,
5252*795d594fSAndroid Build Coastguard Worker "vluxseg4ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5253*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5254*795d594fSAndroid Build Coastguard Worker "VLuxseg4ei16");
5255*795d594fSAndroid Build Coastguard Worker }
5256*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg4ei32)5257*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg4ei32) {
5258*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg4ei32,
5259*795d594fSAndroid Build Coastguard Worker "vluxseg4ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5260*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5261*795d594fSAndroid Build Coastguard Worker "VLuxseg4ei32");
5262*795d594fSAndroid Build Coastguard Worker }
5263*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg4ei64)5264*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg4ei64) {
5265*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg4ei64,
5266*795d594fSAndroid Build Coastguard Worker "vluxseg4ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5267*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5268*795d594fSAndroid Build Coastguard Worker "VLuxseg4ei64");
5269*795d594fSAndroid Build Coastguard Worker }
5270*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg5ei8)5271*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg5ei8) {
5272*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg5ei8,
5273*795d594fSAndroid Build Coastguard Worker "vluxseg5ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5274*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5275*795d594fSAndroid Build Coastguard Worker "VLuxseg5ei8");
5276*795d594fSAndroid Build Coastguard Worker }
5277*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg5ei16)5278*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg5ei16) {
5279*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg5ei16,
5280*795d594fSAndroid Build Coastguard Worker "vluxseg5ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5281*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5282*795d594fSAndroid Build Coastguard Worker "VLuxseg5ei16");
5283*795d594fSAndroid Build Coastguard Worker }
5284*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg5ei32)5285*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg5ei32) {
5286*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg5ei32,
5287*795d594fSAndroid Build Coastguard Worker "vluxseg5ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5288*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5289*795d594fSAndroid Build Coastguard Worker "VLuxseg5ei32");
5290*795d594fSAndroid Build Coastguard Worker }
5291*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg5ei64)5292*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg5ei64) {
5293*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg5ei64,
5294*795d594fSAndroid Build Coastguard Worker "vluxseg5ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5295*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5296*795d594fSAndroid Build Coastguard Worker "VLuxseg5ei64");
5297*795d594fSAndroid Build Coastguard Worker }
5298*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg6ei8)5299*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg6ei8) {
5300*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg6ei8,
5301*795d594fSAndroid Build Coastguard Worker "vluxseg6ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5302*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5303*795d594fSAndroid Build Coastguard Worker "VLuxseg6ei8");
5304*795d594fSAndroid Build Coastguard Worker }
5305*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg6ei16)5306*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg6ei16) {
5307*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg6ei16,
5308*795d594fSAndroid Build Coastguard Worker "vluxseg6ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5309*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5310*795d594fSAndroid Build Coastguard Worker "VLuxseg6ei16");
5311*795d594fSAndroid Build Coastguard Worker }
5312*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg6ei32)5313*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg6ei32) {
5314*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg6ei32,
5315*795d594fSAndroid Build Coastguard Worker "vluxseg6ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5316*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5317*795d594fSAndroid Build Coastguard Worker "VLuxseg6ei32");
5318*795d594fSAndroid Build Coastguard Worker }
5319*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg6ei64)5320*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg6ei64) {
5321*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg6ei64,
5322*795d594fSAndroid Build Coastguard Worker "vluxseg6ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5323*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5324*795d594fSAndroid Build Coastguard Worker "VLuxseg6ei64");
5325*795d594fSAndroid Build Coastguard Worker }
5326*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg7ei8)5327*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg7ei8) {
5328*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg7ei8,
5329*795d594fSAndroid Build Coastguard Worker "vluxseg7ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5330*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5331*795d594fSAndroid Build Coastguard Worker "VLuxseg7ei8");
5332*795d594fSAndroid Build Coastguard Worker }
5333*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg7ei16)5334*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg7ei16) {
5335*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg7ei16,
5336*795d594fSAndroid Build Coastguard Worker "vluxseg7ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5337*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5338*795d594fSAndroid Build Coastguard Worker "VLuxseg7ei16");
5339*795d594fSAndroid Build Coastguard Worker }
5340*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg7ei32)5341*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg7ei32) {
5342*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg7ei32,
5343*795d594fSAndroid Build Coastguard Worker "vluxseg7ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5344*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5345*795d594fSAndroid Build Coastguard Worker "VLuxseg7ei32");
5346*795d594fSAndroid Build Coastguard Worker }
5347*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg7ei64)5348*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg7ei64) {
5349*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg7ei64,
5350*795d594fSAndroid Build Coastguard Worker "vluxseg7ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5351*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5352*795d594fSAndroid Build Coastguard Worker "VLuxseg7ei64");
5353*795d594fSAndroid Build Coastguard Worker }
5354*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg8ei8)5355*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg8ei8) {
5356*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg8ei8,
5357*795d594fSAndroid Build Coastguard Worker "vluxseg8ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5358*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5359*795d594fSAndroid Build Coastguard Worker "VLuxseg8ei8");
5360*795d594fSAndroid Build Coastguard Worker }
5361*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg8ei16)5362*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg8ei16) {
5363*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg8ei16,
5364*795d594fSAndroid Build Coastguard Worker "vluxseg8ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5365*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5366*795d594fSAndroid Build Coastguard Worker "VLuxseg8ei16");
5367*795d594fSAndroid Build Coastguard Worker }
5368*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg8ei32)5369*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg8ei32) {
5370*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg8ei32,
5371*795d594fSAndroid Build Coastguard Worker "vluxseg8ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5372*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5373*795d594fSAndroid Build Coastguard Worker "VLuxseg8ei32");
5374*795d594fSAndroid Build Coastguard Worker }
5375*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLuxseg8ei64)5376*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLuxseg8ei64) {
5377*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLuxseg8ei64,
5378*795d594fSAndroid Build Coastguard Worker "vluxseg8ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5379*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5380*795d594fSAndroid Build Coastguard Worker "VLuxseg8ei64");
5381*795d594fSAndroid Build Coastguard Worker }
5382*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg2ei8)5383*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg2ei8) {
5384*795d594fSAndroid Build Coastguard Worker DriverStr(
5385*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg2ei8, "vsuxseg2ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5386*795d594fSAndroid Build Coastguard Worker "VSuxseg2ei8");
5387*795d594fSAndroid Build Coastguard Worker }
5388*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg2ei16)5389*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg2ei16) {
5390*795d594fSAndroid Build Coastguard Worker DriverStr(
5391*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg2ei16, "vsuxseg2ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5392*795d594fSAndroid Build Coastguard Worker "VSuxseg2ei16");
5393*795d594fSAndroid Build Coastguard Worker }
5394*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg2ei32)5395*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg2ei32) {
5396*795d594fSAndroid Build Coastguard Worker DriverStr(
5397*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg2ei32, "vsuxseg2ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5398*795d594fSAndroid Build Coastguard Worker "VSuxseg2ei32");
5399*795d594fSAndroid Build Coastguard Worker }
5400*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg2ei64)5401*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg2ei64) {
5402*795d594fSAndroid Build Coastguard Worker DriverStr(
5403*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg2ei64, "vsuxseg2ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5404*795d594fSAndroid Build Coastguard Worker "VSuxseg2ei64");
5405*795d594fSAndroid Build Coastguard Worker }
5406*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg3ei8)5407*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg3ei8) {
5408*795d594fSAndroid Build Coastguard Worker DriverStr(
5409*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg3ei8, "vsuxseg3ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5410*795d594fSAndroid Build Coastguard Worker "VSuxseg3ei8");
5411*795d594fSAndroid Build Coastguard Worker }
5412*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg3ei16)5413*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg3ei16) {
5414*795d594fSAndroid Build Coastguard Worker DriverStr(
5415*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg3ei16, "vsuxseg3ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5416*795d594fSAndroid Build Coastguard Worker "VSuxseg3ei16");
5417*795d594fSAndroid Build Coastguard Worker }
5418*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg3ei32)5419*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg3ei32) {
5420*795d594fSAndroid Build Coastguard Worker DriverStr(
5421*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg3ei32, "vsuxseg3ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5422*795d594fSAndroid Build Coastguard Worker "VSuxseg3ei32");
5423*795d594fSAndroid Build Coastguard Worker }
5424*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg3ei64)5425*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg3ei64) {
5426*795d594fSAndroid Build Coastguard Worker DriverStr(
5427*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg3ei64, "vsuxseg3ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5428*795d594fSAndroid Build Coastguard Worker "VSuxseg3ei64");
5429*795d594fSAndroid Build Coastguard Worker }
5430*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg4ei8)5431*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg4ei8) {
5432*795d594fSAndroid Build Coastguard Worker DriverStr(
5433*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg4ei8, "vsuxseg4ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5434*795d594fSAndroid Build Coastguard Worker "VSuxseg4ei8");
5435*795d594fSAndroid Build Coastguard Worker }
5436*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg4ei16)5437*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg4ei16) {
5438*795d594fSAndroid Build Coastguard Worker DriverStr(
5439*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg4ei16, "vsuxseg4ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5440*795d594fSAndroid Build Coastguard Worker "VSuxseg4ei16");
5441*795d594fSAndroid Build Coastguard Worker }
5442*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg4ei32)5443*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg4ei32) {
5444*795d594fSAndroid Build Coastguard Worker DriverStr(
5445*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg4ei32, "vsuxseg4ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5446*795d594fSAndroid Build Coastguard Worker "VSuxseg4ei32");
5447*795d594fSAndroid Build Coastguard Worker }
5448*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg4ei64)5449*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg4ei64) {
5450*795d594fSAndroid Build Coastguard Worker DriverStr(
5451*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg4ei64, "vsuxseg4ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5452*795d594fSAndroid Build Coastguard Worker "VSuxseg4ei64");
5453*795d594fSAndroid Build Coastguard Worker }
5454*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg5ei8)5455*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg5ei8) {
5456*795d594fSAndroid Build Coastguard Worker DriverStr(
5457*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg5ei8, "vsuxseg5ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5458*795d594fSAndroid Build Coastguard Worker "VSuxseg5ei8");
5459*795d594fSAndroid Build Coastguard Worker }
5460*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg5ei16)5461*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg5ei16) {
5462*795d594fSAndroid Build Coastguard Worker DriverStr(
5463*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg5ei16, "vsuxseg5ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5464*795d594fSAndroid Build Coastguard Worker "VSuxseg5ei16");
5465*795d594fSAndroid Build Coastguard Worker }
5466*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg5ei32)5467*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg5ei32) {
5468*795d594fSAndroid Build Coastguard Worker DriverStr(
5469*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg5ei32, "vsuxseg5ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5470*795d594fSAndroid Build Coastguard Worker "VSuxseg5ei32");
5471*795d594fSAndroid Build Coastguard Worker }
5472*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg5ei64)5473*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg5ei64) {
5474*795d594fSAndroid Build Coastguard Worker DriverStr(
5475*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg5ei64, "vsuxseg5ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5476*795d594fSAndroid Build Coastguard Worker "VSuxseg5ei64");
5477*795d594fSAndroid Build Coastguard Worker }
5478*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg6ei8)5479*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg6ei8) {
5480*795d594fSAndroid Build Coastguard Worker DriverStr(
5481*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg6ei8, "vsuxseg6ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5482*795d594fSAndroid Build Coastguard Worker "VSuxseg6ei8");
5483*795d594fSAndroid Build Coastguard Worker }
5484*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg6ei16)5485*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg6ei16) {
5486*795d594fSAndroid Build Coastguard Worker DriverStr(
5487*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg6ei16, "vsuxseg6ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5488*795d594fSAndroid Build Coastguard Worker "VSuxseg6ei16");
5489*795d594fSAndroid Build Coastguard Worker }
5490*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg6ei32)5491*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg6ei32) {
5492*795d594fSAndroid Build Coastguard Worker DriverStr(
5493*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg6ei32, "vsuxseg6ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5494*795d594fSAndroid Build Coastguard Worker "VSuxseg6ei32");
5495*795d594fSAndroid Build Coastguard Worker }
5496*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg6ei64)5497*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg6ei64) {
5498*795d594fSAndroid Build Coastguard Worker DriverStr(
5499*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg6ei64, "vsuxseg6ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5500*795d594fSAndroid Build Coastguard Worker "VSuxseg6ei64");
5501*795d594fSAndroid Build Coastguard Worker }
5502*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg7ei8)5503*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg7ei8) {
5504*795d594fSAndroid Build Coastguard Worker DriverStr(
5505*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg7ei8, "vsuxseg7ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5506*795d594fSAndroid Build Coastguard Worker "VSuxseg7ei8");
5507*795d594fSAndroid Build Coastguard Worker }
5508*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg7ei16)5509*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg7ei16) {
5510*795d594fSAndroid Build Coastguard Worker DriverStr(
5511*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg7ei16, "vsuxseg7ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5512*795d594fSAndroid Build Coastguard Worker "VSuxseg7ei16");
5513*795d594fSAndroid Build Coastguard Worker }
5514*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg7ei32)5515*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg7ei32) {
5516*795d594fSAndroid Build Coastguard Worker DriverStr(
5517*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg7ei32, "vsuxseg7ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5518*795d594fSAndroid Build Coastguard Worker "VSuxseg7ei32");
5519*795d594fSAndroid Build Coastguard Worker }
5520*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg7ei64)5521*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg7ei64) {
5522*795d594fSAndroid Build Coastguard Worker DriverStr(
5523*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg7ei64, "vsuxseg7ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5524*795d594fSAndroid Build Coastguard Worker "VSuxseg7ei64");
5525*795d594fSAndroid Build Coastguard Worker }
5526*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg8ei8)5527*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg8ei8) {
5528*795d594fSAndroid Build Coastguard Worker DriverStr(
5529*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg8ei8, "vsuxseg8ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5530*795d594fSAndroid Build Coastguard Worker "VSuxseg8ei8");
5531*795d594fSAndroid Build Coastguard Worker }
5532*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg8ei16)5533*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg8ei16) {
5534*795d594fSAndroid Build Coastguard Worker DriverStr(
5535*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg8ei16, "vsuxseg8ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5536*795d594fSAndroid Build Coastguard Worker "VSuxseg8ei16");
5537*795d594fSAndroid Build Coastguard Worker }
5538*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg8ei32)5539*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg8ei32) {
5540*795d594fSAndroid Build Coastguard Worker DriverStr(
5541*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg8ei32, "vsuxseg8ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5542*795d594fSAndroid Build Coastguard Worker "VSuxseg8ei32");
5543*795d594fSAndroid Build Coastguard Worker }
5544*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSuxseg8ei64)5545*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSuxseg8ei64) {
5546*795d594fSAndroid Build Coastguard Worker DriverStr(
5547*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSuxseg8ei64, "vsuxseg8ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5548*795d594fSAndroid Build Coastguard Worker "VSuxseg8ei64");
5549*795d594fSAndroid Build Coastguard Worker }
5550*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg2ei8)5551*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg2ei8) {
5552*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg2ei8,
5553*795d594fSAndroid Build Coastguard Worker "vloxseg2ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5554*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5555*795d594fSAndroid Build Coastguard Worker "VLoxseg2ei8");
5556*795d594fSAndroid Build Coastguard Worker }
5557*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg2ei16)5558*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg2ei16) {
5559*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg2ei16,
5560*795d594fSAndroid Build Coastguard Worker "vloxseg2ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5561*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5562*795d594fSAndroid Build Coastguard Worker "VLoxseg2ei16");
5563*795d594fSAndroid Build Coastguard Worker }
5564*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg2ei32)5565*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg2ei32) {
5566*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg2ei32,
5567*795d594fSAndroid Build Coastguard Worker "vloxseg2ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5568*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5569*795d594fSAndroid Build Coastguard Worker "VLoxseg2ei32");
5570*795d594fSAndroid Build Coastguard Worker }
5571*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg2ei64)5572*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg2ei64) {
5573*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg2ei64,
5574*795d594fSAndroid Build Coastguard Worker "vloxseg2ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5575*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5576*795d594fSAndroid Build Coastguard Worker "VLoxseg2ei64");
5577*795d594fSAndroid Build Coastguard Worker }
5578*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg3ei8)5579*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg3ei8) {
5580*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg3ei8,
5581*795d594fSAndroid Build Coastguard Worker "vloxseg3ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5582*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5583*795d594fSAndroid Build Coastguard Worker "VLoxseg3ei8");
5584*795d594fSAndroid Build Coastguard Worker }
5585*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg3ei16)5586*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg3ei16) {
5587*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg3ei16,
5588*795d594fSAndroid Build Coastguard Worker "vloxseg3ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5589*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5590*795d594fSAndroid Build Coastguard Worker "VLoxseg3ei16");
5591*795d594fSAndroid Build Coastguard Worker }
5592*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg3ei32)5593*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg3ei32) {
5594*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg3ei32,
5595*795d594fSAndroid Build Coastguard Worker "vloxseg3ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5596*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5597*795d594fSAndroid Build Coastguard Worker "VLoxseg3ei32");
5598*795d594fSAndroid Build Coastguard Worker }
5599*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg3ei64)5600*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg3ei64) {
5601*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg3ei64,
5602*795d594fSAndroid Build Coastguard Worker "vloxseg3ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5603*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5604*795d594fSAndroid Build Coastguard Worker "VLoxseg3ei64");
5605*795d594fSAndroid Build Coastguard Worker }
5606*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg4ei8)5607*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg4ei8) {
5608*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg4ei8,
5609*795d594fSAndroid Build Coastguard Worker "vloxseg4ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5610*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5611*795d594fSAndroid Build Coastguard Worker "VLoxseg4ei8");
5612*795d594fSAndroid Build Coastguard Worker }
5613*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg4ei16)5614*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg4ei16) {
5615*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg4ei16,
5616*795d594fSAndroid Build Coastguard Worker "vloxseg4ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5617*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5618*795d594fSAndroid Build Coastguard Worker "VLoxseg4ei16");
5619*795d594fSAndroid Build Coastguard Worker }
5620*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg4ei32)5621*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg4ei32) {
5622*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg4ei32,
5623*795d594fSAndroid Build Coastguard Worker "vloxseg4ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5624*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5625*795d594fSAndroid Build Coastguard Worker "VLoxseg4ei32");
5626*795d594fSAndroid Build Coastguard Worker }
5627*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg4ei64)5628*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg4ei64) {
5629*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg4ei64,
5630*795d594fSAndroid Build Coastguard Worker "vloxseg4ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5631*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5632*795d594fSAndroid Build Coastguard Worker "VLoxseg4ei64");
5633*795d594fSAndroid Build Coastguard Worker }
5634*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg5ei8)5635*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg5ei8) {
5636*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg5ei8,
5637*795d594fSAndroid Build Coastguard Worker "vloxseg5ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5638*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5639*795d594fSAndroid Build Coastguard Worker "VLoxseg5ei8");
5640*795d594fSAndroid Build Coastguard Worker }
5641*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg5ei16)5642*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg5ei16) {
5643*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg5ei16,
5644*795d594fSAndroid Build Coastguard Worker "vloxseg5ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5645*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5646*795d594fSAndroid Build Coastguard Worker "VLoxseg5ei16");
5647*795d594fSAndroid Build Coastguard Worker }
5648*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg5ei32)5649*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg5ei32) {
5650*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg5ei32,
5651*795d594fSAndroid Build Coastguard Worker "vloxseg5ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5652*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5653*795d594fSAndroid Build Coastguard Worker "VLoxseg5ei32");
5654*795d594fSAndroid Build Coastguard Worker }
5655*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg5ei64)5656*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg5ei64) {
5657*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg5ei64,
5658*795d594fSAndroid Build Coastguard Worker "vloxseg5ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5659*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5660*795d594fSAndroid Build Coastguard Worker "VLoxseg5ei64");
5661*795d594fSAndroid Build Coastguard Worker }
5662*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg6ei8)5663*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg6ei8) {
5664*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg6ei8,
5665*795d594fSAndroid Build Coastguard Worker "vloxseg6ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5666*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5667*795d594fSAndroid Build Coastguard Worker "VLoxseg6ei8");
5668*795d594fSAndroid Build Coastguard Worker }
5669*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg6ei16)5670*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg6ei16) {
5671*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg6ei16,
5672*795d594fSAndroid Build Coastguard Worker "vloxseg6ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5673*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5674*795d594fSAndroid Build Coastguard Worker "VLoxseg6ei16");
5675*795d594fSAndroid Build Coastguard Worker }
5676*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg6ei32)5677*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg6ei32) {
5678*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg6ei32,
5679*795d594fSAndroid Build Coastguard Worker "vloxseg6ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5680*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5681*795d594fSAndroid Build Coastguard Worker "VLoxseg6ei32");
5682*795d594fSAndroid Build Coastguard Worker }
5683*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg6ei64)5684*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg6ei64) {
5685*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg6ei64,
5686*795d594fSAndroid Build Coastguard Worker "vloxseg6ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5687*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5688*795d594fSAndroid Build Coastguard Worker "VLoxseg6ei64");
5689*795d594fSAndroid Build Coastguard Worker }
5690*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg7ei8)5691*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg7ei8) {
5692*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg7ei8,
5693*795d594fSAndroid Build Coastguard Worker "vloxseg7ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5694*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5695*795d594fSAndroid Build Coastguard Worker "VLoxseg7ei8");
5696*795d594fSAndroid Build Coastguard Worker }
5697*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg7ei16)5698*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg7ei16) {
5699*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg7ei16,
5700*795d594fSAndroid Build Coastguard Worker "vloxseg7ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5701*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5702*795d594fSAndroid Build Coastguard Worker "VLoxseg7ei16");
5703*795d594fSAndroid Build Coastguard Worker }
5704*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg7ei32)5705*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg7ei32) {
5706*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg7ei32,
5707*795d594fSAndroid Build Coastguard Worker "vloxseg7ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5708*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5709*795d594fSAndroid Build Coastguard Worker "VLoxseg7ei32");
5710*795d594fSAndroid Build Coastguard Worker }
5711*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg7ei64)5712*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg7ei64) {
5713*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg7ei64,
5714*795d594fSAndroid Build Coastguard Worker "vloxseg7ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5715*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5716*795d594fSAndroid Build Coastguard Worker "VLoxseg7ei64");
5717*795d594fSAndroid Build Coastguard Worker }
5718*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg8ei8)5719*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg8ei8) {
5720*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg8ei8,
5721*795d594fSAndroid Build Coastguard Worker "vloxseg8ei8.v {reg1}, ({reg2}), {reg3}{vm}",
5722*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5723*795d594fSAndroid Build Coastguard Worker "VLoxseg8ei8");
5724*795d594fSAndroid Build Coastguard Worker }
5725*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg8ei16)5726*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg8ei16) {
5727*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg8ei16,
5728*795d594fSAndroid Build Coastguard Worker "vloxseg8ei16.v {reg1}, ({reg2}), {reg3}{vm}",
5729*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5730*795d594fSAndroid Build Coastguard Worker "VLoxseg8ei16");
5731*795d594fSAndroid Build Coastguard Worker }
5732*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg8ei32)5733*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg8ei32) {
5734*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg8ei32,
5735*795d594fSAndroid Build Coastguard Worker "vloxseg8ei32.v {reg1}, ({reg2}), {reg3}{vm}",
5736*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5737*795d594fSAndroid Build Coastguard Worker "VLoxseg8ei32");
5738*795d594fSAndroid Build Coastguard Worker }
5739*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VLoxseg8ei64)5740*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VLoxseg8ei64) {
5741*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VLoxseg8ei64,
5742*795d594fSAndroid Build Coastguard Worker "vloxseg8ei64.v {reg1}, ({reg2}), {reg3}{vm}",
5743*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
5744*795d594fSAndroid Build Coastguard Worker "VLoxseg8ei64");
5745*795d594fSAndroid Build Coastguard Worker }
5746*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg2ei8)5747*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg2ei8) {
5748*795d594fSAndroid Build Coastguard Worker DriverStr(
5749*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg2ei8, "vsoxseg2ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5750*795d594fSAndroid Build Coastguard Worker "VSoxseg2ei8");
5751*795d594fSAndroid Build Coastguard Worker }
5752*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg2ei16)5753*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg2ei16) {
5754*795d594fSAndroid Build Coastguard Worker DriverStr(
5755*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg2ei16, "vsoxseg2ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5756*795d594fSAndroid Build Coastguard Worker "VSoxseg2ei16");
5757*795d594fSAndroid Build Coastguard Worker }
5758*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg2ei32)5759*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg2ei32) {
5760*795d594fSAndroid Build Coastguard Worker DriverStr(
5761*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg2ei32, "vsoxseg2ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5762*795d594fSAndroid Build Coastguard Worker "VSoxseg2ei32");
5763*795d594fSAndroid Build Coastguard Worker }
5764*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg2ei64)5765*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg2ei64) {
5766*795d594fSAndroid Build Coastguard Worker DriverStr(
5767*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg2ei64, "vsoxseg2ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5768*795d594fSAndroid Build Coastguard Worker "VSoxseg2ei64");
5769*795d594fSAndroid Build Coastguard Worker }
5770*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg3ei8)5771*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg3ei8) {
5772*795d594fSAndroid Build Coastguard Worker DriverStr(
5773*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg3ei8, "vsoxseg3ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5774*795d594fSAndroid Build Coastguard Worker "VSoxseg3ei8");
5775*795d594fSAndroid Build Coastguard Worker }
5776*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg3ei16)5777*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg3ei16) {
5778*795d594fSAndroid Build Coastguard Worker DriverStr(
5779*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg3ei16, "vsoxseg3ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5780*795d594fSAndroid Build Coastguard Worker "VSoxseg3ei16");
5781*795d594fSAndroid Build Coastguard Worker }
5782*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg3ei32)5783*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg3ei32) {
5784*795d594fSAndroid Build Coastguard Worker DriverStr(
5785*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg3ei32, "vsoxseg3ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5786*795d594fSAndroid Build Coastguard Worker "VSoxseg3ei32");
5787*795d594fSAndroid Build Coastguard Worker }
5788*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg3ei64)5789*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg3ei64) {
5790*795d594fSAndroid Build Coastguard Worker DriverStr(
5791*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg3ei64, "vsoxseg3ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5792*795d594fSAndroid Build Coastguard Worker "VSoxseg3ei64");
5793*795d594fSAndroid Build Coastguard Worker }
5794*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg4ei8)5795*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg4ei8) {
5796*795d594fSAndroid Build Coastguard Worker DriverStr(
5797*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg4ei8, "vsoxseg4ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5798*795d594fSAndroid Build Coastguard Worker "VSoxseg4ei8");
5799*795d594fSAndroid Build Coastguard Worker }
5800*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg4ei16)5801*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg4ei16) {
5802*795d594fSAndroid Build Coastguard Worker DriverStr(
5803*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg4ei16, "vsoxseg4ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5804*795d594fSAndroid Build Coastguard Worker "VSoxseg4ei16");
5805*795d594fSAndroid Build Coastguard Worker }
5806*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg4ei32)5807*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg4ei32) {
5808*795d594fSAndroid Build Coastguard Worker DriverStr(
5809*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg4ei32, "vsoxseg4ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5810*795d594fSAndroid Build Coastguard Worker "VSoxseg4ei32");
5811*795d594fSAndroid Build Coastguard Worker }
5812*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg4ei64)5813*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg4ei64) {
5814*795d594fSAndroid Build Coastguard Worker DriverStr(
5815*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg4ei64, "vsoxseg4ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5816*795d594fSAndroid Build Coastguard Worker "VSoxseg4ei64");
5817*795d594fSAndroid Build Coastguard Worker }
5818*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg5ei8)5819*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg5ei8) {
5820*795d594fSAndroid Build Coastguard Worker DriverStr(
5821*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg5ei8, "vsoxseg5ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5822*795d594fSAndroid Build Coastguard Worker "VSoxseg5ei8");
5823*795d594fSAndroid Build Coastguard Worker }
5824*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg5ei16)5825*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg5ei16) {
5826*795d594fSAndroid Build Coastguard Worker DriverStr(
5827*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg5ei16, "vsoxseg5ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5828*795d594fSAndroid Build Coastguard Worker "VSoxseg5ei16");
5829*795d594fSAndroid Build Coastguard Worker }
5830*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg5ei32)5831*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg5ei32) {
5832*795d594fSAndroid Build Coastguard Worker DriverStr(
5833*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg5ei32, "vsoxseg5ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5834*795d594fSAndroid Build Coastguard Worker "VSoxseg5ei32");
5835*795d594fSAndroid Build Coastguard Worker }
5836*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg5ei64)5837*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg5ei64) {
5838*795d594fSAndroid Build Coastguard Worker DriverStr(
5839*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg5ei64, "vsoxseg5ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5840*795d594fSAndroid Build Coastguard Worker "VSoxseg5ei64");
5841*795d594fSAndroid Build Coastguard Worker }
5842*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg6ei8)5843*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg6ei8) {
5844*795d594fSAndroid Build Coastguard Worker DriverStr(
5845*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg6ei8, "vsoxseg6ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5846*795d594fSAndroid Build Coastguard Worker "VSoxseg6ei8");
5847*795d594fSAndroid Build Coastguard Worker }
5848*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg6ei16)5849*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg6ei16) {
5850*795d594fSAndroid Build Coastguard Worker DriverStr(
5851*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg6ei16, "vsoxseg6ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5852*795d594fSAndroid Build Coastguard Worker "VSoxseg6ei16");
5853*795d594fSAndroid Build Coastguard Worker }
5854*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg6ei32)5855*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg6ei32) {
5856*795d594fSAndroid Build Coastguard Worker DriverStr(
5857*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg6ei32, "vsoxseg6ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5858*795d594fSAndroid Build Coastguard Worker "VSoxseg6ei32");
5859*795d594fSAndroid Build Coastguard Worker }
5860*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg6ei64)5861*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg6ei64) {
5862*795d594fSAndroid Build Coastguard Worker DriverStr(
5863*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg6ei64, "vsoxseg6ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5864*795d594fSAndroid Build Coastguard Worker "VSoxseg6ei64");
5865*795d594fSAndroid Build Coastguard Worker }
5866*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg7ei8)5867*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg7ei8) {
5868*795d594fSAndroid Build Coastguard Worker DriverStr(
5869*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg7ei8, "vsoxseg7ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5870*795d594fSAndroid Build Coastguard Worker "VSoxseg7ei8");
5871*795d594fSAndroid Build Coastguard Worker }
5872*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg7ei16)5873*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg7ei16) {
5874*795d594fSAndroid Build Coastguard Worker DriverStr(
5875*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg7ei16, "vsoxseg7ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5876*795d594fSAndroid Build Coastguard Worker "VSoxseg7ei16");
5877*795d594fSAndroid Build Coastguard Worker }
5878*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg7ei32)5879*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg7ei32) {
5880*795d594fSAndroid Build Coastguard Worker DriverStr(
5881*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg7ei32, "vsoxseg7ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5882*795d594fSAndroid Build Coastguard Worker "VSoxseg7ei32");
5883*795d594fSAndroid Build Coastguard Worker }
5884*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg7ei64)5885*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg7ei64) {
5886*795d594fSAndroid Build Coastguard Worker DriverStr(
5887*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg7ei64, "vsoxseg7ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5888*795d594fSAndroid Build Coastguard Worker "VSoxseg7ei64");
5889*795d594fSAndroid Build Coastguard Worker }
5890*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg8ei8)5891*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg8ei8) {
5892*795d594fSAndroid Build Coastguard Worker DriverStr(
5893*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg8ei8, "vsoxseg8ei8.v {reg1}, ({reg2}), {reg3}{vm}"),
5894*795d594fSAndroid Build Coastguard Worker "VSoxseg8ei8");
5895*795d594fSAndroid Build Coastguard Worker }
5896*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg8ei16)5897*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg8ei16) {
5898*795d594fSAndroid Build Coastguard Worker DriverStr(
5899*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg8ei16, "vsoxseg8ei16.v {reg1}, ({reg2}), {reg3}{vm}"),
5900*795d594fSAndroid Build Coastguard Worker "VSoxseg8ei16");
5901*795d594fSAndroid Build Coastguard Worker }
5902*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg8ei32)5903*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg8ei32) {
5904*795d594fSAndroid Build Coastguard Worker DriverStr(
5905*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg8ei32, "vsoxseg8ei32.v {reg1}, ({reg2}), {reg3}{vm}"),
5906*795d594fSAndroid Build Coastguard Worker "VSoxseg8ei32");
5907*795d594fSAndroid Build Coastguard Worker }
5908*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSoxseg8ei64)5909*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSoxseg8ei64) {
5910*795d594fSAndroid Build Coastguard Worker DriverStr(
5911*795d594fSAndroid Build Coastguard Worker RepeatVRVVm(&Riscv64Assembler::VSoxseg8ei64, "vsoxseg8ei64.v {reg1}, ({reg2}), {reg3}{vm}"),
5912*795d594fSAndroid Build Coastguard Worker "VSoxseg8ei64");
5913*795d594fSAndroid Build Coastguard Worker }
5914*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL1re8)5915*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL1re8) {
5916*795d594fSAndroid Build Coastguard Worker DriverStr(
5917*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL1re8, /*alignment=*/ 1, "vl1re8.v {reg1}, ({reg2})"),
5918*795d594fSAndroid Build Coastguard Worker "VL1re8");
5919*795d594fSAndroid Build Coastguard Worker }
5920*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL1re16)5921*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL1re16) {
5922*795d594fSAndroid Build Coastguard Worker DriverStr(
5923*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL1re16, /*alignment=*/ 1, "vl1re16.v {reg1}, ({reg2})"),
5924*795d594fSAndroid Build Coastguard Worker "VL1re16");
5925*795d594fSAndroid Build Coastguard Worker }
5926*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL1re32)5927*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL1re32) {
5928*795d594fSAndroid Build Coastguard Worker DriverStr(
5929*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL1re32, /*alignment=*/ 1, "vl1re32.v {reg1}, ({reg2})"),
5930*795d594fSAndroid Build Coastguard Worker "VL1re32");
5931*795d594fSAndroid Build Coastguard Worker }
5932*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL1re64)5933*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL1re64) {
5934*795d594fSAndroid Build Coastguard Worker DriverStr(
5935*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL1re64, /*alignment=*/ 1, "vl1re64.v {reg1}, ({reg2})"),
5936*795d594fSAndroid Build Coastguard Worker "VL1re64");
5937*795d594fSAndroid Build Coastguard Worker }
5938*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL2re8)5939*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL2re8) {
5940*795d594fSAndroid Build Coastguard Worker DriverStr(
5941*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL2re8, /*alignment=*/ 2, "vl2re8.v {reg1}, ({reg2})"),
5942*795d594fSAndroid Build Coastguard Worker "VL2re8");
5943*795d594fSAndroid Build Coastguard Worker }
5944*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL2re16)5945*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL2re16) {
5946*795d594fSAndroid Build Coastguard Worker DriverStr(
5947*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL2re16, /*alignment=*/ 2, "vl2re16.v {reg1}, ({reg2})"),
5948*795d594fSAndroid Build Coastguard Worker "VL2re16");
5949*795d594fSAndroid Build Coastguard Worker }
5950*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL2re32)5951*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL2re32) {
5952*795d594fSAndroid Build Coastguard Worker DriverStr(
5953*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL2re32, /*alignment=*/ 2, "vl2re32.v {reg1}, ({reg2})"),
5954*795d594fSAndroid Build Coastguard Worker "VL2re32");
5955*795d594fSAndroid Build Coastguard Worker }
5956*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL2re64)5957*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL2re64) {
5958*795d594fSAndroid Build Coastguard Worker DriverStr(
5959*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL2re64, /*alignment=*/ 2, "vl2re64.v {reg1}, ({reg2})"),
5960*795d594fSAndroid Build Coastguard Worker "VL2re64");
5961*795d594fSAndroid Build Coastguard Worker }
5962*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL4re8)5963*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL4re8) {
5964*795d594fSAndroid Build Coastguard Worker DriverStr(
5965*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL4re8, /*alignment=*/ 4, "vl4re8.v {reg1}, ({reg2})"),
5966*795d594fSAndroid Build Coastguard Worker "VL4re8");
5967*795d594fSAndroid Build Coastguard Worker }
5968*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL4re16)5969*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL4re16) {
5970*795d594fSAndroid Build Coastguard Worker DriverStr(
5971*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL4re16, /*alignment=*/ 4, "vl4re16.v {reg1}, ({reg2})"),
5972*795d594fSAndroid Build Coastguard Worker "VL4re16");
5973*795d594fSAndroid Build Coastguard Worker }
5974*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL4re32)5975*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL4re32) {
5976*795d594fSAndroid Build Coastguard Worker DriverStr(
5977*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL4re32, /*alignment=*/ 4, "vl4re32.v {reg1}, ({reg2})"),
5978*795d594fSAndroid Build Coastguard Worker "VL4re32");
5979*795d594fSAndroid Build Coastguard Worker }
5980*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL4re64)5981*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL4re64) {
5982*795d594fSAndroid Build Coastguard Worker DriverStr(
5983*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL4re64, /*alignment=*/ 4, "vl4re64.v {reg1}, ({reg2})"),
5984*795d594fSAndroid Build Coastguard Worker "VL4re64");
5985*795d594fSAndroid Build Coastguard Worker }
5986*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL8re8)5987*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL8re8) {
5988*795d594fSAndroid Build Coastguard Worker DriverStr(
5989*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL8re8, /*alignment=*/ 8, "vl8re8.v {reg1}, ({reg2})"),
5990*795d594fSAndroid Build Coastguard Worker "VL8re8");
5991*795d594fSAndroid Build Coastguard Worker }
5992*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL8re16)5993*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL8re16) {
5994*795d594fSAndroid Build Coastguard Worker DriverStr(
5995*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL8re16, /*alignment=*/ 8, "vl8re16.v {reg1}, ({reg2})"),
5996*795d594fSAndroid Build Coastguard Worker "VL8re16");
5997*795d594fSAndroid Build Coastguard Worker }
5998*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL8re32)5999*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL8re32) {
6000*795d594fSAndroid Build Coastguard Worker DriverStr(
6001*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL8re32, /*alignment=*/ 8, "vl8re32.v {reg1}, ({reg2})"),
6002*795d594fSAndroid Build Coastguard Worker "VL8re32");
6003*795d594fSAndroid Build Coastguard Worker }
6004*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL8re64)6005*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL8re64) {
6006*795d594fSAndroid Build Coastguard Worker DriverStr(
6007*795d594fSAndroid Build Coastguard Worker RepeatVRAligned(&Riscv64Assembler::VL8re64, /*alignment=*/ 8, "vl8re64.v {reg1}, ({reg2})"),
6008*795d594fSAndroid Build Coastguard Worker "VL8re64");
6009*795d594fSAndroid Build Coastguard Worker }
6010*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL1r)6011*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL1r) {
6012*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRAligned(&Riscv64Assembler::VL1r, /*alignment=*/ 1, "vl1r.v {reg1}, ({reg2})"),
6013*795d594fSAndroid Build Coastguard Worker "VL1r");
6014*795d594fSAndroid Build Coastguard Worker }
6015*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL2r)6016*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL2r) {
6017*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRAligned(&Riscv64Assembler::VL2r, /*alignment=*/ 2, "vl2r.v {reg1}, ({reg2})"),
6018*795d594fSAndroid Build Coastguard Worker "VL2r");
6019*795d594fSAndroid Build Coastguard Worker }
6020*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL4r)6021*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL4r) {
6022*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRAligned(&Riscv64Assembler::VL4r, /*alignment=*/ 4, "vl4r.v {reg1}, ({reg2})"),
6023*795d594fSAndroid Build Coastguard Worker "VL4r");
6024*795d594fSAndroid Build Coastguard Worker }
6025*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VL8r)6026*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VL8r) {
6027*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRAligned(&Riscv64Assembler::VL8r, /*alignment=*/ 8, "vl8r.v {reg1}, ({reg2})"),
6028*795d594fSAndroid Build Coastguard Worker "VL8r");
6029*795d594fSAndroid Build Coastguard Worker }
6030*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VS1r)6031*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VS1r) {
6032*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRAligned(&Riscv64Assembler::VS1r, /*alignment=*/ 1, "vs1r.v {reg1}, ({reg2})"),
6033*795d594fSAndroid Build Coastguard Worker "VS1r");
6034*795d594fSAndroid Build Coastguard Worker }
6035*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VS2r)6036*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VS2r) {
6037*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRAligned(&Riscv64Assembler::VS2r, /*alignment=*/ 2, "vs2r.v {reg1}, ({reg2})"),
6038*795d594fSAndroid Build Coastguard Worker "VS2r");
6039*795d594fSAndroid Build Coastguard Worker }
6040*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VS4r)6041*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VS4r) {
6042*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRAligned(&Riscv64Assembler::VS4r, /*alignment=*/ 4, "vs4r.v {reg1}, ({reg2})"),
6043*795d594fSAndroid Build Coastguard Worker "VS4r");
6044*795d594fSAndroid Build Coastguard Worker }
6045*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VS8r)6046*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VS8r) {
6047*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRAligned(&Riscv64Assembler::VS8r, /*alignment=*/ 8, "vs8r.v {reg1}, ({reg2})"),
6048*795d594fSAndroid Build Coastguard Worker "VS8r");
6049*795d594fSAndroid Build Coastguard Worker }
6050*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAdd_vv)6051*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAdd_vv) {
6052*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VAdd_vv,
6053*795d594fSAndroid Build Coastguard Worker "vadd.vv {reg1}, {reg2}, {reg3}{vm}",
6054*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6055*795d594fSAndroid Build Coastguard Worker "VAdd_vv");
6056*795d594fSAndroid Build Coastguard Worker }
6057*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAdd_vx)6058*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAdd_vx) {
6059*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VAdd_vx,
6060*795d594fSAndroid Build Coastguard Worker "vadd.vx {reg1}, {reg2}, {reg3}{vm}",
6061*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6062*795d594fSAndroid Build Coastguard Worker "VAdd_vx");
6063*795d594fSAndroid Build Coastguard Worker }
6064*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAdd_vi)6065*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAdd_vi) {
6066*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VAdd_vi,
6067*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6068*795d594fSAndroid Build Coastguard Worker "vadd.vi {reg1}, {reg2}, {imm}{vm}",
6069*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6070*795d594fSAndroid Build Coastguard Worker "VAdd_vi");
6071*795d594fSAndroid Build Coastguard Worker }
6072*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSub_vv)6073*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSub_vv) {
6074*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSub_vv,
6075*795d594fSAndroid Build Coastguard Worker "vsub.vv {reg1}, {reg2}, {reg3}{vm}",
6076*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6077*795d594fSAndroid Build Coastguard Worker "VSub_vv");
6078*795d594fSAndroid Build Coastguard Worker }
6079*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSub_vx)6080*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSub_vx) {
6081*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSub_vx,
6082*795d594fSAndroid Build Coastguard Worker "vsub.vx {reg1}, {reg2}, {reg3}{vm}",
6083*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6084*795d594fSAndroid Build Coastguard Worker "VSub_vx");
6085*795d594fSAndroid Build Coastguard Worker }
6086*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRsub_vx)6087*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRsub_vx) {
6088*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VRsub_vx,
6089*795d594fSAndroid Build Coastguard Worker "vrsub.vx {reg1}, {reg2}, {reg3}{vm}",
6090*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6091*795d594fSAndroid Build Coastguard Worker "VRsub_vx");
6092*795d594fSAndroid Build Coastguard Worker }
6093*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRsub_vi)6094*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRsub_vi) {
6095*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VRsub_vi,
6096*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6097*795d594fSAndroid Build Coastguard Worker "vrsub.vi {reg1}, {reg2}, {imm}{vm}",
6098*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6099*795d594fSAndroid Build Coastguard Worker "VRsub_vi");
6100*795d594fSAndroid Build Coastguard Worker }
6101*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNeg_v)6102*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNeg_v) {
6103*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVV(&Riscv64Assembler::VNeg_v, "vneg.v {reg1}, {reg2}"), "VNeg_v");
6104*795d594fSAndroid Build Coastguard Worker }
6105*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMinu_vv)6106*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMinu_vv) {
6107*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMinu_vv,
6108*795d594fSAndroid Build Coastguard Worker "vminu.vv {reg1}, {reg2}, {reg3}{vm}",
6109*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6110*795d594fSAndroid Build Coastguard Worker "VMinu_vv");
6111*795d594fSAndroid Build Coastguard Worker }
6112*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMinu_vx)6113*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMinu_vx) {
6114*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMinu_vx,
6115*795d594fSAndroid Build Coastguard Worker "vminu.vx {reg1}, {reg2}, {reg3}{vm}",
6116*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6117*795d594fSAndroid Build Coastguard Worker "VMinu_vx");
6118*795d594fSAndroid Build Coastguard Worker }
6119*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMin_vv)6120*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMin_vv) {
6121*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMin_vv,
6122*795d594fSAndroid Build Coastguard Worker "vmin.vv {reg1}, {reg2}, {reg3}{vm}",
6123*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6124*795d594fSAndroid Build Coastguard Worker "VMin_vv");
6125*795d594fSAndroid Build Coastguard Worker }
6126*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMin_vx)6127*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMin_vx) {
6128*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMin_vx,
6129*795d594fSAndroid Build Coastguard Worker "vmin.vx {reg1}, {reg2}, {reg3}{vm}",
6130*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6131*795d594fSAndroid Build Coastguard Worker "VMin_vx");
6132*795d594fSAndroid Build Coastguard Worker }
6133*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMaxu_vv)6134*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMaxu_vv) {
6135*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMaxu_vv,
6136*795d594fSAndroid Build Coastguard Worker "vmaxu.vv {reg1}, {reg2}, {reg3}{vm}",
6137*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6138*795d594fSAndroid Build Coastguard Worker "VMaxu_vv");
6139*795d594fSAndroid Build Coastguard Worker }
6140*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMaxu_vx)6141*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMaxu_vx) {
6142*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMaxu_vx,
6143*795d594fSAndroid Build Coastguard Worker "vmaxu.vx {reg1}, {reg2}, {reg3}{vm}",
6144*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6145*795d594fSAndroid Build Coastguard Worker "VMaxu_vx");
6146*795d594fSAndroid Build Coastguard Worker }
6147*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMax_vv)6148*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMax_vv) {
6149*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMax_vv,
6150*795d594fSAndroid Build Coastguard Worker "vmax.vv {reg1}, {reg2}, {reg3}{vm}",
6151*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6152*795d594fSAndroid Build Coastguard Worker "VMax_vv");
6153*795d594fSAndroid Build Coastguard Worker }
6154*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMax_vx)6155*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMax_vx) {
6156*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMax_vx,
6157*795d594fSAndroid Build Coastguard Worker "vmax.vx {reg1}, {reg2}, {reg3}{vm}",
6158*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6159*795d594fSAndroid Build Coastguard Worker "VMax_vx");
6160*795d594fSAndroid Build Coastguard Worker }
6161*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAnd_vv)6162*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAnd_vv) {
6163*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VAnd_vv,
6164*795d594fSAndroid Build Coastguard Worker "vand.vv {reg1}, {reg2}, {reg3}{vm}",
6165*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6166*795d594fSAndroid Build Coastguard Worker "VAnd_vv");
6167*795d594fSAndroid Build Coastguard Worker }
6168*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAnd_vx)6169*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAnd_vx) {
6170*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VAnd_vx,
6171*795d594fSAndroid Build Coastguard Worker "vand.vx {reg1}, {reg2}, {reg3}{vm}",
6172*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6173*795d594fSAndroid Build Coastguard Worker "VAnd_vx");
6174*795d594fSAndroid Build Coastguard Worker }
6175*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAnd_vi)6176*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAnd_vi) {
6177*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VAnd_vi,
6178*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6179*795d594fSAndroid Build Coastguard Worker "vand.vi {reg1}, {reg2}, {imm}{vm}",
6180*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6181*795d594fSAndroid Build Coastguard Worker "VAnd_vi");
6182*795d594fSAndroid Build Coastguard Worker }
6183*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VOr_vv)6184*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VOr_vv) {
6185*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VOr_vv,
6186*795d594fSAndroid Build Coastguard Worker "vor.vv {reg1}, {reg2}, {reg3}{vm}",
6187*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6188*795d594fSAndroid Build Coastguard Worker "VOr_vv");
6189*795d594fSAndroid Build Coastguard Worker }
6190*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VOr_vx)6191*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VOr_vx) {
6192*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VOr_vx,
6193*795d594fSAndroid Build Coastguard Worker "vor.vx {reg1}, {reg2}, {reg3}{vm}",
6194*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6195*795d594fSAndroid Build Coastguard Worker "VOr_vx");
6196*795d594fSAndroid Build Coastguard Worker }
6197*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VOr_vi)6198*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VOr_vi) {
6199*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VOr_vi,
6200*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6201*795d594fSAndroid Build Coastguard Worker "vor.vi {reg1}, {reg2}, {imm}{vm}",
6202*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6203*795d594fSAndroid Build Coastguard Worker "VOr_vi");
6204*795d594fSAndroid Build Coastguard Worker }
6205*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VXor_vv)6206*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VXor_vv) {
6207*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VXor_vv,
6208*795d594fSAndroid Build Coastguard Worker "vxor.vv {reg1}, {reg2}, {reg3}{vm}",
6209*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6210*795d594fSAndroid Build Coastguard Worker "VXor_vv");
6211*795d594fSAndroid Build Coastguard Worker }
6212*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VXor_vx)6213*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VXor_vx) {
6214*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VXor_vx,
6215*795d594fSAndroid Build Coastguard Worker "vxor.vx {reg1}, {reg2}, {reg3}{vm}",
6216*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6217*795d594fSAndroid Build Coastguard Worker "VXor_vx");
6218*795d594fSAndroid Build Coastguard Worker }
6219*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VXor_vi)6220*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VXor_vi) {
6221*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VXor_vi,
6222*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6223*795d594fSAndroid Build Coastguard Worker "vxor.vi {reg1}, {reg2}, {imm}{vm}",
6224*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6225*795d594fSAndroid Build Coastguard Worker "VXor_vi");
6226*795d594fSAndroid Build Coastguard Worker }
6227*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNot_v)6228*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNot_v) {
6229*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(
6230*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VNot_v, "vnot.v {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
6231*795d594fSAndroid Build Coastguard Worker "VNot_v");
6232*795d594fSAndroid Build Coastguard Worker }
6233*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRgather_vv)6234*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRgather_vv) {
6235*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VRgather_vv,
6236*795d594fSAndroid Build Coastguard Worker "vrgather.vv {reg1}, {reg2}, {reg3}{vm}",
6237*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
6238*795d594fSAndroid Build Coastguard Worker "VRgather_vv");
6239*795d594fSAndroid Build Coastguard Worker }
6240*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRgather_vx)6241*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRgather_vx) {
6242*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VRgather_vx,
6243*795d594fSAndroid Build Coastguard Worker "vrgather.vx {reg1}, {reg2}, {reg3}{vm}",
6244*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
6245*795d594fSAndroid Build Coastguard Worker "VRgather_vx");
6246*795d594fSAndroid Build Coastguard Worker }
6247*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRgather_vi)6248*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRgather_vi) {
6249*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VRgather_vi,
6250*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6251*795d594fSAndroid Build Coastguard Worker "vrgather.vi {reg1}, {reg2}, {imm}{vm}",
6252*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<uint32_t>()),
6253*795d594fSAndroid Build Coastguard Worker "VRgather_vi");
6254*795d594fSAndroid Build Coastguard Worker }
6255*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSlideup_vx)6256*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSlideup_vx) {
6257*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSlideup_vx,
6258*795d594fSAndroid Build Coastguard Worker "vslideup.vx {reg1}, {reg2}, {reg3}{vm}",
6259*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
6260*795d594fSAndroid Build Coastguard Worker "VSlideup_vx");
6261*795d594fSAndroid Build Coastguard Worker }
6262*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSlideup_vi)6263*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSlideup_vi) {
6264*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VSlideup_vi,
6265*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6266*795d594fSAndroid Build Coastguard Worker "vslideup.vi {reg1}, {reg2}, {imm}{vm}",
6267*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<uint32_t>()),
6268*795d594fSAndroid Build Coastguard Worker "VSlideup_vi");
6269*795d594fSAndroid Build Coastguard Worker }
6270*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRgatherei16_vv)6271*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRgatherei16_vv) {
6272*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VRgatherei16_vv,
6273*795d594fSAndroid Build Coastguard Worker "vrgatherei16.vv {reg1}, {reg2}, {reg3}{vm}",
6274*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
6275*795d594fSAndroid Build Coastguard Worker "VRgatherei16_vv");
6276*795d594fSAndroid Build Coastguard Worker }
6277*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSlidedown_vx)6278*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSlidedown_vx) {
6279*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSlidedown_vx,
6280*795d594fSAndroid Build Coastguard Worker "vslidedown.vx {reg1}, {reg2}, {reg3}{vm}",
6281*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
6282*795d594fSAndroid Build Coastguard Worker "VSlidedown_vx");
6283*795d594fSAndroid Build Coastguard Worker }
6284*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSlidedown_vi)6285*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSlidedown_vi) {
6286*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VSlidedown_vi,
6287*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6288*795d594fSAndroid Build Coastguard Worker "vslidedown.vi {reg1}, {reg2}, {imm}{vm}",
6289*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6290*795d594fSAndroid Build Coastguard Worker "VSlidedown_vi");
6291*795d594fSAndroid Build Coastguard Worker }
6292*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAdc_vvm)6293*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAdc_vvm) {
6294*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVFiltered(&Riscv64Assembler::VAdc_vvm,
6295*795d594fSAndroid Build Coastguard Worker "vadc.vvm {reg1}, {reg2}, {reg3}, v0",
6296*795d594fSAndroid Build Coastguard Worker SkipV0<VRegister, VRegister>()),
6297*795d594fSAndroid Build Coastguard Worker "VAdc_vvm");
6298*795d594fSAndroid Build Coastguard Worker }
6299*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAdc_vxm)6300*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAdc_vxm) {
6301*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRFiltered(&Riscv64Assembler::VAdc_vxm,
6302*795d594fSAndroid Build Coastguard Worker "vadc.vxm {reg1}, {reg2}, {reg3}, v0",
6303*795d594fSAndroid Build Coastguard Worker SkipV0<VRegister, XRegister>()),
6304*795d594fSAndroid Build Coastguard Worker "VAdc_vxm");
6305*795d594fSAndroid Build Coastguard Worker }
6306*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAdc_vim)6307*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAdc_vim) {
6308*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIFiltered(&Riscv64Assembler::VAdc_vim,
6309*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6310*795d594fSAndroid Build Coastguard Worker "vadc.vim {reg1}, {reg2}, {imm}, v0",
6311*795d594fSAndroid Build Coastguard Worker SkipV0<VRegister, int32_t>()),
6312*795d594fSAndroid Build Coastguard Worker "VAdc_vim");
6313*795d594fSAndroid Build Coastguard Worker }
6314*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMadc_vvm)6315*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMadc_vvm) {
6316*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMadc_vvm, "vmadc.vvm {reg1}, {reg2}, {reg3}, v0"),
6317*795d594fSAndroid Build Coastguard Worker "VMadc_vvm");
6318*795d594fSAndroid Build Coastguard Worker }
6319*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMadc_vxm)6320*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMadc_vxm) {
6321*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVR(&Riscv64Assembler::VMadc_vxm, "vmadc.vxm {reg1}, {reg2}, {reg3}, v0"),
6322*795d594fSAndroid Build Coastguard Worker "VMadc_vxm");
6323*795d594fSAndroid Build Coastguard Worker }
6324*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMadc_vim)6325*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMadc_vim) {
6326*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIb(&Riscv64Assembler::VMadc_vim,
6327*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6328*795d594fSAndroid Build Coastguard Worker "vmadc.vim {reg1}, {reg2}, {imm}, v0"),
6329*795d594fSAndroid Build Coastguard Worker "VMadc_vim");
6330*795d594fSAndroid Build Coastguard Worker }
6331*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMadc_vv)6332*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMadc_vv) {
6333*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMadc_vv, "vmadc.vv {reg1}, {reg2}, {reg3}"), "VMadc_vv");
6334*795d594fSAndroid Build Coastguard Worker }
6335*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMadc_vx)6336*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMadc_vx) {
6337*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVR(&Riscv64Assembler::VMadc_vx, "vmadc.vx {reg1}, {reg2}, {reg3}"), "VMadc_vx");
6338*795d594fSAndroid Build Coastguard Worker }
6339*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMadc_vi)6340*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMadc_vi) {
6341*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIb(&Riscv64Assembler::VMadc_vi,
6342*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6343*795d594fSAndroid Build Coastguard Worker "vmadc.vi {reg1}, {reg2}, {imm}"),
6344*795d594fSAndroid Build Coastguard Worker "VMadc_vi");
6345*795d594fSAndroid Build Coastguard Worker }
6346*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSbc_vvm)6347*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSbc_vvm) {
6348*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVFiltered(&Riscv64Assembler::VSbc_vvm,
6349*795d594fSAndroid Build Coastguard Worker "vsbc.vvm {reg1}, {reg2}, {reg3}, v0",
6350*795d594fSAndroid Build Coastguard Worker SkipV0<VRegister, VRegister>()),
6351*795d594fSAndroid Build Coastguard Worker "VSbc_vvm");
6352*795d594fSAndroid Build Coastguard Worker }
6353*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSbc_vxm)6354*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSbc_vxm) {
6355*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRFiltered(&Riscv64Assembler::VSbc_vxm,
6356*795d594fSAndroid Build Coastguard Worker "vsbc.vxm {reg1}, {reg2}, {reg3}, v0",
6357*795d594fSAndroid Build Coastguard Worker SkipV0<VRegister, XRegister>()),
6358*795d594fSAndroid Build Coastguard Worker "VSbc_vxm");
6359*795d594fSAndroid Build Coastguard Worker }
6360*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsbc_vvm)6361*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsbc_vvm) {
6362*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMsbc_vvm, "vmsbc.vvm {reg1}, {reg2}, {reg3}, v0"),
6363*795d594fSAndroid Build Coastguard Worker "VMsbc_vvm");
6364*795d594fSAndroid Build Coastguard Worker }
6365*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsbc_vxm)6366*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsbc_vxm) {
6367*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVR(&Riscv64Assembler::VMsbc_vxm, "vmsbc.vxm {reg1}, {reg2}, {reg3}, v0"),
6368*795d594fSAndroid Build Coastguard Worker "VMsbc_vxm");
6369*795d594fSAndroid Build Coastguard Worker }
6370*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsbc_vv)6371*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsbc_vv) {
6372*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMsbc_vv, "vmsbc.vv {reg1}, {reg2}, {reg3}"), "VMsbc_vvm");
6373*795d594fSAndroid Build Coastguard Worker }
6374*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsbc_vx)6375*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsbc_vx) {
6376*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVR(&Riscv64Assembler::VMsbc_vx, "vmsbc.vx {reg1}, {reg2}, {reg3}"), "VMsbc_vxm");
6377*795d594fSAndroid Build Coastguard Worker }
6378*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMerge_vvm)6379*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMerge_vvm) {
6380*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVFiltered(&Riscv64Assembler::VMerge_vvm,
6381*795d594fSAndroid Build Coastguard Worker "vmerge.vvm {reg1}, {reg2}, {reg3}, v0",
6382*795d594fSAndroid Build Coastguard Worker SkipV0<VRegister, VRegister>()),
6383*795d594fSAndroid Build Coastguard Worker "VMerge_vvm");
6384*795d594fSAndroid Build Coastguard Worker }
6385*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMerge_vxm)6386*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMerge_vxm) {
6387*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRFiltered(&Riscv64Assembler::VMerge_vxm,
6388*795d594fSAndroid Build Coastguard Worker "vmerge.vxm {reg1}, {reg2}, {reg3}, v0",
6389*795d594fSAndroid Build Coastguard Worker SkipV0<VRegister, XRegister>()),
6390*795d594fSAndroid Build Coastguard Worker "VMerge_vxm");
6391*795d594fSAndroid Build Coastguard Worker }
6392*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMerge_vim)6393*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMerge_vim) {
6394*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIFiltered(&Riscv64Assembler::VMerge_vim,
6395*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6396*795d594fSAndroid Build Coastguard Worker "vmerge.vim {reg1}, {reg2}, {imm}, v0",
6397*795d594fSAndroid Build Coastguard Worker SkipV0<VRegister, int32_t>()),
6398*795d594fSAndroid Build Coastguard Worker "VMerge_vim");
6399*795d594fSAndroid Build Coastguard Worker }
6400*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMv_vv)6401*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMv_vv) {
6402*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVV(&Riscv64Assembler::VMv_vv, "vmv.v.v {reg1}, {reg2}"), "VMmv_vv");
6403*795d594fSAndroid Build Coastguard Worker }
6404*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMv_vx)6405*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMv_vx) {
6406*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVR(&Riscv64Assembler::VMv_vx, "vmv.v.x {reg1}, {reg2}"), "VMv_vx");
6407*795d594fSAndroid Build Coastguard Worker }
6408*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMv_vi)6409*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMv_vi) {
6410*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVIb(&Riscv64Assembler::VMv_vi, /*imm_bits=*/ -5, "vmv.v.i {reg}, {imm}"),
6411*795d594fSAndroid Build Coastguard Worker "VMv_vi");
6412*795d594fSAndroid Build Coastguard Worker }
6413*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMseq_vv)6414*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMseq_vv) {
6415*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMseq_vv,
6416*795d594fSAndroid Build Coastguard Worker "vmseq.vv {reg1}, {reg2}, {reg3}{vm}",
6417*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6418*795d594fSAndroid Build Coastguard Worker "VMseq_vv");
6419*795d594fSAndroid Build Coastguard Worker }
6420*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMseq_vx)6421*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMseq_vx) {
6422*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMseq_vx,
6423*795d594fSAndroid Build Coastguard Worker "vmseq.vx {reg1}, {reg2}, {reg3}{vm}",
6424*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6425*795d594fSAndroid Build Coastguard Worker "VMseq_vx");
6426*795d594fSAndroid Build Coastguard Worker }
6427*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMseq_vi)6428*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMseq_vi) {
6429*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMseq_vi,
6430*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6431*795d594fSAndroid Build Coastguard Worker "vmseq.vi {reg1}, {reg2}, {imm}{vm}",
6432*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6433*795d594fSAndroid Build Coastguard Worker "VMseq_vi");
6434*795d594fSAndroid Build Coastguard Worker }
6435*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsne_vv)6436*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsne_vv) {
6437*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMsne_vv,
6438*795d594fSAndroid Build Coastguard Worker "vmsne.vv {reg1}, {reg2}, {reg3}{vm}",
6439*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6440*795d594fSAndroid Build Coastguard Worker "VMsne_vv");
6441*795d594fSAndroid Build Coastguard Worker }
6442*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsne_vx)6443*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsne_vx) {
6444*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMsne_vx,
6445*795d594fSAndroid Build Coastguard Worker "vmsne.vx {reg1}, {reg2}, {reg3}{vm}",
6446*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6447*795d594fSAndroid Build Coastguard Worker "VMsne_vx");
6448*795d594fSAndroid Build Coastguard Worker }
6449*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsne_vi)6450*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsne_vi) {
6451*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMsne_vi,
6452*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6453*795d594fSAndroid Build Coastguard Worker "vmsne.vi {reg1}, {reg2}, {imm}{vm}",
6454*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6455*795d594fSAndroid Build Coastguard Worker "VMsne_vi");
6456*795d594fSAndroid Build Coastguard Worker }
6457*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsltu_vv)6458*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsltu_vv) {
6459*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMsltu_vv,
6460*795d594fSAndroid Build Coastguard Worker "vmsltu.vv {reg1}, {reg2}, {reg3}{vm}",
6461*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6462*795d594fSAndroid Build Coastguard Worker "VMsltu_vv");
6463*795d594fSAndroid Build Coastguard Worker }
6464*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsltu_vx)6465*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsltu_vx) {
6466*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMsltu_vx,
6467*795d594fSAndroid Build Coastguard Worker "vmsltu.vx {reg1}, {reg2}, {reg3}{vm}",
6468*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6469*795d594fSAndroid Build Coastguard Worker "VMsltu_vx");
6470*795d594fSAndroid Build Coastguard Worker }
6471*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsgtu_vv)6472*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsgtu_vv) {
6473*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMsgtu_vv,
6474*795d594fSAndroid Build Coastguard Worker "vmsgtu.vv {reg1}, {reg2}, {reg3}{vm}",
6475*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6476*795d594fSAndroid Build Coastguard Worker "VMsgtu_vv");
6477*795d594fSAndroid Build Coastguard Worker }
6478*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMslt_vv)6479*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMslt_vv) {
6480*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMslt_vv,
6481*795d594fSAndroid Build Coastguard Worker "vmslt.vv {reg1}, {reg2}, {reg3}{vm}",
6482*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6483*795d594fSAndroid Build Coastguard Worker "VMslt_vv");
6484*795d594fSAndroid Build Coastguard Worker }
6485*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMslt_vx)6486*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMslt_vx) {
6487*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMslt_vx,
6488*795d594fSAndroid Build Coastguard Worker "vmslt.vx {reg1}, {reg2}, {reg3}{vm}",
6489*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6490*795d594fSAndroid Build Coastguard Worker "VMslt_vx");
6491*795d594fSAndroid Build Coastguard Worker }
6492*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsgt_vv)6493*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsgt_vv) {
6494*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMsgt_vv,
6495*795d594fSAndroid Build Coastguard Worker "vmsgt.vv {reg1}, {reg2}, {reg3}{vm}",
6496*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6497*795d594fSAndroid Build Coastguard Worker "VMsgt_vv");
6498*795d594fSAndroid Build Coastguard Worker }
6499*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsleu_vv)6500*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsleu_vv) {
6501*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMsleu_vv,
6502*795d594fSAndroid Build Coastguard Worker "vmsleu.vv {reg1}, {reg2}, {reg3}{vm}",
6503*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6504*795d594fSAndroid Build Coastguard Worker "VMsleu_vv");
6505*795d594fSAndroid Build Coastguard Worker }
6506*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsleu_vx)6507*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsleu_vx) {
6508*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMsleu_vx,
6509*795d594fSAndroid Build Coastguard Worker "vmsleu.vx {reg1}, {reg2}, {reg3}{vm}",
6510*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6511*795d594fSAndroid Build Coastguard Worker "VMsleu_vx");
6512*795d594fSAndroid Build Coastguard Worker }
6513*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsleu_vi)6514*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsleu_vi) {
6515*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMsleu_vi,
6516*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6517*795d594fSAndroid Build Coastguard Worker "vmsleu.vi {reg1}, {reg2}, {imm}{vm}",
6518*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6519*795d594fSAndroid Build Coastguard Worker "VMsleu_vi");
6520*795d594fSAndroid Build Coastguard Worker }
6521*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsgeu_vv)6522*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsgeu_vv) {
6523*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMsgeu_vv,
6524*795d594fSAndroid Build Coastguard Worker "vmsgeu.vv {reg1}, {reg2}, {reg3}{vm}",
6525*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6526*795d594fSAndroid Build Coastguard Worker "VMsgeu_vv");
6527*795d594fSAndroid Build Coastguard Worker }
6528*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsltu_vi)6529*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsltu_vi) {
6530*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMsltu_vi,
6531*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 4,
6532*795d594fSAndroid Build Coastguard Worker "vmsltu.vi {reg1}, {reg2}, {imm}{vm}",
6533*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>(),
6534*795d594fSAndroid Build Coastguard Worker /*bias=*/ 1),
6535*795d594fSAndroid Build Coastguard Worker "VMsltu_vi");
6536*795d594fSAndroid Build Coastguard Worker }
6537*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsle_vv)6538*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsle_vv) {
6539*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMsle_vv,
6540*795d594fSAndroid Build Coastguard Worker "vmsle.vv {reg1}, {reg2}, {reg3}{vm}",
6541*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6542*795d594fSAndroid Build Coastguard Worker "VMsle_vv");
6543*795d594fSAndroid Build Coastguard Worker }
6544*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsle_vx)6545*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsle_vx) {
6546*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMsle_vx,
6547*795d594fSAndroid Build Coastguard Worker "vmsle.vx {reg1}, {reg2}, {reg3}{vm}",
6548*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6549*795d594fSAndroid Build Coastguard Worker "VMsle_vx");
6550*795d594fSAndroid Build Coastguard Worker }
6551*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsle_vi)6552*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsle_vi) {
6553*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMsle_vi,
6554*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6555*795d594fSAndroid Build Coastguard Worker "vmsle.vi {reg1}, {reg2}, {imm}{vm}",
6556*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6557*795d594fSAndroid Build Coastguard Worker "VMsle_vi");
6558*795d594fSAndroid Build Coastguard Worker }
6559*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsge_vv)6560*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsge_vv) {
6561*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMsge_vv,
6562*795d594fSAndroid Build Coastguard Worker "vmsge.vv {reg1}, {reg2}, {reg3}{vm}",
6563*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6564*795d594fSAndroid Build Coastguard Worker "VMsge_vv");
6565*795d594fSAndroid Build Coastguard Worker }
6566*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMslt_vi)6567*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMslt_vi) {
6568*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMslt_vi,
6569*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6570*795d594fSAndroid Build Coastguard Worker "vmslt.vi {reg1}, {reg2}, {imm}{vm}",
6571*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>(),
6572*795d594fSAndroid Build Coastguard Worker /*bias=*/ 1),
6573*795d594fSAndroid Build Coastguard Worker "VMslt_vi");
6574*795d594fSAndroid Build Coastguard Worker }
6575*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsgtu_vx)6576*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsgtu_vx) {
6577*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMsgtu_vx,
6578*795d594fSAndroid Build Coastguard Worker "vmsgtu.vx {reg1}, {reg2}, {reg3}{vm}",
6579*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6580*795d594fSAndroid Build Coastguard Worker "VMsgtu_vx");
6581*795d594fSAndroid Build Coastguard Worker }
6582*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsgtu_vi)6583*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsgtu_vi) {
6584*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMsgtu_vi,
6585*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6586*795d594fSAndroid Build Coastguard Worker "vmsgtu.vi {reg1}, {reg2}, {imm}{vm}",
6587*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6588*795d594fSAndroid Build Coastguard Worker "VMsgtu_vi");
6589*795d594fSAndroid Build Coastguard Worker }
6590*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsgeu_vi)6591*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsgeu_vi) {
6592*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMsgeu_vi,
6593*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 4,
6594*795d594fSAndroid Build Coastguard Worker "vmsgeu.vi {reg1}, {reg2}, {imm}{vm}",
6595*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>(),
6596*795d594fSAndroid Build Coastguard Worker /*bias=*/ 1),
6597*795d594fSAndroid Build Coastguard Worker "VMsgeu_vi");
6598*795d594fSAndroid Build Coastguard Worker }
6599*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsgt_vx)6600*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsgt_vx) {
6601*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMsgt_vx,
6602*795d594fSAndroid Build Coastguard Worker "vmsgt.vx {reg1}, {reg2}, {reg3}{vm}",
6603*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6604*795d594fSAndroid Build Coastguard Worker "VMsgt_vx");
6605*795d594fSAndroid Build Coastguard Worker }
6606*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsgt_vi)6607*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsgt_vi) {
6608*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMsgt_vi,
6609*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6610*795d594fSAndroid Build Coastguard Worker "vmsgt.vi {reg1}, {reg2}, {imm}{vm}",
6611*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6612*795d594fSAndroid Build Coastguard Worker "VMsgt_vi");
6613*795d594fSAndroid Build Coastguard Worker }
6614*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsge_vi)6615*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsge_vi) {
6616*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VMsge_vi,
6617*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6618*795d594fSAndroid Build Coastguard Worker "vmsge.vi {reg1}, {reg2}, {imm}{vm}",
6619*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>(),
6620*795d594fSAndroid Build Coastguard Worker /*bias=*/ 1),
6621*795d594fSAndroid Build Coastguard Worker "VMsge_vi");
6622*795d594fSAndroid Build Coastguard Worker }
6623*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSaddu_vv)6624*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSaddu_vv) {
6625*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSaddu_vv,
6626*795d594fSAndroid Build Coastguard Worker "vsaddu.vv {reg1}, {reg2}, {reg3}{vm}",
6627*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6628*795d594fSAndroid Build Coastguard Worker "VSaddu_vv");
6629*795d594fSAndroid Build Coastguard Worker }
6630*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSaddu_vx)6631*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSaddu_vx) {
6632*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSaddu_vx,
6633*795d594fSAndroid Build Coastguard Worker "vsaddu.vx {reg1}, {reg2}, {reg3}{vm}",
6634*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6635*795d594fSAndroid Build Coastguard Worker "VSaddu_vx");
6636*795d594fSAndroid Build Coastguard Worker }
6637*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSaddu_vi)6638*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSaddu_vi) {
6639*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VSaddu_vi,
6640*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6641*795d594fSAndroid Build Coastguard Worker "vsaddu.vi {reg1}, {reg2}, {imm}{vm}",
6642*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6643*795d594fSAndroid Build Coastguard Worker "VSaddu_vi");
6644*795d594fSAndroid Build Coastguard Worker }
6645*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSadd_vv)6646*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSadd_vv) {
6647*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSadd_vv,
6648*795d594fSAndroid Build Coastguard Worker "vsadd.vv {reg1}, {reg2}, {reg3}{vm}",
6649*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6650*795d594fSAndroid Build Coastguard Worker "VSadd_vv");
6651*795d594fSAndroid Build Coastguard Worker }
6652*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSadd_vx)6653*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSadd_vx) {
6654*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSadd_vx,
6655*795d594fSAndroid Build Coastguard Worker "vsadd.vx {reg1}, {reg2}, {reg3}{vm}",
6656*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6657*795d594fSAndroid Build Coastguard Worker "VSadd_vx");
6658*795d594fSAndroid Build Coastguard Worker }
6659*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSadd_vi)6660*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSadd_vi) {
6661*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VSadd_vi,
6662*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ -5,
6663*795d594fSAndroid Build Coastguard Worker "vsadd.vi {reg1}, {reg2}, {imm}{vm}",
6664*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, int32_t>()),
6665*795d594fSAndroid Build Coastguard Worker "VSadd_vi");
6666*795d594fSAndroid Build Coastguard Worker }
6667*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsubu_vv)6668*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsubu_vv) {
6669*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSsubu_vv,
6670*795d594fSAndroid Build Coastguard Worker "vssubu.vv {reg1}, {reg2}, {reg3}{vm}",
6671*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6672*795d594fSAndroid Build Coastguard Worker "VSsubu_vv");
6673*795d594fSAndroid Build Coastguard Worker }
6674*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsubu_vx)6675*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsubu_vx) {
6676*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSsubu_vx,
6677*795d594fSAndroid Build Coastguard Worker "vssubu.vx {reg1}, {reg2}, {reg3}{vm}",
6678*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6679*795d594fSAndroid Build Coastguard Worker "VSsubu_vx");
6680*795d594fSAndroid Build Coastguard Worker }
6681*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsub_vv)6682*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsub_vv) {
6683*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSsub_vv,
6684*795d594fSAndroid Build Coastguard Worker "vssub.vv {reg1}, {reg2}, {reg3}{vm}",
6685*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6686*795d594fSAndroid Build Coastguard Worker "VSsub_vv");
6687*795d594fSAndroid Build Coastguard Worker }
6688*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsub_vx)6689*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsub_vx) {
6690*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSsub_vx,
6691*795d594fSAndroid Build Coastguard Worker "vssub.vx {reg1}, {reg2}, {reg3}{vm}",
6692*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6693*795d594fSAndroid Build Coastguard Worker "VSsub_vx");
6694*795d594fSAndroid Build Coastguard Worker }
6695*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSll_vv)6696*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSll_vv) {
6697*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSll_vv,
6698*795d594fSAndroid Build Coastguard Worker "vsll.vv {reg1}, {reg2}, {reg3}{vm}",
6699*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6700*795d594fSAndroid Build Coastguard Worker "VSll_vv");
6701*795d594fSAndroid Build Coastguard Worker }
6702*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSll_vx)6703*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSll_vx) {
6704*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSll_vx,
6705*795d594fSAndroid Build Coastguard Worker "vsll.vx {reg1}, {reg2}, {reg3}{vm}",
6706*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6707*795d594fSAndroid Build Coastguard Worker "VSll_vx");
6708*795d594fSAndroid Build Coastguard Worker }
6709*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSll_vi)6710*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSll_vi) {
6711*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VSll_vi,
6712*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6713*795d594fSAndroid Build Coastguard Worker "vsll.vi {reg1}, {reg2}, {imm}{vm}",
6714*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6715*795d594fSAndroid Build Coastguard Worker "VSll_vi");
6716*795d594fSAndroid Build Coastguard Worker }
6717*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSmul_vv)6718*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSmul_vv) {
6719*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSmul_vv,
6720*795d594fSAndroid Build Coastguard Worker "vsmul.vv {reg1}, {reg2}, {reg3}{vm}",
6721*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6722*795d594fSAndroid Build Coastguard Worker "VSmul_vv");
6723*795d594fSAndroid Build Coastguard Worker }
6724*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSmul_vx)6725*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSmul_vx) {
6726*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSmul_vx,
6727*795d594fSAndroid Build Coastguard Worker "vsmul.vx {reg1}, {reg2}, {reg3}{vm}",
6728*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6729*795d594fSAndroid Build Coastguard Worker "VSmul_vx");
6730*795d594fSAndroid Build Coastguard Worker }
6731*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Vmv1r_v)6732*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Vmv1r_v) {
6733*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVAligned(&Riscv64Assembler::Vmv1r_v, /*alignment=*/ 1, "vmv1r.v {reg1}, {reg2}"),
6734*795d594fSAndroid Build Coastguard Worker "Vmv1r_v");
6735*795d594fSAndroid Build Coastguard Worker }
6736*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Vmv2r_v)6737*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Vmv2r_v) {
6738*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVAligned(&Riscv64Assembler::Vmv2r_v, /*alignment=*/ 2, "vmv2r.v {reg1}, {reg2}"),
6739*795d594fSAndroid Build Coastguard Worker "Vmv2r_v");
6740*795d594fSAndroid Build Coastguard Worker }
6741*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Vmv4r_v)6742*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Vmv4r_v) {
6743*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVAligned(&Riscv64Assembler::Vmv4r_v, /*alignment=*/ 4, "vmv4r.v {reg1}, {reg2}"),
6744*795d594fSAndroid Build Coastguard Worker "Vmv4r_v");
6745*795d594fSAndroid Build Coastguard Worker }
6746*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Vmv8r_v)6747*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Vmv8r_v) {
6748*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVAligned(&Riscv64Assembler::Vmv8r_v, /*alignment=*/ 8, "vmv8r.v {reg1}, {reg2}"),
6749*795d594fSAndroid Build Coastguard Worker "Vmv8r_v");
6750*795d594fSAndroid Build Coastguard Worker }
6751*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSrl_vv)6752*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSrl_vv) {
6753*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSrl_vv,
6754*795d594fSAndroid Build Coastguard Worker "vsrl.vv {reg1}, {reg2}, {reg3}{vm}",
6755*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6756*795d594fSAndroid Build Coastguard Worker "VSrl_vv");
6757*795d594fSAndroid Build Coastguard Worker }
6758*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSrl_vx)6759*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSrl_vx) {
6760*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSrl_vx,
6761*795d594fSAndroid Build Coastguard Worker "vsrl.vx {reg1}, {reg2}, {reg3}{vm}",
6762*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6763*795d594fSAndroid Build Coastguard Worker "VSrl_vx");
6764*795d594fSAndroid Build Coastguard Worker }
6765*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSrl_vi)6766*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSrl_vi) {
6767*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VSrl_vi,
6768*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6769*795d594fSAndroid Build Coastguard Worker "vsrl.vi {reg1}, {reg2}, {imm}{vm}",
6770*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6771*795d594fSAndroid Build Coastguard Worker "VSrl_vi");
6772*795d594fSAndroid Build Coastguard Worker }
6773*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSra_vv)6774*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSra_vv) {
6775*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSra_vv,
6776*795d594fSAndroid Build Coastguard Worker "vsra.vv {reg1}, {reg2}, {reg3}{vm}",
6777*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6778*795d594fSAndroid Build Coastguard Worker "VSra_vv");
6779*795d594fSAndroid Build Coastguard Worker }
6780*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSra_vx)6781*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSra_vx) {
6782*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSra_vx,
6783*795d594fSAndroid Build Coastguard Worker "vsra.vx {reg1}, {reg2}, {reg3}{vm}",
6784*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6785*795d594fSAndroid Build Coastguard Worker "VSra_vx");
6786*795d594fSAndroid Build Coastguard Worker }
6787*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSra_vi)6788*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSra_vi) {
6789*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VSra_vi,
6790*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6791*795d594fSAndroid Build Coastguard Worker "vsra.vi {reg1}, {reg2}, {imm}{vm}",
6792*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6793*795d594fSAndroid Build Coastguard Worker "VSra_vi");
6794*795d594fSAndroid Build Coastguard Worker }
6795*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsrl_vv)6796*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsrl_vv) {
6797*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSsrl_vv,
6798*795d594fSAndroid Build Coastguard Worker "vssrl.vv {reg1}, {reg2}, {reg3}{vm}",
6799*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6800*795d594fSAndroid Build Coastguard Worker "VSsrl_vv");
6801*795d594fSAndroid Build Coastguard Worker }
6802*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsrl_vx)6803*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsrl_vx) {
6804*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSsrl_vx,
6805*795d594fSAndroid Build Coastguard Worker "vssrl.vx {reg1}, {reg2}, {reg3}{vm}",
6806*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6807*795d594fSAndroid Build Coastguard Worker "VSsrl_vx");
6808*795d594fSAndroid Build Coastguard Worker }
6809*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsrl_vi)6810*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsrl_vi) {
6811*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VSsrl_vi,
6812*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6813*795d594fSAndroid Build Coastguard Worker "vssrl.vi {reg1}, {reg2}, {imm}{vm}",
6814*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6815*795d594fSAndroid Build Coastguard Worker "VSsrl_vi");
6816*795d594fSAndroid Build Coastguard Worker }
6817*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsra_vv)6818*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsra_vv) {
6819*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VSsra_vv,
6820*795d594fSAndroid Build Coastguard Worker "vssra.vv {reg1}, {reg2}, {reg3}{vm}",
6821*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6822*795d594fSAndroid Build Coastguard Worker "VSsra_vv");
6823*795d594fSAndroid Build Coastguard Worker }
6824*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsra_vx)6825*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsra_vx) {
6826*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSsra_vx,
6827*795d594fSAndroid Build Coastguard Worker "vssra.vx {reg1}, {reg2}, {reg3}{vm}",
6828*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6829*795d594fSAndroid Build Coastguard Worker "VSsra_vx");
6830*795d594fSAndroid Build Coastguard Worker }
6831*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSsra_vi)6832*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSsra_vi) {
6833*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VSsra_vi,
6834*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6835*795d594fSAndroid Build Coastguard Worker "vssra.vi {reg1}, {reg2}, {imm}{vm}",
6836*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6837*795d594fSAndroid Build Coastguard Worker "VSsra_vi");
6838*795d594fSAndroid Build Coastguard Worker }
6839*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNsrl_wv)6840*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNsrl_wv) {
6841*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VNsrl_wv,
6842*795d594fSAndroid Build Coastguard Worker "vnsrl.wv {reg1}, {reg2}, {reg3}{vm}",
6843*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6844*795d594fSAndroid Build Coastguard Worker "VNsrl_wv");
6845*795d594fSAndroid Build Coastguard Worker }
6846*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNsrl_wx)6847*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNsrl_wx) {
6848*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VNsrl_wx,
6849*795d594fSAndroid Build Coastguard Worker "vnsrl.wx {reg1}, {reg2}, {reg3}{vm}",
6850*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6851*795d594fSAndroid Build Coastguard Worker "VNsrl_wx");
6852*795d594fSAndroid Build Coastguard Worker }
6853*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNsrl_wi)6854*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNsrl_wi) {
6855*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VNsrl_wi,
6856*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6857*795d594fSAndroid Build Coastguard Worker "vnsrl.wi {reg1}, {reg2}, {imm}{vm}",
6858*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6859*795d594fSAndroid Build Coastguard Worker "VNsrl_wi");
6860*795d594fSAndroid Build Coastguard Worker }
6861*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNcvt_x_x_w)6862*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNcvt_x_x_w) {
6863*795d594fSAndroid Build Coastguard Worker DriverStr(
6864*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
6865*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VNcvt_x_x_w, "vncvt.x.x.w {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
6866*795d594fSAndroid Build Coastguard Worker "VNcvt_x_x_w");
6867*795d594fSAndroid Build Coastguard Worker }
6868*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNsra_wv)6869*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNsra_wv) {
6870*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VNsra_wv,
6871*795d594fSAndroid Build Coastguard Worker "vnsra.wv {reg1}, {reg2}, {reg3}{vm}",
6872*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6873*795d594fSAndroid Build Coastguard Worker "VNsra_wv");
6874*795d594fSAndroid Build Coastguard Worker }
6875*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNsra_wx)6876*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNsra_wx) {
6877*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VNsra_wx,
6878*795d594fSAndroid Build Coastguard Worker "vnsra.wx {reg1}, {reg2}, {reg3}{vm}",
6879*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6880*795d594fSAndroid Build Coastguard Worker "VNsra_wx");
6881*795d594fSAndroid Build Coastguard Worker }
6882*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNsra_wi)6883*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNsra_wi) {
6884*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VNsra_wi,
6885*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6886*795d594fSAndroid Build Coastguard Worker "vnsra.wi {reg1}, {reg2}, {imm}{vm}",
6887*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6888*795d594fSAndroid Build Coastguard Worker "VNsra_wi");
6889*795d594fSAndroid Build Coastguard Worker }
6890*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNclipu_wv)6891*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNclipu_wv) {
6892*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VNclipu_wv,
6893*795d594fSAndroid Build Coastguard Worker "vnclipu.wv {reg1}, {reg2}, {reg3}{vm}",
6894*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6895*795d594fSAndroid Build Coastguard Worker "VNclipu_wv");
6896*795d594fSAndroid Build Coastguard Worker }
6897*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNclipu_wx)6898*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNclipu_wx) {
6899*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VNclipu_wx,
6900*795d594fSAndroid Build Coastguard Worker "vnclipu.wx {reg1}, {reg2}, {reg3}{vm}",
6901*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6902*795d594fSAndroid Build Coastguard Worker "VNclipu_wx");
6903*795d594fSAndroid Build Coastguard Worker }
6904*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNclipu_wi)6905*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNclipu_wi) {
6906*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VNclipu_wi,
6907*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6908*795d594fSAndroid Build Coastguard Worker "vnclipu.wi {reg1}, {reg2}, {imm}{vm}",
6909*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6910*795d594fSAndroid Build Coastguard Worker "VNclipu_wi");
6911*795d594fSAndroid Build Coastguard Worker }
6912*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNclip_wv)6913*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNclip_wv) {
6914*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VNclip_wv,
6915*795d594fSAndroid Build Coastguard Worker "vnclip.wv {reg1}, {reg2}, {reg3}{vm}",
6916*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6917*795d594fSAndroid Build Coastguard Worker "VNclip_wv");
6918*795d594fSAndroid Build Coastguard Worker }
6919*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNclip_wx)6920*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNclip_wx) {
6921*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VNclip_wx,
6922*795d594fSAndroid Build Coastguard Worker "vnclip.wx {reg1}, {reg2}, {reg3}{vm}",
6923*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6924*795d594fSAndroid Build Coastguard Worker "VNclip_wx");
6925*795d594fSAndroid Build Coastguard Worker }
6926*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNclip_wi)6927*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNclip_wi) {
6928*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVIbVmFiltered(&Riscv64Assembler::VNclip_wi,
6929*795d594fSAndroid Build Coastguard Worker /*imm_bits=*/ 5,
6930*795d594fSAndroid Build Coastguard Worker "vnclip.wi {reg1}, {reg2}, {imm}{vm}",
6931*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, uint32_t>()),
6932*795d594fSAndroid Build Coastguard Worker "VNclip_wi");
6933*795d594fSAndroid Build Coastguard Worker }
6934*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWredsumu_vs)6935*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWredsumu_vs) {
6936*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VWredsumu_vs, "vwredsumu.vs {reg1}, {reg2}, {reg3}{vm}"),
6937*795d594fSAndroid Build Coastguard Worker "VWredsumu_vs");
6938*795d594fSAndroid Build Coastguard Worker }
6939*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWredsum_vs)6940*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWredsum_vs) {
6941*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VWredsum_vs, "vwredsum.vs {reg1}, {reg2}, {reg3}{vm}"),
6942*795d594fSAndroid Build Coastguard Worker "VWredsum_vs");
6943*795d594fSAndroid Build Coastguard Worker }
6944*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRedsum_vs)6945*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRedsum_vs) {
6946*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VRedsum_vs, "vredsum.vs {reg1}, {reg2}, {reg3}{vm}"),
6947*795d594fSAndroid Build Coastguard Worker "VRedsum_vs");
6948*795d594fSAndroid Build Coastguard Worker }
6949*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRedand_vs)6950*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRedand_vs) {
6951*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VRedand_vs, "vredand.vs {reg1}, {reg2}, {reg3}{vm}"),
6952*795d594fSAndroid Build Coastguard Worker "VRedand_vs");
6953*795d594fSAndroid Build Coastguard Worker }
6954*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRedor_vs)6955*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRedor_vs) {
6956*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VRedor_vs, "vredor.vs {reg1}, {reg2}, {reg3}{vm}"),
6957*795d594fSAndroid Build Coastguard Worker "VRedor_vs");
6958*795d594fSAndroid Build Coastguard Worker }
6959*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRedxor_vs)6960*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRedxor_vs) {
6961*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VRedxor_vs, "vredxor.vs {reg1}, {reg2}, {reg3}{vm}"),
6962*795d594fSAndroid Build Coastguard Worker "VRedxor_vs");
6963*795d594fSAndroid Build Coastguard Worker }
6964*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRedminu_vs)6965*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRedminu_vs) {
6966*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VRedminu_vs, "vredminu.vs {reg1}, {reg2}, {reg3}{vm}"),
6967*795d594fSAndroid Build Coastguard Worker "VRedminu_vs");
6968*795d594fSAndroid Build Coastguard Worker }
6969*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRedmin_vs)6970*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRedmin_vs) {
6971*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VRedmin_vs, "vredmin.vs {reg1}, {reg2}, {reg3}{vm}"),
6972*795d594fSAndroid Build Coastguard Worker "VRedmin_vs");
6973*795d594fSAndroid Build Coastguard Worker }
6974*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRedmaxu_vs)6975*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRedmaxu_vs) {
6976*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VRedmaxu_vs, "vredmaxu.vs {reg1}, {reg2}, {reg3}{vm}"),
6977*795d594fSAndroid Build Coastguard Worker "VRedmaxu_vs");
6978*795d594fSAndroid Build Coastguard Worker }
6979*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRedmax_vs)6980*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRedmax_vs) {
6981*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VRedmax_vs, "vredmax.vs {reg1}, {reg2}, {reg3}{vm}"),
6982*795d594fSAndroid Build Coastguard Worker "VRedmax_vs");
6983*795d594fSAndroid Build Coastguard Worker }
6984*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAaddu_vv)6985*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAaddu_vv) {
6986*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VAaddu_vv,
6987*795d594fSAndroid Build Coastguard Worker "vaaddu.vv {reg1}, {reg2}, {reg3}{vm}",
6988*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
6989*795d594fSAndroid Build Coastguard Worker "VAaddu_vv");
6990*795d594fSAndroid Build Coastguard Worker }
6991*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAaddu_vx)6992*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAaddu_vx) {
6993*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VAaddu_vx,
6994*795d594fSAndroid Build Coastguard Worker "vaaddu.vx {reg1}, {reg2}, {reg3}{vm}",
6995*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
6996*795d594fSAndroid Build Coastguard Worker "VAaddu_vx");
6997*795d594fSAndroid Build Coastguard Worker }
6998*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAadd_vv)6999*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAadd_vv) {
7000*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VAadd_vv,
7001*795d594fSAndroid Build Coastguard Worker "vaadd.vv {reg1}, {reg2}, {reg3}{vm}",
7002*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7003*795d594fSAndroid Build Coastguard Worker "VAadd_vv");
7004*795d594fSAndroid Build Coastguard Worker }
7005*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAadd_vx)7006*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAadd_vx) {
7007*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VAadd_vx,
7008*795d594fSAndroid Build Coastguard Worker "vaadd.vx {reg1}, {reg2}, {reg3}{vm}",
7009*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7010*795d594fSAndroid Build Coastguard Worker "VAadd_vx");
7011*795d594fSAndroid Build Coastguard Worker }
7012*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAsubu_vv)7013*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAsubu_vv) {
7014*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VAsubu_vv,
7015*795d594fSAndroid Build Coastguard Worker "vasubu.vv {reg1}, {reg2}, {reg3}{vm}",
7016*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7017*795d594fSAndroid Build Coastguard Worker "VAsubu_vv");
7018*795d594fSAndroid Build Coastguard Worker }
7019*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAsubu_vx)7020*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAsubu_vx) {
7021*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VAsubu_vx,
7022*795d594fSAndroid Build Coastguard Worker "vasubu.vx {reg1}, {reg2}, {reg3}{vm}",
7023*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7024*795d594fSAndroid Build Coastguard Worker "VAsubu_vx");
7025*795d594fSAndroid Build Coastguard Worker }
7026*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAsub_vv)7027*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAsub_vv) {
7028*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VAsub_vv,
7029*795d594fSAndroid Build Coastguard Worker "vasub.vv {reg1}, {reg2}, {reg3}{vm}",
7030*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7031*795d594fSAndroid Build Coastguard Worker "VAsub_vv");
7032*795d594fSAndroid Build Coastguard Worker }
7033*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VAsub_vx)7034*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VAsub_vx) {
7035*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VAsub_vx,
7036*795d594fSAndroid Build Coastguard Worker "vasub.vx {reg1}, {reg2}, {reg3}{vm}",
7037*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7038*795d594fSAndroid Build Coastguard Worker "VAsub_vx");
7039*795d594fSAndroid Build Coastguard Worker }
7040*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSlide1up_vx)7041*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSlide1up_vx) {
7042*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSlide1up_vx,
7043*795d594fSAndroid Build Coastguard Worker "vslide1up.vx {reg1}, {reg2}, {reg3}{vm}",
7044*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
7045*795d594fSAndroid Build Coastguard Worker "VSlide1up_vx");
7046*795d594fSAndroid Build Coastguard Worker }
7047*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSlide1down_vx)7048*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSlide1down_vx) {
7049*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VSlide1down_vx,
7050*795d594fSAndroid Build Coastguard Worker "vslide1down.vx {reg1}, {reg2}, {reg3}{vm}",
7051*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7052*795d594fSAndroid Build Coastguard Worker "VSlide1down_vx");
7053*795d594fSAndroid Build Coastguard Worker }
7054*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VCompress_vm)7055*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VCompress_vm) {
7056*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVFiltered(&Riscv64Assembler::VCompress_vm,
7057*795d594fSAndroid Build Coastguard Worker "vcompress.vm {reg1}, {reg2}, {reg3}",
7058*795d594fSAndroid Build Coastguard Worker VVVNoR1R2R3Overlap()),
7059*795d594fSAndroid Build Coastguard Worker "VCompress_vm");
7060*795d594fSAndroid Build Coastguard Worker }
7061*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMandn_mm)7062*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMandn_mm) {
7063*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMandn_mm, "vmandn.mm {reg1}, {reg2}, {reg3}"),
7064*795d594fSAndroid Build Coastguard Worker "VMandn_mm");
7065*795d594fSAndroid Build Coastguard Worker }
7066*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMand_mm)7067*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMand_mm) {
7068*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMand_mm, "vmand.mm {reg1}, {reg2}, {reg3}"), "VMand_mm");
7069*795d594fSAndroid Build Coastguard Worker }
7070*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMmv_m)7071*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMmv_m) {
7072*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVV(&Riscv64Assembler::VMmv_m, "vmmv.m {reg1}, {reg2}"), "VMmv_m");
7073*795d594fSAndroid Build Coastguard Worker }
7074*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMor_mm)7075*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMor_mm) {
7076*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMor_mm, "vmor.mm {reg1}, {reg2}, {reg3}"), "VMor_mm");
7077*795d594fSAndroid Build Coastguard Worker }
7078*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMxor_mm)7079*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMxor_mm) {
7080*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMxor_mm, "vmxor.mm {reg1}, {reg2}, {reg3}"), "VMxor_mm");
7081*795d594fSAndroid Build Coastguard Worker }
7082*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMclr_m)7083*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMclr_m) {
7084*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatV(&Riscv64Assembler::VMclr_m, "vmclr.m {reg}"), "VMclr_m");
7085*795d594fSAndroid Build Coastguard Worker }
7086*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMorn_mm)7087*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMorn_mm) {
7088*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMorn_mm, "vmorn.mm {reg1}, {reg2}, {reg3}"), "VMorn_mm");
7089*795d594fSAndroid Build Coastguard Worker }
7090*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMnand_mm)7091*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMnand_mm) {
7092*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMnand_mm, "vmnand.mm {reg1}, {reg2}, {reg3}"),
7093*795d594fSAndroid Build Coastguard Worker "VMnand_m");
7094*795d594fSAndroid Build Coastguard Worker }
7095*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMnot_m)7096*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMnot_m) {
7097*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVV(&Riscv64Assembler::VMnot_m, "vmnot.m {reg1}, {reg2}"), "VMnot_m");
7098*795d594fSAndroid Build Coastguard Worker }
7099*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMnor_mm)7100*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMnor_mm) {
7101*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMnor_mm, "vmnor.mm {reg1}, {reg2}, {reg3}"), "VMnor_mm");
7102*795d594fSAndroid Build Coastguard Worker }
7103*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMxnor_mm)7104*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMxnor_mm) {
7105*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVV(&Riscv64Assembler::VMxnor_mm, "vmxnor.mm {reg1}, {reg2}, {reg3}"),
7106*795d594fSAndroid Build Coastguard Worker "VMxnor_mm");
7107*795d594fSAndroid Build Coastguard Worker }
7108*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMset_m)7109*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMset_m) {
7110*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatV(&Riscv64Assembler::VMset_m, "vmset.m {reg}"), "VMset_m");
7111*795d594fSAndroid Build Coastguard Worker }
7112*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VDivu_vv)7113*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VDivu_vv) {
7114*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VDivu_vv,
7115*795d594fSAndroid Build Coastguard Worker "vdivu.vv {reg1}, {reg2}, {reg3}{vm}",
7116*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7117*795d594fSAndroid Build Coastguard Worker "VDivu_vv");
7118*795d594fSAndroid Build Coastguard Worker }
7119*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VDivu_vx)7120*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VDivu_vx) {
7121*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VDivu_vx,
7122*795d594fSAndroid Build Coastguard Worker "vdivu.vx {reg1}, {reg2}, {reg3}{vm}",
7123*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7124*795d594fSAndroid Build Coastguard Worker "VDivu_vx");
7125*795d594fSAndroid Build Coastguard Worker }
7126*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VDiv_vv)7127*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VDiv_vv) {
7128*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VDiv_vv,
7129*795d594fSAndroid Build Coastguard Worker "vdiv.vv {reg1}, {reg2}, {reg3}{vm}",
7130*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7131*795d594fSAndroid Build Coastguard Worker "VDiv_vv");
7132*795d594fSAndroid Build Coastguard Worker }
7133*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VDiv_vx)7134*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VDiv_vx) {
7135*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VDiv_vx,
7136*795d594fSAndroid Build Coastguard Worker "vdiv.vx {reg1}, {reg2}, {reg3}{vm}",
7137*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7138*795d594fSAndroid Build Coastguard Worker "VDiv_vx");
7139*795d594fSAndroid Build Coastguard Worker }
7140*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRemu_vv)7141*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRemu_vv) {
7142*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VRemu_vv,
7143*795d594fSAndroid Build Coastguard Worker "vremu.vv {reg1}, {reg2}, {reg3}{vm}",
7144*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7145*795d594fSAndroid Build Coastguard Worker "VRemu_vv");
7146*795d594fSAndroid Build Coastguard Worker }
7147*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRemu_vx)7148*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRemu_vx) {
7149*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VRemu_vx,
7150*795d594fSAndroid Build Coastguard Worker "vremu.vx {reg1}, {reg2}, {reg3}{vm}",
7151*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7152*795d594fSAndroid Build Coastguard Worker "VRemu_vx");
7153*795d594fSAndroid Build Coastguard Worker }
7154*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRem_vv)7155*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRem_vv) {
7156*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VRem_vv,
7157*795d594fSAndroid Build Coastguard Worker "vrem.vv {reg1}, {reg2}, {reg3}{vm}",
7158*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7159*795d594fSAndroid Build Coastguard Worker "VRem_vv");
7160*795d594fSAndroid Build Coastguard Worker }
7161*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VRem_vx)7162*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VRem_vx) {
7163*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VRem_vx,
7164*795d594fSAndroid Build Coastguard Worker "vrem.vx {reg1}, {reg2}, {reg3}{vm}",
7165*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7166*795d594fSAndroid Build Coastguard Worker "VRem_vx");
7167*795d594fSAndroid Build Coastguard Worker }
7168*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMulhu_vv)7169*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMulhu_vv) {
7170*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMulhu_vv,
7171*795d594fSAndroid Build Coastguard Worker "vmulhu.vv {reg1}, {reg2}, {reg3}{vm}",
7172*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7173*795d594fSAndroid Build Coastguard Worker "VMulhu_vv");
7174*795d594fSAndroid Build Coastguard Worker }
7175*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMulhu_vx)7176*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMulhu_vx) {
7177*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMulhu_vx,
7178*795d594fSAndroid Build Coastguard Worker "vmulhu.vx {reg1}, {reg2}, {reg3}{vm}",
7179*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7180*795d594fSAndroid Build Coastguard Worker "VMulhu_vx");
7181*795d594fSAndroid Build Coastguard Worker }
7182*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMul_vv)7183*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMul_vv) {
7184*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMul_vv,
7185*795d594fSAndroid Build Coastguard Worker "vmul.vv {reg1}, {reg2}, {reg3}{vm}",
7186*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7187*795d594fSAndroid Build Coastguard Worker "VMul_vv");
7188*795d594fSAndroid Build Coastguard Worker }
7189*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMul_vx)7190*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMul_vx) {
7191*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMul_vx,
7192*795d594fSAndroid Build Coastguard Worker "vmul.vx {reg1}, {reg2}, {reg3}{vm}",
7193*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7194*795d594fSAndroid Build Coastguard Worker "VMul_vx");
7195*795d594fSAndroid Build Coastguard Worker }
7196*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMulhsu_vv)7197*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMulhsu_vv) {
7198*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMulhsu_vv,
7199*795d594fSAndroid Build Coastguard Worker "vmulhsu.vv {reg1}, {reg2}, {reg3}{vm}",
7200*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7201*795d594fSAndroid Build Coastguard Worker "VMulhsu_vv");
7202*795d594fSAndroid Build Coastguard Worker }
7203*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMulhsu_vx)7204*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMulhsu_vx) {
7205*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMulhsu_vx,
7206*795d594fSAndroid Build Coastguard Worker "vmulhsu.vx {reg1}, {reg2}, {reg3}{vm}",
7207*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7208*795d594fSAndroid Build Coastguard Worker "VMulhsu_vx");
7209*795d594fSAndroid Build Coastguard Worker }
7210*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMulh_vv)7211*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMulh_vv) {
7212*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMulh_vv,
7213*795d594fSAndroid Build Coastguard Worker "vmulh.vv {reg1}, {reg2}, {reg3}{vm}",
7214*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7215*795d594fSAndroid Build Coastguard Worker "VMulh_vv");
7216*795d594fSAndroid Build Coastguard Worker }
7217*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMulh_vx)7218*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMulh_vx) {
7219*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VMulh_vx,
7220*795d594fSAndroid Build Coastguard Worker "vmulh.vx {reg1}, {reg2}, {reg3}{vm}",
7221*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7222*795d594fSAndroid Build Coastguard Worker "VMulh_vx");
7223*795d594fSAndroid Build Coastguard Worker }
7224*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMadd_vv)7225*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMadd_vv) {
7226*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMadd_vv,
7227*795d594fSAndroid Build Coastguard Worker "vmadd.vv {reg1}, {reg2}, {reg3}{vm}",
7228*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7229*795d594fSAndroid Build Coastguard Worker "VMadd_vv");
7230*795d594fSAndroid Build Coastguard Worker }
7231*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMadd_vx)7232*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMadd_vx) {
7233*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VMadd_vx,
7234*795d594fSAndroid Build Coastguard Worker "vmadd.vx {reg1}, {reg2}, {reg3}{vm}",
7235*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
7236*795d594fSAndroid Build Coastguard Worker "VMadd_vx");
7237*795d594fSAndroid Build Coastguard Worker }
7238*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNmsub_vv)7239*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNmsub_vv) {
7240*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VNmsub_vv,
7241*795d594fSAndroid Build Coastguard Worker "vnmsub.vv {reg1}, {reg2}, {reg3}{vm}",
7242*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7243*795d594fSAndroid Build Coastguard Worker "VNmsub_vv");
7244*795d594fSAndroid Build Coastguard Worker }
7245*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNmsub_vx)7246*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNmsub_vx) {
7247*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VNmsub_vx,
7248*795d594fSAndroid Build Coastguard Worker "vnmsub.vx {reg1}, {reg2}, {reg3}{vm}",
7249*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
7250*795d594fSAndroid Build Coastguard Worker "VNmsub_vx");
7251*795d594fSAndroid Build Coastguard Worker }
7252*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMacc_vv)7253*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMacc_vv) {
7254*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMacc_vv,
7255*795d594fSAndroid Build Coastguard Worker "vmacc.vv {reg1}, {reg2}, {reg3}{vm}",
7256*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7257*795d594fSAndroid Build Coastguard Worker "VMacc_vv");
7258*795d594fSAndroid Build Coastguard Worker }
7259*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMacc_vx)7260*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMacc_vx) {
7261*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VMacc_vx,
7262*795d594fSAndroid Build Coastguard Worker "vmacc.vx {reg1}, {reg2}, {reg3}{vm}",
7263*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
7264*795d594fSAndroid Build Coastguard Worker "VMacc_vx");
7265*795d594fSAndroid Build Coastguard Worker }
7266*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNmsac_vv)7267*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNmsac_vv) {
7268*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VNmsac_vv,
7269*795d594fSAndroid Build Coastguard Worker "vnmsac.vv {reg1}, {reg2}, {reg3}{vm}",
7270*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7271*795d594fSAndroid Build Coastguard Worker "VNmsac_vv");
7272*795d594fSAndroid Build Coastguard Worker }
7273*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VNmsac_vx)7274*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VNmsac_vx) {
7275*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VNmsac_vx,
7276*795d594fSAndroid Build Coastguard Worker "vnmsac.vx {reg1}, {reg2}, {reg3}{vm}",
7277*795d594fSAndroid Build Coastguard Worker SkipV0Vm<XRegister, VRegister>()),
7278*795d594fSAndroid Build Coastguard Worker "VNmsac_vx");
7279*795d594fSAndroid Build Coastguard Worker }
7280*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWaddu_vv)7281*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWaddu_vv) {
7282*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWaddu_vv,
7283*795d594fSAndroid Build Coastguard Worker "vwaddu.vv {reg1}, {reg2}, {reg3}{vm}",
7284*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7285*795d594fSAndroid Build Coastguard Worker "VWaddu_vv");
7286*795d594fSAndroid Build Coastguard Worker }
7287*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWaddu_vx)7288*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWaddu_vx) {
7289*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWaddu_vx,
7290*795d594fSAndroid Build Coastguard Worker "vwaddu.vx {reg1}, {reg2}, {reg3}{vm}",
7291*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
7292*795d594fSAndroid Build Coastguard Worker "VWaddu_vx");
7293*795d594fSAndroid Build Coastguard Worker }
7294*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWcvtu_x_x_v)7295*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWcvtu_x_x_v) {
7296*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VWcvtu_x_x_v,
7297*795d594fSAndroid Build Coastguard Worker "vwcvtu.x.x.v {reg1}, {reg2}{vm}",
7298*795d594fSAndroid Build Coastguard Worker VVVmSkipV0VmAndNoR1R2Overlap()),
7299*795d594fSAndroid Build Coastguard Worker "VWcvtu_x_x_v");
7300*795d594fSAndroid Build Coastguard Worker }
7301*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWadd_vv)7302*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWadd_vv) {
7303*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWadd_vv,
7304*795d594fSAndroid Build Coastguard Worker "vwadd.vv {reg1}, {reg2}, {reg3}{vm}",
7305*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7306*795d594fSAndroid Build Coastguard Worker "VWadd_vv");
7307*795d594fSAndroid Build Coastguard Worker }
7308*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWadd_vx)7309*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWadd_vx) {
7310*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWadd_vx,
7311*795d594fSAndroid Build Coastguard Worker "vwadd.vx {reg1}, {reg2}, {reg3}{vm}",
7312*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
7313*795d594fSAndroid Build Coastguard Worker "VWadd_vx");
7314*795d594fSAndroid Build Coastguard Worker }
7315*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWcvt_x_x_v)7316*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWcvt_x_x_v) {
7317*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VWcvt_x_x_v,
7318*795d594fSAndroid Build Coastguard Worker "vwcvt.x.x.v {reg1}, {reg2}{vm}",
7319*795d594fSAndroid Build Coastguard Worker VVVmSkipV0VmAndNoR1R2Overlap()),
7320*795d594fSAndroid Build Coastguard Worker "VWcvt_x_x_v");
7321*795d594fSAndroid Build Coastguard Worker }
7322*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWsubu_vv)7323*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWsubu_vv) {
7324*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWsubu_vv,
7325*795d594fSAndroid Build Coastguard Worker "vwsubu.vv {reg1}, {reg2}, {reg3}{vm}",
7326*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7327*795d594fSAndroid Build Coastguard Worker "VWsubu_vv");
7328*795d594fSAndroid Build Coastguard Worker }
7329*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWsubu_vx)7330*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWsubu_vx) {
7331*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWsubu_vx,
7332*795d594fSAndroid Build Coastguard Worker "vwsubu.vx {reg1}, {reg2}, {reg3}{vm}",
7333*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
7334*795d594fSAndroid Build Coastguard Worker "VWsubu_vx");
7335*795d594fSAndroid Build Coastguard Worker }
7336*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWsub_vv)7337*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWsub_vv) {
7338*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWsub_vv,
7339*795d594fSAndroid Build Coastguard Worker "vwsub.vv {reg1}, {reg2}, {reg3}{vm}",
7340*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7341*795d594fSAndroid Build Coastguard Worker "VWsub_vv");
7342*795d594fSAndroid Build Coastguard Worker }
7343*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWsub_vx)7344*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWsub_vx) {
7345*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWsub_vx,
7346*795d594fSAndroid Build Coastguard Worker "vwsub.vx {reg1}, {reg2}, {reg3}{vm}",
7347*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
7348*795d594fSAndroid Build Coastguard Worker "VWsub_vx");
7349*795d594fSAndroid Build Coastguard Worker }
7350*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWaddu_wv)7351*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWaddu_wv) {
7352*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWaddu_wv,
7353*795d594fSAndroid Build Coastguard Worker "vwaddu.wv {reg1}, {reg2}, {reg3}{vm}",
7354*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<VRegister>()),
7355*795d594fSAndroid Build Coastguard Worker "VWaddu_wv");
7356*795d594fSAndroid Build Coastguard Worker }
7357*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWaddu_wx)7358*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWaddu_wx) {
7359*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWaddu_wx,
7360*795d594fSAndroid Build Coastguard Worker "vwaddu.wx {reg1}, {reg2}, {reg3}{vm}",
7361*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7362*795d594fSAndroid Build Coastguard Worker "VWaddu_wx");
7363*795d594fSAndroid Build Coastguard Worker }
7364*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWadd_wv)7365*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWadd_wv) {
7366*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWadd_wv,
7367*795d594fSAndroid Build Coastguard Worker "vwadd.wv {reg1}, {reg2}, {reg3}{vm}",
7368*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<VRegister>()),
7369*795d594fSAndroid Build Coastguard Worker "VWadd_wv");
7370*795d594fSAndroid Build Coastguard Worker }
7371*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWadd_wx)7372*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWadd_wx) {
7373*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWadd_wx,
7374*795d594fSAndroid Build Coastguard Worker "vwadd.wx {reg1}, {reg2}, {reg3}{vm}",
7375*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7376*795d594fSAndroid Build Coastguard Worker "VWadd_wx");
7377*795d594fSAndroid Build Coastguard Worker }
7378*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWsubu_wv)7379*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWsubu_wv) {
7380*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWsubu_wv,
7381*795d594fSAndroid Build Coastguard Worker "vwsubu.wv {reg1}, {reg2}, {reg3}{vm}",
7382*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<VRegister>()),
7383*795d594fSAndroid Build Coastguard Worker "VWsubu_wv");
7384*795d594fSAndroid Build Coastguard Worker }
7385*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWsubu_wx)7386*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWsubu_wx) {
7387*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWsubu_wx,
7388*795d594fSAndroid Build Coastguard Worker "vwsubu.wx {reg1}, {reg2}, {reg3}{vm}",
7389*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7390*795d594fSAndroid Build Coastguard Worker "VWsubu_wx");
7391*795d594fSAndroid Build Coastguard Worker }
7392*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWsub_wv)7393*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWsub_wv) {
7394*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWsub_wv,
7395*795d594fSAndroid Build Coastguard Worker "vwsub.wv {reg1}, {reg2}, {reg3}{vm}",
7396*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<VRegister>()),
7397*795d594fSAndroid Build Coastguard Worker "VWsub_wv");
7398*795d594fSAndroid Build Coastguard Worker }
7399*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWsub_wx)7400*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWsub_wx) {
7401*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWsub_wx,
7402*795d594fSAndroid Build Coastguard Worker "vwsub.wx {reg1}, {reg2}, {reg3}{vm}",
7403*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, XRegister>()),
7404*795d594fSAndroid Build Coastguard Worker "VWsub_wx");
7405*795d594fSAndroid Build Coastguard Worker }
7406*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmulu_vv)7407*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmulu_vv) {
7408*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWmulu_vv,
7409*795d594fSAndroid Build Coastguard Worker "vwmulu.vv {reg1}, {reg2}, {reg3}{vm}",
7410*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7411*795d594fSAndroid Build Coastguard Worker "VWmulu_vv");
7412*795d594fSAndroid Build Coastguard Worker }
7413*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmulu_vx)7414*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmulu_vx) {
7415*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWmulu_vx,
7416*795d594fSAndroid Build Coastguard Worker "vwmulu.vx {reg1}, {reg2}, {reg3}{vm}",
7417*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
7418*795d594fSAndroid Build Coastguard Worker "VWmulu_vx");
7419*795d594fSAndroid Build Coastguard Worker }
7420*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmulsu_vv)7421*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmulsu_vv) {
7422*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWmulsu_vv,
7423*795d594fSAndroid Build Coastguard Worker "vwmulsu.vv {reg1}, {reg2}, {reg3}{vm}",
7424*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7425*795d594fSAndroid Build Coastguard Worker "VWmulsu_vv");
7426*795d594fSAndroid Build Coastguard Worker }
7427*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmulsu_vx)7428*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmulsu_vx) {
7429*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWmulsu_vx,
7430*795d594fSAndroid Build Coastguard Worker "vwmulsu.vx {reg1}, {reg2}, {reg3}{vm}",
7431*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
7432*795d594fSAndroid Build Coastguard Worker "VWmulsu_vx");
7433*795d594fSAndroid Build Coastguard Worker }
7434*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmul_vv)7435*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmul_vv) {
7436*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWmul_vv,
7437*795d594fSAndroid Build Coastguard Worker "vwmul.vv {reg1}, {reg2}, {reg3}{vm}",
7438*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7439*795d594fSAndroid Build Coastguard Worker "VWmul_vv");
7440*795d594fSAndroid Build Coastguard Worker }
7441*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmul_vx)7442*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmul_vx) {
7443*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVRVmFiltered(&Riscv64Assembler::VWmul_vx,
7444*795d594fSAndroid Build Coastguard Worker "vwmul.vx {reg1}, {reg2}, {reg3}{vm}",
7445*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<XRegister>()),
7446*795d594fSAndroid Build Coastguard Worker "VWmul_vx");
7447*795d594fSAndroid Build Coastguard Worker }
7448*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmaccu_vv)7449*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmaccu_vv) {
7450*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWmaccu_vv,
7451*795d594fSAndroid Build Coastguard Worker "vwmaccu.vv {reg1}, {reg2}, {reg3}{vm}",
7452*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7453*795d594fSAndroid Build Coastguard Worker "VWmaccu_vv");
7454*795d594fSAndroid Build Coastguard Worker }
7455*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmaccu_vx)7456*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmaccu_vx) {
7457*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VWmaccu_vx,
7458*795d594fSAndroid Build Coastguard Worker "vwmaccu.vx {reg1}, {reg2}, {reg3}{vm}",
7459*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<XRegister>()),
7460*795d594fSAndroid Build Coastguard Worker "VWmaccu_vx");
7461*795d594fSAndroid Build Coastguard Worker }
7462*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmacc_vv)7463*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmacc_vv) {
7464*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWmacc_vv,
7465*795d594fSAndroid Build Coastguard Worker "vwmacc.vv {reg1}, {reg2}, {reg3}{vm}",
7466*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7467*795d594fSAndroid Build Coastguard Worker "VWmacc_vv");
7468*795d594fSAndroid Build Coastguard Worker }
7469*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmacc_vx)7470*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmacc_vx) {
7471*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VWmacc_vx,
7472*795d594fSAndroid Build Coastguard Worker "vwmacc.vx {reg1}, {reg2}, {reg3}{vm}",
7473*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<XRegister>()),
7474*795d594fSAndroid Build Coastguard Worker "VWmacc_vx");
7475*795d594fSAndroid Build Coastguard Worker }
7476*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmaccus_vx)7477*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmaccus_vx) {
7478*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VWmaccus_vx,
7479*795d594fSAndroid Build Coastguard Worker "vwmaccus.vx {reg1}, {reg2}, {reg3}{vm}",
7480*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<XRegister>()),
7481*795d594fSAndroid Build Coastguard Worker "VWmaccus_vx");
7482*795d594fSAndroid Build Coastguard Worker }
7483*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmaccsu_vv)7484*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmaccsu_vv) {
7485*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VWmaccsu_vv,
7486*795d594fSAndroid Build Coastguard Worker "vwmaccsu.vv {reg1}, {reg2}, {reg3}{vm}",
7487*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7488*795d594fSAndroid Build Coastguard Worker "VWmaccsu_vv");
7489*795d594fSAndroid Build Coastguard Worker }
7490*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VWmaccsu_vx)7491*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VWmaccsu_vx) {
7492*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVRVVmFiltered(&Riscv64Assembler::VWmaccsu_vx,
7493*795d594fSAndroid Build Coastguard Worker "vwmaccsu.vx {reg1}, {reg2}, {reg3}{vm}",
7494*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<XRegister>()),
7495*795d594fSAndroid Build Coastguard Worker "VWmaccsu_vx");
7496*795d594fSAndroid Build Coastguard Worker }
7497*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFadd_vv)7498*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFadd_vv) {
7499*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFadd_vv,
7500*795d594fSAndroid Build Coastguard Worker "vfadd.vv {reg1}, {reg2}, {reg3}{vm}",
7501*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7502*795d594fSAndroid Build Coastguard Worker "VFadd_vv");
7503*795d594fSAndroid Build Coastguard Worker }
7504*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFadd_vf)7505*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFadd_vf) {
7506*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFadd_vf,
7507*795d594fSAndroid Build Coastguard Worker "vfadd.vf {reg1}, {reg2}, {reg3}{vm}",
7508*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7509*795d594fSAndroid Build Coastguard Worker "VFadd_vf");
7510*795d594fSAndroid Build Coastguard Worker }
7511*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFredusum_vs)7512*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFredusum_vs) {
7513*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VFredusum_vs, "vfredusum.vs {reg1}, {reg2}, {reg3}{vm}"),
7514*795d594fSAndroid Build Coastguard Worker "VFredusum_vs");
7515*795d594fSAndroid Build Coastguard Worker }
7516*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFsub_vv)7517*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFsub_vv) {
7518*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFsub_vv,
7519*795d594fSAndroid Build Coastguard Worker "vfsub.vv {reg1}, {reg2}, {reg3}{vm}",
7520*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7521*795d594fSAndroid Build Coastguard Worker "VFsub_vv");
7522*795d594fSAndroid Build Coastguard Worker }
7523*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFsub_vf)7524*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFsub_vf) {
7525*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFsub_vf,
7526*795d594fSAndroid Build Coastguard Worker "vfsub.vf {reg1}, {reg2}, {reg3}{vm}",
7527*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7528*795d594fSAndroid Build Coastguard Worker "VFsub_vf");
7529*795d594fSAndroid Build Coastguard Worker }
7530*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFredosum_vs)7531*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFredosum_vs) {
7532*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VFredosum_vs, "vfredosum.vs {reg1}, {reg2}, {reg3}{vm}"),
7533*795d594fSAndroid Build Coastguard Worker "VFredosum_vs");
7534*795d594fSAndroid Build Coastguard Worker }
7535*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmin_vv)7536*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmin_vv) {
7537*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFmin_vv,
7538*795d594fSAndroid Build Coastguard Worker "vfmin.vv {reg1}, {reg2}, {reg3}{vm}",
7539*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7540*795d594fSAndroid Build Coastguard Worker "VFmin_vv");
7541*795d594fSAndroid Build Coastguard Worker }
7542*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmin_vf)7543*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmin_vf) {
7544*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFmin_vf,
7545*795d594fSAndroid Build Coastguard Worker "vfmin.vf {reg1}, {reg2}, {reg3}{vm}",
7546*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7547*795d594fSAndroid Build Coastguard Worker "VFmin_vf");
7548*795d594fSAndroid Build Coastguard Worker }
7549*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFredmin_vs)7550*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFredmin_vs) {
7551*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VFredmin_vs, "vfredmin.vs {reg1}, {reg2}, {reg3}{vm}"),
7552*795d594fSAndroid Build Coastguard Worker "VFredmin_vs");
7553*795d594fSAndroid Build Coastguard Worker }
7554*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmax_vv)7555*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmax_vv) {
7556*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFmax_vv,
7557*795d594fSAndroid Build Coastguard Worker "vfmax.vv {reg1}, {reg2}, {reg3}{vm}",
7558*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7559*795d594fSAndroid Build Coastguard Worker "VFmax_vv");
7560*795d594fSAndroid Build Coastguard Worker }
7561*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmax_vf)7562*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmax_vf) {
7563*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFmax_vf,
7564*795d594fSAndroid Build Coastguard Worker "vfmax.vf {reg1}, {reg2}, {reg3}{vm}",
7565*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7566*795d594fSAndroid Build Coastguard Worker "VFmax_vf");
7567*795d594fSAndroid Build Coastguard Worker }
7568*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFredmax_vs)7569*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFredmax_vs) {
7570*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVm(&Riscv64Assembler::VFredmax_vs, "vfredmax.vs {reg1}, {reg2}, {reg3}{vm}"),
7571*795d594fSAndroid Build Coastguard Worker "VFredmax_vs");
7572*795d594fSAndroid Build Coastguard Worker }
7573*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFsgnj_vv)7574*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFsgnj_vv) {
7575*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFsgnj_vv,
7576*795d594fSAndroid Build Coastguard Worker "vfsgnj.vv {reg1}, {reg2}, {reg3}{vm}",
7577*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7578*795d594fSAndroid Build Coastguard Worker "VFsgnj_vv");
7579*795d594fSAndroid Build Coastguard Worker }
7580*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFsgnj_vf)7581*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFsgnj_vf) {
7582*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFsgnj_vf,
7583*795d594fSAndroid Build Coastguard Worker "vfsgnj.vf {reg1}, {reg2}, {reg3}{vm}",
7584*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7585*795d594fSAndroid Build Coastguard Worker "VFsgnj_vf");
7586*795d594fSAndroid Build Coastguard Worker }
7587*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFsgnjn_vv)7588*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFsgnjn_vv) {
7589*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFsgnjn_vv,
7590*795d594fSAndroid Build Coastguard Worker "vfsgnjn.vv {reg1}, {reg2}, {reg3}{vm}",
7591*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7592*795d594fSAndroid Build Coastguard Worker "VFsgnjn_vv");
7593*795d594fSAndroid Build Coastguard Worker }
7594*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFsgnjn_vf)7595*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFsgnjn_vf) {
7596*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFsgnjn_vf,
7597*795d594fSAndroid Build Coastguard Worker "vfsgnjn.vf {reg1}, {reg2}, {reg3}{vm}",
7598*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7599*795d594fSAndroid Build Coastguard Worker "VFsgnjn_vf");
7600*795d594fSAndroid Build Coastguard Worker }
7601*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFneg_v)7602*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFneg_v) {
7603*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVV(&Riscv64Assembler::VFneg_v, "vfneg.v {reg1}, {reg2}"), "VFneg_v");
7604*795d594fSAndroid Build Coastguard Worker }
7605*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFsgnjx_vv)7606*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFsgnjx_vv) {
7607*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFsgnjx_vv,
7608*795d594fSAndroid Build Coastguard Worker "vfsgnjx.vv {reg1}, {reg2}, {reg3}{vm}",
7609*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7610*795d594fSAndroid Build Coastguard Worker "VFsgnjx_vv");
7611*795d594fSAndroid Build Coastguard Worker }
7612*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFsgnjx_vf)7613*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFsgnjx_vf) {
7614*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFsgnjx_vf,
7615*795d594fSAndroid Build Coastguard Worker "vfsgnjx.vf {reg1}, {reg2}, {reg3}{vm}",
7616*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7617*795d594fSAndroid Build Coastguard Worker "VFsgnjx_vf");
7618*795d594fSAndroid Build Coastguard Worker }
7619*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFabs_v)7620*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFabs_v) {
7621*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVV(&Riscv64Assembler::VFabs_v, "vfabs.v {reg1}, {reg2}"), "VFabs_v");
7622*795d594fSAndroid Build Coastguard Worker }
7623*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFslide1up_vf)7624*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFslide1up_vf) {
7625*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFslide1up_vf,
7626*795d594fSAndroid Build Coastguard Worker "vfslide1up.vf {reg1}, {reg2}, {reg3}{vm}",
7627*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<FRegister>()),
7628*795d594fSAndroid Build Coastguard Worker "VFslide1up_vf");
7629*795d594fSAndroid Build Coastguard Worker }
7630*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFslide1down_vf)7631*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFslide1down_vf) {
7632*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFslide1down_vf,
7633*795d594fSAndroid Build Coastguard Worker "vfslide1down.vf {reg1}, {reg2}, {reg3}{vm}",
7634*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7635*795d594fSAndroid Build Coastguard Worker "VFslide1down_vf");
7636*795d594fSAndroid Build Coastguard Worker }
7637*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmerge_vfm)7638*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmerge_vfm) {
7639*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFFiltered(&Riscv64Assembler::VFmerge_vfm,
7640*795d594fSAndroid Build Coastguard Worker "vfmerge.vfm {reg1}, {reg2}, {reg3}, v0",
7641*795d594fSAndroid Build Coastguard Worker SkipV0<VRegister, FRegister>()),
7642*795d594fSAndroid Build Coastguard Worker "VFmerge_vfm");
7643*795d594fSAndroid Build Coastguard Worker }
7644*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmv_v_f)7645*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmv_v_f) {
7646*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVF(&Riscv64Assembler::VFmv_v_f, "vfmv.v.f {reg1}, {reg2}"), "VFmv_v_f");
7647*795d594fSAndroid Build Coastguard Worker }
7648*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfeq_vv)7649*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfeq_vv) {
7650*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMfeq_vv,
7651*795d594fSAndroid Build Coastguard Worker "vmfeq.vv {reg1}, {reg2}, {reg3}{vm}",
7652*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7653*795d594fSAndroid Build Coastguard Worker "VMfeq_vv");
7654*795d594fSAndroid Build Coastguard Worker }
7655*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfeq_vf)7656*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfeq_vf) {
7657*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VMfeq_vf,
7658*795d594fSAndroid Build Coastguard Worker "vmfeq.vf {reg1}, {reg2}, {reg3}{vm}",
7659*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7660*795d594fSAndroid Build Coastguard Worker "VMfeq_vf");
7661*795d594fSAndroid Build Coastguard Worker }
7662*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfle_vv)7663*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfle_vv) {
7664*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMfle_vv,
7665*795d594fSAndroid Build Coastguard Worker "vmfle.vv {reg1}, {reg2}, {reg3}{vm}",
7666*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7667*795d594fSAndroid Build Coastguard Worker "VMfle_vv");
7668*795d594fSAndroid Build Coastguard Worker }
7669*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfle_vf)7670*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfle_vf) {
7671*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VMfle_vf,
7672*795d594fSAndroid Build Coastguard Worker "vmfle.vf {reg1}, {reg2}, {reg3}{vm}",
7673*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7674*795d594fSAndroid Build Coastguard Worker "VMfle_vf");
7675*795d594fSAndroid Build Coastguard Worker }
7676*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfge_vv)7677*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfge_vv) {
7678*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMfge_vv,
7679*795d594fSAndroid Build Coastguard Worker "vmfge.vv {reg1}, {reg2}, {reg3}{vm}",
7680*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7681*795d594fSAndroid Build Coastguard Worker "VMfge_vv");
7682*795d594fSAndroid Build Coastguard Worker }
7683*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMflt_vv)7684*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMflt_vv) {
7685*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMflt_vv,
7686*795d594fSAndroid Build Coastguard Worker "vmflt.vv {reg1}, {reg2}, {reg3}{vm}",
7687*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7688*795d594fSAndroid Build Coastguard Worker "VMflt_vv");
7689*795d594fSAndroid Build Coastguard Worker }
7690*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMflt_vf)7691*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMflt_vf) {
7692*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VMflt_vf,
7693*795d594fSAndroid Build Coastguard Worker "vmflt.vf {reg1}, {reg2}, {reg3}{vm}",
7694*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7695*795d594fSAndroid Build Coastguard Worker "VMflt_vf");
7696*795d594fSAndroid Build Coastguard Worker }
7697*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfgt_vv)7698*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfgt_vv) {
7699*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMfgt_vv,
7700*795d594fSAndroid Build Coastguard Worker "vmfgt.vv {reg1}, {reg2}, {reg3}{vm}",
7701*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7702*795d594fSAndroid Build Coastguard Worker "VMfgt_vv");
7703*795d594fSAndroid Build Coastguard Worker }
7704*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfne_vv)7705*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfne_vv) {
7706*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VMfne_vv,
7707*795d594fSAndroid Build Coastguard Worker "vmfne.vv {reg1}, {reg2}, {reg3}{vm}",
7708*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7709*795d594fSAndroid Build Coastguard Worker "VMfne_vv");
7710*795d594fSAndroid Build Coastguard Worker }
7711*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfne_vf)7712*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfne_vf) {
7713*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VMfne_vf,
7714*795d594fSAndroid Build Coastguard Worker "vmfne.vf {reg1}, {reg2}, {reg3}{vm}",
7715*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7716*795d594fSAndroid Build Coastguard Worker "VMfne_vf");
7717*795d594fSAndroid Build Coastguard Worker }
7718*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfgt_vf)7719*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfgt_vf) {
7720*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VMfgt_vf,
7721*795d594fSAndroid Build Coastguard Worker "vmfgt.vf {reg1}, {reg2}, {reg3}{vm}",
7722*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7723*795d594fSAndroid Build Coastguard Worker "VMfgt_vf");
7724*795d594fSAndroid Build Coastguard Worker }
7725*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMfge_vf)7726*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMfge_vf) {
7727*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VMfge_vf,
7728*795d594fSAndroid Build Coastguard Worker "vmfge.vf {reg1}, {reg2}, {reg3}{vm}",
7729*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7730*795d594fSAndroid Build Coastguard Worker "VMfge_vf");
7731*795d594fSAndroid Build Coastguard Worker }
7732*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFdiv_vv)7733*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFdiv_vv) {
7734*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFdiv_vv,
7735*795d594fSAndroid Build Coastguard Worker "vfdiv.vv {reg1}, {reg2}, {reg3}{vm}",
7736*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7737*795d594fSAndroid Build Coastguard Worker "VFdiv_vv");
7738*795d594fSAndroid Build Coastguard Worker }
7739*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFdiv_vf)7740*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFdiv_vf) {
7741*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFdiv_vf,
7742*795d594fSAndroid Build Coastguard Worker "vfdiv.vf {reg1}, {reg2}, {reg3}{vm}",
7743*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7744*795d594fSAndroid Build Coastguard Worker "VFdiv_vf");
7745*795d594fSAndroid Build Coastguard Worker }
7746*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFrdiv_vf)7747*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFrdiv_vf) {
7748*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFrdiv_vf,
7749*795d594fSAndroid Build Coastguard Worker "vfrdiv.vf {reg1}, {reg2}, {reg3}{vm}",
7750*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7751*795d594fSAndroid Build Coastguard Worker "VFrdiv_vf");
7752*795d594fSAndroid Build Coastguard Worker }
7753*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmul_vv)7754*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmul_vv) {
7755*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFmul_vv,
7756*795d594fSAndroid Build Coastguard Worker "vfmul.vv {reg1}, {reg2}, {reg3}{vm}",
7757*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7758*795d594fSAndroid Build Coastguard Worker "VFmul_vv");
7759*795d594fSAndroid Build Coastguard Worker }
7760*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmul_vf)7761*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmul_vf) {
7762*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFmul_vf,
7763*795d594fSAndroid Build Coastguard Worker "vfmul.vf {reg1}, {reg2}, {reg3}{vm}",
7764*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7765*795d594fSAndroid Build Coastguard Worker "VFmul_vf");
7766*795d594fSAndroid Build Coastguard Worker }
7767*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFrsub_vf)7768*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFrsub_vf) {
7769*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFrsub_vf,
7770*795d594fSAndroid Build Coastguard Worker "vfrsub.vf {reg1}, {reg2}, {reg3}{vm}",
7771*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7772*795d594fSAndroid Build Coastguard Worker "VFrsub_vf");
7773*795d594fSAndroid Build Coastguard Worker }
7774*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmadd_vv)7775*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmadd_vv) {
7776*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFmadd_vv,
7777*795d594fSAndroid Build Coastguard Worker "vfmadd.vv {reg1}, {reg2}, {reg3}{vm}",
7778*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7779*795d594fSAndroid Build Coastguard Worker "VFmadd_vv");
7780*795d594fSAndroid Build Coastguard Worker }
7781*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmadd_vf)7782*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmadd_vf) {
7783*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFmadd_vf,
7784*795d594fSAndroid Build Coastguard Worker "vfmadd.vf {reg1}, {reg2}, {reg3}{vm}",
7785*795d594fSAndroid Build Coastguard Worker SkipV0Vm<FRegister, VRegister>()),
7786*795d594fSAndroid Build Coastguard Worker "VFmadd_vf");
7787*795d594fSAndroid Build Coastguard Worker }
7788*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFnmadd_vv)7789*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFnmadd_vv) {
7790*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFnmadd_vv,
7791*795d594fSAndroid Build Coastguard Worker "vfnmadd.vv {reg1}, {reg2}, {reg3}{vm}",
7792*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7793*795d594fSAndroid Build Coastguard Worker "VFnmadd_vv");
7794*795d594fSAndroid Build Coastguard Worker }
7795*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFnmadd_vf)7796*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFnmadd_vf) {
7797*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFnmadd_vf,
7798*795d594fSAndroid Build Coastguard Worker "vfnmadd.vf {reg1}, {reg2}, {reg3}{vm}",
7799*795d594fSAndroid Build Coastguard Worker SkipV0Vm<FRegister, VRegister>()),
7800*795d594fSAndroid Build Coastguard Worker "VFnmadd_vf");
7801*795d594fSAndroid Build Coastguard Worker }
7802*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmsub_vv)7803*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmsub_vv) {
7804*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFmsub_vv,
7805*795d594fSAndroid Build Coastguard Worker "vfmsub.vv {reg1}, {reg2}, {reg3}{vm}",
7806*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7807*795d594fSAndroid Build Coastguard Worker "VFmsub_vv");
7808*795d594fSAndroid Build Coastguard Worker }
7809*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmsub_vf)7810*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmsub_vf) {
7811*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFmsub_vf,
7812*795d594fSAndroid Build Coastguard Worker "vfmsub.vf {reg1}, {reg2}, {reg3}{vm}",
7813*795d594fSAndroid Build Coastguard Worker SkipV0Vm<FRegister, VRegister>()),
7814*795d594fSAndroid Build Coastguard Worker "VFmsub_vf");
7815*795d594fSAndroid Build Coastguard Worker }
7816*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFnmsub_vv)7817*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFnmsub_vv) {
7818*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFnmsub_vv,
7819*795d594fSAndroid Build Coastguard Worker "vfnmsub.vv {reg1}, {reg2}, {reg3}{vm}",
7820*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7821*795d594fSAndroid Build Coastguard Worker "VFnmsub_vv");
7822*795d594fSAndroid Build Coastguard Worker }
7823*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFnmsub_vf)7824*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFnmsub_vf) {
7825*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFnmsub_vf,
7826*795d594fSAndroid Build Coastguard Worker "vfnmsub.vf {reg1}, {reg2}, {reg3}{vm}",
7827*795d594fSAndroid Build Coastguard Worker SkipV0Vm<FRegister, VRegister>()),
7828*795d594fSAndroid Build Coastguard Worker "VFnmsub_vf");
7829*795d594fSAndroid Build Coastguard Worker }
7830*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmacc_vv)7831*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmacc_vv) {
7832*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFmacc_vv,
7833*795d594fSAndroid Build Coastguard Worker "vfmacc.vv {reg1}, {reg2}, {reg3}{vm}",
7834*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7835*795d594fSAndroid Build Coastguard Worker "VFmacc_vv");
7836*795d594fSAndroid Build Coastguard Worker }
7837*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmacc_vf)7838*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmacc_vf) {
7839*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFmacc_vf,
7840*795d594fSAndroid Build Coastguard Worker "vfmacc.vf {reg1}, {reg2}, {reg3}{vm}",
7841*795d594fSAndroid Build Coastguard Worker SkipV0Vm<FRegister, VRegister>()),
7842*795d594fSAndroid Build Coastguard Worker "VFmacc_vf");
7843*795d594fSAndroid Build Coastguard Worker }
7844*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFnmacc_vv)7845*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFnmacc_vv) {
7846*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFnmacc_vv,
7847*795d594fSAndroid Build Coastguard Worker "vfnmacc.vv {reg1}, {reg2}, {reg3}{vm}",
7848*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7849*795d594fSAndroid Build Coastguard Worker "VFnmacc_vv");
7850*795d594fSAndroid Build Coastguard Worker }
7851*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFnmacc_vf)7852*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFnmacc_vf) {
7853*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFnmacc_vf,
7854*795d594fSAndroid Build Coastguard Worker "vfnmacc.vf {reg1}, {reg2}, {reg3}{vm}",
7855*795d594fSAndroid Build Coastguard Worker SkipV0Vm<FRegister, VRegister>()),
7856*795d594fSAndroid Build Coastguard Worker "VFnmacc_vf");
7857*795d594fSAndroid Build Coastguard Worker }
7858*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmsac_vv)7859*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmsac_vv) {
7860*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFmsac_vv,
7861*795d594fSAndroid Build Coastguard Worker "vfmsac.vv {reg1}, {reg2}, {reg3}{vm}",
7862*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7863*795d594fSAndroid Build Coastguard Worker "VFmsac_vv");
7864*795d594fSAndroid Build Coastguard Worker }
7865*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmsac_vf)7866*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmsac_vf) {
7867*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFmsac_vf,
7868*795d594fSAndroid Build Coastguard Worker "vfmsac.vf {reg1}, {reg2}, {reg3}{vm}",
7869*795d594fSAndroid Build Coastguard Worker SkipV0Vm<FRegister, VRegister>()),
7870*795d594fSAndroid Build Coastguard Worker "VFmsac_vf");
7871*795d594fSAndroid Build Coastguard Worker }
7872*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFnmsac_vv)7873*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFnmsac_vv) {
7874*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFnmsac_vv,
7875*795d594fSAndroid Build Coastguard Worker "vfnmsac.vv {reg1}, {reg2}, {reg3}{vm}",
7876*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7877*795d594fSAndroid Build Coastguard Worker "VFnmsac_vv");
7878*795d594fSAndroid Build Coastguard Worker }
7879*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFnmsac_vf)7880*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFnmsac_vf) {
7881*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFnmsac_vf,
7882*795d594fSAndroid Build Coastguard Worker "vfnmsac.vf {reg1}, {reg2}, {reg3}{vm}",
7883*795d594fSAndroid Build Coastguard Worker SkipV0Vm<FRegister, VRegister>()),
7884*795d594fSAndroid Build Coastguard Worker "VFnmsac_vf");
7885*795d594fSAndroid Build Coastguard Worker }
7886*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwadd_vv)7887*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwadd_vv) {
7888*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwadd_vv,
7889*795d594fSAndroid Build Coastguard Worker "vfwadd.vv {reg1}, {reg2}, {reg3}{vm}",
7890*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7891*795d594fSAndroid Build Coastguard Worker "VFwadd_vv");
7892*795d594fSAndroid Build Coastguard Worker }
7893*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwadd_vf)7894*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwadd_vf) {
7895*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFwadd_vf,
7896*795d594fSAndroid Build Coastguard Worker "vfwadd.vf {reg1}, {reg2}, {reg3}{vm}",
7897*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<FRegister>()),
7898*795d594fSAndroid Build Coastguard Worker "VFwadd_vf");
7899*795d594fSAndroid Build Coastguard Worker }
7900*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwredusum_vs)7901*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwredusum_vs) {
7902*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwredusum_vs,
7903*795d594fSAndroid Build Coastguard Worker "vfwredusum.vs {reg1}, {reg2}, {reg3}{vm}",
7904*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, VRegister>()),
7905*795d594fSAndroid Build Coastguard Worker "VFwredusum_vs");
7906*795d594fSAndroid Build Coastguard Worker }
7907*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwsub_vv)7908*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwsub_vv) {
7909*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwsub_vv,
7910*795d594fSAndroid Build Coastguard Worker "vfwsub.vv {reg1}, {reg2}, {reg3}{vm}",
7911*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7912*795d594fSAndroid Build Coastguard Worker "VFwsub_vv");
7913*795d594fSAndroid Build Coastguard Worker }
7914*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwsub_vf)7915*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwsub_vf) {
7916*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFwsub_vf,
7917*795d594fSAndroid Build Coastguard Worker "vfwsub.vf {reg1}, {reg2}, {reg3}{vm}",
7918*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<FRegister>()),
7919*795d594fSAndroid Build Coastguard Worker "VFwsub_vf");
7920*795d594fSAndroid Build Coastguard Worker }
7921*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwredosum_vs)7922*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwredosum_vs) {
7923*795d594fSAndroid Build Coastguard Worker DriverStr(
7924*795d594fSAndroid Build Coastguard Worker RepeatVVVVm(&Riscv64Assembler::VFwredosum_vs, "vfwredosum.vs {reg1}, {reg2}, {reg3}{vm}"),
7925*795d594fSAndroid Build Coastguard Worker "VFwredosum_vs");
7926*795d594fSAndroid Build Coastguard Worker }
7927*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwadd_wv)7928*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwadd_wv) {
7929*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwadd_wv,
7930*795d594fSAndroid Build Coastguard Worker "vfwadd.wv {reg1}, {reg2}, {reg3}{vm}",
7931*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<VRegister>()),
7932*795d594fSAndroid Build Coastguard Worker "VFwadd_wv");
7933*795d594fSAndroid Build Coastguard Worker }
7934*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwadd_wf)7935*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwadd_wf) {
7936*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFwadd_wf,
7937*795d594fSAndroid Build Coastguard Worker "vfwadd.wf {reg1}, {reg2}, {reg3}{vm}",
7938*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7939*795d594fSAndroid Build Coastguard Worker "VFwadd_wf");
7940*795d594fSAndroid Build Coastguard Worker }
7941*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwsub_wv)7942*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwsub_wv) {
7943*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwsub_wv,
7944*795d594fSAndroid Build Coastguard Worker "vfwsub.wv {reg1}, {reg2}, {reg3}{vm}",
7945*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<VRegister>()),
7946*795d594fSAndroid Build Coastguard Worker "VFwsub_wv");
7947*795d594fSAndroid Build Coastguard Worker }
7948*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwsub_wf)7949*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwsub_wf) {
7950*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFwsub_wf,
7951*795d594fSAndroid Build Coastguard Worker "vfwsub.wf {reg1}, {reg2}, {reg3}{vm}",
7952*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister, FRegister>()),
7953*795d594fSAndroid Build Coastguard Worker "VFwsub_wf");
7954*795d594fSAndroid Build Coastguard Worker }
7955*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwmul_vv)7956*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwmul_vv) {
7957*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwmul_vv,
7958*795d594fSAndroid Build Coastguard Worker "vfwmul.vv {reg1}, {reg2}, {reg3}{vm}",
7959*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7960*795d594fSAndroid Build Coastguard Worker "VFwmul_vv");
7961*795d594fSAndroid Build Coastguard Worker }
7962*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwmul_vf)7963*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwmul_vf) {
7964*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVFVmFiltered(&Riscv64Assembler::VFwmul_vf,
7965*795d594fSAndroid Build Coastguard Worker "vfwmul.vf {reg1}, {reg2}, {reg3}{vm}",
7966*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2Overlap<FRegister>()),
7967*795d594fSAndroid Build Coastguard Worker "VFwmul_vf");
7968*795d594fSAndroid Build Coastguard Worker }
7969*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwmacc_vv)7970*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwmacc_vv) {
7971*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwmacc_vv,
7972*795d594fSAndroid Build Coastguard Worker "vfwmacc.vv {reg1}, {reg2}, {reg3}{vm}",
7973*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7974*795d594fSAndroid Build Coastguard Worker "VFwmacc_vv");
7975*795d594fSAndroid Build Coastguard Worker }
7976*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwmacc_vf)7977*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwmacc_vf) {
7978*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFwmacc_vf,
7979*795d594fSAndroid Build Coastguard Worker "vfwmacc.vf {reg1}, {reg2}, {reg3}{vm}",
7980*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<FRegister>()),
7981*795d594fSAndroid Build Coastguard Worker "VFwmacc_vf");
7982*795d594fSAndroid Build Coastguard Worker }
7983*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwnmacc_vv)7984*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwnmacc_vv) {
7985*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwnmacc_vv,
7986*795d594fSAndroid Build Coastguard Worker "vfwnmacc.vv {reg1}, {reg2}, {reg3}{vm}",
7987*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
7988*795d594fSAndroid Build Coastguard Worker "VFwnmacc_vv");
7989*795d594fSAndroid Build Coastguard Worker }
7990*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwnmacc_vf)7991*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwnmacc_vf) {
7992*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFwnmacc_vf,
7993*795d594fSAndroid Build Coastguard Worker "vfwnmacc.vf {reg1}, {reg2}, {reg3}{vm}",
7994*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<FRegister>()),
7995*795d594fSAndroid Build Coastguard Worker "VFwnmacc_vf");
7996*795d594fSAndroid Build Coastguard Worker }
7997*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwmsac_vv)7998*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwmsac_vv) {
7999*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwmsac_vv,
8000*795d594fSAndroid Build Coastguard Worker "vfwmsac.vv {reg1}, {reg2}, {reg3}{vm}",
8001*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
8002*795d594fSAndroid Build Coastguard Worker "VFwmsac_vv");
8003*795d594fSAndroid Build Coastguard Worker }
8004*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwmsac_vf)8005*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwmsac_vf) {
8006*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFwmsac_vf,
8007*795d594fSAndroid Build Coastguard Worker "vfwmsac.vf {reg1}, {reg2}, {reg3}{vm}",
8008*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<FRegister>()),
8009*795d594fSAndroid Build Coastguard Worker "VFwmsac_vf");
8010*795d594fSAndroid Build Coastguard Worker }
8011*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwnmsac_vv)8012*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwnmsac_vv) {
8013*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVVmFiltered(&Riscv64Assembler::VFwnmsac_vv,
8014*795d594fSAndroid Build Coastguard Worker "vfwnmsac.vv {reg1}, {reg2}, {reg3}{vm}",
8015*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R2R3Overlap()),
8016*795d594fSAndroid Build Coastguard Worker "VFwnmsac_vv");
8017*795d594fSAndroid Build Coastguard Worker }
8018*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwnmsac_vf)8019*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwnmsac_vf) {
8020*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVFVVmFiltered(&Riscv64Assembler::VFwnmsac_vf,
8021*795d594fSAndroid Build Coastguard Worker "vfwnmsac.vf {reg1}, {reg2}, {reg3}{vm}",
8022*795d594fSAndroid Build Coastguard Worker VXVVmSkipV0VmAndNoR1R3Overlap<FRegister>()),
8023*795d594fSAndroid Build Coastguard Worker "VFwnmsac_vf");
8024*795d594fSAndroid Build Coastguard Worker }
8025*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMv_s_x)8026*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMv_s_x) {
8027*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVR(&Riscv64Assembler::VMv_s_x, "vmv.s.x {reg1}, {reg2}"), "VMv_s_x");
8028*795d594fSAndroid Build Coastguard Worker }
8029*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMv_x_s)8030*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMv_x_s) {
8031*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRV(&Riscv64Assembler::VMv_x_s, "vmv.x.s {reg1}, {reg2}"), "VMv_x_s");
8032*795d594fSAndroid Build Coastguard Worker }
8033*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VCpop_m)8034*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VCpop_m) {
8035*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRVVm(&Riscv64Assembler::VCpop_m, "vcpop.m {reg1}, {reg2}{vm}"), "VCpop_m");
8036*795d594fSAndroid Build Coastguard Worker }
8037*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFirst_m)8038*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFirst_m) {
8039*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRVVm(&Riscv64Assembler::VFirst_m, "vfirst.m {reg1}, {reg2}{vm}"), "VFirst_m");
8040*795d594fSAndroid Build Coastguard Worker }
8041*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VZext_vf8)8042*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VZext_vf8) {
8043*795d594fSAndroid Build Coastguard Worker DriverStr(
8044*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8045*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VZext_vf8, "vzext.vf8 {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8046*795d594fSAndroid Build Coastguard Worker "VZext_vf8");
8047*795d594fSAndroid Build Coastguard Worker }
8048*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSext_vf8)8049*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSext_vf8) {
8050*795d594fSAndroid Build Coastguard Worker DriverStr(
8051*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8052*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VSext_vf8, "vsext.vf8 {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8053*795d594fSAndroid Build Coastguard Worker "VSext_vf8");
8054*795d594fSAndroid Build Coastguard Worker }
8055*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VZext_vf4)8056*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VZext_vf4) {
8057*795d594fSAndroid Build Coastguard Worker DriverStr(
8058*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8059*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VZext_vf4, "vzext.vf4 {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8060*795d594fSAndroid Build Coastguard Worker "VZext_vf4");
8061*795d594fSAndroid Build Coastguard Worker }
8062*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSext_vf4)8063*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSext_vf4) {
8064*795d594fSAndroid Build Coastguard Worker DriverStr(
8065*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8066*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VSext_vf4, "vsext.vf4 {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8067*795d594fSAndroid Build Coastguard Worker "VSext_vf4");
8068*795d594fSAndroid Build Coastguard Worker }
8069*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VZext_vf2)8070*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VZext_vf2) {
8071*795d594fSAndroid Build Coastguard Worker DriverStr(
8072*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8073*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VZext_vf2, "vzext.vf2 {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8074*795d594fSAndroid Build Coastguard Worker "VZext_vf2");
8075*795d594fSAndroid Build Coastguard Worker }
8076*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VSext_vf2)8077*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VSext_vf2) {
8078*795d594fSAndroid Build Coastguard Worker DriverStr(
8079*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8080*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VSext_vf2, "vsext.vf2 {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8081*795d594fSAndroid Build Coastguard Worker "VSext_vf2");
8082*795d594fSAndroid Build Coastguard Worker }
8083*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmv_s_f)8084*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmv_s_f) {
8085*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVF(&Riscv64Assembler::VFmv_s_f, "vfmv.s.f {reg1}, {reg2}"), "VFmv_s_f");
8086*795d594fSAndroid Build Coastguard Worker }
8087*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFmv_f_s)8088*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFmv_f_s) {
8089*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFV(&Riscv64Assembler::VFmv_f_s, "vfmv.f.s {reg1}, {reg2}"), "VFmv_f_s");
8090*795d594fSAndroid Build Coastguard Worker }
8091*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFcvt_xu_f_v)8092*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFcvt_xu_f_v) {
8093*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFcvt_xu_f_v,
8094*795d594fSAndroid Build Coastguard Worker "vfcvt.xu.f.v {reg1}, {reg2}{vm}",
8095*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8096*795d594fSAndroid Build Coastguard Worker "VFcvt_xu_f_v");
8097*795d594fSAndroid Build Coastguard Worker }
8098*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFcvt_x_f_v)8099*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFcvt_x_f_v) {
8100*795d594fSAndroid Build Coastguard Worker DriverStr(
8101*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8102*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VFcvt_x_f_v, "vfcvt.x.f.v {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8103*795d594fSAndroid Build Coastguard Worker "VFcvt_x_f_v");
8104*795d594fSAndroid Build Coastguard Worker }
8105*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFcvt_f_xu_v)8106*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFcvt_f_xu_v) {
8107*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFcvt_f_xu_v,
8108*795d594fSAndroid Build Coastguard Worker "vfcvt.f.xu.v {reg1}, {reg2}{vm}",
8109*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8110*795d594fSAndroid Build Coastguard Worker "VFcvt_f_xu_v");
8111*795d594fSAndroid Build Coastguard Worker }
8112*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFcvt_f_x_v)8113*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFcvt_f_x_v) {
8114*795d594fSAndroid Build Coastguard Worker DriverStr(
8115*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8116*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VFcvt_f_x_v, "vfcvt.f.x.v {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8117*795d594fSAndroid Build Coastguard Worker "VFcvt_f_x_v");
8118*795d594fSAndroid Build Coastguard Worker }
8119*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFcvt_rtz_xu_f_v)8120*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFcvt_rtz_xu_f_v) {
8121*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFcvt_rtz_xu_f_v,
8122*795d594fSAndroid Build Coastguard Worker "vfcvt.rtz.xu.f.v {reg1}, {reg2}{vm}",
8123*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8124*795d594fSAndroid Build Coastguard Worker "VFcvt_rtz_xu_f_v");
8125*795d594fSAndroid Build Coastguard Worker }
8126*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFcvt_rtz_x_f_v)8127*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFcvt_rtz_x_f_v) {
8128*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFcvt_rtz_x_f_v,
8129*795d594fSAndroid Build Coastguard Worker "vfcvt.rtz.x.f.v {reg1}, {reg2}{vm}",
8130*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8131*795d594fSAndroid Build Coastguard Worker "VFcvt_rtz_x_f_v");
8132*795d594fSAndroid Build Coastguard Worker }
8133*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwcvt_xu_f_v)8134*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwcvt_xu_f_v) {
8135*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFwcvt_xu_f_v,
8136*795d594fSAndroid Build Coastguard Worker "vfwcvt.xu.f.v {reg1}, {reg2}{vm}",
8137*795d594fSAndroid Build Coastguard Worker VVVmSkipV0VmAndNoR1R2Overlap()),
8138*795d594fSAndroid Build Coastguard Worker "VFwcvt_xu_f_v");
8139*795d594fSAndroid Build Coastguard Worker }
8140*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwcvt_x_f_v)8141*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwcvt_x_f_v) {
8142*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFwcvt_x_f_v,
8143*795d594fSAndroid Build Coastguard Worker "vfwcvt.x.f.v {reg1}, {reg2}{vm}",
8144*795d594fSAndroid Build Coastguard Worker VVVmSkipV0VmAndNoR1R2Overlap()),
8145*795d594fSAndroid Build Coastguard Worker "VFwcvt_x_f_v");
8146*795d594fSAndroid Build Coastguard Worker }
8147*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwcvt_f_xu_v)8148*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwcvt_f_xu_v) {
8149*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFwcvt_f_xu_v,
8150*795d594fSAndroid Build Coastguard Worker "vfwcvt.f.xu.v {reg1}, {reg2}{vm}",
8151*795d594fSAndroid Build Coastguard Worker VVVmSkipV0VmAndNoR1R2Overlap()),
8152*795d594fSAndroid Build Coastguard Worker "VFwcvt_f_xu_v");
8153*795d594fSAndroid Build Coastguard Worker }
8154*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwcvt_f_x_v)8155*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwcvt_f_x_v) {
8156*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFwcvt_f_x_v,
8157*795d594fSAndroid Build Coastguard Worker "vfwcvt.f.x.v {reg1}, {reg2}{vm}",
8158*795d594fSAndroid Build Coastguard Worker VVVmSkipV0VmAndNoR1R2Overlap()),
8159*795d594fSAndroid Build Coastguard Worker "VFwcvt_f_x_v");
8160*795d594fSAndroid Build Coastguard Worker }
8161*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwcvt_f_f_v)8162*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwcvt_f_f_v) {
8163*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFwcvt_f_f_v,
8164*795d594fSAndroid Build Coastguard Worker "vfwcvt.f.f.v {reg1}, {reg2}{vm}",
8165*795d594fSAndroid Build Coastguard Worker VVVmSkipV0VmAndNoR1R2Overlap()),
8166*795d594fSAndroid Build Coastguard Worker "VFwcvt_f_f_v");
8167*795d594fSAndroid Build Coastguard Worker }
8168*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwcvt_rtz_xu_f_v)8169*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwcvt_rtz_xu_f_v) {
8170*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFwcvt_rtz_xu_f_v,
8171*795d594fSAndroid Build Coastguard Worker "vfwcvt.rtz.xu.f.v {reg1}, {reg2}{vm}",
8172*795d594fSAndroid Build Coastguard Worker VVVmSkipV0VmAndNoR1R2Overlap()),
8173*795d594fSAndroid Build Coastguard Worker "VFwcvt_rtz_xu_f_v");
8174*795d594fSAndroid Build Coastguard Worker }
8175*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFwcvt_rtz_x_f_v)8176*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFwcvt_rtz_x_f_v) {
8177*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFwcvt_rtz_x_f_v,
8178*795d594fSAndroid Build Coastguard Worker "vfwcvt.rtz.x.f.v {reg1}, {reg2}{vm}",
8179*795d594fSAndroid Build Coastguard Worker VVVmSkipV0VmAndNoR1R2Overlap()),
8180*795d594fSAndroid Build Coastguard Worker "VFwcvt_rtz_x_f_v");
8181*795d594fSAndroid Build Coastguard Worker }
8182*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFncvt_xu_f_w)8183*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFncvt_xu_f_w) {
8184*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFncvt_xu_f_w,
8185*795d594fSAndroid Build Coastguard Worker "vfncvt.xu.f.w {reg1}, {reg2}{vm}",
8186*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8187*795d594fSAndroid Build Coastguard Worker "VFncvt_xu_f_w");
8188*795d594fSAndroid Build Coastguard Worker }
8189*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFncvt_x_f_w)8190*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFncvt_x_f_w) {
8191*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFncvt_x_f_w,
8192*795d594fSAndroid Build Coastguard Worker "vfncvt.x.f.w {reg1}, {reg2}{vm}",
8193*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8194*795d594fSAndroid Build Coastguard Worker "VFncvt_x_f_w");
8195*795d594fSAndroid Build Coastguard Worker }
8196*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFncvt_f_xu_w)8197*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFncvt_f_xu_w) {
8198*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFncvt_f_xu_w,
8199*795d594fSAndroid Build Coastguard Worker "vfncvt.f.xu.w {reg1}, {reg2}{vm}",
8200*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8201*795d594fSAndroid Build Coastguard Worker "VFncvt_f_xu_w");
8202*795d594fSAndroid Build Coastguard Worker }
8203*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFncvt_f_x_w)8204*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFncvt_f_x_w) {
8205*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFncvt_f_x_w,
8206*795d594fSAndroid Build Coastguard Worker "vfncvt.f.x.w {reg1}, {reg2}{vm}",
8207*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8208*795d594fSAndroid Build Coastguard Worker "VFncvt_f_x_w");
8209*795d594fSAndroid Build Coastguard Worker }
8210*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFncvt_f_f_w)8211*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFncvt_f_f_w) {
8212*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFncvt_f_f_w,
8213*795d594fSAndroid Build Coastguard Worker "vfncvt.f.f.w {reg1}, {reg2}{vm}",
8214*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8215*795d594fSAndroid Build Coastguard Worker "VFncvt_f_f_w");
8216*795d594fSAndroid Build Coastguard Worker }
8217*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFncvt_rod_f_f_w)8218*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFncvt_rod_f_f_w) {
8219*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFncvt_rod_f_f_w,
8220*795d594fSAndroid Build Coastguard Worker "vfncvt.rod.f.f.w {reg1}, {reg2}{vm}",
8221*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8222*795d594fSAndroid Build Coastguard Worker "VFncvt_rod_f_f_w");
8223*795d594fSAndroid Build Coastguard Worker }
8224*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFncvt_rtz_xu_f_w)8225*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFncvt_rtz_xu_f_w) {
8226*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFncvt_rtz_xu_f_w,
8227*795d594fSAndroid Build Coastguard Worker "vfncvt.rtz.xu.f.w {reg1}, {reg2}{vm}",
8228*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8229*795d594fSAndroid Build Coastguard Worker "VFncvt_rtz_xu_f_w");
8230*795d594fSAndroid Build Coastguard Worker }
8231*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFncvt_rtz_x_f_w)8232*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFncvt_rtz_x_f_w) {
8233*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(&Riscv64Assembler::VFncvt_rtz_x_f_w,
8234*795d594fSAndroid Build Coastguard Worker "vfncvt.rtz.x.f.w {reg1}, {reg2}{vm}",
8235*795d594fSAndroid Build Coastguard Worker SkipV0Vm<VRegister>()),
8236*795d594fSAndroid Build Coastguard Worker "VFncvt_rtz_x_f_w");
8237*795d594fSAndroid Build Coastguard Worker }
8238*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFsqrt_v)8239*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFsqrt_v) {
8240*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(
8241*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VFsqrt_v, "vfsqrt.v {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8242*795d594fSAndroid Build Coastguard Worker "VFsqrt_v");
8243*795d594fSAndroid Build Coastguard Worker }
8244*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFrsqrt7_v)8245*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFrsqrt7_v) {
8246*795d594fSAndroid Build Coastguard Worker DriverStr(
8247*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8248*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VFrsqrt7_v, "vfrsqrt7.v {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8249*795d594fSAndroid Build Coastguard Worker "VFrsqrt7_v");
8250*795d594fSAndroid Build Coastguard Worker }
8251*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFrec7_v)8252*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFrec7_v) {
8253*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVVmFiltered(
8254*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VFrec7_v, "vfrec7.v {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8255*795d594fSAndroid Build Coastguard Worker "VFrec7_v");
8256*795d594fSAndroid Build Coastguard Worker }
8257*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VFclass_v)8258*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VFclass_v) {
8259*795d594fSAndroid Build Coastguard Worker DriverStr(
8260*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8261*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VFclass_v, "vfclass.v {reg1}, {reg2}{vm}", SkipV0Vm<VRegister>()),
8262*795d594fSAndroid Build Coastguard Worker "VFclass_v");
8263*795d594fSAndroid Build Coastguard Worker }
8264*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsbf_m)8265*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsbf_m) {
8266*795d594fSAndroid Build Coastguard Worker DriverStr(
8267*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8268*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VMsbf_m, "vmsbf.m {reg1}, {reg2}{vm}", VVVmSkipV0VmAndNoR1R2Overlap()),
8269*795d594fSAndroid Build Coastguard Worker "VMsbf_m");
8270*795d594fSAndroid Build Coastguard Worker }
8271*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsof_m)8272*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsof_m) {
8273*795d594fSAndroid Build Coastguard Worker DriverStr(
8274*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8275*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VMsof_m, "vmsof.m {reg1}, {reg2}{vm}", VVVmSkipV0VmAndNoR1R2Overlap()),
8276*795d594fSAndroid Build Coastguard Worker "VMsof_m");
8277*795d594fSAndroid Build Coastguard Worker }
8278*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VMsif_m)8279*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VMsif_m) {
8280*795d594fSAndroid Build Coastguard Worker DriverStr(
8281*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8282*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VMsif_m, "vmsif.m {reg1}, {reg2}{vm}", VVVmSkipV0VmAndNoR1R2Overlap()),
8283*795d594fSAndroid Build Coastguard Worker "VMsif_m");
8284*795d594fSAndroid Build Coastguard Worker }
8285*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VIota_m)8286*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VIota_m) {
8287*795d594fSAndroid Build Coastguard Worker DriverStr(
8288*795d594fSAndroid Build Coastguard Worker RepeatVVVmFiltered(
8289*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::VIota_m, "viota.m {reg1}, {reg2}{vm}", VVVmSkipV0VmAndNoR1R2Overlap()),
8290*795d594fSAndroid Build Coastguard Worker "VIota_m");
8291*795d594fSAndroid Build Coastguard Worker }
8292*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,VId_v)8293*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, VId_v) {
8294*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatVVmFiltered(&Riscv64Assembler::VId_v, "vid.v {reg} {vm}", SkipV0Vm()), "VId_v");
8295*795d594fSAndroid Build Coastguard Worker }
8296*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Nop)8297*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Nop) {
8298*795d594fSAndroid Build Coastguard Worker __ Nop();
8299*795d594fSAndroid Build Coastguard Worker DriverStr("nop", "Nop");
8300*795d594fSAndroid Build Coastguard Worker }
8301*795d594fSAndroid Build Coastguard Worker
8302*795d594fSAndroid Build Coastguard Worker // Pseudo instructions.
TEST_F(AssemblerRISCV64Test,Nop_WithoutC)8303*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Nop_WithoutC) {
8304*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8305*795d594fSAndroid Build Coastguard Worker __ Nop();
8306*795d594fSAndroid Build Coastguard Worker DriverStr("nop", "Nop_WithoutC");
8307*795d594fSAndroid Build Coastguard Worker }
8308*795d594fSAndroid Build Coastguard Worker
8309*795d594fSAndroid Build Coastguard Worker // TODO(riscv64): Investigate whether new clang assembler produces some shorter sequences and
8310*795d594fSAndroid Build Coastguard Worker // implement them.
TEST_F(AssemblerRISCV64Test,DISABLED_Li)8311*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, DISABLED_Li) {
8312*795d594fSAndroid Build Coastguard Worker ScopedZbaZbbAndCSuppression scs(this);
8313*795d594fSAndroid Build Coastguard Worker TestLoadConst64("Li",
8314*795d594fSAndroid Build Coastguard Worker /*can_use_tmp=*/ false,
8315*795d594fSAndroid Build Coastguard Worker [&](XRegister rd, int64_t value) { __ Li(rd, value); });
8316*795d594fSAndroid Build Coastguard Worker }
8317*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Mv)8318*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Mv) {
8319*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8320*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Mv, "addi {reg1}, {reg2}, 0"), "Mv");
8321*795d594fSAndroid Build Coastguard Worker }
8322*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Not)8323*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Not) {
8324*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Not, "not {reg1}, {reg2}"), "Not");
8325*795d594fSAndroid Build Coastguard Worker }
8326*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Not_WithoutC)8327*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Not_WithoutC) {
8328*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8329*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Not, "not {reg1}, {reg2}"), "Not_WithoutC");
8330*795d594fSAndroid Build Coastguard Worker }
8331*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Neg)8332*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Neg) {
8333*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Neg, "sub {reg1}, x0, {reg2}"), "Neg");
8334*795d594fSAndroid Build Coastguard Worker }
8335*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,NegW)8336*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, NegW) {
8337*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::NegW, "subw {reg1}, x0, {reg2}"), "Neg");
8338*795d594fSAndroid Build Coastguard Worker }
8339*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextB)8340*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextB) {
8341*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextB, "sext.b {reg1}, {reg2}\n"), "SextB");
8342*795d594fSAndroid Build Coastguard Worker }
8343*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextB_WithoutZbb)8344*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextB_WithoutZbb) {
8345*795d594fSAndroid Build Coastguard Worker ScopedZbbSuppression scs(this);
8346*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextB, "sext.b {reg1}, {reg2}\n"), "SextB_WithoutZbb");
8347*795d594fSAndroid Build Coastguard Worker }
8348*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextB_WithoutC)8349*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextB_WithoutC) {
8350*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8351*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextB, "sext.b {reg1}, {reg2}\n"), "SextB_WithoutC");
8352*795d594fSAndroid Build Coastguard Worker }
8353*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextB_WithoutZbbAndC)8354*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextB_WithoutZbbAndC) {
8355*795d594fSAndroid Build Coastguard Worker ScopedZbbAndCSuppression scs(this);
8356*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextB, "sext.b {reg1}, {reg2}\n"), "SextB_WithoutZbbAndC");
8357*795d594fSAndroid Build Coastguard Worker }
8358*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextH)8359*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextH) {
8360*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextH, "sext.h {reg1}, {reg2}\n"), "SextH");
8361*795d594fSAndroid Build Coastguard Worker }
8362*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextH_WithoutZbb)8363*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextH_WithoutZbb) {
8364*795d594fSAndroid Build Coastguard Worker ScopedZbbSuppression scs(this);
8365*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextH, "sext.h {reg1}, {reg2}\n"), "SextH_WithoutZbb");
8366*795d594fSAndroid Build Coastguard Worker }
8367*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextH_WithoutC)8368*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextH_WithoutC) {
8369*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8370*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextH, "sext.h {reg1}, {reg2}\n"), "SextH_WithoutC");
8371*795d594fSAndroid Build Coastguard Worker }
8372*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextH_WithoutZbbAndC)8373*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextH_WithoutZbbAndC) {
8374*795d594fSAndroid Build Coastguard Worker ScopedZbbAndCSuppression scs(this);
8375*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextH, "sext.h {reg1}, {reg2}\n"), "SextH_WithoutZbbAndC");
8376*795d594fSAndroid Build Coastguard Worker }
8377*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextW)8378*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextW) {
8379*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextW, "sext.w {reg1}, {reg2}\n"), "SextW");
8380*795d594fSAndroid Build Coastguard Worker }
8381*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,SextW_WithoutC)8382*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, SextW_WithoutC) {
8383*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8384*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::SextW, "sext.w {reg1}, {reg2}\n"), "SextW_WithoutC");
8385*795d594fSAndroid Build Coastguard Worker }
8386*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextB)8387*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextB) {
8388*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextB, "zext.b {reg1}, {reg2}"), "ZextB");
8389*795d594fSAndroid Build Coastguard Worker }
8390*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextB_WithoutC)8391*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextB_WithoutC) {
8392*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8393*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextB, "zext.b {reg1}, {reg2}"), "ZextB_WithoutC");
8394*795d594fSAndroid Build Coastguard Worker }
8395*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextH)8396*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextH) {
8397*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextH, "zext.h {reg1}, {reg2}\n"), "ZextH");
8398*795d594fSAndroid Build Coastguard Worker }
8399*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextH_WithoutZbb)8400*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextH_WithoutZbb) {
8401*795d594fSAndroid Build Coastguard Worker ScopedZbbSuppression scs(this);
8402*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextH, "zext.h {reg1}, {reg2}\n"), "ZextH_WithoutZbb");
8403*795d594fSAndroid Build Coastguard Worker }
8404*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextH_WithoutC)8405*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextH_WithoutC) {
8406*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8407*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextH, "zext.h {reg1}, {reg2}\n"), "ZextH_WithoutC");
8408*795d594fSAndroid Build Coastguard Worker }
8409*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextH_WithoutZbbAndC)8410*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextH_WithoutZbbAndC) {
8411*795d594fSAndroid Build Coastguard Worker ScopedZbbAndCSuppression scs(this);
8412*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextH, "zext.h {reg1}, {reg2}\n"), "ZextH_WithoutZbbAndC");
8413*795d594fSAndroid Build Coastguard Worker }
8414*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextW)8415*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextW) {
8416*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextW, "zext.w {reg1}, {reg2}\n"), "ZextW");
8417*795d594fSAndroid Build Coastguard Worker }
8418*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextW_WithoutZba)8419*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextW_WithoutZba) {
8420*795d594fSAndroid Build Coastguard Worker ScopedZbaSuppression scs(this);
8421*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextW, "zext.w {reg1}, {reg2}\n"), "ZextW_WithoutZba");
8422*795d594fSAndroid Build Coastguard Worker }
8423*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextW_WithoutC)8424*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextW_WithoutC) {
8425*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8426*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextW, "zext.w {reg1}, {reg2}\n"), "ZextW_WithoutC");
8427*795d594fSAndroid Build Coastguard Worker }
8428*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ZextW_WithoutZbaAndC)8429*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ZextW_WithoutZbaAndC) {
8430*795d594fSAndroid Build Coastguard Worker ScopedZbaAndCSuppression scs(this);
8431*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::ZextW, "zext.w {reg1}, {reg2}\n"), "ZextW_WithoutZbaAndC");
8432*795d594fSAndroid Build Coastguard Worker }
8433*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Seqz)8434*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Seqz) {
8435*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Seqz, "sltiu {reg1}, {reg2}, 1\n"), "Seqz");
8436*795d594fSAndroid Build Coastguard Worker }
8437*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Snez)8438*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Snez) {
8439*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Snez, "sltu {reg1}, zero, {reg2}\n"), "Snez");
8440*795d594fSAndroid Build Coastguard Worker }
8441*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sltz)8442*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sltz) {
8443*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Sltz, "slt {reg1}, {reg2}, zero\n"), "Sltz");
8444*795d594fSAndroid Build Coastguard Worker }
8445*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Sgtz)8446*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Sgtz) {
8447*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Sgtz, "slt {reg1}, zero, {reg2}\n"), "Sgtz");
8448*795d594fSAndroid Build Coastguard Worker }
8449*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMvS)8450*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMvS) {
8451*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FMvS, "fsgnj.s {reg1}, {reg2}, {reg2}\n"), "FMvS");
8452*795d594fSAndroid Build Coastguard Worker }
8453*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FAbsS)8454*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FAbsS) {
8455*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FAbsS, "fsgnjx.s {reg1}, {reg2}, {reg2}\n"), "FAbsS");
8456*795d594fSAndroid Build Coastguard Worker }
8457*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNegS)8458*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNegS) {
8459*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FNegS, "fsgnjn.s {reg1}, {reg2}, {reg2}\n"), "FNegS");
8460*795d594fSAndroid Build Coastguard Worker }
8461*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FMvD)8462*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FMvD) {
8463*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FMvD, "fsgnj.d {reg1}, {reg2}, {reg2}\n"), "FMvD");
8464*795d594fSAndroid Build Coastguard Worker }
8465*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FAbsD)8466*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FAbsD) {
8467*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FAbsD, "fsgnjx.d {reg1}, {reg2}, {reg2}\n"), "FAbsD");
8468*795d594fSAndroid Build Coastguard Worker }
8469*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FNegD)8470*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FNegD) {
8471*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatFF(&Riscv64Assembler::FNegD, "fsgnjn.d {reg1}, {reg2}, {reg2}\n"), "FNegD");
8472*795d594fSAndroid Build Coastguard Worker }
8473*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Beqz)8474*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Beqz) {
8475*795d594fSAndroid Build Coastguard Worker DriverStr(
8476*795d594fSAndroid Build Coastguard Worker RepeatRIbS(
8477*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Beqz, /*imm_bits=*/-12, /*shift=*/1, "beq {reg}, zero, {imm}\n"),
8478*795d594fSAndroid Build Coastguard Worker "Beqz");
8479*795d594fSAndroid Build Coastguard Worker }
8480*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Beqz_WithoutC)8481*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Beqz_WithoutC) {
8482*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8483*795d594fSAndroid Build Coastguard Worker DriverStr(
8484*795d594fSAndroid Build Coastguard Worker RepeatRIbS(
8485*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Beqz, /*imm_bits=*/-11, /*shift=*/2, "beq {reg}, zero, {imm}\n"),
8486*795d594fSAndroid Build Coastguard Worker "Beqz_WithoutC");
8487*795d594fSAndroid Build Coastguard Worker }
8488*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bnez)8489*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bnez) {
8490*795d594fSAndroid Build Coastguard Worker DriverStr(
8491*795d594fSAndroid Build Coastguard Worker RepeatRIbS(
8492*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bnez, /*imm_bits=*/-12, /*shift=*/1, "bne {reg}, zero, {imm}\n"),
8493*795d594fSAndroid Build Coastguard Worker "Bnez");
8494*795d594fSAndroid Build Coastguard Worker }
8495*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bnez_WithoutC)8496*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bnez_WithoutC) {
8497*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8498*795d594fSAndroid Build Coastguard Worker DriverStr(
8499*795d594fSAndroid Build Coastguard Worker RepeatRIbS(
8500*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bnez, /*imm_bits=*/-11, /*shift=*/2, "bne {reg}, zero, {imm}\n"),
8501*795d594fSAndroid Build Coastguard Worker "Bnez_WithoutC");
8502*795d594fSAndroid Build Coastguard Worker }
8503*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Blez)8504*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Blez) {
8505*795d594fSAndroid Build Coastguard Worker DriverStr(
8506*795d594fSAndroid Build Coastguard Worker RepeatRIbS(
8507*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Blez, /*imm_bits=*/-12, /*shift=*/1, "bge zero, {reg}, {imm}\n"),
8508*795d594fSAndroid Build Coastguard Worker "Blez");
8509*795d594fSAndroid Build Coastguard Worker }
8510*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bgez)8511*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bgez) {
8512*795d594fSAndroid Build Coastguard Worker DriverStr(
8513*795d594fSAndroid Build Coastguard Worker RepeatRIbS(
8514*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bgez, /*imm_bits=*/-12, /*shift=*/1, "bge {reg}, zero, {imm}\n"),
8515*795d594fSAndroid Build Coastguard Worker "Bgez");
8516*795d594fSAndroid Build Coastguard Worker }
8517*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bltz)8518*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bltz) {
8519*795d594fSAndroid Build Coastguard Worker DriverStr(
8520*795d594fSAndroid Build Coastguard Worker RepeatRIbS(
8521*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bltz, /*imm_bits=*/-12, /*shift=*/1, "blt {reg}, zero, {imm}\n"),
8522*795d594fSAndroid Build Coastguard Worker "Bltz");
8523*795d594fSAndroid Build Coastguard Worker }
8524*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bgtz)8525*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bgtz) {
8526*795d594fSAndroid Build Coastguard Worker DriverStr(
8527*795d594fSAndroid Build Coastguard Worker RepeatRIbS(
8528*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bgtz, /*imm_bits=*/-12, /*shift=*/1, "blt zero, {reg}, {imm}\n"),
8529*795d594fSAndroid Build Coastguard Worker "Bgtz");
8530*795d594fSAndroid Build Coastguard Worker }
8531*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bgt)8532*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bgt) {
8533*795d594fSAndroid Build Coastguard Worker DriverStr(
8534*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
8535*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bgt, /*imm_bits=*/-12, /*shift=*/1, "blt {reg2}, {reg1}, {imm}\n"),
8536*795d594fSAndroid Build Coastguard Worker "Bgt");
8537*795d594fSAndroid Build Coastguard Worker }
8538*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ble)8539*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ble) {
8540*795d594fSAndroid Build Coastguard Worker DriverStr(
8541*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
8542*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Ble, /*imm_bits=*/-12, /*shift=*/1, "bge {reg2}, {reg1}, {imm}\n"),
8543*795d594fSAndroid Build Coastguard Worker "Bge");
8544*795d594fSAndroid Build Coastguard Worker }
8545*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bgtu)8546*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bgtu) {
8547*795d594fSAndroid Build Coastguard Worker DriverStr(
8548*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
8549*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bgtu, /*imm_bits=*/-12, /*shift=*/1, "bltu {reg2}, {reg1}, {imm}\n"),
8550*795d594fSAndroid Build Coastguard Worker "Bgtu");
8551*795d594fSAndroid Build Coastguard Worker }
8552*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Bleu)8553*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Bleu) {
8554*795d594fSAndroid Build Coastguard Worker DriverStr(
8555*795d594fSAndroid Build Coastguard Worker RepeatRRIbS(
8556*795d594fSAndroid Build Coastguard Worker &Riscv64Assembler::Bleu, /*imm_bits=*/-12, /*shift=*/1, "bgeu {reg2}, {reg1}, {imm}\n"),
8557*795d594fSAndroid Build Coastguard Worker "Bgeu");
8558*795d594fSAndroid Build Coastguard Worker }
8559*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,J)8560*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, J) {
8561*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatIbS<int32_t>(&Riscv64Assembler::J, /*imm_bits=*/-20, /*shift=*/1, "j {imm}\n"),
8562*795d594fSAndroid Build Coastguard Worker "J");
8563*795d594fSAndroid Build Coastguard Worker }
8564*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,J_WithoutC)8565*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, J_WithoutC) {
8566*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8567*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatIbS<int32_t>(&Riscv64Assembler::J, /*imm_bits=*/-19, /*shift=*/2, "j {imm}\n"),
8568*795d594fSAndroid Build Coastguard Worker "J_WithoutC");
8569*795d594fSAndroid Build Coastguard Worker }
8570*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRA)8571*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRA) {
8572*795d594fSAndroid Build Coastguard Worker DriverStr(
8573*795d594fSAndroid Build Coastguard Worker RepeatIbS<int32_t>(&Riscv64Assembler::Jal, /*imm_bits=*/-20, /*shift=*/1, "jal {imm}\n"),
8574*795d594fSAndroid Build Coastguard Worker "JalRA");
8575*795d594fSAndroid Build Coastguard Worker }
8576*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRA_WithoutC)8577*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRA_WithoutC) {
8578*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8579*795d594fSAndroid Build Coastguard Worker DriverStr(
8580*795d594fSAndroid Build Coastguard Worker RepeatIbS<int32_t>(&Riscv64Assembler::Jal, /*imm_bits=*/-19, /*shift=*/2, "jal {imm}\n"),
8581*795d594fSAndroid Build Coastguard Worker "JalRA_WithoutC");
8582*795d594fSAndroid Build Coastguard Worker }
8583*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Jr)8584*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Jr) {
8585*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatR(&Riscv64Assembler::Jr, "jr {reg}\n"), "Jr");
8586*795d594fSAndroid Build Coastguard Worker }
8587*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Jr_WithoutC)8588*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Jr_WithoutC) {
8589*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8590*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatR(&Riscv64Assembler::Jr, "jr {reg}\n"), "Jr_WithoutC");
8591*795d594fSAndroid Build Coastguard Worker }
8592*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalrRA)8593*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalrRA) {
8594*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatR(&Riscv64Assembler::Jalr, "jalr {reg}\n"), "JalrRA");
8595*795d594fSAndroid Build Coastguard Worker }
8596*795d594fSAndroid Build Coastguard Worker
8597*795d594fSAndroid Build Coastguard Worker // Note: `c.jal` is RV32-only but we test `Jalr(XRegister)` with and without "C" anyway.
TEST_F(AssemblerRISCV64Test,JalrRA_WithoutC)8598*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalrRA_WithoutC) {
8599*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8600*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatR(&Riscv64Assembler::Jalr, "jalr {reg}\n"), "JalrRA_WithoutC");
8601*795d594fSAndroid Build Coastguard Worker }
8602*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Jalr0)8603*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Jalr0) {
8604*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Jalr, "jalr {reg1}, {reg2}\n"), "Jalr0");
8605*795d594fSAndroid Build Coastguard Worker }
8606*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Jalr0_WithoutC)8607*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Jalr0_WithoutC) {
8608*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8609*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRR(&Riscv64Assembler::Jalr, "jalr {reg1}, {reg2}\n"), "Jalr0_WithoutC");
8610*795d594fSAndroid Build Coastguard Worker }
8611*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ret)8612*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ret) {
8613*795d594fSAndroid Build Coastguard Worker __ Ret();
8614*795d594fSAndroid Build Coastguard Worker DriverStr("ret\n", "Ret");
8615*795d594fSAndroid Build Coastguard Worker }
8616*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Ret_WithoutC)8617*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Ret_WithoutC) {
8618*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8619*795d594fSAndroid Build Coastguard Worker __ Ret();
8620*795d594fSAndroid Build Coastguard Worker DriverStr("ret\n", "Ret_WithoutC");
8621*795d594fSAndroid Build Coastguard Worker }
8622*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,RdCycle)8623*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, RdCycle) {
8624*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatR(&Riscv64Assembler::RdCycle, "rdcycle {reg}\n"), "RdCycle");
8625*795d594fSAndroid Build Coastguard Worker }
8626*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,RdTime)8627*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, RdTime) {
8628*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatR(&Riscv64Assembler::RdTime, "rdtime {reg}\n"), "RdTime");
8629*795d594fSAndroid Build Coastguard Worker }
8630*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,RdInstret)8631*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, RdInstret) {
8632*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatR(&Riscv64Assembler::RdInstret, "rdinstret {reg}\n"), "RdInstret");
8633*795d594fSAndroid Build Coastguard Worker }
8634*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrr)8635*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrr) {
8636*795d594fSAndroid Build Coastguard Worker TestCsrrXMacro(
8637*795d594fSAndroid Build Coastguard Worker "Csrr", "csrr {reg}, {csr}", [&](uint32_t csr, XRegister rd) { __ Csrr(rd, csr); });
8638*795d594fSAndroid Build Coastguard Worker }
8639*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrw)8640*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrw) {
8641*795d594fSAndroid Build Coastguard Worker TestCsrrXMacro(
8642*795d594fSAndroid Build Coastguard Worker "Csrw", "csrw {csr}, {reg}", [&](uint32_t csr, XRegister rs) { __ Csrw(csr, rs); });
8643*795d594fSAndroid Build Coastguard Worker }
8644*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrs)8645*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrs) {
8646*795d594fSAndroid Build Coastguard Worker TestCsrrXMacro(
8647*795d594fSAndroid Build Coastguard Worker "Csrs", "csrs {csr}, {reg}", [&](uint32_t csr, XRegister rs) { __ Csrs(csr, rs); });
8648*795d594fSAndroid Build Coastguard Worker }
8649*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrc)8650*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrc) {
8651*795d594fSAndroid Build Coastguard Worker TestCsrrXMacro(
8652*795d594fSAndroid Build Coastguard Worker "Csrc", "csrc {csr}, {reg}", [&](uint32_t csr, XRegister rs) { __ Csrc(csr, rs); });
8653*795d594fSAndroid Build Coastguard Worker }
8654*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrwi)8655*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrwi) {
8656*795d594fSAndroid Build Coastguard Worker TestCsrrXiMacro(
8657*795d594fSAndroid Build Coastguard Worker "Csrwi", "csrwi {csr}, {uimm}", [&](uint32_t csr, uint32_t uimm) { __ Csrwi(csr, uimm); });
8658*795d594fSAndroid Build Coastguard Worker }
8659*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrsi)8660*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrsi) {
8661*795d594fSAndroid Build Coastguard Worker TestCsrrXiMacro(
8662*795d594fSAndroid Build Coastguard Worker "Csrsi", "csrsi {csr}, {uimm}", [&](uint32_t csr, uint32_t uimm) { __ Csrsi(csr, uimm); });
8663*795d594fSAndroid Build Coastguard Worker }
8664*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Csrci)8665*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Csrci) {
8666*795d594fSAndroid Build Coastguard Worker TestCsrrXiMacro(
8667*795d594fSAndroid Build Coastguard Worker "Csrci", "csrci {csr}, {uimm}", [&](uint32_t csr, uint32_t uimm) { __ Csrci(csr, uimm); });
8668*795d594fSAndroid Build Coastguard Worker }
8669*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,LoadConst32)8670*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, LoadConst32) {
8671*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8672*795d594fSAndroid Build Coastguard Worker // `LoadConst32()` emits the same code sequences as `Li()` for 32-bit values.
8673*795d594fSAndroid Build Coastguard Worker ScratchRegisterScope srs(GetAssembler());
8674*795d594fSAndroid Build Coastguard Worker srs.ExcludeXRegister(TMP);
8675*795d594fSAndroid Build Coastguard Worker srs.ExcludeXRegister(TMP2);
8676*795d594fSAndroid Build Coastguard Worker DriverStr(RepeatRIb(&Riscv64Assembler::LoadConst32, /*imm_bits=*/-32, "li {reg}, {imm}"), "LoadConst32");
8677*795d594fSAndroid Build Coastguard Worker }
8678*795d594fSAndroid Build Coastguard Worker
8679*795d594fSAndroid Build Coastguard Worker // TODO(riscv64): Investigate whether new clang assembler produces some shorter sequences and
8680*795d594fSAndroid Build Coastguard Worker // implement them.
TEST_F(AssemblerRISCV64Test,DISABLED_LoadConst64)8681*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, DISABLED_LoadConst64) {
8682*795d594fSAndroid Build Coastguard Worker ScopedZbaZbbAndCSuppression scs(this);
8683*795d594fSAndroid Build Coastguard Worker TestLoadConst64("LoadConst64",
8684*795d594fSAndroid Build Coastguard Worker /*can_use_tmp=*/ true,
8685*795d594fSAndroid Build Coastguard Worker [&](XRegister rd, int64_t value) { __ LoadConst64(rd, value); });
8686*795d594fSAndroid Build Coastguard Worker }
8687*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AddConst32)8688*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AddConst32) {
8689*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8690*795d594fSAndroid Build Coastguard Worker auto emit_op = [&](XRegister rd, XRegister rs1, int64_t value) {
8691*795d594fSAndroid Build Coastguard Worker __ AddConst32(rd, rs1, dchecked_integral_cast<int32_t>(value));
8692*795d594fSAndroid Build Coastguard Worker };
8693*795d594fSAndroid Build Coastguard Worker TestAddConst("AddConst32", /*bits=*/32, /*suffix=*/ "w", emit_op);
8694*795d594fSAndroid Build Coastguard Worker }
8695*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,AddConst64)8696*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, AddConst64) {
8697*795d594fSAndroid Build Coastguard Worker ScopedZbaZbbAndCSuppression scs(this);
8698*795d594fSAndroid Build Coastguard Worker auto emit_op = [&](XRegister rd, XRegister rs1, int64_t value) {
8699*795d594fSAndroid Build Coastguard Worker __ AddConst64(rd, rs1, value);
8700*795d594fSAndroid Build Coastguard Worker };
8701*795d594fSAndroid Build Coastguard Worker TestAddConst("AddConst64", /*bits=*/64, /*suffix=*/ "", emit_op);
8702*795d594fSAndroid Build Coastguard Worker }
8703*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward128B)8704*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward128B) {
8705*795d594fSAndroid Build Coastguard Worker TestBcondForward("BcondForward128B", 128, "1", GetPrintBcond());
8706*795d594fSAndroid Build Coastguard Worker }
8707*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward128B_WithoutC)8708*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward128B_WithoutC) {
8709*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8710*795d594fSAndroid Build Coastguard Worker TestBcondForward("BcondForward128B_WithoutC", 128, "1", GetPrintBcond());
8711*795d594fSAndroid Build Coastguard Worker }
8712*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward128BBare)8713*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward128BBare) {
8714*795d594fSAndroid Build Coastguard Worker TestBcondForward("BcondForward128BBare", 128, "1", GetPrintBcond(), /*is_bare=*/ true);
8715*795d594fSAndroid Build Coastguard Worker }
8716*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward128BBare_WithoutC)8717*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward128BBare_WithoutC) {
8718*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8719*795d594fSAndroid Build Coastguard Worker TestBcondForward(
8720*795d594fSAndroid Build Coastguard Worker "BcondForward128BBare_WithoutC", 128, "1", GetPrintBcond(), /*is_bare=*/ true);
8721*795d594fSAndroid Build Coastguard Worker }
8722*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward128B)8723*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward128B) {
8724*795d594fSAndroid Build Coastguard Worker TestBcondBackward("BcondBackward128B", 128, "1", GetPrintBcond());
8725*795d594fSAndroid Build Coastguard Worker }
8726*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward128B_WithoutC)8727*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward128B_WithoutC) {
8728*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8729*795d594fSAndroid Build Coastguard Worker TestBcondBackward("BcondBackward128B_WithoutC", 128, "1", GetPrintBcond());
8730*795d594fSAndroid Build Coastguard Worker }
8731*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward128BBare)8732*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward128BBare) {
8733*795d594fSAndroid Build Coastguard Worker TestBcondBackward("BcondBackward128BBare", 128, "1", GetPrintBcond(), /*is_bare=*/ true);
8734*795d594fSAndroid Build Coastguard Worker }
8735*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward128BBare_WithoutC)8736*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward128BBare_WithoutC) {
8737*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8738*795d594fSAndroid Build Coastguard Worker TestBcondBackward("BcondBackward128Bare_WithoutC", 128, "1", GetPrintBcond(), /*is_bare=*/ true);
8739*795d594fSAndroid Build Coastguard Worker }
8740*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward3KiB)8741*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward3KiB) {
8742*795d594fSAndroid Build Coastguard Worker TestBcondForward("BcondForward3KiB", 3 * KB, "1", GetPrintBcond());
8743*795d594fSAndroid Build Coastguard Worker }
8744*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward3KiB_WithoutC)8745*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward3KiB_WithoutC) {
8746*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8747*795d594fSAndroid Build Coastguard Worker TestBcondForward("BcondForward3KiB_WithoutC", 3 * KB, "1", GetPrintBcond());
8748*795d594fSAndroid Build Coastguard Worker }
8749*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward3KiBBare_WithoutC)8750*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward3KiBBare_WithoutC) {
8751*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8752*795d594fSAndroid Build Coastguard Worker TestBcondForward(
8753*795d594fSAndroid Build Coastguard Worker "BcondForward3KiBBare_WithoutC", 3 * KB, "1", GetPrintBcond(), /*is_bare=*/ true);
8754*795d594fSAndroid Build Coastguard Worker }
8755*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward3KiB)8756*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward3KiB) {
8757*795d594fSAndroid Build Coastguard Worker TestBcondBackward("BcondBackward3KiB", 3 * KB, "1", GetPrintBcond());
8758*795d594fSAndroid Build Coastguard Worker }
8759*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward3KiB_WithoutC)8760*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward3KiB_WithoutC) {
8761*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8762*795d594fSAndroid Build Coastguard Worker TestBcondBackward("BcondBackward3KiB_WithoutC", 3 * KB, "1", GetPrintBcond());
8763*795d594fSAndroid Build Coastguard Worker }
8764*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward3KiBBare_WithoutC)8765*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward3KiBBare_WithoutC) {
8766*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8767*795d594fSAndroid Build Coastguard Worker TestBcondBackward(
8768*795d594fSAndroid Build Coastguard Worker "BcondBackward3KiBare_WithoutC", 3 * KB, "1", GetPrintBcond(), /*is_bare=*/ true);
8769*795d594fSAndroid Build Coastguard Worker }
8770*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward5KiB)8771*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward5KiB) {
8772*795d594fSAndroid Build Coastguard Worker TestBcondForward("BcondForward5KiB", 5 * KB, "1", GetPrintBcondOppositeAndJ("2"));
8773*795d594fSAndroid Build Coastguard Worker }
8774*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward5KiB_WithoutC)8775*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward5KiB_WithoutC) {
8776*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8777*795d594fSAndroid Build Coastguard Worker TestBcondForward("BcondForward5KiB_WithoutC", 5 * KB, "1", GetPrintBcondOppositeAndJ("2"));
8778*795d594fSAndroid Build Coastguard Worker }
8779*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward5KiB)8780*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward5KiB) {
8781*795d594fSAndroid Build Coastguard Worker TestBcondBackward("BcondBackward5KiB", 5 * KB, "1", GetPrintBcondOppositeAndJ("2"));
8782*795d594fSAndroid Build Coastguard Worker }
8783*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward5KiB_WithoutC)8784*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward5KiB_WithoutC) {
8785*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8786*795d594fSAndroid Build Coastguard Worker TestBcondBackward("BcondBackward5KiB_WithoutC", 5 * KB, "1", GetPrintBcondOppositeAndJ("2"));
8787*795d594fSAndroid Build Coastguard Worker }
8788*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward2MiB)8789*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward2MiB) {
8790*795d594fSAndroid Build Coastguard Worker TestBcondForward("BcondForward2MiB", 2 * MB, "1", GetPrintBcondOppositeAndTail("2", "3"));
8791*795d594fSAndroid Build Coastguard Worker }
8792*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondForward2MiB_WithoutC)8793*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondForward2MiB_WithoutC) {
8794*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8795*795d594fSAndroid Build Coastguard Worker TestBcondForward(
8796*795d594fSAndroid Build Coastguard Worker "BcondForward2MiB_WithoutC", 2 * MB, "1", GetPrintBcondOppositeAndTail("2", "3"));
8797*795d594fSAndroid Build Coastguard Worker }
8798*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward2MiB)8799*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward2MiB) {
8800*795d594fSAndroid Build Coastguard Worker TestBcondBackward("BcondBackward2MiB", 2 * MB, "1", GetPrintBcondOppositeAndTail("2", "3"));
8801*795d594fSAndroid Build Coastguard Worker }
8802*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondBackward2MiB_WithoutC)8803*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondBackward2MiB_WithoutC) {
8804*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8805*795d594fSAndroid Build Coastguard Worker TestBcondBackward(
8806*795d594fSAndroid Build Coastguard Worker "BcondBackward2MiB_WithoutC", 2 * MB, "1", GetPrintBcondOppositeAndTail("2", "3"));
8807*795d594fSAndroid Build Coastguard Worker }
8808*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset9Forward)8809*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset9Forward) {
8810*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroMaxOffset9Forward",
8811*795d594fSAndroid Build Coastguard Worker MaxOffset9ForwardDistance() - /*C.BEQZ*/ 2u,
8812*795d594fSAndroid Build Coastguard Worker GetPrintCBcond(),
8813*795d594fSAndroid Build Coastguard Worker "1");
8814*795d594fSAndroid Build Coastguard Worker }
8815*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset9ForwardBare)8816*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset9ForwardBare) {
8817*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroMaxOffset9ForwardBare",
8818*795d594fSAndroid Build Coastguard Worker MaxOffset9ForwardDistance() - /*C.BEQZ*/ 2u,
8819*795d594fSAndroid Build Coastguard Worker GetPrintCBcond(),
8820*795d594fSAndroid Build Coastguard Worker "1",
8821*795d594fSAndroid Build Coastguard Worker /*is_bare=*/ true);
8822*795d594fSAndroid Build Coastguard Worker }
8823*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset9Forward)8824*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset9Forward) {
8825*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroMaxOffset9Forward",
8826*795d594fSAndroid Build Coastguard Worker MaxOffset9ForwardDistance() - /*C.BNEZ*/ 2u,
8827*795d594fSAndroid Build Coastguard Worker GetPrintCBcond(),
8828*795d594fSAndroid Build Coastguard Worker "1");
8829*795d594fSAndroid Build Coastguard Worker }
8830*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset9ForwardBare)8831*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset9ForwardBare) {
8832*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroMaxOffset9ForwardBare",
8833*795d594fSAndroid Build Coastguard Worker MaxOffset9ForwardDistance() - /*C.BNEZ*/ 2u,
8834*795d594fSAndroid Build Coastguard Worker GetPrintCBcond(),
8835*795d594fSAndroid Build Coastguard Worker "1",
8836*795d594fSAndroid Build Coastguard Worker /*is_bare=*/ true);
8837*795d594fSAndroid Build Coastguard Worker }
8838*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset9Backward)8839*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset9Backward) {
8840*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroMaxOffset9Backward",
8841*795d594fSAndroid Build Coastguard Worker MaxOffset9BackwardDistance(),
8842*795d594fSAndroid Build Coastguard Worker GetPrintCBcond(),
8843*795d594fSAndroid Build Coastguard Worker "1");
8844*795d594fSAndroid Build Coastguard Worker }
8845*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset9BackwardBare)8846*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset9BackwardBare) {
8847*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroMaxOffset9BackwardBare",
8848*795d594fSAndroid Build Coastguard Worker MaxOffset9BackwardDistance(),
8849*795d594fSAndroid Build Coastguard Worker GetPrintCBcond(),
8850*795d594fSAndroid Build Coastguard Worker "1",
8851*795d594fSAndroid Build Coastguard Worker /*is_bare=*/ true);
8852*795d594fSAndroid Build Coastguard Worker }
8853*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset9Backward)8854*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset9Backward) {
8855*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroMaxOffset9Backward",
8856*795d594fSAndroid Build Coastguard Worker MaxOffset9BackwardDistance(),
8857*795d594fSAndroid Build Coastguard Worker GetPrintCBcond(),
8858*795d594fSAndroid Build Coastguard Worker "1");
8859*795d594fSAndroid Build Coastguard Worker }
8860*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset9BackwardBare)8861*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset9BackwardBare) {
8862*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroMaxOffset9BackwardBare",
8863*795d594fSAndroid Build Coastguard Worker MaxOffset9BackwardDistance(),
8864*795d594fSAndroid Build Coastguard Worker GetPrintCBcond(),
8865*795d594fSAndroid Build Coastguard Worker "1",
8866*795d594fSAndroid Build Coastguard Worker /*is_bare=*/ true);
8867*795d594fSAndroid Build Coastguard Worker }
8868*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset9Forward)8869*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset9Forward) {
8870*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroOverMaxOffset9Forward",
8871*795d594fSAndroid Build Coastguard Worker MaxOffset9ForwardDistance() - /*C.BEQZ*/ 2u + /*Exceed max*/ 2u,
8872*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8873*795d594fSAndroid Build Coastguard Worker "1");
8874*795d594fSAndroid Build Coastguard Worker }
8875*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset9Forward)8876*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset9Forward) {
8877*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroOverMaxOffset9Forward",
8878*795d594fSAndroid Build Coastguard Worker MaxOffset9ForwardDistance() - /*C.BNEZ*/ 2u + /*Exceed max*/ 2u,
8879*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8880*795d594fSAndroid Build Coastguard Worker "1");
8881*795d594fSAndroid Build Coastguard Worker }
8882*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset9Backward)8883*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset9Backward) {
8884*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroOverMaxOffset9Backward",
8885*795d594fSAndroid Build Coastguard Worker MaxOffset9BackwardDistance() + /*Exceed max*/ 2u,
8886*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8887*795d594fSAndroid Build Coastguard Worker "1");
8888*795d594fSAndroid Build Coastguard Worker }
8889*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset9Backward)8890*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset9Backward) {
8891*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroOverMaxOffset9Backward",
8892*795d594fSAndroid Build Coastguard Worker MaxOffset9BackwardDistance() + /*Exceed max*/ 2u,
8893*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8894*795d594fSAndroid Build Coastguard Worker "1");
8895*795d594fSAndroid Build Coastguard Worker }
8896*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset13Forward)8897*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset13Forward) {
8898*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroMaxOffset13Forward",
8899*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance() - /*C.BEQZ*/ 2u,
8900*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8901*795d594fSAndroid Build Coastguard Worker "1");
8902*795d594fSAndroid Build Coastguard Worker }
8903*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset13Forward_WithoutC)8904*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset13Forward_WithoutC) {
8905*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8906*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroMaxOffset13Forward_WithoutC",
8907*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance_WithoutC() - /*BEQ*/ 4u,
8908*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8909*795d594fSAndroid Build Coastguard Worker "1");
8910*795d594fSAndroid Build Coastguard Worker }
8911*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset13ForwardBare_WithoutC)8912*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset13ForwardBare_WithoutC) {
8913*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8914*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroMaxOffset13ForwardBare_WithoutC",
8915*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance_WithoutC() - /*BEQ*/ 4u,
8916*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8917*795d594fSAndroid Build Coastguard Worker "1",
8918*795d594fSAndroid Build Coastguard Worker /*is_bare=*/ true);
8919*795d594fSAndroid Build Coastguard Worker }
8920*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset13Forward)8921*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset13Forward) {
8922*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroMaxOffset13Forward",
8923*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance() - /*C.BNEZ*/ 2u,
8924*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8925*795d594fSAndroid Build Coastguard Worker "1");
8926*795d594fSAndroid Build Coastguard Worker }
8927*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset13Forward_WithoutC)8928*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset13Forward_WithoutC) {
8929*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8930*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroMaxOffset13Forward_WithoutC",
8931*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance_WithoutC() - /*BNE*/ 4u,
8932*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8933*795d594fSAndroid Build Coastguard Worker "1");
8934*795d594fSAndroid Build Coastguard Worker }
8935*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset13ForwardBare_WithoutC)8936*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset13ForwardBare_WithoutC) {
8937*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8938*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroMaxOffset13ForwardBare_WithoutC",
8939*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance_WithoutC() - /*BNE*/ 4u,
8940*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8941*795d594fSAndroid Build Coastguard Worker "1",
8942*795d594fSAndroid Build Coastguard Worker /*is_bare=*/ true);
8943*795d594fSAndroid Build Coastguard Worker }
8944*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset13Forward)8945*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset13Forward) {
8946*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1MaxOffset13Forward",
8947*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance() - /*BEQ*/ 4u,
8948*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8949*795d594fSAndroid Build Coastguard Worker "1");
8950*795d594fSAndroid Build Coastguard Worker }
8951*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset13Forward_WithoutC)8952*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset13Forward_WithoutC) {
8953*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8954*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1MaxOffset13Forward_WithoutC",
8955*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance_WithoutC() - /*BEQ*/ 4u,
8956*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8957*795d594fSAndroid Build Coastguard Worker "1");
8958*795d594fSAndroid Build Coastguard Worker }
8959*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset13ForwardBare)8960*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset13ForwardBare) {
8961*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1MaxOffset13ForwardBare",
8962*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance() - /*BEQ*/ 4u,
8963*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8964*795d594fSAndroid Build Coastguard Worker "1",
8965*795d594fSAndroid Build Coastguard Worker /*is_bare=*/true);
8966*795d594fSAndroid Build Coastguard Worker }
8967*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset13ForwardBare_WithoutC)8968*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset13ForwardBare_WithoutC) {
8969*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8970*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1MaxOffset13ForwardBare_WithoutC",
8971*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance_WithoutC() - /*BEQ*/ 4u,
8972*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8973*795d594fSAndroid Build Coastguard Worker "1",
8974*795d594fSAndroid Build Coastguard Worker /*is_bare=*/true);
8975*795d594fSAndroid Build Coastguard Worker }
8976*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset13Backward)8977*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset13Backward) {
8978*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroMaxOffset13Backward",
8979*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance(),
8980*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8981*795d594fSAndroid Build Coastguard Worker "1");
8982*795d594fSAndroid Build Coastguard Worker }
8983*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset13Backward_WithoutC)8984*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset13Backward_WithoutC) {
8985*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8986*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroMaxOffset13Backward_WithoutC",
8987*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance_WithoutC(),
8988*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8989*795d594fSAndroid Build Coastguard Worker "1");
8990*795d594fSAndroid Build Coastguard Worker }
8991*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset13BackwardBare_WithoutC)8992*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset13BackwardBare_WithoutC) {
8993*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
8994*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroMaxOffset13BackwardBare_WithoutC",
8995*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance_WithoutC(),
8996*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
8997*795d594fSAndroid Build Coastguard Worker "1",
8998*795d594fSAndroid Build Coastguard Worker /*is_bare=*/ true);
8999*795d594fSAndroid Build Coastguard Worker }
9000*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset13Backward)9001*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset13Backward) {
9002*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroMaxOffset13Backward",
9003*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance(),
9004*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
9005*795d594fSAndroid Build Coastguard Worker "1");
9006*795d594fSAndroid Build Coastguard Worker }
9007*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset13Backward_WithoutC)9008*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset13Backward_WithoutC) {
9009*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9010*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroMaxOffset13Backward_WithoutC",
9011*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance_WithoutC(),
9012*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
9013*795d594fSAndroid Build Coastguard Worker "1");
9014*795d594fSAndroid Build Coastguard Worker }
9015*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset13BackwardBare_WithoutC)9016*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset13BackwardBare_WithoutC) {
9017*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9018*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroMaxOffset13BackwardBare_WithoutC",
9019*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance_WithoutC(),
9020*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
9021*795d594fSAndroid Build Coastguard Worker "1",
9022*795d594fSAndroid Build Coastguard Worker /*is_bare=*/ true);
9023*795d594fSAndroid Build Coastguard Worker }
9024*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset13Backward)9025*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset13Backward) {
9026*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1MaxOffset13Backward",
9027*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance(),
9028*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
9029*795d594fSAndroid Build Coastguard Worker "1");
9030*795d594fSAndroid Build Coastguard Worker }
9031*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset13Backward_WithoutC)9032*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset13Backward_WithoutC) {
9033*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9034*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1MaxOffset13Backward_WithoutC",
9035*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance_WithoutC(),
9036*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
9037*795d594fSAndroid Build Coastguard Worker "1");
9038*795d594fSAndroid Build Coastguard Worker }
9039*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset13BackwardBare)9040*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset13BackwardBare) {
9041*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1MaxOffset13BackwardBare",
9042*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance(),
9043*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
9044*795d594fSAndroid Build Coastguard Worker "1",
9045*795d594fSAndroid Build Coastguard Worker /*is_bare=*/true);
9046*795d594fSAndroid Build Coastguard Worker }
9047*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset13BackwardBare_WithoutC)9048*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset13BackwardBare_WithoutC) {
9049*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9050*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1MaxOffset13BackwardBare_WithoutC",
9051*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance_WithoutC(),
9052*795d594fSAndroid Build Coastguard Worker GetPrintBcond(),
9053*795d594fSAndroid Build Coastguard Worker "1",
9054*795d594fSAndroid Build Coastguard Worker /*is_bare=*/true);
9055*795d594fSAndroid Build Coastguard Worker }
9056*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset13Forward)9057*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset13Forward) {
9058*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroOverMaxOffset13Forward",
9059*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance() - /*BEQ*/ 4u + /*Exceed max*/ 2u,
9060*795d594fSAndroid Build Coastguard Worker GetPrintCBcondOppositeAndJ("2"),
9061*795d594fSAndroid Build Coastguard Worker "1");
9062*795d594fSAndroid Build Coastguard Worker }
9063*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset13Forward_WithoutC)9064*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset13Forward_WithoutC) {
9065*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9066*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroOverMaxOffset13Forward_WithoutC",
9067*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance_WithoutC() - /*BEQ*/ 4u + /*Exceed max*/ 4u,
9068*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9069*795d594fSAndroid Build Coastguard Worker "1");
9070*795d594fSAndroid Build Coastguard Worker }
9071*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset13Forward)9072*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset13Forward) {
9073*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroOverMaxOffset13Forward",
9074*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance() - /*BNE*/ 4u + /*Exceed max*/ 2u,
9075*795d594fSAndroid Build Coastguard Worker GetPrintCBcondOppositeAndJ("2"),
9076*795d594fSAndroid Build Coastguard Worker "1");
9077*795d594fSAndroid Build Coastguard Worker }
9078*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset13Forward_WithoutC)9079*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset13Forward_WithoutC) {
9080*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9081*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroOverMaxOffset13Forward_WithoutC",
9082*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance_WithoutC() - /*BNE*/ 4u + /*Exceed max*/ 4u,
9083*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9084*795d594fSAndroid Build Coastguard Worker "1");
9085*795d594fSAndroid Build Coastguard Worker }
9086*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1OverMaxOffset13Forward)9087*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1OverMaxOffset13Forward) {
9088*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1OverMaxOffset13Forward",
9089*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance() - /*BEQ*/ 4u + /*Exceed max*/ 2u,
9090*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9091*795d594fSAndroid Build Coastguard Worker "1");
9092*795d594fSAndroid Build Coastguard Worker }
9093*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1OverMaxOffset13Forward_WithoutC)9094*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1OverMaxOffset13Forward_WithoutC) {
9095*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9096*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1OverMaxOffset13Forward_WithoutC",
9097*795d594fSAndroid Build Coastguard Worker MaxOffset13ForwardDistance_WithoutC() - /*BEQ*/ 4u + /*Exceed max*/ 4u,
9098*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9099*795d594fSAndroid Build Coastguard Worker "1");
9100*795d594fSAndroid Build Coastguard Worker }
9101*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset13Backward)9102*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset13Backward) {
9103*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroOverMaxOffset13Backward",
9104*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance() + /*Exceed max*/ 2u,
9105*795d594fSAndroid Build Coastguard Worker GetPrintCBcondOppositeAndJ("2"),
9106*795d594fSAndroid Build Coastguard Worker "1");
9107*795d594fSAndroid Build Coastguard Worker }
9108*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset13Backward_WithoutC)9109*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset13Backward_WithoutC) {
9110*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9111*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroOverMaxOffset13Backward_WithoutC",
9112*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance_WithoutC() + /*Exceed max*/ 4u,
9113*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9114*795d594fSAndroid Build Coastguard Worker "1");
9115*795d594fSAndroid Build Coastguard Worker }
9116*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset13Backward)9117*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset13Backward) {
9118*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroOverMaxOffset13Backward",
9119*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance() + /*Exceed max*/ 2u,
9120*795d594fSAndroid Build Coastguard Worker GetPrintCBcondOppositeAndJ("2"),
9121*795d594fSAndroid Build Coastguard Worker "1");
9122*795d594fSAndroid Build Coastguard Worker }
9123*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset13Backward_WithoutC)9124*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset13Backward_WithoutC) {
9125*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9126*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroOverMaxOffset13Backward_WithoutC",
9127*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance_WithoutC() + /*Exceed max*/ 4u,
9128*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9129*795d594fSAndroid Build Coastguard Worker "1");
9130*795d594fSAndroid Build Coastguard Worker }
9131*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1OverMaxOffset13Backward)9132*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1OverMaxOffset13Backward) {
9133*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1OverMaxOffset13Backward",
9134*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance() + /*Exceed max*/ 2u,
9135*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9136*795d594fSAndroid Build Coastguard Worker "1");
9137*795d594fSAndroid Build Coastguard Worker }
9138*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1OverMaxOffset13Backward_WithoutC)9139*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1OverMaxOffset13Backward_WithoutC) {
9140*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9141*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1OverMaxOffset13Backward_WithoutC",
9142*795d594fSAndroid Build Coastguard Worker MaxOffset13BackwardDistance_WithoutC() + /*Exceed max*/ 4u,
9143*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9144*795d594fSAndroid Build Coastguard Worker "1");
9145*795d594fSAndroid Build Coastguard Worker }
9146*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset21Forward)9147*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset21Forward) {
9148*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroMaxOffset21Forward",
9149*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance() - /*J*/ 4u,
9150*795d594fSAndroid Build Coastguard Worker GetPrintCBcondOppositeAndJ("2"),
9151*795d594fSAndroid Build Coastguard Worker "1");
9152*795d594fSAndroid Build Coastguard Worker }
9153*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset21Forward_WithoutC)9154*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset21Forward_WithoutC) {
9155*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9156*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroMaxOffset21Forward_WithoutC",
9157*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u,
9158*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9159*795d594fSAndroid Build Coastguard Worker "1");
9160*795d594fSAndroid Build Coastguard Worker }
9161*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset21Forward)9162*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset21Forward) {
9163*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroMaxOffset21Forward",
9164*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance() - /*J*/ 4u,
9165*795d594fSAndroid Build Coastguard Worker GetPrintCBcondOppositeAndJ("2"),
9166*795d594fSAndroid Build Coastguard Worker "1");
9167*795d594fSAndroid Build Coastguard Worker }
9168*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset21Forward_WithoutC)9169*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset21Forward_WithoutC) {
9170*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9171*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroMaxOffset21Forward_WithoutC",
9172*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u,
9173*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9174*795d594fSAndroid Build Coastguard Worker "1");
9175*795d594fSAndroid Build Coastguard Worker }
9176*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset21Forward)9177*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset21Forward) {
9178*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1MaxOffset21Forward",
9179*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance() - /*J*/ 4u,
9180*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9181*795d594fSAndroid Build Coastguard Worker "1");
9182*795d594fSAndroid Build Coastguard Worker }
9183*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset21Forward_WithoutC)9184*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset21Forward_WithoutC) {
9185*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9186*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1MaxOffset21Forward_WithoutC",
9187*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u,
9188*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9189*795d594fSAndroid Build Coastguard Worker "1");
9190*795d594fSAndroid Build Coastguard Worker }
9191*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset21Backward)9192*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset21Backward) {
9193*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroMaxOffset21Backward",
9194*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance() - /*C.BNEZ*/ 2u,
9195*795d594fSAndroid Build Coastguard Worker GetPrintCBcondOppositeAndJ("2"),
9196*795d594fSAndroid Build Coastguard Worker "1");
9197*795d594fSAndroid Build Coastguard Worker }
9198*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroMaxOffset21Backward_WithoutC)9199*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroMaxOffset21Backward_WithoutC) {
9200*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9201*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroMaxOffset21Backward_WithoutC",
9202*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC() - /*BNE*/ 4u,
9203*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9204*795d594fSAndroid Build Coastguard Worker "1");
9205*795d594fSAndroid Build Coastguard Worker }
9206*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset21Backward)9207*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset21Backward) {
9208*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroMaxOffset21Backward",
9209*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance() - /*C.BEQZ*/ 2u,
9210*795d594fSAndroid Build Coastguard Worker GetPrintCBcondOppositeAndJ("2"),
9211*795d594fSAndroid Build Coastguard Worker "1");
9212*795d594fSAndroid Build Coastguard Worker }
9213*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroMaxOffset21Backward_WithoutC)9214*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroMaxOffset21Backward_WithoutC) {
9215*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9216*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroMaxOffset21Backward_WithoutC",
9217*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC() - /*BEQ*/ 4u,
9218*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9219*795d594fSAndroid Build Coastguard Worker "1");
9220*795d594fSAndroid Build Coastguard Worker }
9221*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset21Backward)9222*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset21Backward) {
9223*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1MaxOffset21Backward",
9224*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance() - /*BNE*/ 4u,
9225*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9226*795d594fSAndroid Build Coastguard Worker "1");
9227*795d594fSAndroid Build Coastguard Worker }
9228*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1MaxOffset21Backward_WithoutC)9229*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1MaxOffset21Backward_WithoutC) {
9230*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9231*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1MaxOffset21Backward_WithoutC",
9232*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC() - /*BNE*/ 4u,
9233*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndJ("2"),
9234*795d594fSAndroid Build Coastguard Worker "1");
9235*795d594fSAndroid Build Coastguard Worker }
9236*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset21Forward)9237*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset21Forward) {
9238*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroOverMaxOffset21Forward",
9239*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance() - /*J*/ 4u + /*Exceed max*/ 2u,
9240*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9241*795d594fSAndroid Build Coastguard Worker "1");
9242*795d594fSAndroid Build Coastguard Worker }
9243*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset21Forward_WithoutC)9244*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset21Forward_WithoutC) {
9245*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9246*795d594fSAndroid Build Coastguard Worker TestBeqzA0Forward("BeqA0ZeroOverMaxOffset21Forward_WithoutC",
9247*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u + /*Exceed max*/ 4u,
9248*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9249*795d594fSAndroid Build Coastguard Worker "1");
9250*795d594fSAndroid Build Coastguard Worker }
9251*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset21Forward)9252*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset21Forward) {
9253*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroOverMaxOffset21Forward",
9254*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance() - /*J*/ 4u + /*Exceed max*/ 2u,
9255*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9256*795d594fSAndroid Build Coastguard Worker "1");
9257*795d594fSAndroid Build Coastguard Worker }
9258*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset21Forward_WithoutC)9259*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset21Forward_WithoutC) {
9260*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9261*795d594fSAndroid Build Coastguard Worker TestBnezA0Forward("BneA0ZeroOverMaxOffset21Forward_WithoutC",
9262*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u + /*Exceed max*/ 4u,
9263*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9264*795d594fSAndroid Build Coastguard Worker "1");
9265*795d594fSAndroid Build Coastguard Worker }
9266*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1OverMaxOffset21Forward)9267*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1OverMaxOffset21Forward) {
9268*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1OverMaxOffset21Forward",
9269*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance() - /*J*/ 4u + /*Exceed max*/ 2u,
9270*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9271*795d594fSAndroid Build Coastguard Worker "1");
9272*795d594fSAndroid Build Coastguard Worker }
9273*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1OverMaxOffset21Forward_WithoutC)9274*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1OverMaxOffset21Forward_WithoutC) {
9275*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9276*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Forward("BeqA0A1OverMaxOffset21Forward_WithoutC",
9277*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u + /*Exceed max*/ 4u,
9278*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9279*795d594fSAndroid Build Coastguard Worker "1");
9280*795d594fSAndroid Build Coastguard Worker }
9281*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset21Backward)9282*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset21Backward) {
9283*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroOverMaxOffset21Backward",
9284*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance() - /*C.BNEZ*/ 2u + /*Exceed max*/ 2u,
9285*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9286*795d594fSAndroid Build Coastguard Worker "1");
9287*795d594fSAndroid Build Coastguard Worker }
9288*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0ZeroOverMaxOffset21Backward_WithoutC)9289*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0ZeroOverMaxOffset21Backward_WithoutC) {
9290*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9291*795d594fSAndroid Build Coastguard Worker TestBeqzA0Backward("BeqA0ZeroOverMaxOffset21Backward_WithoutC",
9292*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC() - /*BNE*/ 4u + /*Exceed max*/ 4u,
9293*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9294*795d594fSAndroid Build Coastguard Worker "1");
9295*795d594fSAndroid Build Coastguard Worker }
9296*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset21Backward)9297*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset21Backward) {
9298*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroOverMaxOffset21Backward",
9299*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance() - /*C.BEQZ*/ 2u + /*Exceed max*/ 2u,
9300*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9301*795d594fSAndroid Build Coastguard Worker "1");
9302*795d594fSAndroid Build Coastguard Worker }
9303*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BneA0ZeroOverMaxOffset21Backward_WithoutC)9304*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BneA0ZeroOverMaxOffset21Backward_WithoutC) {
9305*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9306*795d594fSAndroid Build Coastguard Worker TestBnezA0Backward("BneA0ZeroOverMaxOffset21Backward_WithoutC",
9307*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC() - /*BEQ*/ 4u + /*Exceed max*/ 4u,
9308*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9309*795d594fSAndroid Build Coastguard Worker "1");
9310*795d594fSAndroid Build Coastguard Worker }
9311*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1OverMaxOffset21Backward)9312*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1OverMaxOffset21Backward) {
9313*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1OverMaxOffset21Backward",
9314*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance() - /*BNE*/ 4u + /*Exceed max*/ 2u,
9315*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9316*795d594fSAndroid Build Coastguard Worker "1");
9317*795d594fSAndroid Build Coastguard Worker }
9318*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1OverMaxOffset21Backward_WithoutC)9319*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1OverMaxOffset21Backward_WithoutC) {
9320*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9321*795d594fSAndroid Build Coastguard Worker TestBeqA0A1Backward("BeqA0A1OverMaxOffset21Backward_WithoutC",
9322*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC() - /*BNE*/ 4u + /*Exceed max*/ 4u,
9323*795d594fSAndroid Build Coastguard Worker GetPrintBcondOppositeAndTail("2", "3"),
9324*795d594fSAndroid Build Coastguard Worker "1");
9325*795d594fSAndroid Build Coastguard Worker }
9326*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1AlmostCascade)9327*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1AlmostCascade) {
9328*795d594fSAndroid Build Coastguard Worker TestBeqA0A1MaybeCascade("BeqA0A1AlmostCascade", /*cascade=*/false, GetPrintBcond());
9329*795d594fSAndroid Build Coastguard Worker }
9330*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1AlmostCascade_WithoutC)9331*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1AlmostCascade_WithoutC) {
9332*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9333*795d594fSAndroid Build Coastguard Worker TestBeqA0A1MaybeCascade("BeqA0A1AlmostCascade_WithoutC", /*cascade=*/false, GetPrintBcond());
9334*795d594fSAndroid Build Coastguard Worker }
9335*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1Cascade)9336*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1Cascade) {
9337*795d594fSAndroid Build Coastguard Worker TestBeqA0A1MaybeCascade("BeqA0A1Cascade", /*cascade=*/true, GetPrintBcondOppositeAndJ("1"));
9338*795d594fSAndroid Build Coastguard Worker }
9339*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BeqA0A1Cascade_WithoutC)9340*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BeqA0A1Cascade_WithoutC) {
9341*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9342*795d594fSAndroid Build Coastguard Worker TestBeqA0A1MaybeCascade(
9343*795d594fSAndroid Build Coastguard Worker "BeqA0A1Cascade_WithoutC", /*cascade=*/true, GetPrintBcondOppositeAndJ("1"));
9344*795d594fSAndroid Build Coastguard Worker }
9345*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondElimination)9346*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondElimination) {
9347*795d594fSAndroid Build Coastguard Worker TestBcondElimination("BcondElimination", "c.nop");
9348*795d594fSAndroid Build Coastguard Worker }
9349*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondElimination_WithoutC)9350*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondElimination_WithoutC) {
9351*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9352*795d594fSAndroid Build Coastguard Worker TestBcondElimination("BcondElimination_WithoutC", "nop");
9353*795d594fSAndroid Build Coastguard Worker }
9354*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondUnconditional)9355*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondUnconditional) {
9356*795d594fSAndroid Build Coastguard Worker TestBcondUnconditional("BcondUnconditional", "c.j");
9357*795d594fSAndroid Build Coastguard Worker }
9358*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,BcondUnconditional_WithoutC)9359*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, BcondUnconditional_WithoutC) {
9360*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9361*795d594fSAndroid Build Coastguard Worker TestBcondUnconditional("BcondUnconditional_WithoutC", "j");
9362*795d594fSAndroid Build Coastguard Worker }
9363*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdForward1KiB)9364*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdForward1KiB) {
9365*795d594fSAndroid Build Coastguard Worker TestJalRdForward("JalRdForward1KiB", 1 * KB, "1", GetPrintJalRd());
9366*795d594fSAndroid Build Coastguard Worker }
9367*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdForward1KiB_WithoutC)9368*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdForward1KiB_WithoutC) {
9369*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9370*795d594fSAndroid Build Coastguard Worker TestJalRdForward("JalRdForward1KiB_WithoutC", 1 * KB, "1", GetPrintJalRd());
9371*795d594fSAndroid Build Coastguard Worker }
9372*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdForward1KiBBare)9373*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdForward1KiBBare) {
9374*795d594fSAndroid Build Coastguard Worker TestJalRdForward("JalRdForward1KiBBare", 1 * KB, "1", GetPrintJalRd(), /*is_bare=*/true);
9375*795d594fSAndroid Build Coastguard Worker }
9376*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdForward1KiBBare_WithoutC)9377*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdForward1KiBBare_WithoutC) {
9378*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9379*795d594fSAndroid Build Coastguard Worker TestJalRdForward("JalRdForward1KiBBare_WithoutC", 1 * KB, "1", GetPrintJalRd(), /*is_bare=*/true);
9380*795d594fSAndroid Build Coastguard Worker }
9381*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdBackward1KiB)9382*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdBackward1KiB) {
9383*795d594fSAndroid Build Coastguard Worker TestJalRdBackward("JalRdBackward1KiB", 1 * KB, "1", GetPrintJalRd());
9384*795d594fSAndroid Build Coastguard Worker }
9385*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdBackward1KiB_WithoutC)9386*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdBackward1KiB_WithoutC) {
9387*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9388*795d594fSAndroid Build Coastguard Worker TestJalRdBackward("JalRdBackward1KiB_WithoutC", 1 * KB, "1", GetPrintJalRd());
9389*795d594fSAndroid Build Coastguard Worker }
9390*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdBackward1KiBBare)9391*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdBackward1KiBBare) {
9392*795d594fSAndroid Build Coastguard Worker TestJalRdBackward("JalRdBackward1KiBBare", 1 * KB, "1", GetPrintJalRd(), /*is_bare=*/true);
9393*795d594fSAndroid Build Coastguard Worker }
9394*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdBackward1KiBBare_WithoutC)9395*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdBackward1KiBBare_WithoutC) {
9396*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9397*795d594fSAndroid Build Coastguard Worker TestJalRdBackward(
9398*795d594fSAndroid Build Coastguard Worker "JalRdBackward1KiBBare_WithoutC", 1 * KB, "1", GetPrintJalRd(), /*is_bare=*/true);
9399*795d594fSAndroid Build Coastguard Worker }
9400*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdForward3KiB)9401*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdForward3KiB) {
9402*795d594fSAndroid Build Coastguard Worker TestJalRdForward("JalRdForward3KiB", 3 * KB, "1", GetPrintJalRd());
9403*795d594fSAndroid Build Coastguard Worker }
9404*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdForward3KiB_WithoutC)9405*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdForward3KiB_WithoutC) {
9406*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9407*795d594fSAndroid Build Coastguard Worker TestJalRdForward("JalRdForward3KiB_WithoutC", 3 * KB, "1", GetPrintJalRd());
9408*795d594fSAndroid Build Coastguard Worker }
9409*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdForward3KiBBare_WithoutC)9410*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdForward3KiBBare_WithoutC) {
9411*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9412*795d594fSAndroid Build Coastguard Worker TestJalRdForward("JalRdForward3KiBBare_WithoutC", 3 * KB, "1", GetPrintJalRd(), /*is_bare=*/true);
9413*795d594fSAndroid Build Coastguard Worker }
9414*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdBackward3KiB)9415*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdBackward3KiB) {
9416*795d594fSAndroid Build Coastguard Worker TestJalRdBackward("JalRdBackward3KiB", 3 * KB, "1", GetPrintJalRd());
9417*795d594fSAndroid Build Coastguard Worker }
9418*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdBackward3KiB_WithoutC)9419*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdBackward3KiB_WithoutC) {
9420*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9421*795d594fSAndroid Build Coastguard Worker TestJalRdBackward("JalRdBackward3KiB_WithoutC", 3 * KB, "1", GetPrintJalRd());
9422*795d594fSAndroid Build Coastguard Worker }
9423*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdBackward3KiBBare_WithoutC)9424*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdBackward3KiBBare_WithoutC) {
9425*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9426*795d594fSAndroid Build Coastguard Worker TestJalRdBackward(
9427*795d594fSAndroid Build Coastguard Worker "JalRdBackward3KiBBare_WithoutC", 3 * KB, "1", GetPrintJalRd(), /*is_bare=*/true);
9428*795d594fSAndroid Build Coastguard Worker }
9429*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdForward2MiB)9430*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdForward2MiB) {
9431*795d594fSAndroid Build Coastguard Worker TestJalRdForward("JalRdForward2MiB", 2 * MB, "1", GetPrintCallRd("2"));
9432*795d594fSAndroid Build Coastguard Worker }
9433*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdForward2MiB_WithoutC)9434*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdForward2MiB_WithoutC) {
9435*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9436*795d594fSAndroid Build Coastguard Worker TestJalRdForward("JalRdForward2MiB_WithoutC", 2 * MB, "1", GetPrintCallRd("2"));
9437*795d594fSAndroid Build Coastguard Worker }
9438*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdBackward2MiB)9439*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdBackward2MiB) {
9440*795d594fSAndroid Build Coastguard Worker TestJalRdBackward("JalRdBackward2MiB", 2 * MB, "1", GetPrintCallRd("2"));
9441*795d594fSAndroid Build Coastguard Worker }
9442*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JalRdBackward2MiB_WithoutC)9443*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JalRdBackward2MiB_WithoutC) {
9444*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9445*795d594fSAndroid Build Coastguard Worker TestJalRdBackward("JalRdBackward2MiB_WithoutC", 2 * MB, "1", GetPrintCallRd("2"));
9446*795d594fSAndroid Build Coastguard Worker }
9447*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JForward1KiB)9448*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JForward1KiB) {
9449*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JForward1KiB", 1 * KB, "1", GetEmitJ(), GetPrintCJ());
9450*795d594fSAndroid Build Coastguard Worker }
9451*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JForward1KiB_WithoutC)9452*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JForward1KiB_WithoutC) {
9453*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9454*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JForward1KiB_WithoutC", 1 * KB, "1", GetEmitJ(), GetPrintJ());
9455*795d594fSAndroid Build Coastguard Worker }
9456*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JForward1KiBBare)9457*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JForward1KiBBare) {
9458*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JForward1KiBBare", 1 * KB, "1", GetEmitJ(/*is_bare=*/true), GetPrintCJ());
9459*795d594fSAndroid Build Coastguard Worker }
9460*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JForward1KiBBare_WithoutC)9461*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JForward1KiBBare_WithoutC) {
9462*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9463*795d594fSAndroid Build Coastguard Worker TestBuncondForward(
9464*795d594fSAndroid Build Coastguard Worker "JForward1KiBBare_WithoutC", 1 * KB, "1", GetEmitJ(/*is_bare=*/true), GetPrintJ());
9465*795d594fSAndroid Build Coastguard Worker }
9466*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JBackward1KiB)9467*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JBackward1KiB) {
9468*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JBackward1KiB", 1 * KB, "1", GetEmitJ(), GetPrintCJ());
9469*795d594fSAndroid Build Coastguard Worker }
9470*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JBackward1KiB_WithoutC)9471*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JBackward1KiB_WithoutC) {
9472*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9473*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JBackward1KiB_WithoutC", 1 * KB, "1", GetEmitJ(), GetPrintJ());
9474*795d594fSAndroid Build Coastguard Worker }
9475*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JBackward1KiBBare)9476*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JBackward1KiBBare) {
9477*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JBackward1KiBBare", 1 * KB, "1", GetEmitJ(/*is_bare=*/true), GetPrintCJ());
9478*795d594fSAndroid Build Coastguard Worker }
9479*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JBackward1KiBBare_WithoutC)9480*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JBackward1KiBBare_WithoutC) {
9481*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9482*795d594fSAndroid Build Coastguard Worker TestBuncondBackward(
9483*795d594fSAndroid Build Coastguard Worker "JBackward1KiBBare_WithoutC", 1 * KB, "1", GetEmitJ(/*is_bare=*/true), GetPrintJ());
9484*795d594fSAndroid Build Coastguard Worker }
9485*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JForward3KiB)9486*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JForward3KiB) {
9487*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JForward3KiB", 3 * KB, "1", GetEmitJ(), GetPrintJ());
9488*795d594fSAndroid Build Coastguard Worker }
9489*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JForward3KiB_WithoutC)9490*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JForward3KiB_WithoutC) {
9491*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9492*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JForward3KiB_WithoutC", 3 * KB, "1", GetEmitJ(), GetPrintJ());
9493*795d594fSAndroid Build Coastguard Worker }
9494*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JForward3KiBBare_WithoutC)9495*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JForward3KiBBare_WithoutC) {
9496*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9497*795d594fSAndroid Build Coastguard Worker TestBuncondForward(
9498*795d594fSAndroid Build Coastguard Worker "JForward3KiBBare_WithoutC", 3 * KB, "1", GetEmitJ(/*is_bare=*/true), GetPrintJ());
9499*795d594fSAndroid Build Coastguard Worker }
9500*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JBackward3KiB)9501*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JBackward3KiB) {
9502*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JBackward3KiB", 3 * KB, "1", GetEmitJ(), GetPrintJ());
9503*795d594fSAndroid Build Coastguard Worker }
9504*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JBackward3KiB_WithoutC)9505*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JBackward3KiB_WithoutC) {
9506*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9507*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JBackward3KiB_WithoutC", 3 * KB, "1", GetEmitJ(), GetPrintJ());
9508*795d594fSAndroid Build Coastguard Worker }
9509*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JBackward3KiBBare_WithoutC)9510*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JBackward3KiBBare_WithoutC) {
9511*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9512*795d594fSAndroid Build Coastguard Worker TestBuncondBackward(
9513*795d594fSAndroid Build Coastguard Worker "JBackward3KiBBare_WithoutC", 3 * KB, "1", GetEmitJ(/*is_bare=*/true), GetPrintJ());
9514*795d594fSAndroid Build Coastguard Worker }
9515*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JForward2MiB)9516*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JForward2MiB) {
9517*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JForward2MiB", 2 * MB, "1", GetEmitJ(), GetPrintTail("2"));
9518*795d594fSAndroid Build Coastguard Worker }
9519*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JForward2MiB_WithoutC)9520*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JForward2MiB_WithoutC) {
9521*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9522*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JForward2MiB_WithoutC", 2 * MB, "1", GetEmitJ(), GetPrintTail("2"));
9523*795d594fSAndroid Build Coastguard Worker }
9524*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JBackward2MiB)9525*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JBackward2MiB) {
9526*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JBackward2MiB", 2 * MB, "1", GetEmitJ(), GetPrintTail("2"));
9527*795d594fSAndroid Build Coastguard Worker }
9528*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JBackward2MiB_WithoutC)9529*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JBackward2MiB_WithoutC) {
9530*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9531*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JBackward2MiB_WithoutC", 2 * MB, "1", GetEmitJ(), GetPrintTail("2"));
9532*795d594fSAndroid Build Coastguard Worker }
9533*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset12Forward)9534*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset12Forward) {
9535*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JMaxOffset12Forward",
9536*795d594fSAndroid Build Coastguard Worker MaxOffset12ForwardDistance() - /*C.J*/ 2u,
9537*795d594fSAndroid Build Coastguard Worker "1",
9538*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9539*795d594fSAndroid Build Coastguard Worker GetPrintCJ());
9540*795d594fSAndroid Build Coastguard Worker }
9541*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset12ForwardBare)9542*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset12ForwardBare) {
9543*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JMaxOffset12ForwardBare",
9544*795d594fSAndroid Build Coastguard Worker MaxOffset12ForwardDistance() - /*C.J*/ 2u,
9545*795d594fSAndroid Build Coastguard Worker "1",
9546*795d594fSAndroid Build Coastguard Worker GetEmitJ(/*is_bare=*/true),
9547*795d594fSAndroid Build Coastguard Worker GetPrintCJ());
9548*795d594fSAndroid Build Coastguard Worker }
9549*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset12Backward)9550*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset12Backward) {
9551*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JMaxOffset12Backward",
9552*795d594fSAndroid Build Coastguard Worker MaxOffset12BackwardDistance(),
9553*795d594fSAndroid Build Coastguard Worker "1",
9554*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9555*795d594fSAndroid Build Coastguard Worker GetPrintCJ());
9556*795d594fSAndroid Build Coastguard Worker }
9557*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset12BackwardBare)9558*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset12BackwardBare) {
9559*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JMaxOffset12BackwardBare",
9560*795d594fSAndroid Build Coastguard Worker MaxOffset12BackwardDistance(),
9561*795d594fSAndroid Build Coastguard Worker "1",
9562*795d594fSAndroid Build Coastguard Worker GetEmitJ(/*is_bare=*/true),
9563*795d594fSAndroid Build Coastguard Worker GetPrintCJ());
9564*795d594fSAndroid Build Coastguard Worker }
9565*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JOverMaxOffset12Forward)9566*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JOverMaxOffset12Forward) {
9567*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JOverMaxOffset12Forward",
9568*795d594fSAndroid Build Coastguard Worker MaxOffset12ForwardDistance() - /*C.J*/ 2u + /*Exceed max*/ 2u,
9569*795d594fSAndroid Build Coastguard Worker "1",
9570*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9571*795d594fSAndroid Build Coastguard Worker GetPrintJ());
9572*795d594fSAndroid Build Coastguard Worker }
9573*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JOverMaxOffset12Backward)9574*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JOverMaxOffset12Backward) {
9575*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JMaxOffset12Backward",
9576*795d594fSAndroid Build Coastguard Worker MaxOffset12BackwardDistance() + /*Exceed max*/ 2u,
9577*795d594fSAndroid Build Coastguard Worker "1",
9578*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9579*795d594fSAndroid Build Coastguard Worker GetPrintJ());
9580*795d594fSAndroid Build Coastguard Worker }
9581*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset21Forward)9582*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset21Forward) {
9583*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JMaxOffset21Forward",
9584*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance() - /*J*/ 4u,
9585*795d594fSAndroid Build Coastguard Worker "1",
9586*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9587*795d594fSAndroid Build Coastguard Worker GetPrintJ());
9588*795d594fSAndroid Build Coastguard Worker }
9589*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset21Forward_WithoutC)9590*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset21Forward_WithoutC) {
9591*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9592*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JMaxOffset21Forward_WithoutC",
9593*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u,
9594*795d594fSAndroid Build Coastguard Worker "1",
9595*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9596*795d594fSAndroid Build Coastguard Worker GetPrintJ());
9597*795d594fSAndroid Build Coastguard Worker }
9598*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset21ForwardBare_WithoutC)9599*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset21ForwardBare_WithoutC) {
9600*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9601*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JMaxOffset21ForwardBare_WithoutC",
9602*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u,
9603*795d594fSAndroid Build Coastguard Worker "1",
9604*795d594fSAndroid Build Coastguard Worker GetEmitJ(/*is_bare=*/true),
9605*795d594fSAndroid Build Coastguard Worker GetPrintJ());
9606*795d594fSAndroid Build Coastguard Worker }
9607*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset21Backward)9608*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset21Backward) {
9609*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JMaxOffset21Backward",
9610*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance(),
9611*795d594fSAndroid Build Coastguard Worker "1",
9612*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9613*795d594fSAndroid Build Coastguard Worker GetPrintJ());
9614*795d594fSAndroid Build Coastguard Worker }
9615*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset21Backward_WithoutC)9616*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset21Backward_WithoutC) {
9617*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9618*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JMaxOffset21Backward_WithoutC",
9619*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC(),
9620*795d594fSAndroid Build Coastguard Worker "1",
9621*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9622*795d594fSAndroid Build Coastguard Worker GetPrintJ());
9623*795d594fSAndroid Build Coastguard Worker }
9624*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JMaxOffset21BackwardBare_WithoutC)9625*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JMaxOffset21BackwardBare_WithoutC) {
9626*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9627*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JMaxOffset21BackwardBare_WithoutC",
9628*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC(),
9629*795d594fSAndroid Build Coastguard Worker "1",
9630*795d594fSAndroid Build Coastguard Worker GetEmitJ(/*is_bare=*/true),
9631*795d594fSAndroid Build Coastguard Worker GetPrintJ());
9632*795d594fSAndroid Build Coastguard Worker }
9633*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JOverMaxOffset21Forward)9634*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JOverMaxOffset21Forward) {
9635*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JOverMaxOffset21Forward",
9636*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance() - /*J*/ 4u + /*Exceed max*/ 2u,
9637*795d594fSAndroid Build Coastguard Worker "1",
9638*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9639*795d594fSAndroid Build Coastguard Worker GetPrintTail("2"));
9640*795d594fSAndroid Build Coastguard Worker }
9641*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JOverMaxOffset21Forward_WithoutC)9642*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JOverMaxOffset21Forward_WithoutC) {
9643*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9644*795d594fSAndroid Build Coastguard Worker TestBuncondForward("JOverMaxOffset21Forward_WithoutC",
9645*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u + /*Exceed max*/ 4u,
9646*795d594fSAndroid Build Coastguard Worker "1",
9647*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9648*795d594fSAndroid Build Coastguard Worker GetPrintTail("2"));
9649*795d594fSAndroid Build Coastguard Worker }
9650*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JOverMaxOffset21Backward)9651*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JOverMaxOffset21Backward) {
9652*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JMaxOffset21Backward",
9653*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance() + /*Exceed max*/ 2u,
9654*795d594fSAndroid Build Coastguard Worker "1",
9655*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9656*795d594fSAndroid Build Coastguard Worker GetPrintTail("2"));
9657*795d594fSAndroid Build Coastguard Worker }
9658*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JOverMaxOffset21Backward_WithoutC)9659*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JOverMaxOffset21Backward_WithoutC) {
9660*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9661*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("JMaxOffset21Backward_WithoutC",
9662*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC() + /*Exceed max*/ 4u,
9663*795d594fSAndroid Build Coastguard Worker "1",
9664*795d594fSAndroid Build Coastguard Worker GetEmitJ(),
9665*795d594fSAndroid Build Coastguard Worker GetPrintTail("2"));
9666*795d594fSAndroid Build Coastguard Worker }
9667*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CallForward3KiB_WithoutC)9668*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CallForward3KiB_WithoutC) {
9669*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9670*795d594fSAndroid Build Coastguard Worker TestBuncondForward("CallForward3KiB_WithoutC", 3 * KB, "1", GetEmitJal(), GetPrintJal());
9671*795d594fSAndroid Build Coastguard Worker }
9672*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CallBackward3KiB_WithoutC)9673*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CallBackward3KiB_WithoutC) {
9674*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9675*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("CallBackward3KiB_WithoutC", 3 * KB, "1", GetEmitJal(), GetPrintJal());
9676*795d594fSAndroid Build Coastguard Worker }
9677*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CallForward2MiB_WithoutC)9678*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CallForward2MiB_WithoutC) {
9679*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9680*795d594fSAndroid Build Coastguard Worker TestBuncondForward("CallForward2MiB_WithoutC", 2 * MB, "1", GetEmitJal(), GetPrintCall("2"));
9681*795d594fSAndroid Build Coastguard Worker }
9682*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CallBackward2MiB_WithoutC)9683*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CallBackward2MiB_WithoutC) {
9684*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9685*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("CallBackward2MiB_WithoutC", 2 * MB, "1", GetEmitJal(), GetPrintCall("2"));
9686*795d594fSAndroid Build Coastguard Worker }
9687*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CallMaxOffset21Forward_WithoutC)9688*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CallMaxOffset21Forward_WithoutC) {
9689*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9690*795d594fSAndroid Build Coastguard Worker TestBuncondForward("CallMaxOffset21Forward_WithoutC",
9691*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u,
9692*795d594fSAndroid Build Coastguard Worker "1",
9693*795d594fSAndroid Build Coastguard Worker GetEmitJal(),
9694*795d594fSAndroid Build Coastguard Worker GetPrintJal());
9695*795d594fSAndroid Build Coastguard Worker }
9696*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CallMaxOffset21Backward_WithoutC)9697*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CallMaxOffset21Backward_WithoutC) {
9698*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9699*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("CallMaxOffset21Backward_WithoutC",
9700*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC(),
9701*795d594fSAndroid Build Coastguard Worker "1",
9702*795d594fSAndroid Build Coastguard Worker GetEmitJal(),
9703*795d594fSAndroid Build Coastguard Worker GetPrintJal());
9704*795d594fSAndroid Build Coastguard Worker }
9705*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CallOverMaxOffset21Forward_WithoutC)9706*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CallOverMaxOffset21Forward_WithoutC) {
9707*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9708*795d594fSAndroid Build Coastguard Worker TestBuncondForward("CallOverMaxOffset21Forward_WithoutC",
9709*795d594fSAndroid Build Coastguard Worker MaxOffset21ForwardDistance_WithoutC() - /*J*/ 4u + /*Exceed max*/ 4u,
9710*795d594fSAndroid Build Coastguard Worker "1",
9711*795d594fSAndroid Build Coastguard Worker GetEmitJal(),
9712*795d594fSAndroid Build Coastguard Worker GetPrintCall("2"));
9713*795d594fSAndroid Build Coastguard Worker }
9714*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,CallOverMaxOffset21Backward_WithoutC)9715*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, CallOverMaxOffset21Backward_WithoutC) {
9716*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9717*795d594fSAndroid Build Coastguard Worker TestBuncondBackward("CallMaxOffset21Backward_WithoutC",
9718*795d594fSAndroid Build Coastguard Worker MaxOffset21BackwardDistance_WithoutC() + /*Exceed max*/ 4u,
9719*795d594fSAndroid Build Coastguard Worker "1",
9720*795d594fSAndroid Build Coastguard Worker GetEmitJal(),
9721*795d594fSAndroid Build Coastguard Worker GetPrintCall("2"));
9722*795d594fSAndroid Build Coastguard Worker }
9723*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Loadb)9724*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Loadb) {
9725*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this); // Suppress 16-bit instructions for address formation.
9726*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Loadb", "lb", &Riscv64Assembler::Loadb, /*is_store=*/ false);
9727*795d594fSAndroid Build Coastguard Worker }
9728*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Loadh)9729*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Loadh) {
9730*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9731*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Loadh", "lh", &Riscv64Assembler::Loadh, /*is_store=*/ false);
9732*795d594fSAndroid Build Coastguard Worker }
9733*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Loadw)9734*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Loadw) {
9735*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9736*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Loadw", "lw", &Riscv64Assembler::Loadw, /*is_store=*/ false);
9737*795d594fSAndroid Build Coastguard Worker }
9738*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Loadd)9739*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Loadd) {
9740*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9741*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Loadd", "ld", &Riscv64Assembler::Loadd, /*is_store=*/ false);
9742*795d594fSAndroid Build Coastguard Worker }
9743*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Loadbu)9744*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Loadbu) {
9745*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9746*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Loadbu", "lbu", &Riscv64Assembler::Loadbu, /*is_store=*/ false);
9747*795d594fSAndroid Build Coastguard Worker }
9748*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Loadhu)9749*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Loadhu) {
9750*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9751*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Loadhu", "lhu", &Riscv64Assembler::Loadhu, /*is_store=*/ false);
9752*795d594fSAndroid Build Coastguard Worker }
9753*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Loadwu)9754*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Loadwu) {
9755*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this); // Suppress 16-bit instructions for address formation.
9756*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Loadwu", "lwu", &Riscv64Assembler::Loadwu, /*is_store=*/ false);
9757*795d594fSAndroid Build Coastguard Worker }
9758*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Storeb)9759*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Storeb) {
9760*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9761*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Storeb", "sb", &Riscv64Assembler::Storeb, /*is_store=*/ true);
9762*795d594fSAndroid Build Coastguard Worker }
9763*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Storeh)9764*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Storeh) {
9765*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9766*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Storeh", "sh", &Riscv64Assembler::Storeh, /*is_store=*/ true);
9767*795d594fSAndroid Build Coastguard Worker }
9768*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Storew)9769*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Storew) {
9770*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9771*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Storew", "sw", &Riscv64Assembler::Storew, /*is_store=*/ true);
9772*795d594fSAndroid Build Coastguard Worker }
9773*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Stored)9774*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Stored) {
9775*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9776*795d594fSAndroid Build Coastguard Worker TestLoadStoreArbitraryOffset("Stored", "sd", &Riscv64Assembler::Stored, /*is_store=*/ true);
9777*795d594fSAndroid Build Coastguard Worker }
9778*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FLoadw)9779*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FLoadw) {
9780*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this); // Suppress 16-bit instructions for address formation.
9781*795d594fSAndroid Build Coastguard Worker TestFPLoadStoreArbitraryOffset("FLoadw", "flw", &Riscv64Assembler::FLoadw);
9782*795d594fSAndroid Build Coastguard Worker }
9783*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FLoadd)9784*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FLoadd) {
9785*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9786*795d594fSAndroid Build Coastguard Worker TestFPLoadStoreArbitraryOffset("FLoadd", "fld", &Riscv64Assembler::FLoadd);
9787*795d594fSAndroid Build Coastguard Worker }
9788*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FStorew)9789*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FStorew) {
9790*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this); // Suppress 16-bit instructions for address formation.
9791*795d594fSAndroid Build Coastguard Worker TestFPLoadStoreArbitraryOffset("FStorew", "fsw", &Riscv64Assembler::FStorew);
9792*795d594fSAndroid Build Coastguard Worker }
9793*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,FStored)9794*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, FStored) {
9795*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9796*795d594fSAndroid Build Coastguard Worker TestFPLoadStoreArbitraryOffset("FStored", "fsd", &Riscv64Assembler::FStored);
9797*795d594fSAndroid Build Coastguard Worker }
9798*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Unimp)9799*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Unimp) {
9800*795d594fSAndroid Build Coastguard Worker __ Unimp();
9801*795d594fSAndroid Build Coastguard Worker DriverStr("unimp\n", "Unimp");
9802*795d594fSAndroid Build Coastguard Worker }
9803*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,Unimp_WithoutC)9804*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, Unimp_WithoutC) {
9805*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9806*795d594fSAndroid Build Coastguard Worker __ Unimp();
9807*795d594fSAndroid Build Coastguard Worker DriverStr("unimp\n", "Unimp_WithoutC");
9808*795d594fSAndroid Build Coastguard Worker }
9809*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,LoadLabelAddress)9810*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, LoadLabelAddress) {
9811*795d594fSAndroid Build Coastguard Worker std::string expected;
9812*795d594fSAndroid Build Coastguard Worker constexpr size_t kNumLoadsForward = 4 * KB;
9813*795d594fSAndroid Build Coastguard Worker constexpr size_t kNumLoadsBackward = 4 * KB;
9814*795d594fSAndroid Build Coastguard Worker Riscv64Label label;
9815*795d594fSAndroid Build Coastguard Worker auto emit_batch = [&](size_t num_loads, const std::string& target_label) {
9816*795d594fSAndroid Build Coastguard Worker for (size_t i = 0; i != num_loads; ++i) {
9817*795d594fSAndroid Build Coastguard Worker // Cycle through non-Zero registers.
9818*795d594fSAndroid Build Coastguard Worker XRegister rd = enum_cast<XRegister>((i % (kNumberOfXRegisters - 1)) + 1);
9819*795d594fSAndroid Build Coastguard Worker DCHECK_NE(rd, Zero);
9820*795d594fSAndroid Build Coastguard Worker std::string rd_name = GetRegisterName(rd);
9821*795d594fSAndroid Build Coastguard Worker __ LoadLabelAddress(rd, &label);
9822*795d594fSAndroid Build Coastguard Worker expected += "1:\n";
9823*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("auipc {}, %pcrel_hi({})\n", rd_name, target_label);
9824*795d594fSAndroid Build Coastguard Worker expected += ART_FORMAT("addi {}, {}, %pcrel_lo(1b)\n", rd_name, rd_name);
9825*795d594fSAndroid Build Coastguard Worker }
9826*795d594fSAndroid Build Coastguard Worker };
9827*795d594fSAndroid Build Coastguard Worker emit_batch(kNumLoadsForward, "2f");
9828*795d594fSAndroid Build Coastguard Worker __ Bind(&label);
9829*795d594fSAndroid Build Coastguard Worker expected += "2:\n";
9830*795d594fSAndroid Build Coastguard Worker emit_batch(kNumLoadsBackward, "2b");
9831*795d594fSAndroid Build Coastguard Worker DriverStr(expected, "LoadLabelAddress");
9832*795d594fSAndroid Build Coastguard Worker }
9833*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,LoadLiteralWithPaddingForLong)9834*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, LoadLiteralWithPaddingForLong) {
9835*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9836*795d594fSAndroid Build Coastguard Worker TestLoadLiteral("LoadLiteralWithPaddingForLong", /*with_padding_for_long=*/ true);
9837*795d594fSAndroid Build Coastguard Worker }
9838*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,LoadLiteralWithoutPaddingForLong)9839*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, LoadLiteralWithoutPaddingForLong) {
9840*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9841*795d594fSAndroid Build Coastguard Worker TestLoadLiteral("LoadLiteralWithoutPaddingForLong", /*with_padding_for_long=*/ false);
9842*795d594fSAndroid Build Coastguard Worker }
9843*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,JumpTable)9844*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, JumpTable) {
9845*795d594fSAndroid Build Coastguard Worker ScopedCSuppression scs(this);
9846*795d594fSAndroid Build Coastguard Worker std::string expected;
9847*795d594fSAndroid Build Coastguard Worker expected += EmitNops(sizeof(uint32_t));
9848*795d594fSAndroid Build Coastguard Worker Riscv64Label targets[4];
9849*795d594fSAndroid Build Coastguard Worker uint32_t target_locations[4];
9850*795d594fSAndroid Build Coastguard Worker JumpTable* jump_table = __ CreateJumpTable(ArenaVector<Riscv64Label*>(
9851*795d594fSAndroid Build Coastguard Worker {&targets[0], &targets[1], &targets[2], &targets[3]}, __ GetAllocator()->Adapter()));
9852*795d594fSAndroid Build Coastguard Worker for (size_t i : {0, 1, 2, 3}) {
9853*795d594fSAndroid Build Coastguard Worker target_locations[i] = __ CodeSize();
9854*795d594fSAndroid Build Coastguard Worker __ Bind(&targets[i]);
9855*795d594fSAndroid Build Coastguard Worker expected += std::to_string(i) + ":\n";
9856*795d594fSAndroid Build Coastguard Worker expected += EmitNops(sizeof(uint32_t));
9857*795d594fSAndroid Build Coastguard Worker }
9858*795d594fSAndroid Build Coastguard Worker __ LoadLabelAddress(A0, jump_table->GetLabel());
9859*795d594fSAndroid Build Coastguard Worker expected += "4:\n"
9860*795d594fSAndroid Build Coastguard Worker "auipc a0, %pcrel_hi(5f)\n"
9861*795d594fSAndroid Build Coastguard Worker "addi a0, a0, %pcrel_lo(4b)\n";
9862*795d594fSAndroid Build Coastguard Worker expected += EmitNops(sizeof(uint32_t));
9863*795d594fSAndroid Build Coastguard Worker uint32_t label5_location = __ CodeSize();
9864*795d594fSAndroid Build Coastguard Worker auto target_offset = [&](size_t i) {
9865*795d594fSAndroid Build Coastguard Worker // Even with `-mno-relax`, clang assembler does not fully resolve `.4byte 0b - 5b`
9866*795d594fSAndroid Build Coastguard Worker // and emits a relocation, so we need to calculate target offsets ourselves.
9867*795d594fSAndroid Build Coastguard Worker return std::to_string(static_cast<int64_t>(target_locations[i] - label5_location));
9868*795d594fSAndroid Build Coastguard Worker };
9869*795d594fSAndroid Build Coastguard Worker expected += "5:\n"
9870*795d594fSAndroid Build Coastguard Worker ".4byte " + target_offset(0) + "\n"
9871*795d594fSAndroid Build Coastguard Worker ".4byte " + target_offset(1) + "\n"
9872*795d594fSAndroid Build Coastguard Worker ".4byte " + target_offset(2) + "\n"
9873*795d594fSAndroid Build Coastguard Worker ".4byte " + target_offset(3) + "\n";
9874*795d594fSAndroid Build Coastguard Worker DriverStr(expected, "JumpTable");
9875*795d594fSAndroid Build Coastguard Worker }
9876*795d594fSAndroid Build Coastguard Worker
TEST_F(AssemblerRISCV64Test,ScratchRegisters)9877*795d594fSAndroid Build Coastguard Worker TEST_F(AssemblerRISCV64Test, ScratchRegisters) {
9878*795d594fSAndroid Build Coastguard Worker ScratchRegisterScope srs(GetAssembler());
9879*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs.AvailableXRegisters()); // Default: TMP(T6) and TMP2(T5).
9880*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(1u, srs.AvailableFRegisters()); // Default: FTMP(FT11).
9881*795d594fSAndroid Build Coastguard Worker
9882*795d594fSAndroid Build Coastguard Worker XRegister tmp = srs.AllocateXRegister();
9883*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(TMP, tmp);
9884*795d594fSAndroid Build Coastguard Worker XRegister tmp2 = srs.AllocateXRegister();
9885*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(TMP2, tmp2);
9886*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(0u, srs.AvailableXRegisters());
9887*795d594fSAndroid Build Coastguard Worker
9888*795d594fSAndroid Build Coastguard Worker FRegister ftmp = srs.AllocateFRegister();
9889*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(FTMP, ftmp);
9890*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(0u, srs.AvailableFRegisters());
9891*795d594fSAndroid Build Coastguard Worker
9892*795d594fSAndroid Build Coastguard Worker // Test nesting.
9893*795d594fSAndroid Build Coastguard Worker srs.FreeXRegister(A0);
9894*795d594fSAndroid Build Coastguard Worker srs.FreeXRegister(A1);
9895*795d594fSAndroid Build Coastguard Worker srs.FreeFRegister(FA0);
9896*795d594fSAndroid Build Coastguard Worker srs.FreeFRegister(FA1);
9897*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs.AvailableXRegisters());
9898*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs.AvailableFRegisters());
9899*795d594fSAndroid Build Coastguard Worker {
9900*795d594fSAndroid Build Coastguard Worker ScratchRegisterScope srs2(GetAssembler());
9901*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs2.AvailableXRegisters());
9902*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs2.AvailableFRegisters());
9903*795d594fSAndroid Build Coastguard Worker XRegister a1 = srs2.AllocateXRegister();
9904*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(A1, a1);
9905*795d594fSAndroid Build Coastguard Worker XRegister a0 = srs2.AllocateXRegister();
9906*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(A0, a0);
9907*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(0u, srs2.AvailableXRegisters());
9908*795d594fSAndroid Build Coastguard Worker FRegister fa1 = srs2.AllocateFRegister();
9909*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(FA1, fa1);
9910*795d594fSAndroid Build Coastguard Worker FRegister fa0 = srs2.AllocateFRegister();
9911*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(FA0, fa0);
9912*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(0u, srs2.AvailableFRegisters());
9913*795d594fSAndroid Build Coastguard Worker }
9914*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs.AvailableXRegisters());
9915*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs.AvailableFRegisters());
9916*795d594fSAndroid Build Coastguard Worker
9917*795d594fSAndroid Build Coastguard Worker srs.IncludeXRegister(A0); // No-op as the register was already available.
9918*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs.AvailableXRegisters());
9919*795d594fSAndroid Build Coastguard Worker srs.IncludeFRegister(FA0); // No-op as the register was already available.
9920*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs.AvailableFRegisters());
9921*795d594fSAndroid Build Coastguard Worker srs.IncludeXRegister(S0);
9922*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(3u, srs.AvailableXRegisters());
9923*795d594fSAndroid Build Coastguard Worker srs.IncludeFRegister(FS0);
9924*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(3u, srs.AvailableFRegisters());
9925*795d594fSAndroid Build Coastguard Worker
9926*795d594fSAndroid Build Coastguard Worker srs.ExcludeXRegister(S1); // No-op as the register was not available.
9927*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(3u, srs.AvailableXRegisters());
9928*795d594fSAndroid Build Coastguard Worker srs.ExcludeFRegister(FS1); // No-op as the register was not available.
9929*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(3u, srs.AvailableFRegisters());
9930*795d594fSAndroid Build Coastguard Worker srs.ExcludeXRegister(A0);
9931*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs.AvailableXRegisters());
9932*795d594fSAndroid Build Coastguard Worker srs.ExcludeFRegister(FA0);
9933*795d594fSAndroid Build Coastguard Worker ASSERT_EQ(2u, srs.AvailableFRegisters());
9934*795d594fSAndroid Build Coastguard Worker }
9935*795d594fSAndroid Build Coastguard Worker
9936*795d594fSAndroid Build Coastguard Worker #undef __
9937*795d594fSAndroid Build Coastguard Worker
9938*795d594fSAndroid Build Coastguard Worker } // namespace riscv64
9939*795d594fSAndroid Build Coastguard Worker } // namespace art
9940