1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2023 Igalia S.L.
3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker */
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Worker /* Unit test for disassembly of instructions.
7*61046927SAndroid Build Coastguard Worker *
8*61046927SAndroid Build Coastguard Worker * The goal is to take instructions we've seen the blob produce, and test that
9*61046927SAndroid Build Coastguard Worker * we can disassemble them correctly.
10*61046927SAndroid Build Coastguard Worker */
11*61046927SAndroid Build Coastguard Worker
12*61046927SAndroid Build Coastguard Worker #include "etnaviv/isa/asm.h"
13*61046927SAndroid Build Coastguard Worker #include "etnaviv/isa/etnaviv-isa.h"
14*61046927SAndroid Build Coastguard Worker #include "etnaviv/isa/isa.h"
15*61046927SAndroid Build Coastguard Worker #include <gtest/gtest.h>
16*61046927SAndroid Build Coastguard Worker
17*61046927SAndroid Build Coastguard Worker struct encoded_instr {
18*61046927SAndroid Build Coastguard Worker uint32_t word[4];
19*61046927SAndroid Build Coastguard Worker };
20*61046927SAndroid Build Coastguard Worker
21*61046927SAndroid Build Coastguard Worker static const uint32_t FLAG_DUAL_16 = BITFIELD_BIT(0);
22*61046927SAndroid Build Coastguard Worker static const uint32_t FLAG_FAILING_PARSE = BITFIELD_BIT(1);
23*61046927SAndroid Build Coastguard Worker static const uint32_t FLAG_FAILING_ASM = BITFIELD_BIT(2);
24*61046927SAndroid Build Coastguard Worker
25*61046927SAndroid Build Coastguard Worker struct disasm_state {
26*61046927SAndroid Build Coastguard Worker uint32_t bin[4];
27*61046927SAndroid Build Coastguard Worker const char *disasm;
28*61046927SAndroid Build Coastguard Worker uint32_t flags;
29*61046927SAndroid Build Coastguard Worker
operator <<(std::ostream & os,const disasm_state & obj)30*61046927SAndroid Build Coastguard Worker friend std::ostream &operator<<(std::ostream &os, const disasm_state &obj)
31*61046927SAndroid Build Coastguard Worker {
32*61046927SAndroid Build Coastguard Worker // clang-format off
33*61046927SAndroid Build Coastguard Worker return os
34*61046927SAndroid Build Coastguard Worker << "binary: "
35*61046927SAndroid Build Coastguard Worker << std::showbase << std::internal << std::setfill('0') << std::setw(8) << std::hex << obj.bin[0] << " "
36*61046927SAndroid Build Coastguard Worker << std::showbase << std::internal << std::setfill('0') << std::setw(8) << std::hex << obj.bin[1] << " "
37*61046927SAndroid Build Coastguard Worker << std::showbase << std::internal << std::setfill('0') << std::setw(8) << std::hex << obj.bin[2] << " "
38*61046927SAndroid Build Coastguard Worker << std::showbase << std::internal << std::setfill('0') << std::setw(8) << std::hex << obj.bin[3] << " "
39*61046927SAndroid Build Coastguard Worker << "disasm: " << obj.disasm;
40*61046927SAndroid Build Coastguard Worker // clang-format on
41*61046927SAndroid Build Coastguard Worker }
42*61046927SAndroid Build Coastguard Worker };
43*61046927SAndroid Build Coastguard Worker
44*61046927SAndroid Build Coastguard Worker struct DisasmTest : testing::Test, testing::WithParamInterface<disasm_state> {
45*61046927SAndroid Build Coastguard Worker char *disasm_output;
46*61046927SAndroid Build Coastguard Worker
DisasmTestDisasmTest47*61046927SAndroid Build Coastguard Worker DisasmTest()
48*61046927SAndroid Build Coastguard Worker {
49*61046927SAndroid Build Coastguard Worker static const struct isa_decode_options options = {.show_errors = true,
50*61046927SAndroid Build Coastguard Worker .branch_labels = false};
51*61046927SAndroid Build Coastguard Worker
52*61046927SAndroid Build Coastguard Worker constexpr int output_size = 4096;
53*61046927SAndroid Build Coastguard Worker disasm_output = (char *)malloc(output_size);
54*61046927SAndroid Build Coastguard Worker FILE *fdisasm = fmemopen(disasm_output, output_size, "w+");
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard Worker if (!fdisasm) {
57*61046927SAndroid Build Coastguard Worker return;
58*61046927SAndroid Build Coastguard Worker }
59*61046927SAndroid Build Coastguard Worker
60*61046927SAndroid Build Coastguard Worker etnaviv_isa_disasm((void *)GetParam().bin, 16, fdisasm, &options);
61*61046927SAndroid Build Coastguard Worker fflush(fdisasm);
62*61046927SAndroid Build Coastguard Worker }
63*61046927SAndroid Build Coastguard Worker };
64*61046927SAndroid Build Coastguard Worker
TEST_P(DisasmTest,basicOpCodes)65*61046927SAndroid Build Coastguard Worker TEST_P(DisasmTest, basicOpCodes)
66*61046927SAndroid Build Coastguard Worker {
67*61046927SAndroid Build Coastguard Worker auto as = GetParam();
68*61046927SAndroid Build Coastguard Worker EXPECT_STREQ(as.disasm, disasm_output);
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Worker #ifndef HAVE_ETNAVIV_NO_PEST
71*61046927SAndroid Build Coastguard Worker struct etna_asm_result *result = isa_parse_str(disasm_output, as.flags & FLAG_DUAL_16);
72*61046927SAndroid Build Coastguard Worker EXPECT_TRUE(result);
73*61046927SAndroid Build Coastguard Worker
74*61046927SAndroid Build Coastguard Worker if (as.flags & FLAG_FAILING_PARSE)
75*61046927SAndroid Build Coastguard Worker EXPECT_FALSE(result->success);
76*61046927SAndroid Build Coastguard Worker else
77*61046927SAndroid Build Coastguard Worker EXPECT_TRUE(result->success);
78*61046927SAndroid Build Coastguard Worker
79*61046927SAndroid Build Coastguard Worker if (result->success && !(as.flags & FLAG_FAILING_ASM)) {
80*61046927SAndroid Build Coastguard Worker uint32_t encoded[4] = {0};
81*61046927SAndroid Build Coastguard Worker isa_assemble_instruction(encoded, result->instr);
82*61046927SAndroid Build Coastguard Worker
83*61046927SAndroid Build Coastguard Worker EXPECT_EQ(GetParam().bin[0], encoded[0]);
84*61046927SAndroid Build Coastguard Worker EXPECT_EQ(GetParam().bin[1], encoded[1]);
85*61046927SAndroid Build Coastguard Worker EXPECT_EQ(GetParam().bin[2], encoded[2]);
86*61046927SAndroid Build Coastguard Worker EXPECT_EQ(GetParam().bin[3], encoded[3]);
87*61046927SAndroid Build Coastguard Worker }
88*61046927SAndroid Build Coastguard Worker
89*61046927SAndroid Build Coastguard Worker isa_asm_result_destroy(result);
90*61046927SAndroid Build Coastguard Worker #endif
91*61046927SAndroid Build Coastguard Worker }
92*61046927SAndroid Build Coastguard Worker
93*61046927SAndroid Build Coastguard Worker // clang-format off
94*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(Default, DisasmTest,
95*61046927SAndroid Build Coastguard Worker testing::Values(
96*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000000, 0x00000000, 0x00000000, 0x00000000}, "nop void, void, void, void\n" },
97*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07811018, 0x15001f20, 0x00000000, 0x00000000}, "texld t1, tex0.xyzw, t1.xyyy, void, void\n" },
98*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07831018, 0x39003f20, 0x00000000, 0x00000000}, "texld t3, tex0.xyzw, t3.xyzw, void, void\n" },
99*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07811009, 0x00000000, 0x00000000, 0x20390008}, "mov.pack t1, void, void, u0.xyzw\n" },
100*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00000000, 0x00000000, 0x00150028}, "mov.pack t2.xy__, void, void, t2.xyyy\n"},
101*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00000000, 0x00000000, 0x00550028}, "mov.pack t2.xy__, void, void, -t2.xyyy\n"},
102*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00000000, 0x00000000, 0x00950028}, "mov.pack t2.xy__, void, void, |t2.xyyy|\n"}
103*61046927SAndroid Build Coastguard Worker )
104*61046927SAndroid Build Coastguard Worker );
105*61046927SAndroid Build Coastguard Worker // clang-format on
106*61046927SAndroid Build Coastguard Worker
107*61046927SAndroid Build Coastguard Worker // clang-format off
108*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(OperandTypes, DisasmTest,
109*61046927SAndroid Build Coastguard Worker testing::Values(
110*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00000000, 0x00000000, 0x00150028}, "mov.pack t2.xy__, void, void, t2.xyyy\n"},
111*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00000000, 0x40000000, 0x00150028}, "mov.s32.pack t2.xy__, void, void, t2.xyyy\n"},
112*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00000000, 0x80000000, 0x00150028}, "mov.s8.pack t2.xy__, void, void, t2.xyyy\n"},
113*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00000000, 0xc0000000, 0x00150028}, "mov.u16.pack t2.xy__, void, void, t2.xyyy\n"},
114*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00200000, 0x00000000, 0x00150028}, "mov.f16.pack t2.xy__, void, void, t2.xyyy\n"},
115*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00200000, 0x40000000, 0x00150028}, "mov.s16.pack t2.xy__, void, void, t2.xyyy\n"},
116*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00200000, 0x80000000, 0x00150028}, "mov.u32.pack t2.xy__, void, void, t2.xyyy\n"},
117*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00200000, 0xc0000000, 0x00150028}, "mov.u8.pack t2.xy__, void, void, t2.xyyy\n"}
118*61046927SAndroid Build Coastguard Worker )
119*61046927SAndroid Build Coastguard Worker );
120*61046927SAndroid Build Coastguard Worker // clang-format on
121*61046927SAndroid Build Coastguard Worker
122*61046927SAndroid Build Coastguard Worker // clang-format off
123*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(Opcodes, DisasmTest,
124*61046927SAndroid Build Coastguard Worker testing::Values(
125*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000000, 0x00000000, 0x00000000, 0x00000000}, "nop void, void, void, void\n" },
126*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801001, 0x00001804, 0x00000000, 0x00000008}, "add t0.x___, t1.xxxx, void, t0.xxxx\n" },
127*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07801002, 0x39002805, 0x01c800c0, 0x00390038}, "mad.rtz t0, t2.xyzw, t1.xyzw, t3.xyzw\n" },
128*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801003, 0x00001804, 0x00000040, 0x00000000}, "mul t0.x___, t1.xxxx, t0.xxxx, void\n" },
129*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801005, 0x09000802, 0x00000040, 0x00000002}, "dp3.pack.rtne t0.x___, t0.xyzx, u0.xxxx, void\n" },
130*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801006, 0x39001804, 0x01c800c0, 0x00000000}, "dp4 t0.x___, t1.xyzw, t1.xyzw, void\n" },
131*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811007, 0x00001804, 0x00000000, 0x00000018}, "dsx t1.x___, t1.xxxx, void, t1.xxxx\n" },
132*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811008, 0x00001804, 0x00000000, 0x00000018}, "dsy t1.x___, t1.xxxx, void, t1.xxxx\n" },
133*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01821009, 0x00000000, 0x00000000, 0x00150028}, "mov.pack t2.xy__, void, void, t2.xyyy\n"},
134*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0081100c, 0x00000000, 0x00000000, 0x00000018}, "rcp.pack t1.x___, void, void, t1.xxxx\n" },
135*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080100d, 0x00000004, 0x00000000, 0x00000008}, "rsq t0.x___, void, void, t0.xxxx\n" },
136*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0783108f, 0x39002800, 0x05c800c0, 0x00390028}, "select.lt.pack t3, t2.xyzw, |t1.xyzw|, t2.xyzw\n"},
137*61046927SAndroid Build Coastguard Worker disasm_state{ {0x008010d0, 0x00000800, 0x00000040, 0x00000002}, "set.ge.pack t0.x___, t0.xxxx, u0.xxxx, void\n" },
138*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01001011, 0x00000004, 0x00000000, 0x00154008}, "exp t0._y__, void, void, t0.yyyy\n" },
139*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01801012, 0x00000005, 0x00000000, 0x00000008}, "log.rtz t0.xy__, void, void, t0.xxxx\n" },
140*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07811013, 0x00000004, 0x00000000, 0x000e4018}, "frc t1, void, void, t1.yzwx\n" },
141*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000014, 0x00000000, 0x00000000, 0x00000380}, "call void, void, void, 7\n" },
142*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000015, 0x00000000, 0x00000000, 0x00000000}, "ret void, void, void, void\n" },
143*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000016, 0x00000000, 0x00000000, 0x00001080}, "branch void, void, void, 33\n"},
144*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000017, 0x00000000, 0x00000000, 0x00000000}, "texkill.pack void, void, void, void\n" },
145*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000057, 0x00002800, 0x00000040, 0x00000002}, "texkill.gt.pack void, t2.xxxx, u0.xxxx, void\n", FLAG_FAILING_PARSE | FLAG_FAILING_ASM },
146*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07811018, 0x15001f20, 0x00000000, 0x00000000}, "texld t1, tex0.xyzw, t1.xyyy, void, void\n" },
147*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07811019, 0x39002f20, 0x00000000, 0x00000000}, "texldb t1, tex0.xyzw, t2.xyzw, void, void\n", FLAG_FAILING_PARSE | FLAG_FAILING_ASM },
148*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0781101a, 0x15001f20, 0x00a80140, 0x003f8018}, "texldd t1, tex0.xyzw, t1.xyyy, t2.xyyy, t1.zwww\n" },
149*61046927SAndroid Build Coastguard Worker disasm_state{ {0x4781101b, 0x39003f20, 0x00000000, 0x00000000}, "texldl t1, tex8.xyzw, t3.xyzw, void, void\n", FLAG_FAILING_PARSE | FLAG_FAILING_ASM },
150*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801021, 0x00000004, 0x00000000, 0x00000008}, "sqrt t0.x___, void, void, t0.xxxx\n" },
151*61046927SAndroid Build Coastguard Worker disasm_state{ {0x03001022, 0x00000005, 0x00000000, 0x00154008}, "sin.rtz t0.zy, void, void, t0.yyyy\n" },
152*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01801023, 0x00000005, 0x00000000, 0x00000008}, "cos.rtz t0.xy__, void, void, t0.xxxx\n" },
153*61046927SAndroid Build Coastguard Worker disasm_state{ {0x000001a4, 0x3e401804, 0x500000c0, 0x00000487}, "branch_any.ne.s32 void, t1.yzww, 1, 9\t; dontcare bits in branch_any: 00000000000000000000000400000000\n", FLAG_FAILING_ASM},
154*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801025, 0x00000004, 0x00000000, 0x00000008}, "floor t0.x___, void, void, t0.xxxx\n"},
155*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801026, 0x00000004, 0x00000000, 0x00000008}, "ceil t0.x___, void, void, t0.xxxx\n"},
156*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801027, 0x00000004, 0x00000000, 0x00000008}, "sign t0.x___, void, void, t0.xxxx\n" },
157*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0000002a, 0x00000000, 0x00000000, 0x00000000}, "barrier void, void, void, void\n" },
158*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080102c, 0x00200804, 0x50001040, 0x00000007}, "i2i.s16 t0.x___, t0.xxxx, 32, void\n" },
159*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0381102d, 0x00201804, 0x40000000, 0x00000000}, "i2f.s16 t1.xyz_, t1.xxxx, void, void\n"},
160*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0101102e, 0x00201804, 0x80000020, 0x00002000}, "f2i.u32.t0 t1._y__, th1.xxxx, void, void\n"},
161*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0081102f, 0x00000806, 0x40000000, 0x00000000}, "f2irnd.s32.rtne t1.x___, t0.xxxx, void, void\n"},
162*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811131, 0x80001800, 0x00aa0040, 0x202a800a}, "cmp.le.pack t1.x___, |t1.xxxx|, u0.yyyy, u0.zzzz\n"},
163*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801032, 0x00000c04, 0x10000050, 0x00000007}, "load.denorm t0.x___, u0.xxxx, 0, void\n"},
164*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00800033, 0x00000c84, 0x10000050, 0x0000000f}, "store.skpHp.denorm mem.x___, u0.xxxx, 0, t0.xxxx\n"},
165*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080103b, 0x00001804, 0x40000000, 0x00400028}, "iaddsat.s32 t0.x___, t1.xxxx, void, -t2.xxxx\n"},
166*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01001008, 0x15400804, 0xd00100c0, 0x00000007}, "imod.u16 t0._y__, t0.yyyy, 1, void\n"},
167*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080103c, 0x00001804, 0x40000140, 0x00000000}, "imullo0.s32 t0.x___, t1.xxxx, t2.xxxx, void\n"},
168*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801000, 0x00001804, 0x40010140, 0x00000000}, "imulhi0.s32 t0.x___, t1.xxxx, t2.xxxx, void\n"},
169*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801004, 0x00201804, 0x40010040, 0x00000000}, "idiv0.s16 t0.x___, t1.xxxx, t0.xxxx, void\n"},
170*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080100e, 0x00001804, 0x40010140, 0x00000038}, "imadlosat0.s32 t0.x___, t1.xxxx, t2.xxxx, t3.xxxx\n"},
171*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0082101c, 0x00001804, 0x40010000, 0x00000008}, "or.s32 t2.x___, t1.xxxx, void, t0.xxxx\n"},
172*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0082101d, 0x00001804, 0x40010000, 0x00000008}, "and.s32 t2.x___, t1.xxxx, void, t0.xxxx\n"},
173*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080101e, 0x00001804, 0x40010000, 0x00000008}, "xor.s32 t0.x___, t1.xxxx, void, t0.xxxx\n"},
174*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080101f, 0x00000004, 0x40010000, 0x00000018}, "not.s32 t0.x___, void, void, t1.xxxx\n"},
175*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811020, 0x00001804, 0x40010140, 0x00000038}, "bit_extract.s32 t1.x___, t1.xxxx, t2.xxxx, t3.xxxx\n"},
176*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801021, 0x00000004, 0x00010000, 0x00000008}, "popcount t0.x___, void, void, t0.xxxx\n"},
177*61046927SAndroid Build Coastguard Worker disasm_state{ {0x02000016, 0x00200000, 0x80010000, 0x003fc018}, "movai.u32.pack void, void, void, t1.wwww\n", FLAG_FAILING_ASM},
178*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801017, 0x00000004, 0x40010000, 0x00000018}, "iabs.s32 t0.x___, void, void, t1.xxxx\n"},
179*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801018, 0x00000004, 0x40010000, 0x00000008}, "leadzero.s32 t0.x___, void, void, t0.xxxx\n"},
180*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801019, 0x15400804, 0x40010000, 0x74000028}, "lshift.s32 t0.x___, t0.yyyy, void, 2\n"},
181*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080101a, 0x00001804, 0x40010000, 0x78000018}, "rshift.s32 t0.x___, t1.xxxx, void, 1\n", FLAG_FAILING_ASM},
182*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080101b, 0x00001804, 0x40010000, 0x00000008}, "rotate.s32 t0.x___, t1.xxxx, void, t0.xxxx\n"},
183*61046927SAndroid Build Coastguard Worker disasm_state{ {0x03001024, 0x00000005, 0x04098040, 0x0015400f}, "div.rtz t0.zy, void, 4.500000, t0.yyyy\n"},
184*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01061025, 0x2aa00804, 0xa0010050, 0x7800001f}, "atomic_add.u32 t6._y__, u0.zzzz, 0, 1\n", FLAG_FAILING_ASM},
185*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801025, 0x2a800884, 0x50010050, 0x0000000f}, "atomic_add.skpHp.s32 t0.x___, u0.zzzz, 0, t0.xxxx\n"},
186*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00821026, 0x2a800884, 0x50010050, 0x0000001f}, "atomic_xchg.skpHp.s32 t2.x___, u0.zzzz, 0, t1.xxxx\n"},
187*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801027, 0x2a800884, 0x50010050, 0x0015000f}, "atomic_cmp_xchg.skpHp.s32 t0.x___, u0.zzzz, 0, t0.xyyy\n"},
188*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00821028, 0x2a800884, 0x50010050, 0x0000001f}, "atomic_min.skpHp.s32 t2.x___, u0.zzzz, 0, t1.xxxx\n"},
189*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00821029, 0x2a800884, 0x50010050, 0x0000000f}, "atomic_max.skpHp.s32 t2.x___, u0.zzzz, 0, t0.xxxx\n"},
190*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080102a, 0x2a800884, 0x50010050, 0x0000000f}, "atomic_or.skpHp.s32 t0.x___, u0.zzzz, 0, t0.xxxx\n"},
191*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0082102b, 0x2a800884, 0x50010050, 0x0000001f}, "atomic_and.skpHp.s32 t2.x___, u0.zzzz, 0, t1.xxxx\n"},
192*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080102c, 0x2a800884, 0x50010050, 0x0000001f}, "atomic_xor.skpHp.s32 t0.x___, u0.zzzz, 0, t1.xxxx\n"},
193*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0081102d, 0x00001804, 0x40010000, 0x00000000}, "bit_rev.s32 t1.x___, t1.xxxx, void, void\n"},
194*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811033, 0x04402804, 0x00ef00c0, 0x00000000}, "dp2 t1.x___, t2.yxyx, t1.wywy, void\n"},
195*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811034, 0x15c01804, 0x00010000, 0x00000000}, "norm_dp2 t1.x___, t1.wyyy, void, void\n"},
196*61046927SAndroid Build Coastguard Worker disasm_state{ {0x04011035, 0x14801804, 0x00010000, 0x00000000}, "norm_dp3 t1.___w, t1.zxyy, void, void\n"},
197*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00821036, 0x0e401804, 0x00010000, 0x00000000}, "norm_dp4 t2.x___, t1.yzwx, void, void\n"},
198*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0381103f, 0x29201804, 0x80010000, 0x780000b8}, "bit_findlsb.u32 t1.xyz_, t1.xyzz, void, void\n"},
199*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0081103f, 0x00001804, 0x40010000, 0x780000c8}, "bit_findmsb.s32 t1.x___, t1.xxxx, void, void\n"}
200*61046927SAndroid Build Coastguard Worker )
201*61046927SAndroid Build Coastguard Worker );
202*61046927SAndroid Build Coastguard Worker // clang-format on
203*61046927SAndroid Build Coastguard Worker
204*61046927SAndroid Build Coastguard Worker // clang-format off
205*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(Branch, DisasmTest,
206*61046927SAndroid Build Coastguard Worker testing::Values(
207*61046927SAndroid Build Coastguard Worker // taken from deqp2 run on GC2000
208*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000016, 0x00000000, 0x00000000, 0x00001080}, "branch void, void, void, 33\n"},
209*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000056, 0x00000800, 0x000000d0, 0x00000280}, "branch.gt void, u0.xxxx, t1.xxxx, 5\n"},
210*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000056, 0x00000800, 0x000000d0, 0x00000280}, "branch.gt void, u0.xxxx, t1.xxxx, 5\n"},
211*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000096, 0x15402800, 0x00000040, 0x00000082}, "branch.lt void, t2.yyyy, u0.xxxx, 1\n"},
212*61046927SAndroid Build Coastguard Worker disasm_state{ {0x000000d6, 0x00001800, 0x01540250, 0x00000980}, "branch.ge void, u1.xxxx, t4.zzzz, 19\n"},
213*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000116, 0x3fc01800, 0x000000c0, 0x00000482}, "branch.le void, t1.wwww, u1.xxxx, 9\n"},
214*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000156, 0x39001800, 0x000002c0, 0x00001282}, "branch.eq void, t1.xyzw, u5.xxxx, 37\n"},
215*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000196, 0x15401800, 0x00aa0040, 0x00000382}, "branch.ne void, t1.yyyy, u0.yyyy, 7\n"}
216*61046927SAndroid Build Coastguard Worker )
217*61046927SAndroid Build Coastguard Worker );
218*61046927SAndroid Build Coastguard Worker // clang-format on
219*61046927SAndroid Build Coastguard Worker
220*61046927SAndroid Build Coastguard Worker // clang-format off
221*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(Abs, DisasmTest,
222*61046927SAndroid Build Coastguard Worker testing::Values(
223*61046927SAndroid Build Coastguard Worker // taken from deqp2 run on GC2000
224*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811131, 0x80001800, 0x00aa0040, 0x202a800a}, "cmp.le.pack t1.x___, |t1.xxxx|, u0.yyyy, u0.zzzz\n"},
225*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0783108f, 0x39002800, 0x05c800c0, 0x00390028}, "select.lt.pack t3, t2.xyzw, |t1.xyzw|, t2.xyzw\n"},
226*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0383108f, 0xa9001800, 0x05480140, 0x00a90018}, "select.lt.pack t3.xyz_, |t1.xyzz|, |t2.xyzz|, |t1.xyzz|\n"}
227*61046927SAndroid Build Coastguard Worker )
228*61046927SAndroid Build Coastguard Worker );
229*61046927SAndroid Build Coastguard Worker // clang-format on
230*61046927SAndroid Build Coastguard Worker
231*61046927SAndroid Build Coastguard Worker // clang-format off
232*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(Minus, DisasmTest,
233*61046927SAndroid Build Coastguard Worker testing::Values(
234*61046927SAndroid Build Coastguard Worker // taken from deqp2 run on GC2000
235*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01021001, 0x3fc00800, 0x00000010, 0x00554018}, "add.pack t2._y__, u0.wwww, void, -t1.yyyy\n"},
236*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00821001, 0x40001800, 0x00000000, 0x00554018}, "add.pack t2.x___, -t1.xxxx, void, -t1.yyyy\n"}
237*61046927SAndroid Build Coastguard Worker )
238*61046927SAndroid Build Coastguard Worker );
239*61046927SAndroid Build Coastguard Worker // clang-format on
240*61046927SAndroid Build Coastguard Worker
241*61046927SAndroid Build Coastguard Worker // clang-format off
242*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AddressRegister, DisasmTest,
243*61046927SAndroid Build Coastguard Worker testing::Values(
244*61046927SAndroid Build Coastguard Worker // taken from deqp2 run on GC2000
245*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00823009, 0x00000000, 0x00000000, 0x00000018}, "mov.pack t2[a.x].x___, void, void, t1.xxxx\n"},
246*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00825009, 0x00000000, 0x00000000, 0x00154028}, "mov.pack t2[a.y].x___, void, void, t2.yyyy\n"},
247*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00827009, 0x00000000, 0x00000000, 0x00000018}, "mov.pack t2[a.z].x___, void, void, t1.xxxx\n"},
248*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00829009, 0x00000000, 0x00000000, 0x00000018}, "mov.pack t2[a.w].x___, void, void, t1.xxxx\n"},
249*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801009, 0x00000000, 0x00000000, 0x02000028}, "mov.pack t0.x___, void, void, t2[a.x].xxxx\n"},
250*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01031009, 0x00000000, 0x00000000, 0x043fc018}, "mov.pack t3._y__, void, void, t1[a.y].wwww\n"},
251*61046927SAndroid Build Coastguard Worker disasm_state{ {0x02031009, 0x00000000, 0x00000000, 0x063fc018}, "mov.pack t3.__z_, void, void, t1[a.z].wwww\n"},
252*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01811001, 0x15001800, 0x00000000, 0x28150018}, "add.pack t1.xy__, t1.xyyy, void, u1[a.w].xyyy\n"},
253*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01011001, 0x00001800, 0x00000001, 0x04000018}, "add.pack t1._y__, t1[a.x].xxxx, void, t1[a.y].xxxx\n"}
254*61046927SAndroid Build Coastguard Worker )
255*61046927SAndroid Build Coastguard Worker );
256*61046927SAndroid Build Coastguard Worker // clang-format on
257*61046927SAndroid Build Coastguard Worker
258*61046927SAndroid Build Coastguard Worker // clang-format off
259*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(Threads, DisasmTest,
260*61046927SAndroid Build Coastguard Worker testing::Values(
261*61046927SAndroid Build Coastguard Worker // taken from deqp3 run on GC3000
262*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01011001, 0x00001804, 0x00000020, 0xa0402008}, "add.hp.t0 t1._y__, th1.xxxx, void, -u0.xxxx\n"},
263*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01021001, 0x00002804, 0x00000020, 0xa1400008}, "add.hp.t1 t2._y__, th2.xxxx, void, -u0.xxxx\n"},
264*61046927SAndroid Build Coastguard Worker
265*61046927SAndroid Build Coastguard Worker // full dual-16 shader from a deqp3 run on GC3000
266*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0101102e, 0x00201804, 0x80000020, 0x00002000}, "f2i.u32.t0 t1._y__, th1.xxxx, void, void\n", FLAG_DUAL_16},
267*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0101102e, 0x00202804, 0x80000020, 0x01000000}, "f2i.u32.t1 t1._y__, th2.xxxx, void, void\n", FLAG_DUAL_16},
268*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811171, 0x15601804, 0x80000040, 0x76fffffa}, "cmp.eq.u32.t0 t1.x___, t1.yyyy, u0.xxxx, -1\n", FLAG_DUAL_16},
269*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811171, 0x15601804, 0x80000040, 0x77ffdffa}, "cmp.eq.u32.t1 t1.x___, t1.yyyy, u0.xxxx, -1\n", FLAG_DUAL_16},
270*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0081158f, 0x00201804, 0x700000c0, 0x7c00000f}, "select.selmsb.s16 t1.x___, t1.xxxx, 0.000000, 0.000000\n", FLAG_DUAL_16 | FLAG_FAILING_ASM},
271*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0381102d, 0x00201804, 0x40000000, 0x00000000}, "i2f.s16 t1.xyz_, t1.xxxx, void, void\n", FLAG_DUAL_16},
272*61046927SAndroid Build Coastguard Worker disasm_state{ {0x04011009, 0x00000004, 0x00000000, 0x20154008}, "mov t1.___w, void, void, u0.yyyy\n", FLAG_DUAL_16}
273*61046927SAndroid Build Coastguard Worker )
274*61046927SAndroid Build Coastguard Worker );
275*61046927SAndroid Build Coastguard Worker // clang-format on
276*61046927SAndroid Build Coastguard Worker
277*61046927SAndroid Build Coastguard Worker // clang-format off
278*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(ImmediateValues, DisasmTest,
279*61046927SAndroid Build Coastguard Worker testing::Values(
280*61046927SAndroid Build Coastguard Worker // taken from deqp3 run on GC3000
281*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801001, 0x7e000805, 0x00000038, 0x00800008}, "add.rtz t0.x___, 0.500000, void, |t0.xxxx|\n"}, /* type: 0 */
282*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811131, 0x95401804, 0x00aa0060, 0x76fffffa}, "cmp.le.t0 t1.x___, |th1.yyyy|, u0.yyyy, -1\n"}, /* type: 1 */
283*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0080101a, 0x00001804, 0x40010000, 0x78000018}, "rshift.s32 t0.x___, t1.xxxx, void, 1\n", FLAG_FAILING_ASM}, /* type: 2*/
284*61046927SAndroid Build Coastguard Worker disasm_state{ {0x020211b1, 0x00001804, 0x01fe0040, 0x7c1fdffa}, "cmp.ne t2.__z_, t1.xxxx, u0.wwww, -nan\n", FLAG_FAILING_ASM} /* type: 3 */
285*61046927SAndroid Build Coastguard Worker )
286*61046927SAndroid Build Coastguard Worker );
287*61046927SAndroid Build Coastguard Worker // clang-format on
288*61046927SAndroid Build Coastguard Worker
289*61046927SAndroid Build Coastguard Worker // clang-format off
290*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(LoadStore, DisasmTest,
291*61046927SAndroid Build Coastguard Worker testing::Values(
292*61046927SAndroid Build Coastguard Worker // full opencl shader on GC3000
293*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801032, 0x00000c04, 0x10000050, 0x00000007}, "load.denorm t0.x___, u0.xxxx, 0, void\n"},
294*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811032, 0x15400c04, 0x10000050, 0x00000007}, "load.denorm t1.x___, u0.yyyy, 0, void\n"},
295*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801001, 0x00001804, 0x00000000, 0x00000008}, "add t0.x___, t1.xxxx, void, t0.xxxx\n"},
296*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00800033, 0x00000c84, 0x10000050, 0x0000000f}, "store.skpHp.denorm mem.x___, u0.xxxx, 0, t0.xxxx\n"}
297*61046927SAndroid Build Coastguard Worker )
298*61046927SAndroid Build Coastguard Worker );
299*61046927SAndroid Build Coastguard Worker // clang-format on
300*61046927SAndroid Build Coastguard Worker
301*61046927SAndroid Build Coastguard Worker // clang-format off
302*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(Rounding, DisasmTest,
303*61046927SAndroid Build Coastguard Worker testing::Values(
304*61046927SAndroid Build Coastguard Worker // taken from opencl shader on GC3000
305*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0081102f, 0x00000806, 0x40000000, 0x00000000}, "f2irnd.s32.rtne t1.x___, t0.xxxx, void, void\n"}
306*61046927SAndroid Build Coastguard Worker )
307*61046927SAndroid Build Coastguard Worker );
308*61046927SAndroid Build Coastguard Worker // clang-format on
309*61046927SAndroid Build Coastguard Worker
310*61046927SAndroid Build Coastguard Worker // clang-format off
311*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(CLRoundShader, DisasmTest,
312*61046927SAndroid Build Coastguard Worker testing::Values(
313*61046927SAndroid Build Coastguard Worker // taken from opencl shader on GC3000
314*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801032, 0x15400c04, 0x10000050, 0x00000007}, "load.denorm t0.x___, u0.yyyy, 0, void\n"},
315*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00811027, 0x00000004, 0x00000000, 0x00000008}, "sign t1.x___, void, void, t0.xxxx\n"},
316*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801001, 0x7e000805, 0x00000038, 0x00800008}, "add.rtz t0.x___, 0.500000, void, |t0.xxxx|\n"},
317*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801025, 0x00000004, 0x00000000, 0x00000008}, "floor t0.x___, void, void, t0.xxxx\n"},
318*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00801003, 0x00001805, 0x00000040, 0x00000000}, "mul.rtz t0.x___, t1.xxxx, t0.xxxx, void\n"}
319*61046927SAndroid Build Coastguard Worker )
320*61046927SAndroid Build Coastguard Worker );
321*61046927SAndroid Build Coastguard Worker // clang-format on
322*61046927SAndroid Build Coastguard Worker
323*61046927SAndroid Build Coastguard Worker // clang-format off
324*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(TFShader, DisasmTest,
325*61046927SAndroid Build Coastguard Worker testing::Values(
326*61046927SAndroid Build Coastguard Worker // taken from transform shader on GC2000
327*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0081102e, 0x00000800, 0x40000020, 0x00000000}, "f2i.s32.pack t1.x___, th0.xxxx, void, void\n"},
328*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07821009, 0x00000000, 0x00000000, 0x00390008}, "mov.pack t2, void, void, t0.xyzw\n"},
329*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01831009, 0x00000000, 0x00000000, 0x00150008}, "mov.pack t3.xy__, void, void, t0.xyyy\n"},
330*61046927SAndroid Build Coastguard Worker disasm_state{ {0x03841009, 0x00000000, 0x00000000, 0x00290008}, "mov.pack t4.xyz_, void, void, t0.xyzz\n"},
331*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0201102d, 0x00000800, 0x40000010, 0x00000000}, "i2f.s32.pack t1.__z_, u0.xxxx, void, void\n"},
332*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00000156, 0x2a801800, 0x01540040, 0x00000402}, "branch.eq void, t1.zzzz, u0.zzzz, 8\n"},
333*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0081100c, 0x3fc00800, 0x400100d0, 0x20154008}, "imadlo0.s32.pack t1.x___, u0.wwww, t1.xxxx, u0.yyyy\n"},
334*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07820033, 0x00001800, 0x01540040, 0x0039002a}, "store.pack mem, t1.xxxx, u0.zzzz, t2.xyzw\t; dontcare bits in store: 00000000000000000000000000020000\n", FLAG_FAILING_ASM}
335*61046927SAndroid Build Coastguard Worker )
336*61046927SAndroid Build Coastguard Worker );
337*61046927SAndroid Build Coastguard Worker // clang-format on
338*61046927SAndroid Build Coastguard Worker
339*61046927SAndroid Build Coastguard Worker // clang-format off
340*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(texldlpcf, DisasmTest,
341*61046927SAndroid Build Coastguard Worker testing::Values(
342*61046927SAndroid Build Coastguard Worker // taken from dEQP-GLES3.functional.shaders.texture_functions.texturelod.sampler2dshadow_vertex (GC7000)
343*61046927SAndroid Build Coastguard Worker disasm_state{ {0x04011809, 0x00000004, 0x00000000, 0x002a8018}, "mov.sat t1.___w, void, void, t1.zzzz\n"},
344*61046927SAndroid Build Coastguard Worker disasm_state{ {0x0081102f, 0x29001800, 0x00010140, 0x003fc018}, "texldlpcf t1.x___, tex0.xxxx, t1.xyzz, t2.xxxx, t1.wwww\n"},
345*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07011009, 0x00000004, 0x00000000, 0x20390018}, "mov t1._yzw, void, void, u1.xyzw\n"}
346*61046927SAndroid Build Coastguard Worker )
347*61046927SAndroid Build Coastguard Worker );
348*61046927SAndroid Build Coastguard Worker // clang-format on
349*61046927SAndroid Build Coastguard Worker
350*61046927SAndroid Build Coastguard Worker // clang-format off
351*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(LoadStoreVariants, DisasmTest,
352*61046927SAndroid Build Coastguard Worker testing::Values(
353*61046927SAndroid Build Coastguard Worker // seen on GC7000
354*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01001032, 0x15400c14, 0x00000050, 0x00000000}, "load.denorm.ls2 t0._y__, u0.yyyy, t0.xxxx, void\n"},
355*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01001032, 0x15400d14, 0x00000040, 0x00000000}, "load.denorm.local.ls2 t0._y__, t0.yyyy, t0.xxxx, void\n"},
356*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00800033, 0x00000c14, 0x00000050, 0x00154008}, "store.denorm.ls2 mem.x___, u0.xxxx, t0.xxxx, t0.yyyy\n"},
357*61046927SAndroid Build Coastguard Worker disasm_state{ {0x00861033, 0x15400d04, 0x100efe40, 0x7085860f}, "store.denorm.local mem.x___, t0.yyyy, 4092, 99.000000\t; dontcare bits in store: 00000000000000000000000000061000\n", FLAG_FAILING_ASM},
358*61046927SAndroid Build Coastguard Worker disasm_state{ {0x07800033, 0x00200c34, 0x80000050, 0x00390018}, "store.denorm.u32.ls6 mem, u0.xxxx, t0.xxxx, t1.xyzw\n"}
359*61046927SAndroid Build Coastguard Worker )
360*61046927SAndroid Build Coastguard Worker );
361*61046927SAndroid Build Coastguard Worker // clang-format on
362*61046927SAndroid Build Coastguard Worker
363*61046927SAndroid Build Coastguard Worker // clang-format off
364*61046927SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(ConvVariants, DisasmTest,
365*61046927SAndroid Build Coastguard Worker testing::Values(
366*61046927SAndroid Build Coastguard Worker // seen on GC7000
367*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01001032, 0x15400800, 0x100100c0, 0x00000007}, "conv.pack t0._y__, t0.yyyy, 1, void\n"},
368*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01001032, 0x15600800, 0x10010040, 0x00000007}, "conv.f16.pack t0._y__, t0.yyyy, 0, void\n"},
369*61046927SAndroid Build Coastguard Worker disasm_state{ {0x01001832, 0x15400800, 0x100100c0, 0x00000007}, "conv.sat.pack t0._y__, t0.yyyy, 1, void\n"}
370*61046927SAndroid Build Coastguard Worker )
371*61046927SAndroid Build Coastguard Worker );
372*61046927SAndroid Build Coastguard Worker // clang-format on
373