blob: 16f29b00bca372b7eaca6a131513aed61cfa9c17 [file] [log] [blame]
Chris Larsendbce0d72015-09-17 13:34:00 -07001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "assembler_mips64.h"
18
19#include <inttypes.h>
20#include <map>
21#include <random>
22
23#include "base/bit_utils.h"
24#include "base/stl_util.h"
25#include "utils/assembler_test.h"
26
27namespace art {
28
29struct MIPS64CpuRegisterCompare {
30 bool operator()(const mips64::GpuRegister& a, const mips64::GpuRegister& b) const {
31 return a < b;
32 }
33};
34
35class AssemblerMIPS64Test : public AssemblerTest<mips64::Mips64Assembler,
36 mips64::GpuRegister,
37 mips64::FpuRegister,
38 uint32_t> {
39 public:
40 typedef AssemblerTest<mips64::Mips64Assembler,
41 mips64::GpuRegister,
42 mips64::FpuRegister,
43 uint32_t> Base;
44
45 protected:
46 // Get the typically used name for this architecture, e.g., aarch64, x86-64, ...
47 std::string GetArchitectureString() OVERRIDE {
48 return "mips64";
49 }
50
51 std::string GetAssemblerParameters() OVERRIDE {
52 return " --no-warn -march=mips64r6";
53 }
54
55 std::string GetDisassembleParameters() OVERRIDE {
56 return " -D -bbinary -mmips:isa64r6";
57 }
58
59 void SetUpHelpers() OVERRIDE {
60 if (registers_.size() == 0) {
61 registers_.push_back(new mips64::GpuRegister(mips64::ZERO));
62 registers_.push_back(new mips64::GpuRegister(mips64::AT));
63 registers_.push_back(new mips64::GpuRegister(mips64::V0));
64 registers_.push_back(new mips64::GpuRegister(mips64::V1));
65 registers_.push_back(new mips64::GpuRegister(mips64::A0));
66 registers_.push_back(new mips64::GpuRegister(mips64::A1));
67 registers_.push_back(new mips64::GpuRegister(mips64::A2));
68 registers_.push_back(new mips64::GpuRegister(mips64::A3));
69 registers_.push_back(new mips64::GpuRegister(mips64::A4));
70 registers_.push_back(new mips64::GpuRegister(mips64::A5));
71 registers_.push_back(new mips64::GpuRegister(mips64::A6));
72 registers_.push_back(new mips64::GpuRegister(mips64::A7));
73 registers_.push_back(new mips64::GpuRegister(mips64::T0));
74 registers_.push_back(new mips64::GpuRegister(mips64::T1));
75 registers_.push_back(new mips64::GpuRegister(mips64::T2));
76 registers_.push_back(new mips64::GpuRegister(mips64::T3));
77 registers_.push_back(new mips64::GpuRegister(mips64::S0));
78 registers_.push_back(new mips64::GpuRegister(mips64::S1));
79 registers_.push_back(new mips64::GpuRegister(mips64::S2));
80 registers_.push_back(new mips64::GpuRegister(mips64::S3));
81 registers_.push_back(new mips64::GpuRegister(mips64::S4));
82 registers_.push_back(new mips64::GpuRegister(mips64::S5));
83 registers_.push_back(new mips64::GpuRegister(mips64::S6));
84 registers_.push_back(new mips64::GpuRegister(mips64::S7));
85 registers_.push_back(new mips64::GpuRegister(mips64::T8));
86 registers_.push_back(new mips64::GpuRegister(mips64::T9));
87 registers_.push_back(new mips64::GpuRegister(mips64::K0));
88 registers_.push_back(new mips64::GpuRegister(mips64::K1));
89 registers_.push_back(new mips64::GpuRegister(mips64::GP));
90 registers_.push_back(new mips64::GpuRegister(mips64::SP));
91 registers_.push_back(new mips64::GpuRegister(mips64::S8));
92 registers_.push_back(new mips64::GpuRegister(mips64::RA));
93
94 secondary_register_names_.emplace(mips64::GpuRegister(mips64::ZERO), "zero");
95 secondary_register_names_.emplace(mips64::GpuRegister(mips64::AT), "at");
96 secondary_register_names_.emplace(mips64::GpuRegister(mips64::V0), "v0");
97 secondary_register_names_.emplace(mips64::GpuRegister(mips64::V1), "v1");
98 secondary_register_names_.emplace(mips64::GpuRegister(mips64::A0), "a0");
99 secondary_register_names_.emplace(mips64::GpuRegister(mips64::A1), "a1");
100 secondary_register_names_.emplace(mips64::GpuRegister(mips64::A2), "a2");
101 secondary_register_names_.emplace(mips64::GpuRegister(mips64::A3), "a3");
102 secondary_register_names_.emplace(mips64::GpuRegister(mips64::A4), "a4");
103 secondary_register_names_.emplace(mips64::GpuRegister(mips64::A5), "a5");
104 secondary_register_names_.emplace(mips64::GpuRegister(mips64::A6), "a6");
105 secondary_register_names_.emplace(mips64::GpuRegister(mips64::A7), "a7");
106 secondary_register_names_.emplace(mips64::GpuRegister(mips64::T0), "t0");
107 secondary_register_names_.emplace(mips64::GpuRegister(mips64::T1), "t1");
108 secondary_register_names_.emplace(mips64::GpuRegister(mips64::T2), "t2");
109 secondary_register_names_.emplace(mips64::GpuRegister(mips64::T3), "t3");
110 secondary_register_names_.emplace(mips64::GpuRegister(mips64::S0), "s0");
111 secondary_register_names_.emplace(mips64::GpuRegister(mips64::S1), "s1");
112 secondary_register_names_.emplace(mips64::GpuRegister(mips64::S2), "s2");
113 secondary_register_names_.emplace(mips64::GpuRegister(mips64::S3), "s3");
114 secondary_register_names_.emplace(mips64::GpuRegister(mips64::S4), "s4");
115 secondary_register_names_.emplace(mips64::GpuRegister(mips64::S5), "s5");
116 secondary_register_names_.emplace(mips64::GpuRegister(mips64::S6), "s6");
117 secondary_register_names_.emplace(mips64::GpuRegister(mips64::S7), "s7");
118 secondary_register_names_.emplace(mips64::GpuRegister(mips64::T8), "t8");
119 secondary_register_names_.emplace(mips64::GpuRegister(mips64::T9), "t9");
120 secondary_register_names_.emplace(mips64::GpuRegister(mips64::K0), "k0");
121 secondary_register_names_.emplace(mips64::GpuRegister(mips64::K1), "k1");
122 secondary_register_names_.emplace(mips64::GpuRegister(mips64::GP), "gp");
123 secondary_register_names_.emplace(mips64::GpuRegister(mips64::SP), "sp");
124 secondary_register_names_.emplace(mips64::GpuRegister(mips64::S8), "s8");
125 secondary_register_names_.emplace(mips64::GpuRegister(mips64::RA), "ra");
126
127 fp_registers_.push_back(new mips64::FpuRegister(mips64::F0));
128 fp_registers_.push_back(new mips64::FpuRegister(mips64::F1));
129 fp_registers_.push_back(new mips64::FpuRegister(mips64::F2));
130 fp_registers_.push_back(new mips64::FpuRegister(mips64::F3));
131 fp_registers_.push_back(new mips64::FpuRegister(mips64::F4));
132 fp_registers_.push_back(new mips64::FpuRegister(mips64::F5));
133 fp_registers_.push_back(new mips64::FpuRegister(mips64::F6));
134 fp_registers_.push_back(new mips64::FpuRegister(mips64::F7));
135 fp_registers_.push_back(new mips64::FpuRegister(mips64::F8));
136 fp_registers_.push_back(new mips64::FpuRegister(mips64::F9));
137 fp_registers_.push_back(new mips64::FpuRegister(mips64::F10));
138 fp_registers_.push_back(new mips64::FpuRegister(mips64::F11));
139 fp_registers_.push_back(new mips64::FpuRegister(mips64::F12));
140 fp_registers_.push_back(new mips64::FpuRegister(mips64::F13));
141 fp_registers_.push_back(new mips64::FpuRegister(mips64::F14));
142 fp_registers_.push_back(new mips64::FpuRegister(mips64::F15));
143 fp_registers_.push_back(new mips64::FpuRegister(mips64::F16));
144 fp_registers_.push_back(new mips64::FpuRegister(mips64::F17));
145 fp_registers_.push_back(new mips64::FpuRegister(mips64::F18));
146 fp_registers_.push_back(new mips64::FpuRegister(mips64::F19));
147 fp_registers_.push_back(new mips64::FpuRegister(mips64::F20));
148 fp_registers_.push_back(new mips64::FpuRegister(mips64::F21));
149 fp_registers_.push_back(new mips64::FpuRegister(mips64::F22));
150 fp_registers_.push_back(new mips64::FpuRegister(mips64::F23));
151 fp_registers_.push_back(new mips64::FpuRegister(mips64::F24));
152 fp_registers_.push_back(new mips64::FpuRegister(mips64::F25));
153 fp_registers_.push_back(new mips64::FpuRegister(mips64::F26));
154 fp_registers_.push_back(new mips64::FpuRegister(mips64::F27));
155 fp_registers_.push_back(new mips64::FpuRegister(mips64::F28));
156 fp_registers_.push_back(new mips64::FpuRegister(mips64::F29));
157 fp_registers_.push_back(new mips64::FpuRegister(mips64::F30));
158 fp_registers_.push_back(new mips64::FpuRegister(mips64::F31));
159 }
160 }
161
162 void TearDown() OVERRIDE {
163 AssemblerTest::TearDown();
164 STLDeleteElements(&registers_);
165 STLDeleteElements(&fp_registers_);
166 }
167
168 std::vector<mips64::GpuRegister*> GetRegisters() OVERRIDE {
169 return registers_;
170 }
171
172 std::vector<mips64::FpuRegister*> GetFPRegisters() OVERRIDE {
173 return fp_registers_;
174 }
175
176 uint32_t CreateImmediate(int64_t imm_value) OVERRIDE {
177 return imm_value;
178 }
179
180 std::string GetSecondaryRegisterName(const mips64::GpuRegister& reg) OVERRIDE {
181 CHECK(secondary_register_names_.find(reg) != secondary_register_names_.end());
182 return secondary_register_names_[reg];
183 }
184
185 private:
186 std::vector<mips64::GpuRegister*> registers_;
187 std::map<mips64::GpuRegister, std::string, MIPS64CpuRegisterCompare> secondary_register_names_;
188
189 std::vector<mips64::FpuRegister*> fp_registers_;
190};
191
192
193TEST_F(AssemblerMIPS64Test, Toolchain) {
194 EXPECT_TRUE(CheckTools());
195}
196
197
198///////////////////
199// FP Operations //
200///////////////////
201
202TEST_F(AssemblerMIPS64Test, SqrtS) {
203 DriverStr(RepeatFF(&mips64::Mips64Assembler::SqrtS, "sqrt.s ${reg1}, ${reg2}"), "sqrt.s");
204}
205
206TEST_F(AssemblerMIPS64Test, SqrtD) {
207 DriverStr(RepeatFF(&mips64::Mips64Assembler::SqrtD, "sqrt.d ${reg1}, ${reg2}"), "sqrt.d");
208}
209
210TEST_F(AssemblerMIPS64Test, AbsS) {
211 DriverStr(RepeatFF(&mips64::Mips64Assembler::AbsS, "abs.s ${reg1}, ${reg2}"), "abs.s");
212}
213
214TEST_F(AssemblerMIPS64Test, AbsD) {
215 DriverStr(RepeatFF(&mips64::Mips64Assembler::AbsD, "abs.d ${reg1}, ${reg2}"), "abs.d");
216}
217
Chris Larsen51417632015-10-02 13:24:25 -0700218TEST_F(AssemblerMIPS64Test, MovS) {
219 DriverStr(RepeatFF(&mips64::Mips64Assembler::MovS, "mov.s ${reg1}, ${reg2}"), "mov.s");
220}
221
222TEST_F(AssemblerMIPS64Test, MovD) {
223 DriverStr(RepeatFF(&mips64::Mips64Assembler::MovD, "mov.d ${reg1}, ${reg2}"), "mov.d");
224}
225
226TEST_F(AssemblerMIPS64Test, NegS) {
227 DriverStr(RepeatFF(&mips64::Mips64Assembler::NegS, "neg.s ${reg1}, ${reg2}"), "neg.s");
228}
229
230TEST_F(AssemblerMIPS64Test, NegD) {
231 DriverStr(RepeatFF(&mips64::Mips64Assembler::NegD, "neg.d ${reg1}, ${reg2}"), "neg.d");
232}
233
Chris Larsendbce0d72015-09-17 13:34:00 -0700234TEST_F(AssemblerMIPS64Test, RoundLS) {
235 DriverStr(RepeatFF(&mips64::Mips64Assembler::RoundLS, "round.l.s ${reg1}, ${reg2}"), "round.l.s");
236}
237
238TEST_F(AssemblerMIPS64Test, RoundLD) {
239 DriverStr(RepeatFF(&mips64::Mips64Assembler::RoundLD, "round.l.d ${reg1}, ${reg2}"), "round.l.d");
240}
241
242TEST_F(AssemblerMIPS64Test, RoundWS) {
243 DriverStr(RepeatFF(&mips64::Mips64Assembler::RoundWS, "round.w.s ${reg1}, ${reg2}"), "round.w.s");
244}
245
246TEST_F(AssemblerMIPS64Test, RoundWD) {
247 DriverStr(RepeatFF(&mips64::Mips64Assembler::RoundWD, "round.w.d ${reg1}, ${reg2}"), "round.w.d");
248}
249
250TEST_F(AssemblerMIPS64Test, CeilLS) {
251 DriverStr(RepeatFF(&mips64::Mips64Assembler::CeilLS, "ceil.l.s ${reg1}, ${reg2}"), "ceil.l.s");
252}
253
254TEST_F(AssemblerMIPS64Test, CeilLD) {
255 DriverStr(RepeatFF(&mips64::Mips64Assembler::CeilLD, "ceil.l.d ${reg1}, ${reg2}"), "ceil.l.d");
256}
257
258TEST_F(AssemblerMIPS64Test, CeilWS) {
259 DriverStr(RepeatFF(&mips64::Mips64Assembler::CeilWS, "ceil.w.s ${reg1}, ${reg2}"), "ceil.w.s");
260}
261
262TEST_F(AssemblerMIPS64Test, CeilWD) {
263 DriverStr(RepeatFF(&mips64::Mips64Assembler::CeilWD, "ceil.w.d ${reg1}, ${reg2}"), "ceil.w.d");
264}
265
266TEST_F(AssemblerMIPS64Test, FloorLS) {
267 DriverStr(RepeatFF(&mips64::Mips64Assembler::FloorLS, "floor.l.s ${reg1}, ${reg2}"), "floor.l.s");
268}
269
270TEST_F(AssemblerMIPS64Test, FloorLD) {
271 DriverStr(RepeatFF(&mips64::Mips64Assembler::FloorLD, "floor.l.d ${reg1}, ${reg2}"), "floor.l.d");
272}
273
274TEST_F(AssemblerMIPS64Test, FloorWS) {
275 DriverStr(RepeatFF(&mips64::Mips64Assembler::FloorWS, "floor.w.s ${reg1}, ${reg2}"), "floor.w.s");
276}
277
278TEST_F(AssemblerMIPS64Test, FloorWD) {
279 DriverStr(RepeatFF(&mips64::Mips64Assembler::FloorWD, "floor.w.d ${reg1}, ${reg2}"), "floor.w.d");
280}
281
282TEST_F(AssemblerMIPS64Test, SelS) {
283 DriverStr(RepeatFFF(&mips64::Mips64Assembler::SelS, "sel.s ${reg1}, ${reg2}, ${reg3}"), "sel.s");
284}
285
286TEST_F(AssemblerMIPS64Test, SelD) {
287 DriverStr(RepeatFFF(&mips64::Mips64Assembler::SelD, "sel.d ${reg1}, ${reg2}, ${reg3}"), "sel.d");
288}
289
290TEST_F(AssemblerMIPS64Test, RintS) {
291 DriverStr(RepeatFF(&mips64::Mips64Assembler::RintS, "rint.s ${reg1}, ${reg2}"), "rint.s");
292}
293
294TEST_F(AssemblerMIPS64Test, RintD) {
295 DriverStr(RepeatFF(&mips64::Mips64Assembler::RintD, "rint.d ${reg1}, ${reg2}"), "rint.d");
296}
297
298TEST_F(AssemblerMIPS64Test, ClassS) {
299 DriverStr(RepeatFF(&mips64::Mips64Assembler::ClassS, "class.s ${reg1}, ${reg2}"), "class.s");
300}
301
302TEST_F(AssemblerMIPS64Test, ClassD) {
303 DriverStr(RepeatFF(&mips64::Mips64Assembler::ClassD, "class.d ${reg1}, ${reg2}"), "class.d");
304}
305
306TEST_F(AssemblerMIPS64Test, MinS) {
307 DriverStr(RepeatFFF(&mips64::Mips64Assembler::MinS, "min.s ${reg1}, ${reg2}, ${reg3}"), "min.s");
308}
309
310TEST_F(AssemblerMIPS64Test, MinD) {
311 DriverStr(RepeatFFF(&mips64::Mips64Assembler::MinD, "min.d ${reg1}, ${reg2}, ${reg3}"), "min.d");
312}
313
314TEST_F(AssemblerMIPS64Test, MaxS) {
315 DriverStr(RepeatFFF(&mips64::Mips64Assembler::MaxS, "max.s ${reg1}, ${reg2}, ${reg3}"), "max.s");
316}
317
318TEST_F(AssemblerMIPS64Test, MaxD) {
319 DriverStr(RepeatFFF(&mips64::Mips64Assembler::MaxD, "max.d ${reg1}, ${reg2}, ${reg3}"), "max.d");
320}
321
322TEST_F(AssemblerMIPS64Test, CvtDL) {
323 DriverStr(RepeatFF(&mips64::Mips64Assembler::Cvtdl, "cvt.d.l ${reg1}, ${reg2}"), "cvt.d.l");
324}
325
Chris Larsen51417632015-10-02 13:24:25 -0700326TEST_F(AssemblerMIPS64Test, CvtDS) {
327 DriverStr(RepeatFF(&mips64::Mips64Assembler::Cvtds, "cvt.d.s ${reg1}, ${reg2}"), "cvt.d.s");
328}
329
330TEST_F(AssemblerMIPS64Test, CvtDW) {
331 DriverStr(RepeatFF(&mips64::Mips64Assembler::Cvtdw, "cvt.d.w ${reg1}, ${reg2}"), "cvt.d.w");
332}
333
334TEST_F(AssemblerMIPS64Test, CvtSL) {
335 DriverStr(RepeatFF(&mips64::Mips64Assembler::Cvtsl, "cvt.s.l ${reg1}, ${reg2}"), "cvt.s.l");
336}
337
338TEST_F(AssemblerMIPS64Test, CvtSD) {
339 DriverStr(RepeatFF(&mips64::Mips64Assembler::Cvtsd, "cvt.s.d ${reg1}, ${reg2}"), "cvt.s.d");
340}
341
342TEST_F(AssemblerMIPS64Test, CvtSW) {
343 DriverStr(RepeatFF(&mips64::Mips64Assembler::Cvtsw, "cvt.s.w ${reg1}, ${reg2}"), "cvt.s.w");
344}
345
346////////////////
347// CALL / JMP //
348////////////////
349
350TEST_F(AssemblerMIPS64Test, Jalr) {
351 DriverStr(RepeatRRNoDupes(&mips64::Mips64Assembler::Jalr, "jalr ${reg1}, ${reg2}"), "jalr");
352}
353
Chris Larsendbce0d72015-09-17 13:34:00 -0700354//////////
355// MISC //
356//////////
357
358TEST_F(AssemblerMIPS64Test, Bitswap) {
359 DriverStr(RepeatRR(&mips64::Mips64Assembler::Bitswap, "bitswap ${reg1}, ${reg2}"), "bitswap");
360}
361
362TEST_F(AssemblerMIPS64Test, Dbitswap) {
363 DriverStr(RepeatRR(&mips64::Mips64Assembler::Dbitswap, "dbitswap ${reg1}, ${reg2}"), "dbitswap");
364}
365
Chris Larsen51417632015-10-02 13:24:25 -0700366TEST_F(AssemblerMIPS64Test, Seb) {
367 DriverStr(RepeatRR(&mips64::Mips64Assembler::Seb, "seb ${reg1}, ${reg2}"), "seb");
368}
369
370TEST_F(AssemblerMIPS64Test, Seh) {
371 DriverStr(RepeatRR(&mips64::Mips64Assembler::Seh, "seh ${reg1}, ${reg2}"), "seh");
372}
373
Chris Larsendbce0d72015-09-17 13:34:00 -0700374TEST_F(AssemblerMIPS64Test, Dsbh) {
375 DriverStr(RepeatRR(&mips64::Mips64Assembler::Dsbh, "dsbh ${reg1}, ${reg2}"), "dsbh");
376}
377
378TEST_F(AssemblerMIPS64Test, Dshd) {
379 DriverStr(RepeatRR(&mips64::Mips64Assembler::Dshd, "dshd ${reg1}, ${reg2}"), "dshd");
380}
381
382TEST_F(AssemblerMIPS64Test, Wsbh) {
383 DriverStr(RepeatRR(&mips64::Mips64Assembler::Wsbh, "wsbh ${reg1}, ${reg2}"), "wsbh");
384}
385
Chris Larsen51417632015-10-02 13:24:25 -0700386TEST_F(AssemblerMIPS64Test, Sll) {
387 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Sll, 5, "sll ${reg1}, ${reg2}, {imm}"), "sll");
388}
389
390TEST_F(AssemblerMIPS64Test, Srl) {
391 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Srl, 5, "srl ${reg1}, ${reg2}, {imm}"), "srl");
392}
393
394TEST_F(AssemblerMIPS64Test, Sra) {
395 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Sra, 5, "sra ${reg1}, ${reg2}, {imm}"), "sra");
396}
397
398TEST_F(AssemblerMIPS64Test, Dsll) {
399 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Dsll, 5, "dsll ${reg1}, ${reg2}, {imm}"), "dsll");
400}
401
402TEST_F(AssemblerMIPS64Test, Dsrl) {
403 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Dsrl, 5, "dsrl ${reg1}, ${reg2}, {imm}"), "dsrl");
404}
405
406TEST_F(AssemblerMIPS64Test, Dsra) {
407 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Dsra, 5, "dsra ${reg1}, ${reg2}, {imm}"), "dsra");
408}
409
410TEST_F(AssemblerMIPS64Test, Dsll32) {
411 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Dsll32, 5, "dsll32 ${reg1}, ${reg2}, {imm}"), "dsll32");
412}
413
414TEST_F(AssemblerMIPS64Test, Dsrl32) {
415 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Dsrl32, 5, "dsrl32 ${reg1}, ${reg2}, {imm}"), "dsrl32");
416}
417
418TEST_F(AssemblerMIPS64Test, Dsra32) {
419 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Dsra32, 5, "dsra32 ${reg1}, ${reg2}, {imm}"), "dsra32");
420}
421
Chris Larsendbce0d72015-09-17 13:34:00 -0700422TEST_F(AssemblerMIPS64Test, Sc) {
423 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Sc, -9, "sc ${reg1}, {imm}(${reg2})"), "sc");
424}
425
426TEST_F(AssemblerMIPS64Test, Scd) {
427 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Scd, -9, "scd ${reg1}, {imm}(${reg2})"), "scd");
428}
429
430TEST_F(AssemblerMIPS64Test, Ll) {
431 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Ll, -9, "ll ${reg1}, {imm}(${reg2})"), "ll");
432}
433
434TEST_F(AssemblerMIPS64Test, Lld) {
435 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Lld, -9, "lld ${reg1}, {imm}(${reg2})"), "lld");
436}
437
438TEST_F(AssemblerMIPS64Test, Rotr) {
439 DriverStr(RepeatRRIb(&mips64::Mips64Assembler::Rotr, 5, "rotr ${reg1}, ${reg2}, {imm}"), "rotr");
440}
441
442TEST_F(AssemblerMIPS64Test, Seleqz) {
443 DriverStr(RepeatRRR(&mips64::Mips64Assembler::Seleqz, "seleqz ${reg1}, ${reg2}, ${reg3}"),
444 "seleqz");
445}
446
447TEST_F(AssemblerMIPS64Test, Selnez) {
448 DriverStr(RepeatRRR(&mips64::Mips64Assembler::Selnez, "selnez ${reg1}, ${reg2}, ${reg3}"),
449 "selnez");
450}
451
452TEST_F(AssemblerMIPS64Test, Clz) {
453 DriverStr(RepeatRR(&mips64::Mips64Assembler::Clz, "clz ${reg1}, ${reg2}"), "clz");
454}
455
456TEST_F(AssemblerMIPS64Test, Clo) {
457 DriverStr(RepeatRR(&mips64::Mips64Assembler::Clo, "clo ${reg1}, ${reg2}"), "clo");
458}
459
460TEST_F(AssemblerMIPS64Test, Dclz) {
461 DriverStr(RepeatRR(&mips64::Mips64Assembler::Dclz, "dclz ${reg1}, ${reg2}"), "dclz");
462}
463
464TEST_F(AssemblerMIPS64Test, Dclo) {
465 DriverStr(RepeatRR(&mips64::Mips64Assembler::Dclo, "dclo ${reg1}, ${reg2}"), "dclo");
466}
467
468} // namespace art