blob: 6f8b3e8c5756b97d5241a90e8894f2d80fd296e5 [file] [log] [blame]
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +02001/*
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_mips.h"
18
19#include <map>
20
21#include "base/stl_util.h"
22#include "utils/assembler_test.h"
23
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -080024#define __ GetAssembler()->
25
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +020026namespace art {
27
28struct MIPSCpuRegisterCompare {
29 bool operator()(const mips::Register& a, const mips::Register& b) const {
30 return a < b;
31 }
32};
33
34class AssemblerMIPSTest : public AssemblerTest<mips::MipsAssembler,
35 mips::Register,
36 mips::FRegister,
37 uint32_t> {
38 public:
39 typedef AssemblerTest<mips::MipsAssembler, mips::Register, mips::FRegister, uint32_t> Base;
40
41 protected:
42 // Get the typically used name for this architecture, e.g., aarch64, x86-64, ...
43 std::string GetArchitectureString() OVERRIDE {
44 return "mips";
45 }
46
47 std::string GetAssemblerParameters() OVERRIDE {
48 return " --no-warn -32 -march=mips32r2";
49 }
50
51 std::string GetDisassembleParameters() OVERRIDE {
52 return " -D -bbinary -mmips:isa32r2";
53 }
54
55 void SetUpHelpers() OVERRIDE {
56 if (registers_.size() == 0) {
57 registers_.push_back(new mips::Register(mips::ZERO));
58 registers_.push_back(new mips::Register(mips::AT));
59 registers_.push_back(new mips::Register(mips::V0));
60 registers_.push_back(new mips::Register(mips::V1));
61 registers_.push_back(new mips::Register(mips::A0));
62 registers_.push_back(new mips::Register(mips::A1));
63 registers_.push_back(new mips::Register(mips::A2));
64 registers_.push_back(new mips::Register(mips::A3));
65 registers_.push_back(new mips::Register(mips::T0));
66 registers_.push_back(new mips::Register(mips::T1));
67 registers_.push_back(new mips::Register(mips::T2));
68 registers_.push_back(new mips::Register(mips::T3));
69 registers_.push_back(new mips::Register(mips::T4));
70 registers_.push_back(new mips::Register(mips::T5));
71 registers_.push_back(new mips::Register(mips::T6));
72 registers_.push_back(new mips::Register(mips::T7));
73 registers_.push_back(new mips::Register(mips::S0));
74 registers_.push_back(new mips::Register(mips::S1));
75 registers_.push_back(new mips::Register(mips::S2));
76 registers_.push_back(new mips::Register(mips::S3));
77 registers_.push_back(new mips::Register(mips::S4));
78 registers_.push_back(new mips::Register(mips::S5));
79 registers_.push_back(new mips::Register(mips::S6));
80 registers_.push_back(new mips::Register(mips::S7));
81 registers_.push_back(new mips::Register(mips::T8));
82 registers_.push_back(new mips::Register(mips::T9));
83 registers_.push_back(new mips::Register(mips::K0));
84 registers_.push_back(new mips::Register(mips::K1));
85 registers_.push_back(new mips::Register(mips::GP));
86 registers_.push_back(new mips::Register(mips::SP));
87 registers_.push_back(new mips::Register(mips::FP));
88 registers_.push_back(new mips::Register(mips::RA));
89
90 secondary_register_names_.emplace(mips::Register(mips::ZERO), "zero");
91 secondary_register_names_.emplace(mips::Register(mips::AT), "at");
92 secondary_register_names_.emplace(mips::Register(mips::V0), "v0");
93 secondary_register_names_.emplace(mips::Register(mips::V1), "v1");
94 secondary_register_names_.emplace(mips::Register(mips::A0), "a0");
95 secondary_register_names_.emplace(mips::Register(mips::A1), "a1");
96 secondary_register_names_.emplace(mips::Register(mips::A2), "a2");
97 secondary_register_names_.emplace(mips::Register(mips::A3), "a3");
98 secondary_register_names_.emplace(mips::Register(mips::T0), "t0");
99 secondary_register_names_.emplace(mips::Register(mips::T1), "t1");
100 secondary_register_names_.emplace(mips::Register(mips::T2), "t2");
101 secondary_register_names_.emplace(mips::Register(mips::T3), "t3");
102 secondary_register_names_.emplace(mips::Register(mips::T4), "t4");
103 secondary_register_names_.emplace(mips::Register(mips::T5), "t5");
104 secondary_register_names_.emplace(mips::Register(mips::T6), "t6");
105 secondary_register_names_.emplace(mips::Register(mips::T7), "t7");
106 secondary_register_names_.emplace(mips::Register(mips::S0), "s0");
107 secondary_register_names_.emplace(mips::Register(mips::S1), "s1");
108 secondary_register_names_.emplace(mips::Register(mips::S2), "s2");
109 secondary_register_names_.emplace(mips::Register(mips::S3), "s3");
110 secondary_register_names_.emplace(mips::Register(mips::S4), "s4");
111 secondary_register_names_.emplace(mips::Register(mips::S5), "s5");
112 secondary_register_names_.emplace(mips::Register(mips::S6), "s6");
113 secondary_register_names_.emplace(mips::Register(mips::S7), "s7");
114 secondary_register_names_.emplace(mips::Register(mips::T8), "t8");
115 secondary_register_names_.emplace(mips::Register(mips::T9), "t9");
116 secondary_register_names_.emplace(mips::Register(mips::K0), "k0");
117 secondary_register_names_.emplace(mips::Register(mips::K1), "k1");
118 secondary_register_names_.emplace(mips::Register(mips::GP), "gp");
119 secondary_register_names_.emplace(mips::Register(mips::SP), "sp");
120 secondary_register_names_.emplace(mips::Register(mips::FP), "fp");
121 secondary_register_names_.emplace(mips::Register(mips::RA), "ra");
122
123 fp_registers_.push_back(new mips::FRegister(mips::F0));
124 fp_registers_.push_back(new mips::FRegister(mips::F1));
125 fp_registers_.push_back(new mips::FRegister(mips::F2));
126 fp_registers_.push_back(new mips::FRegister(mips::F3));
127 fp_registers_.push_back(new mips::FRegister(mips::F4));
128 fp_registers_.push_back(new mips::FRegister(mips::F5));
129 fp_registers_.push_back(new mips::FRegister(mips::F6));
130 fp_registers_.push_back(new mips::FRegister(mips::F7));
131 fp_registers_.push_back(new mips::FRegister(mips::F8));
132 fp_registers_.push_back(new mips::FRegister(mips::F9));
133 fp_registers_.push_back(new mips::FRegister(mips::F10));
134 fp_registers_.push_back(new mips::FRegister(mips::F11));
135 fp_registers_.push_back(new mips::FRegister(mips::F12));
136 fp_registers_.push_back(new mips::FRegister(mips::F13));
137 fp_registers_.push_back(new mips::FRegister(mips::F14));
138 fp_registers_.push_back(new mips::FRegister(mips::F15));
139 fp_registers_.push_back(new mips::FRegister(mips::F16));
140 fp_registers_.push_back(new mips::FRegister(mips::F17));
141 fp_registers_.push_back(new mips::FRegister(mips::F18));
142 fp_registers_.push_back(new mips::FRegister(mips::F19));
143 fp_registers_.push_back(new mips::FRegister(mips::F20));
144 fp_registers_.push_back(new mips::FRegister(mips::F21));
145 fp_registers_.push_back(new mips::FRegister(mips::F22));
146 fp_registers_.push_back(new mips::FRegister(mips::F23));
147 fp_registers_.push_back(new mips::FRegister(mips::F24));
148 fp_registers_.push_back(new mips::FRegister(mips::F25));
149 fp_registers_.push_back(new mips::FRegister(mips::F26));
150 fp_registers_.push_back(new mips::FRegister(mips::F27));
151 fp_registers_.push_back(new mips::FRegister(mips::F28));
152 fp_registers_.push_back(new mips::FRegister(mips::F29));
153 fp_registers_.push_back(new mips::FRegister(mips::F30));
154 fp_registers_.push_back(new mips::FRegister(mips::F31));
155 }
156 }
157
158 void TearDown() OVERRIDE {
159 AssemblerTest::TearDown();
160 STLDeleteElements(&registers_);
161 STLDeleteElements(&fp_registers_);
162 }
163
164 std::vector<mips::Register*> GetRegisters() OVERRIDE {
165 return registers_;
166 }
167
168 std::vector<mips::FRegister*> GetFPRegisters() OVERRIDE {
169 return fp_registers_;
170 }
171
172 uint32_t CreateImmediate(int64_t imm_value) OVERRIDE {
173 return imm_value;
174 }
175
176 std::string GetSecondaryRegisterName(const mips::Register& reg) OVERRIDE {
177 CHECK(secondary_register_names_.find(reg) != secondary_register_names_.end());
178 return secondary_register_names_[reg];
179 }
180
181 std::string RepeatInsn(size_t count, const std::string& insn) {
182 std::string result;
183 for (; count != 0u; --count) {
184 result += insn;
185 }
186 return result;
187 }
188
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -0800189 void BranchCondOneRegHelper(void (mips::MipsAssembler::*f)(mips::Register,
190 mips::MipsLabel*),
191 std::string instr_name) {
192 mips::MipsLabel label;
193 (Base::GetAssembler()->*f)(mips::A0, &label);
194 constexpr size_t kAdduCount1 = 63;
195 for (size_t i = 0; i != kAdduCount1; ++i) {
196 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
197 }
198 __ Bind(&label);
199 constexpr size_t kAdduCount2 = 64;
200 for (size_t i = 0; i != kAdduCount2; ++i) {
201 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
202 }
203 (Base::GetAssembler()->*f)(mips::A1, &label);
204
205 std::string expected =
206 ".set noreorder\n" +
207 instr_name + " $a0, 1f\n"
208 "nop\n" +
209 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
210 "1:\n" +
211 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
212 instr_name + " $a1, 1b\n"
213 "nop\n";
214 DriverStr(expected, instr_name);
215 }
216
217 void BranchCondTwoRegsHelper(void (mips::MipsAssembler::*f)(mips::Register,
218 mips::Register,
219 mips::MipsLabel*),
220 std::string instr_name) {
221 mips::MipsLabel label;
222 (Base::GetAssembler()->*f)(mips::A0, mips::A1, &label);
223 constexpr size_t kAdduCount1 = 63;
224 for (size_t i = 0; i != kAdduCount1; ++i) {
225 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
226 }
227 __ Bind(&label);
228 constexpr size_t kAdduCount2 = 64;
229 for (size_t i = 0; i != kAdduCount2; ++i) {
230 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
231 }
232 (Base::GetAssembler()->*f)(mips::A2, mips::A3, &label);
233
234 std::string expected =
235 ".set noreorder\n" +
236 instr_name + " $a0, $a1, 1f\n"
237 "nop\n" +
238 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
239 "1:\n" +
240 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
241 instr_name + " $a2, $a3, 1b\n"
242 "nop\n";
243 DriverStr(expected, instr_name);
244 }
245
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +0200246 private:
247 std::vector<mips::Register*> registers_;
248 std::map<mips::Register, std::string, MIPSCpuRegisterCompare> secondary_register_names_;
249
250 std::vector<mips::FRegister*> fp_registers_;
251};
252
253
254TEST_F(AssemblerMIPSTest, Toolchain) {
255 EXPECT_TRUE(CheckTools());
256}
257
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +0200258TEST_F(AssemblerMIPSTest, Addu) {
259 DriverStr(RepeatRRR(&mips::MipsAssembler::Addu, "addu ${reg1}, ${reg2}, ${reg3}"), "Addu");
260}
261
262TEST_F(AssemblerMIPSTest, Addiu) {
263 DriverStr(RepeatRRIb(&mips::MipsAssembler::Addiu, -16, "addiu ${reg1}, ${reg2}, {imm}"), "Addiu");
264}
265
266TEST_F(AssemblerMIPSTest, Subu) {
267 DriverStr(RepeatRRR(&mips::MipsAssembler::Subu, "subu ${reg1}, ${reg2}, ${reg3}"), "Subu");
268}
269
270TEST_F(AssemblerMIPSTest, MultR2) {
271 DriverStr(RepeatRR(&mips::MipsAssembler::MultR2, "mult ${reg1}, ${reg2}"), "MultR2");
272}
273
274TEST_F(AssemblerMIPSTest, MultuR2) {
275 DriverStr(RepeatRR(&mips::MipsAssembler::MultuR2, "multu ${reg1}, ${reg2}"), "MultuR2");
276}
277
278TEST_F(AssemblerMIPSTest, DivR2Basic) {
279 DriverStr(RepeatRR(&mips::MipsAssembler::DivR2, "div $zero, ${reg1}, ${reg2}"), "DivR2Basic");
280}
281
282TEST_F(AssemblerMIPSTest, DivuR2Basic) {
283 DriverStr(RepeatRR(&mips::MipsAssembler::DivuR2, "divu $zero, ${reg1}, ${reg2}"), "DivuR2Basic");
284}
285
286TEST_F(AssemblerMIPSTest, MulR2) {
287 DriverStr(RepeatRRR(&mips::MipsAssembler::MulR2, "mul ${reg1}, ${reg2}, ${reg3}"), "MulR2");
288}
289
290TEST_F(AssemblerMIPSTest, DivR2) {
291 DriverStr(RepeatRRR(&mips::MipsAssembler::DivR2, "div $zero, ${reg2}, ${reg3}\nmflo ${reg1}"),
292 "DivR2");
293}
294
295TEST_F(AssemblerMIPSTest, ModR2) {
296 DriverStr(RepeatRRR(&mips::MipsAssembler::ModR2, "div $zero, ${reg2}, ${reg3}\nmfhi ${reg1}"),
297 "ModR2");
298}
299
300TEST_F(AssemblerMIPSTest, DivuR2) {
301 DriverStr(RepeatRRR(&mips::MipsAssembler::DivuR2, "divu $zero, ${reg2}, ${reg3}\nmflo ${reg1}"),
302 "DivuR2");
303}
304
305TEST_F(AssemblerMIPSTest, ModuR2) {
306 DriverStr(RepeatRRR(&mips::MipsAssembler::ModuR2, "divu $zero, ${reg2}, ${reg3}\nmfhi ${reg1}"),
307 "ModuR2");
308}
309
310TEST_F(AssemblerMIPSTest, And) {
311 DriverStr(RepeatRRR(&mips::MipsAssembler::And, "and ${reg1}, ${reg2}, ${reg3}"), "And");
312}
313
314TEST_F(AssemblerMIPSTest, Andi) {
315 DriverStr(RepeatRRIb(&mips::MipsAssembler::Andi, 16, "andi ${reg1}, ${reg2}, {imm}"), "Andi");
316}
317
318TEST_F(AssemblerMIPSTest, Or) {
319 DriverStr(RepeatRRR(&mips::MipsAssembler::Or, "or ${reg1}, ${reg2}, ${reg3}"), "Or");
320}
321
322TEST_F(AssemblerMIPSTest, Ori) {
323 DriverStr(RepeatRRIb(&mips::MipsAssembler::Ori, 16, "ori ${reg1}, ${reg2}, {imm}"), "Ori");
324}
325
326TEST_F(AssemblerMIPSTest, Xor) {
327 DriverStr(RepeatRRR(&mips::MipsAssembler::Xor, "xor ${reg1}, ${reg2}, ${reg3}"), "Xor");
328}
329
330TEST_F(AssemblerMIPSTest, Xori) {
331 DriverStr(RepeatRRIb(&mips::MipsAssembler::Xori, 16, "xori ${reg1}, ${reg2}, {imm}"), "Xori");
332}
333
334TEST_F(AssemblerMIPSTest, Nor) {
335 DriverStr(RepeatRRR(&mips::MipsAssembler::Nor, "nor ${reg1}, ${reg2}, ${reg3}"), "Nor");
336}
337
338TEST_F(AssemblerMIPSTest, Seb) {
339 DriverStr(RepeatRR(&mips::MipsAssembler::Seb, "seb ${reg1}, ${reg2}"), "Seb");
340}
341
342TEST_F(AssemblerMIPSTest, Seh) {
343 DriverStr(RepeatRR(&mips::MipsAssembler::Seh, "seh ${reg1}, ${reg2}"), "Seh");
344}
345
346TEST_F(AssemblerMIPSTest, Sll) {
347 DriverStr(RepeatRRIb(&mips::MipsAssembler::Sll, 5, "sll ${reg1}, ${reg2}, {imm}"), "Sll");
348}
349
350TEST_F(AssemblerMIPSTest, Srl) {
351 DriverStr(RepeatRRIb(&mips::MipsAssembler::Srl, 5, "srl ${reg1}, ${reg2}, {imm}"), "Srl");
352}
353
354TEST_F(AssemblerMIPSTest, Sra) {
355 DriverStr(RepeatRRIb(&mips::MipsAssembler::Sra, 5, "sra ${reg1}, ${reg2}, {imm}"), "Sra");
356}
357
358TEST_F(AssemblerMIPSTest, Sllv) {
359 DriverStr(RepeatRRR(&mips::MipsAssembler::Sllv, "sllv ${reg1}, ${reg2}, ${reg3}"), "Sllv");
360}
361
362TEST_F(AssemblerMIPSTest, Srlv) {
363 DriverStr(RepeatRRR(&mips::MipsAssembler::Srlv, "srlv ${reg1}, ${reg2}, ${reg3}"), "Srlv");
364}
365
366TEST_F(AssemblerMIPSTest, Srav) {
367 DriverStr(RepeatRRR(&mips::MipsAssembler::Srav, "srav ${reg1}, ${reg2}, ${reg3}"), "Srav");
368}
369
370TEST_F(AssemblerMIPSTest, Lb) {
371 DriverStr(RepeatRRIb(&mips::MipsAssembler::Lb, -16, "lb ${reg1}, {imm}(${reg2})"), "Lb");
372}
373
374TEST_F(AssemblerMIPSTest, Lh) {
375 DriverStr(RepeatRRIb(&mips::MipsAssembler::Lh, -16, "lh ${reg1}, {imm}(${reg2})"), "Lh");
376}
377
378TEST_F(AssemblerMIPSTest, Lw) {
379 DriverStr(RepeatRRIb(&mips::MipsAssembler::Lw, -16, "lw ${reg1}, {imm}(${reg2})"), "Lw");
380}
381
382TEST_F(AssemblerMIPSTest, Lbu) {
383 DriverStr(RepeatRRIb(&mips::MipsAssembler::Lbu, -16, "lbu ${reg1}, {imm}(${reg2})"), "Lbu");
384}
385
386TEST_F(AssemblerMIPSTest, Lhu) {
387 DriverStr(RepeatRRIb(&mips::MipsAssembler::Lhu, -16, "lhu ${reg1}, {imm}(${reg2})"), "Lhu");
388}
389
390TEST_F(AssemblerMIPSTest, Lui) {
391 DriverStr(RepeatRIb(&mips::MipsAssembler::Lui, 16, "lui ${reg}, {imm}"), "Lui");
392}
393
394TEST_F(AssemblerMIPSTest, Mfhi) {
395 DriverStr(RepeatR(&mips::MipsAssembler::Mfhi, "mfhi ${reg}"), "Mfhi");
396}
397
398TEST_F(AssemblerMIPSTest, Mflo) {
399 DriverStr(RepeatR(&mips::MipsAssembler::Mflo, "mflo ${reg}"), "Mflo");
400}
401
402TEST_F(AssemblerMIPSTest, Sb) {
403 DriverStr(RepeatRRIb(&mips::MipsAssembler::Sb, -16, "sb ${reg1}, {imm}(${reg2})"), "Sb");
404}
405
406TEST_F(AssemblerMIPSTest, Sh) {
407 DriverStr(RepeatRRIb(&mips::MipsAssembler::Sh, -16, "sh ${reg1}, {imm}(${reg2})"), "Sh");
408}
409
410TEST_F(AssemblerMIPSTest, Sw) {
411 DriverStr(RepeatRRIb(&mips::MipsAssembler::Sw, -16, "sw ${reg1}, {imm}(${reg2})"), "Sw");
412}
413
414TEST_F(AssemblerMIPSTest, Slt) {
415 DriverStr(RepeatRRR(&mips::MipsAssembler::Slt, "slt ${reg1}, ${reg2}, ${reg3}"), "Slt");
416}
417
418TEST_F(AssemblerMIPSTest, Sltu) {
419 DriverStr(RepeatRRR(&mips::MipsAssembler::Sltu, "sltu ${reg1}, ${reg2}, ${reg3}"), "Sltu");
420}
421
422TEST_F(AssemblerMIPSTest, Slti) {
423 DriverStr(RepeatRRIb(&mips::MipsAssembler::Slti, -16, "slti ${reg1}, ${reg2}, {imm}"), "Slti");
424}
425
426TEST_F(AssemblerMIPSTest, Sltiu) {
427 DriverStr(RepeatRRIb(&mips::MipsAssembler::Sltiu, -16, "sltiu ${reg1}, ${reg2}, {imm}"), "Sltiu");
428}
429
430TEST_F(AssemblerMIPSTest, AddS) {
431 DriverStr(RepeatFFF(&mips::MipsAssembler::AddS, "add.s ${reg1}, ${reg2}, ${reg3}"), "AddS");
432}
433
434TEST_F(AssemblerMIPSTest, AddD) {
435 DriverStr(RepeatFFF(&mips::MipsAssembler::AddD, "add.d ${reg1}, ${reg2}, ${reg3}"), "AddD");
436}
437
438TEST_F(AssemblerMIPSTest, SubS) {
439 DriverStr(RepeatFFF(&mips::MipsAssembler::SubS, "sub.s ${reg1}, ${reg2}, ${reg3}"), "SubS");
440}
441
442TEST_F(AssemblerMIPSTest, SubD) {
443 DriverStr(RepeatFFF(&mips::MipsAssembler::SubD, "sub.d ${reg1}, ${reg2}, ${reg3}"), "SubD");
444}
445
446TEST_F(AssemblerMIPSTest, MulS) {
447 DriverStr(RepeatFFF(&mips::MipsAssembler::MulS, "mul.s ${reg1}, ${reg2}, ${reg3}"), "MulS");
448}
449
450TEST_F(AssemblerMIPSTest, MulD) {
451 DriverStr(RepeatFFF(&mips::MipsAssembler::MulD, "mul.d ${reg1}, ${reg2}, ${reg3}"), "MulD");
452}
453
454TEST_F(AssemblerMIPSTest, DivS) {
455 DriverStr(RepeatFFF(&mips::MipsAssembler::DivS, "div.s ${reg1}, ${reg2}, ${reg3}"), "DivS");
456}
457
458TEST_F(AssemblerMIPSTest, DivD) {
459 DriverStr(RepeatFFF(&mips::MipsAssembler::DivD, "div.d ${reg1}, ${reg2}, ${reg3}"), "DivD");
460}
461
462TEST_F(AssemblerMIPSTest, MovS) {
463 DriverStr(RepeatFF(&mips::MipsAssembler::MovS, "mov.s ${reg1}, ${reg2}"), "MovS");
464}
465
466TEST_F(AssemblerMIPSTest, MovD) {
467 DriverStr(RepeatFF(&mips::MipsAssembler::MovD, "mov.d ${reg1}, ${reg2}"), "MovD");
468}
469
470TEST_F(AssemblerMIPSTest, NegS) {
471 DriverStr(RepeatFF(&mips::MipsAssembler::NegS, "neg.s ${reg1}, ${reg2}"), "NegS");
472}
473
474TEST_F(AssemblerMIPSTest, NegD) {
475 DriverStr(RepeatFF(&mips::MipsAssembler::NegD, "neg.d ${reg1}, ${reg2}"), "NegD");
476}
477
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -0800478TEST_F(AssemblerMIPSTest, CunS) {
479 DriverStr(RepeatIbFF(&mips::MipsAssembler::CunS, 3, "c.un.s $fcc{imm}, ${reg1}, ${reg2}"),
480 "CunS");
481}
482
483TEST_F(AssemblerMIPSTest, CeqS) {
484 DriverStr(RepeatIbFF(&mips::MipsAssembler::CeqS, 3, "c.eq.s $fcc{imm}, ${reg1}, ${reg2}"),
485 "CeqS");
486}
487
488TEST_F(AssemblerMIPSTest, CueqS) {
489 DriverStr(RepeatIbFF(&mips::MipsAssembler::CueqS, 3, "c.ueq.s $fcc{imm}, ${reg1}, ${reg2}"),
490 "CueqS");
491}
492
493TEST_F(AssemblerMIPSTest, ColtS) {
494 DriverStr(RepeatIbFF(&mips::MipsAssembler::ColtS, 3, "c.olt.s $fcc{imm}, ${reg1}, ${reg2}"),
495 "ColtS");
496}
497
498TEST_F(AssemblerMIPSTest, CultS) {
499 DriverStr(RepeatIbFF(&mips::MipsAssembler::CultS, 3, "c.ult.s $fcc{imm}, ${reg1}, ${reg2}"),
500 "CultS");
501}
502
503TEST_F(AssemblerMIPSTest, ColeS) {
504 DriverStr(RepeatIbFF(&mips::MipsAssembler::ColeS, 3, "c.ole.s $fcc{imm}, ${reg1}, ${reg2}"),
505 "ColeS");
506}
507
508TEST_F(AssemblerMIPSTest, CuleS) {
509 DriverStr(RepeatIbFF(&mips::MipsAssembler::CuleS, 3, "c.ule.s $fcc{imm}, ${reg1}, ${reg2}"),
510 "CuleS");
511}
512
513TEST_F(AssemblerMIPSTest, CunD) {
514 DriverStr(RepeatIbFF(&mips::MipsAssembler::CunD, 3, "c.un.d $fcc{imm}, ${reg1}, ${reg2}"),
515 "CunD");
516}
517
518TEST_F(AssemblerMIPSTest, CeqD) {
519 DriverStr(RepeatIbFF(&mips::MipsAssembler::CeqD, 3, "c.eq.d $fcc{imm}, ${reg1}, ${reg2}"),
520 "CeqD");
521}
522
523TEST_F(AssemblerMIPSTest, CueqD) {
524 DriverStr(RepeatIbFF(&mips::MipsAssembler::CueqD, 3, "c.ueq.d $fcc{imm}, ${reg1}, ${reg2}"),
525 "CueqD");
526}
527
528TEST_F(AssemblerMIPSTest, ColtD) {
529 DriverStr(RepeatIbFF(&mips::MipsAssembler::ColtD, 3, "c.olt.d $fcc{imm}, ${reg1}, ${reg2}"),
530 "ColtD");
531}
532
533TEST_F(AssemblerMIPSTest, CultD) {
534 DriverStr(RepeatIbFF(&mips::MipsAssembler::CultD, 3, "c.ult.d $fcc{imm}, ${reg1}, ${reg2}"),
535 "CultD");
536}
537
538TEST_F(AssemblerMIPSTest, ColeD) {
539 DriverStr(RepeatIbFF(&mips::MipsAssembler::ColeD, 3, "c.ole.d $fcc{imm}, ${reg1}, ${reg2}"),
540 "ColeD");
541}
542
543TEST_F(AssemblerMIPSTest, CuleD) {
544 DriverStr(RepeatIbFF(&mips::MipsAssembler::CuleD, 3, "c.ule.d $fcc{imm}, ${reg1}, ${reg2}"),
545 "CuleD");
546}
547
548TEST_F(AssemblerMIPSTest, Movf) {
549 DriverStr(RepeatRRIb(&mips::MipsAssembler::Movf, 3, "movf ${reg1}, ${reg2}, $fcc{imm}"), "Movf");
550}
551
552TEST_F(AssemblerMIPSTest, Movt) {
553 DriverStr(RepeatRRIb(&mips::MipsAssembler::Movt, 3, "movt ${reg1}, ${reg2}, $fcc{imm}"), "Movt");
554}
555
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +0200556TEST_F(AssemblerMIPSTest, CvtSW) {
557 DriverStr(RepeatFF(&mips::MipsAssembler::Cvtsw, "cvt.s.w ${reg1}, ${reg2}"), "CvtSW");
558}
559
560TEST_F(AssemblerMIPSTest, CvtDW) {
561 DriverStr(RepeatFF(&mips::MipsAssembler::Cvtdw, "cvt.d.w ${reg1}, ${reg2}"), "CvtDW");
562}
563
564TEST_F(AssemblerMIPSTest, CvtSD) {
565 DriverStr(RepeatFF(&mips::MipsAssembler::Cvtsd, "cvt.s.d ${reg1}, ${reg2}"), "CvtSD");
566}
567
568TEST_F(AssemblerMIPSTest, CvtDS) {
569 DriverStr(RepeatFF(&mips::MipsAssembler::Cvtds, "cvt.d.s ${reg1}, ${reg2}"), "CvtDS");
570}
571
572TEST_F(AssemblerMIPSTest, Mfc1) {
573 DriverStr(RepeatRF(&mips::MipsAssembler::Mfc1, "mfc1 ${reg1}, ${reg2}"), "Mfc1");
574}
575
576TEST_F(AssemblerMIPSTest, Mtc1) {
577 DriverStr(RepeatRF(&mips::MipsAssembler::Mtc1, "mtc1 ${reg1}, ${reg2}"), "Mtc1");
578}
579
580TEST_F(AssemblerMIPSTest, Mfhc1) {
581 DriverStr(RepeatRF(&mips::MipsAssembler::Mfhc1, "mfhc1 ${reg1}, ${reg2}"), "Mfhc1");
582}
583
584TEST_F(AssemblerMIPSTest, Mthc1) {
585 DriverStr(RepeatRF(&mips::MipsAssembler::Mthc1, "mthc1 ${reg1}, ${reg2}"), "Mthc1");
586}
587
588TEST_F(AssemblerMIPSTest, Lwc1) {
589 DriverStr(RepeatFRIb(&mips::MipsAssembler::Lwc1, -16, "lwc1 ${reg1}, {imm}(${reg2})"), "Lwc1");
590}
591
592TEST_F(AssemblerMIPSTest, Ldc1) {
593 DriverStr(RepeatFRIb(&mips::MipsAssembler::Ldc1, -16, "ldc1 ${reg1}, {imm}(${reg2})"), "Ldc1");
594}
595
596TEST_F(AssemblerMIPSTest, Swc1) {
597 DriverStr(RepeatFRIb(&mips::MipsAssembler::Swc1, -16, "swc1 ${reg1}, {imm}(${reg2})"), "Swc1");
598}
599
600TEST_F(AssemblerMIPSTest, Sdc1) {
601 DriverStr(RepeatFRIb(&mips::MipsAssembler::Sdc1, -16, "sdc1 ${reg1}, {imm}(${reg2})"), "Sdc1");
602}
603
604TEST_F(AssemblerMIPSTest, Move) {
605 DriverStr(RepeatRR(&mips::MipsAssembler::Move, "or ${reg1}, ${reg2}, $zero"), "Move");
606}
607
608TEST_F(AssemblerMIPSTest, Clear) {
609 DriverStr(RepeatR(&mips::MipsAssembler::Clear, "or ${reg}, $zero, $zero"), "Clear");
610}
611
612TEST_F(AssemblerMIPSTest, Not) {
613 DriverStr(RepeatRR(&mips::MipsAssembler::Not, "nor ${reg1}, ${reg2}, $zero"), "Not");
614}
615
616TEST_F(AssemblerMIPSTest, LoadFromOffset) {
617 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A0, 0);
618 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A1, 0);
619 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A1, 256);
620 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A1, 1000);
621 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A1, 0x8000);
622 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A1, 0x10000);
623 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A1, 0x12345678);
624 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A1, -256);
625 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A1, 0xFFFF8000);
626 __ LoadFromOffset(mips::kLoadSignedByte, mips::A0, mips::A1, 0xABCDEF00);
627
628 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A0, 0);
629 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A1, 0);
630 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A1, 256);
631 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A1, 1000);
632 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A1, 0x8000);
633 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A1, 0x10000);
634 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A1, 0x12345678);
635 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A1, -256);
636 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A1, 0xFFFF8000);
637 __ LoadFromOffset(mips::kLoadUnsignedByte, mips::A0, mips::A1, 0xABCDEF00);
638
639 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A0, 0);
640 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A1, 0);
641 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A1, 256);
642 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A1, 1000);
643 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A1, 0x8000);
644 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A1, 0x10000);
645 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A1, 0x12345678);
646 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A1, -256);
647 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A1, 0xFFFF8000);
648 __ LoadFromOffset(mips::kLoadSignedHalfword, mips::A0, mips::A1, 0xABCDEF00);
649
650 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A0, 0);
651 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A1, 0);
652 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A1, 256);
653 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A1, 1000);
654 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A1, 0x8000);
655 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A1, 0x10000);
656 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A1, 0x12345678);
657 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A1, -256);
658 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A1, 0xFFFF8000);
659 __ LoadFromOffset(mips::kLoadUnsignedHalfword, mips::A0, mips::A1, 0xABCDEF00);
660
661 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A0, 0);
662 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A1, 0);
663 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A1, 256);
664 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A1, 1000);
665 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A1, 0x8000);
666 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A1, 0x10000);
667 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A1, 0x12345678);
668 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A1, -256);
669 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A1, 0xFFFF8000);
670 __ LoadFromOffset(mips::kLoadWord, mips::A0, mips::A1, 0xABCDEF00);
671
672 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A0, 0);
673 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A1, 0);
674 __ LoadFromOffset(mips::kLoadDoubleword, mips::A1, mips::A0, 0);
675 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A2, 0);
676 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A2, 256);
677 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A2, 1000);
678 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A2, 0x8000);
679 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A2, 0x10000);
680 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A2, 0x12345678);
681 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A2, -256);
682 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A2, 0xFFFF8000);
683 __ LoadFromOffset(mips::kLoadDoubleword, mips::A0, mips::A2, 0xABCDEF00);
684
685 const char* expected =
686 "lb $a0, 0($a0)\n"
687 "lb $a0, 0($a1)\n"
688 "lb $a0, 256($a1)\n"
689 "lb $a0, 1000($a1)\n"
690 "ori $at, $zero, 0x8000\n"
691 "addu $at, $at, $a1\n"
692 "lb $a0, 0($at)\n"
693 "lui $at, 1\n"
694 "addu $at, $at, $a1\n"
695 "lb $a0, 0($at)\n"
696 "lui $at, 0x1234\n"
697 "ori $at, 0x5678\n"
698 "addu $at, $at, $a1\n"
699 "lb $a0, 0($at)\n"
700 "lb $a0, -256($a1)\n"
701 "lb $a0, 0xFFFF8000($a1)\n"
702 "lui $at, 0xABCD\n"
703 "ori $at, 0xEF00\n"
704 "addu $at, $at, $a1\n"
705 "lb $a0, 0($at)\n"
706
707 "lbu $a0, 0($a0)\n"
708 "lbu $a0, 0($a1)\n"
709 "lbu $a0, 256($a1)\n"
710 "lbu $a0, 1000($a1)\n"
711 "ori $at, $zero, 0x8000\n"
712 "addu $at, $at, $a1\n"
713 "lbu $a0, 0($at)\n"
714 "lui $at, 1\n"
715 "addu $at, $at, $a1\n"
716 "lbu $a0, 0($at)\n"
717 "lui $at, 0x1234\n"
718 "ori $at, 0x5678\n"
719 "addu $at, $at, $a1\n"
720 "lbu $a0, 0($at)\n"
721 "lbu $a0, -256($a1)\n"
722 "lbu $a0, 0xFFFF8000($a1)\n"
723 "lui $at, 0xABCD\n"
724 "ori $at, 0xEF00\n"
725 "addu $at, $at, $a1\n"
726 "lbu $a0, 0($at)\n"
727
728 "lh $a0, 0($a0)\n"
729 "lh $a0, 0($a1)\n"
730 "lh $a0, 256($a1)\n"
731 "lh $a0, 1000($a1)\n"
732 "ori $at, $zero, 0x8000\n"
733 "addu $at, $at, $a1\n"
734 "lh $a0, 0($at)\n"
735 "lui $at, 1\n"
736 "addu $at, $at, $a1\n"
737 "lh $a0, 0($at)\n"
738 "lui $at, 0x1234\n"
739 "ori $at, 0x5678\n"
740 "addu $at, $at, $a1\n"
741 "lh $a0, 0($at)\n"
742 "lh $a0, -256($a1)\n"
743 "lh $a0, 0xFFFF8000($a1)\n"
744 "lui $at, 0xABCD\n"
745 "ori $at, 0xEF00\n"
746 "addu $at, $at, $a1\n"
747 "lh $a0, 0($at)\n"
748
749 "lhu $a0, 0($a0)\n"
750 "lhu $a0, 0($a1)\n"
751 "lhu $a0, 256($a1)\n"
752 "lhu $a0, 1000($a1)\n"
753 "ori $at, $zero, 0x8000\n"
754 "addu $at, $at, $a1\n"
755 "lhu $a0, 0($at)\n"
756 "lui $at, 1\n"
757 "addu $at, $at, $a1\n"
758 "lhu $a0, 0($at)\n"
759 "lui $at, 0x1234\n"
760 "ori $at, 0x5678\n"
761 "addu $at, $at, $a1\n"
762 "lhu $a0, 0($at)\n"
763 "lhu $a0, -256($a1)\n"
764 "lhu $a0, 0xFFFF8000($a1)\n"
765 "lui $at, 0xABCD\n"
766 "ori $at, 0xEF00\n"
767 "addu $at, $at, $a1\n"
768 "lhu $a0, 0($at)\n"
769
770 "lw $a0, 0($a0)\n"
771 "lw $a0, 0($a1)\n"
772 "lw $a0, 256($a1)\n"
773 "lw $a0, 1000($a1)\n"
774 "ori $at, $zero, 0x8000\n"
775 "addu $at, $at, $a1\n"
776 "lw $a0, 0($at)\n"
777 "lui $at, 1\n"
778 "addu $at, $at, $a1\n"
779 "lw $a0, 0($at)\n"
780 "lui $at, 0x1234\n"
781 "ori $at, 0x5678\n"
782 "addu $at, $at, $a1\n"
783 "lw $a0, 0($at)\n"
784 "lw $a0, -256($a1)\n"
785 "lw $a0, 0xFFFF8000($a1)\n"
786 "lui $at, 0xABCD\n"
787 "ori $at, 0xEF00\n"
788 "addu $at, $at, $a1\n"
789 "lw $a0, 0($at)\n"
790
791 "lw $a1, 4($a0)\n"
792 "lw $a0, 0($a0)\n"
793 "lw $a0, 0($a1)\n"
794 "lw $a1, 4($a1)\n"
795 "lw $a1, 0($a0)\n"
796 "lw $a2, 4($a0)\n"
797 "lw $a0, 0($a2)\n"
798 "lw $a1, 4($a2)\n"
799 "lw $a0, 256($a2)\n"
800 "lw $a1, 260($a2)\n"
801 "lw $a0, 1000($a2)\n"
802 "lw $a1, 1004($a2)\n"
803 "ori $at, $zero, 0x8000\n"
804 "addu $at, $at, $a2\n"
805 "lw $a0, 0($at)\n"
806 "lw $a1, 4($at)\n"
807 "lui $at, 1\n"
808 "addu $at, $at, $a2\n"
809 "lw $a0, 0($at)\n"
810 "lw $a1, 4($at)\n"
811 "lui $at, 0x1234\n"
812 "ori $at, 0x5678\n"
813 "addu $at, $at, $a2\n"
814 "lw $a0, 0($at)\n"
815 "lw $a1, 4($at)\n"
816 "lw $a0, -256($a2)\n"
817 "lw $a1, -252($a2)\n"
818 "lw $a0, 0xFFFF8000($a2)\n"
819 "lw $a1, 0xFFFF8004($a2)\n"
820 "lui $at, 0xABCD\n"
821 "ori $at, 0xEF00\n"
822 "addu $at, $at, $a2\n"
823 "lw $a0, 0($at)\n"
824 "lw $a1, 4($at)\n";
825 DriverStr(expected, "LoadFromOffset");
826}
827
828TEST_F(AssemblerMIPSTest, LoadSFromOffset) {
829 __ LoadSFromOffset(mips::F0, mips::A0, 0);
830 __ LoadSFromOffset(mips::F0, mips::A0, 4);
831 __ LoadSFromOffset(mips::F0, mips::A0, 256);
832 __ LoadSFromOffset(mips::F0, mips::A0, 0x8000);
833 __ LoadSFromOffset(mips::F0, mips::A0, 0x10000);
834 __ LoadSFromOffset(mips::F0, mips::A0, 0x12345678);
835 __ LoadSFromOffset(mips::F0, mips::A0, -256);
836 __ LoadSFromOffset(mips::F0, mips::A0, 0xFFFF8000);
837 __ LoadSFromOffset(mips::F0, mips::A0, 0xABCDEF00);
838
839 const char* expected =
840 "lwc1 $f0, 0($a0)\n"
841 "lwc1 $f0, 4($a0)\n"
842 "lwc1 $f0, 256($a0)\n"
843 "ori $at, $zero, 0x8000\n"
844 "addu $at, $at, $a0\n"
845 "lwc1 $f0, 0($at)\n"
846 "lui $at, 1\n"
847 "addu $at, $at, $a0\n"
848 "lwc1 $f0, 0($at)\n"
849 "lui $at, 0x1234\n"
850 "ori $at, 0x5678\n"
851 "addu $at, $at, $a0\n"
852 "lwc1 $f0, 0($at)\n"
853 "lwc1 $f0, -256($a0)\n"
854 "lwc1 $f0, 0xFFFF8000($a0)\n"
855 "lui $at, 0xABCD\n"
856 "ori $at, 0xEF00\n"
857 "addu $at, $at, $a0\n"
858 "lwc1 $f0, 0($at)\n";
859 DriverStr(expected, "LoadSFromOffset");
860}
861
862
863TEST_F(AssemblerMIPSTest, LoadDFromOffset) {
864 __ LoadDFromOffset(mips::F0, mips::A0, 0);
865 __ LoadDFromOffset(mips::F0, mips::A0, 4);
866 __ LoadDFromOffset(mips::F0, mips::A0, 256);
867 __ LoadDFromOffset(mips::F0, mips::A0, 0x8000);
868 __ LoadDFromOffset(mips::F0, mips::A0, 0x10000);
869 __ LoadDFromOffset(mips::F0, mips::A0, 0x12345678);
870 __ LoadDFromOffset(mips::F0, mips::A0, -256);
871 __ LoadDFromOffset(mips::F0, mips::A0, 0xFFFF8000);
872 __ LoadDFromOffset(mips::F0, mips::A0, 0xABCDEF00);
873
874 const char* expected =
875 "ldc1 $f0, 0($a0)\n"
876 "lwc1 $f0, 4($a0)\n"
877 "lwc1 $f1, 8($a0)\n"
878 "ldc1 $f0, 256($a0)\n"
879 "ori $at, $zero, 0x8000\n"
880 "addu $at, $at, $a0\n"
881 "ldc1 $f0, 0($at)\n"
882 "lui $at, 1\n"
883 "addu $at, $at, $a0\n"
884 "ldc1 $f0, 0($at)\n"
885 "lui $at, 0x1234\n"
886 "ori $at, 0x5678\n"
887 "addu $at, $at, $a0\n"
888 "ldc1 $f0, 0($at)\n"
889 "ldc1 $f0, -256($a0)\n"
890 "ldc1 $f0, 0xFFFF8000($a0)\n"
891 "lui $at, 0xABCD\n"
892 "ori $at, 0xEF00\n"
893 "addu $at, $at, $a0\n"
894 "ldc1 $f0, 0($at)\n";
895 DriverStr(expected, "LoadDFromOffset");
896}
897
898TEST_F(AssemblerMIPSTest, StoreToOffset) {
899 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A0, 0);
900 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A1, 0);
901 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A1, 256);
902 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A1, 1000);
903 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A1, 0x8000);
904 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A1, 0x10000);
905 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A1, 0x12345678);
906 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A1, -256);
907 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A1, 0xFFFF8000);
908 __ StoreToOffset(mips::kStoreByte, mips::A0, mips::A1, 0xABCDEF00);
909
910 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A0, 0);
911 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A1, 0);
912 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A1, 256);
913 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A1, 1000);
914 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A1, 0x8000);
915 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A1, 0x10000);
916 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A1, 0x12345678);
917 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A1, -256);
918 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A1, 0xFFFF8000);
919 __ StoreToOffset(mips::kStoreHalfword, mips::A0, mips::A1, 0xABCDEF00);
920
921 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A0, 0);
922 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A1, 0);
923 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A1, 256);
924 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A1, 1000);
925 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A1, 0x8000);
926 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A1, 0x10000);
927 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A1, 0x12345678);
928 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A1, -256);
929 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A1, 0xFFFF8000);
930 __ StoreToOffset(mips::kStoreWord, mips::A0, mips::A1, 0xABCDEF00);
931
932 __ StoreToOffset(mips::kStoreDoubleword, mips::A0, mips::A2, 0);
933 __ StoreToOffset(mips::kStoreDoubleword, mips::A0, mips::A2, 256);
934 __ StoreToOffset(mips::kStoreDoubleword, mips::A0, mips::A2, 1000);
935 __ StoreToOffset(mips::kStoreDoubleword, mips::A0, mips::A2, 0x8000);
936 __ StoreToOffset(mips::kStoreDoubleword, mips::A0, mips::A2, 0x10000);
937 __ StoreToOffset(mips::kStoreDoubleword, mips::A0, mips::A2, 0x12345678);
938 __ StoreToOffset(mips::kStoreDoubleword, mips::A0, mips::A2, -256);
939 __ StoreToOffset(mips::kStoreDoubleword, mips::A0, mips::A2, 0xFFFF8000);
940 __ StoreToOffset(mips::kStoreDoubleword, mips::A0, mips::A2, 0xABCDEF00);
941
942 const char* expected =
943 "sb $a0, 0($a0)\n"
944 "sb $a0, 0($a1)\n"
945 "sb $a0, 256($a1)\n"
946 "sb $a0, 1000($a1)\n"
947 "ori $at, $zero, 0x8000\n"
948 "addu $at, $at, $a1\n"
949 "sb $a0, 0($at)\n"
950 "lui $at, 1\n"
951 "addu $at, $at, $a1\n"
952 "sb $a0, 0($at)\n"
953 "lui $at, 0x1234\n"
954 "ori $at, 0x5678\n"
955 "addu $at, $at, $a1\n"
956 "sb $a0, 0($at)\n"
957 "sb $a0, -256($a1)\n"
958 "sb $a0, 0xFFFF8000($a1)\n"
959 "lui $at, 0xABCD\n"
960 "ori $at, 0xEF00\n"
961 "addu $at, $at, $a1\n"
962 "sb $a0, 0($at)\n"
963
964 "sh $a0, 0($a0)\n"
965 "sh $a0, 0($a1)\n"
966 "sh $a0, 256($a1)\n"
967 "sh $a0, 1000($a1)\n"
968 "ori $at, $zero, 0x8000\n"
969 "addu $at, $at, $a1\n"
970 "sh $a0, 0($at)\n"
971 "lui $at, 1\n"
972 "addu $at, $at, $a1\n"
973 "sh $a0, 0($at)\n"
974 "lui $at, 0x1234\n"
975 "ori $at, 0x5678\n"
976 "addu $at, $at, $a1\n"
977 "sh $a0, 0($at)\n"
978 "sh $a0, -256($a1)\n"
979 "sh $a0, 0xFFFF8000($a1)\n"
980 "lui $at, 0xABCD\n"
981 "ori $at, 0xEF00\n"
982 "addu $at, $at, $a1\n"
983 "sh $a0, 0($at)\n"
984
985 "sw $a0, 0($a0)\n"
986 "sw $a0, 0($a1)\n"
987 "sw $a0, 256($a1)\n"
988 "sw $a0, 1000($a1)\n"
989 "ori $at, $zero, 0x8000\n"
990 "addu $at, $at, $a1\n"
991 "sw $a0, 0($at)\n"
992 "lui $at, 1\n"
993 "addu $at, $at, $a1\n"
994 "sw $a0, 0($at)\n"
995 "lui $at, 0x1234\n"
996 "ori $at, 0x5678\n"
997 "addu $at, $at, $a1\n"
998 "sw $a0, 0($at)\n"
999 "sw $a0, -256($a1)\n"
1000 "sw $a0, 0xFFFF8000($a1)\n"
1001 "lui $at, 0xABCD\n"
1002 "ori $at, 0xEF00\n"
1003 "addu $at, $at, $a1\n"
1004 "sw $a0, 0($at)\n"
1005
1006 "sw $a0, 0($a2)\n"
1007 "sw $a1, 4($a2)\n"
1008 "sw $a0, 256($a2)\n"
1009 "sw $a1, 260($a2)\n"
1010 "sw $a0, 1000($a2)\n"
1011 "sw $a1, 1004($a2)\n"
1012 "ori $at, $zero, 0x8000\n"
1013 "addu $at, $at, $a2\n"
1014 "sw $a0, 0($at)\n"
1015 "sw $a1, 4($at)\n"
1016 "lui $at, 1\n"
1017 "addu $at, $at, $a2\n"
1018 "sw $a0, 0($at)\n"
1019 "sw $a1, 4($at)\n"
1020 "lui $at, 0x1234\n"
1021 "ori $at, 0x5678\n"
1022 "addu $at, $at, $a2\n"
1023 "sw $a0, 0($at)\n"
1024 "sw $a1, 4($at)\n"
1025 "sw $a0, -256($a2)\n"
1026 "sw $a1, -252($a2)\n"
1027 "sw $a0, 0xFFFF8000($a2)\n"
1028 "sw $a1, 0xFFFF8004($a2)\n"
1029 "lui $at, 0xABCD\n"
1030 "ori $at, 0xEF00\n"
1031 "addu $at, $at, $a2\n"
1032 "sw $a0, 0($at)\n"
1033 "sw $a1, 4($at)\n";
1034 DriverStr(expected, "StoreToOffset");
1035}
1036
1037TEST_F(AssemblerMIPSTest, StoreSToOffset) {
1038 __ StoreSToOffset(mips::F0, mips::A0, 0);
1039 __ StoreSToOffset(mips::F0, mips::A0, 4);
1040 __ StoreSToOffset(mips::F0, mips::A0, 256);
1041 __ StoreSToOffset(mips::F0, mips::A0, 0x8000);
1042 __ StoreSToOffset(mips::F0, mips::A0, 0x10000);
1043 __ StoreSToOffset(mips::F0, mips::A0, 0x12345678);
1044 __ StoreSToOffset(mips::F0, mips::A0, -256);
1045 __ StoreSToOffset(mips::F0, mips::A0, 0xFFFF8000);
1046 __ StoreSToOffset(mips::F0, mips::A0, 0xABCDEF00);
1047
1048 const char* expected =
1049 "swc1 $f0, 0($a0)\n"
1050 "swc1 $f0, 4($a0)\n"
1051 "swc1 $f0, 256($a0)\n"
1052 "ori $at, $zero, 0x8000\n"
1053 "addu $at, $at, $a0\n"
1054 "swc1 $f0, 0($at)\n"
1055 "lui $at, 1\n"
1056 "addu $at, $at, $a0\n"
1057 "swc1 $f0, 0($at)\n"
1058 "lui $at, 0x1234\n"
1059 "ori $at, 0x5678\n"
1060 "addu $at, $at, $a0\n"
1061 "swc1 $f0, 0($at)\n"
1062 "swc1 $f0, -256($a0)\n"
1063 "swc1 $f0, 0xFFFF8000($a0)\n"
1064 "lui $at, 0xABCD\n"
1065 "ori $at, 0xEF00\n"
1066 "addu $at, $at, $a0\n"
1067 "swc1 $f0, 0($at)\n";
1068 DriverStr(expected, "StoreSToOffset");
1069}
1070
1071TEST_F(AssemblerMIPSTest, StoreDToOffset) {
1072 __ StoreDToOffset(mips::F0, mips::A0, 0);
1073 __ StoreDToOffset(mips::F0, mips::A0, 4);
1074 __ StoreDToOffset(mips::F0, mips::A0, 256);
1075 __ StoreDToOffset(mips::F0, mips::A0, 0x8000);
1076 __ StoreDToOffset(mips::F0, mips::A0, 0x10000);
1077 __ StoreDToOffset(mips::F0, mips::A0, 0x12345678);
1078 __ StoreDToOffset(mips::F0, mips::A0, -256);
1079 __ StoreDToOffset(mips::F0, mips::A0, 0xFFFF8000);
1080 __ StoreDToOffset(mips::F0, mips::A0, 0xABCDEF00);
1081
1082 const char* expected =
1083 "sdc1 $f0, 0($a0)\n"
1084 "swc1 $f0, 4($a0)\n"
1085 "swc1 $f1, 8($a0)\n"
1086 "sdc1 $f0, 256($a0)\n"
1087 "ori $at, $zero, 0x8000\n"
1088 "addu $at, $at, $a0\n"
1089 "sdc1 $f0, 0($at)\n"
1090 "lui $at, 1\n"
1091 "addu $at, $at, $a0\n"
1092 "sdc1 $f0, 0($at)\n"
1093 "lui $at, 0x1234\n"
1094 "ori $at, 0x5678\n"
1095 "addu $at, $at, $a0\n"
1096 "sdc1 $f0, 0($at)\n"
1097 "sdc1 $f0, -256($a0)\n"
1098 "sdc1 $f0, 0xFFFF8000($a0)\n"
1099 "lui $at, 0xABCD\n"
1100 "ori $at, 0xEF00\n"
1101 "addu $at, $at, $a0\n"
1102 "sdc1 $f0, 0($at)\n";
1103 DriverStr(expected, "StoreDToOffset");
1104}
1105
1106TEST_F(AssemblerMIPSTest, B) {
1107 mips::MipsLabel label1, label2;
1108 __ B(&label1);
1109 constexpr size_t kAdduCount1 = 63;
1110 for (size_t i = 0; i != kAdduCount1; ++i) {
1111 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1112 }
1113 __ Bind(&label1);
1114 __ B(&label2);
1115 constexpr size_t kAdduCount2 = 64;
1116 for (size_t i = 0; i != kAdduCount2; ++i) {
1117 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1118 }
1119 __ Bind(&label2);
1120 __ B(&label1);
1121
1122 std::string expected =
1123 ".set noreorder\n"
1124 "b 1f\n"
1125 "nop\n" +
1126 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
1127 "1:\n"
1128 "b 2f\n"
1129 "nop\n" +
1130 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
1131 "2:\n"
1132 "b 1b\n"
1133 "nop\n";
1134 DriverStr(expected, "B");
1135}
1136
1137TEST_F(AssemblerMIPSTest, Beq) {
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -08001138 BranchCondTwoRegsHelper(&mips::MipsAssembler::Beq, "Beq");
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +02001139}
1140
1141TEST_F(AssemblerMIPSTest, Bne) {
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -08001142 BranchCondTwoRegsHelper(&mips::MipsAssembler::Bne, "Bne");
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +02001143}
1144
1145TEST_F(AssemblerMIPSTest, Beqz) {
1146 mips::MipsLabel label;
1147 __ Beqz(mips::A0, &label);
1148 constexpr size_t kAdduCount1 = 63;
1149 for (size_t i = 0; i != kAdduCount1; ++i) {
1150 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1151 }
1152 __ Bind(&label);
1153 constexpr size_t kAdduCount2 = 64;
1154 for (size_t i = 0; i != kAdduCount2; ++i) {
1155 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1156 }
1157 __ Beqz(mips::A1, &label);
1158
1159 std::string expected =
1160 ".set noreorder\n"
1161 "beq $zero, $a0, 1f\n"
1162 "nop\n" +
1163 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
1164 "1:\n" +
1165 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
1166 "beq $zero, $a1, 1b\n"
1167 "nop\n";
1168 DriverStr(expected, "Beqz");
1169}
1170
1171TEST_F(AssemblerMIPSTest, Bnez) {
1172 mips::MipsLabel label;
1173 __ Bnez(mips::A0, &label);
1174 constexpr size_t kAdduCount1 = 63;
1175 for (size_t i = 0; i != kAdduCount1; ++i) {
1176 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1177 }
1178 __ Bind(&label);
1179 constexpr size_t kAdduCount2 = 64;
1180 for (size_t i = 0; i != kAdduCount2; ++i) {
1181 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1182 }
1183 __ Bnez(mips::A1, &label);
1184
1185 std::string expected =
1186 ".set noreorder\n"
1187 "bne $zero, $a0, 1f\n"
1188 "nop\n" +
1189 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
1190 "1:\n" +
1191 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
1192 "bne $zero, $a1, 1b\n"
1193 "nop\n";
1194 DriverStr(expected, "Bnez");
1195}
1196
1197TEST_F(AssemblerMIPSTest, Bltz) {
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -08001198 BranchCondOneRegHelper(&mips::MipsAssembler::Bltz, "Bltz");
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +02001199}
1200
1201TEST_F(AssemblerMIPSTest, Bgez) {
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -08001202 BranchCondOneRegHelper(&mips::MipsAssembler::Bgez, "Bgez");
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +02001203}
1204
1205TEST_F(AssemblerMIPSTest, Blez) {
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -08001206 BranchCondOneRegHelper(&mips::MipsAssembler::Blez, "Blez");
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +02001207}
1208
1209TEST_F(AssemblerMIPSTest, Bgtz) {
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -08001210 BranchCondOneRegHelper(&mips::MipsAssembler::Bgtz, "Bgtz");
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +02001211}
1212
1213TEST_F(AssemblerMIPSTest, Blt) {
1214 mips::MipsLabel label;
1215 __ Blt(mips::A0, mips::A1, &label);
1216 constexpr size_t kAdduCount1 = 63;
1217 for (size_t i = 0; i != kAdduCount1; ++i) {
1218 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1219 }
1220 __ Bind(&label);
1221 constexpr size_t kAdduCount2 = 64;
1222 for (size_t i = 0; i != kAdduCount2; ++i) {
1223 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1224 }
1225 __ Blt(mips::A2, mips::A3, &label);
1226
1227 std::string expected =
1228 ".set noreorder\n"
1229 "slt $at, $a0, $a1\n"
1230 "bne $zero, $at, 1f\n"
1231 "nop\n" +
1232 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
1233 "1:\n" +
1234 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
1235 "slt $at, $a2, $a3\n"
1236 "bne $zero, $at, 1b\n"
1237 "nop\n";
1238 DriverStr(expected, "Blt");
1239}
1240
1241TEST_F(AssemblerMIPSTest, Bge) {
1242 mips::MipsLabel label;
1243 __ Bge(mips::A0, mips::A1, &label);
1244 constexpr size_t kAdduCount1 = 63;
1245 for (size_t i = 0; i != kAdduCount1; ++i) {
1246 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1247 }
1248 __ Bind(&label);
1249 constexpr size_t kAdduCount2 = 64;
1250 for (size_t i = 0; i != kAdduCount2; ++i) {
1251 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1252 }
1253 __ Bge(mips::A2, mips::A3, &label);
1254
1255 std::string expected =
1256 ".set noreorder\n"
1257 "slt $at, $a0, $a1\n"
1258 "beq $zero, $at, 1f\n"
1259 "nop\n" +
1260 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
1261 "1:\n" +
1262 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
1263 "slt $at, $a2, $a3\n"
1264 "beq $zero, $at, 1b\n"
1265 "nop\n";
1266 DriverStr(expected, "Bge");
1267}
1268
1269TEST_F(AssemblerMIPSTest, Bltu) {
1270 mips::MipsLabel label;
1271 __ Bltu(mips::A0, mips::A1, &label);
1272 constexpr size_t kAdduCount1 = 63;
1273 for (size_t i = 0; i != kAdduCount1; ++i) {
1274 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1275 }
1276 __ Bind(&label);
1277 constexpr size_t kAdduCount2 = 64;
1278 for (size_t i = 0; i != kAdduCount2; ++i) {
1279 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1280 }
1281 __ Bltu(mips::A2, mips::A3, &label);
1282
1283 std::string expected =
1284 ".set noreorder\n"
1285 "sltu $at, $a0, $a1\n"
1286 "bne $zero, $at, 1f\n"
1287 "nop\n" +
1288 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
1289 "1:\n" +
1290 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
1291 "sltu $at, $a2, $a3\n"
1292 "bne $zero, $at, 1b\n"
1293 "nop\n";
1294 DriverStr(expected, "Bltu");
1295}
1296
1297TEST_F(AssemblerMIPSTest, Bgeu) {
1298 mips::MipsLabel label;
1299 __ Bgeu(mips::A0, mips::A1, &label);
1300 constexpr size_t kAdduCount1 = 63;
1301 for (size_t i = 0; i != kAdduCount1; ++i) {
1302 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1303 }
1304 __ Bind(&label);
1305 constexpr size_t kAdduCount2 = 64;
1306 for (size_t i = 0; i != kAdduCount2; ++i) {
1307 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1308 }
1309 __ Bgeu(mips::A2, mips::A3, &label);
1310
1311 std::string expected =
1312 ".set noreorder\n"
1313 "sltu $at, $a0, $a1\n"
1314 "beq $zero, $at, 1f\n"
1315 "nop\n" +
1316 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
1317 "1:\n" +
1318 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
1319 "sltu $at, $a2, $a3\n"
1320 "beq $zero, $at, 1b\n"
1321 "nop\n";
1322 DriverStr(expected, "Bgeu");
1323}
1324
Alexey Frunzecd7b0ee2015-12-03 16:46:38 -08001325TEST_F(AssemblerMIPSTest, Bc1f) {
1326 mips::MipsLabel label;
1327 __ Bc1f(0, &label);
1328 constexpr size_t kAdduCount1 = 63;
1329 for (size_t i = 0; i != kAdduCount1; ++i) {
1330 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1331 }
1332 __ Bind(&label);
1333 constexpr size_t kAdduCount2 = 64;
1334 for (size_t i = 0; i != kAdduCount2; ++i) {
1335 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1336 }
1337 __ Bc1f(7, &label);
1338
1339 std::string expected =
1340 ".set noreorder\n"
1341 "bc1f $fcc0, 1f\n"
1342 "nop\n" +
1343 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
1344 "1:\n" +
1345 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
1346 "bc1f $fcc7, 1b\n"
1347 "nop\n";
1348 DriverStr(expected, "Bc1f");
1349}
1350
1351TEST_F(AssemblerMIPSTest, Bc1t) {
1352 mips::MipsLabel label;
1353 __ Bc1t(0, &label);
1354 constexpr size_t kAdduCount1 = 63;
1355 for (size_t i = 0; i != kAdduCount1; ++i) {
1356 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1357 }
1358 __ Bind(&label);
1359 constexpr size_t kAdduCount2 = 64;
1360 for (size_t i = 0; i != kAdduCount2; ++i) {
1361 __ Addu(mips::ZERO, mips::ZERO, mips::ZERO);
1362 }
1363 __ Bc1t(7, &label);
1364
1365 std::string expected =
1366 ".set noreorder\n"
1367 "bc1t $fcc0, 1f\n"
1368 "nop\n" +
1369 RepeatInsn(kAdduCount1, "addu $zero, $zero, $zero\n") +
1370 "1:\n" +
1371 RepeatInsn(kAdduCount2, "addu $zero, $zero, $zero\n") +
1372 "bc1t $fcc7, 1b\n"
1373 "nop\n";
1374 DriverStr(expected, "Bc1t");
1375}
1376
Goran Jakovljevic8c434dc2015-08-26 14:39:44 +02001377#undef __
1378
1379} // namespace art