source: CLRX/CLRadeonExtender/trunk/tests/amdasm/GCNAsmOpc15.cpp @ 4811

Last change on this file since 4811 was 4811, checked in by matszpk, 2 months ago

CLRadeonExtender: GCNAsm: Add VOP DPP8 testcases.

File size: 76.5 KB
Line 
1/*
2 *  CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3 *  Copyright (C) 2014-2018 Mateusz Szpakowski
4 *
5 *  This library is free software; you can redistribute it and/or
6 *  modify it under the terms of the GNU Lesser General Public
7 *  License as published by the Free Software Foundation; either
8 *  version 2.1 of the License, or (at your option) any later version.
9 *
10 *  This library is distributed in the hope that it will be useful,
11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 *  Lesser General Public License for more details.
14 *
15 *  You should have received a copy of the GNU Lesser General Public
16 *  License along with this library; if not, write to the Free Software
17 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18 */
19
20#include <CLRX/Config.h>
21#include "GCNAsmOpc.h"
22
23const GCNAsmOpcodeCase encGCN15OpcodeCases[] =
24{
25    { "    s_add_u32  flat_scratch_lo, s4, s61", 0, 0, false, false,
26        "test.s:1:16: Error: Expected 1 scalar register\n" },
27    { "    s_add_u32  flat_scratch_hi, s4, s61", 0, 0, false, false,
28        "test.s:1:16: Error: Expected 1 scalar register\n" },
29    { "    s_add_u32  xnack_mask_lo, s4, s61", 0, 0, false, false,
30        "test.s:1:16: Error: Expected 1 scalar register\n" },
31    { "    s_add_u32  xnack_mask_hi, s4, s61", 0, 0, false, false,
32        "test.s:1:16: Error: Expected 1 scalar register\n" },
33    { "        s_add_u32       s21, s4, s61\n", 0x80153d04U, 0, false, true, "" },
34    { "        s_add_u32       s21, s4, s100\n", 0x80156404U, 0, false, true, "" },
35    { "        s_add_u32       s21, s4, s102\n", 0x80156604U, 0, false, true, "" },
36    { "        s_add_u32       s21, s4, s103\n", 0x80156704U, 0, false, true, "" },
37    { "        s_add_u32       s21, s4, s104\n", 0x80156804U, 0, false, true, "" },
38    { "        s_add_u32       s21, s4, s105\n", 0x80156904U, 0, false, true, "" },
39    { "xrv = %s105; s_add_u32 s21, s4, xrv\n", 0x80156904U, 0, false, true, "" },
40    { "        s_add_u32       s21, s4, vcc_lo\n", 0x80156a04U, 0, false, true, "" },
41    { "        s_add_u32       s21, s4, vcc_hi\n", 0x80156b04U, 0, false, true, "" },
42    { "    s_add_u32  s21, 0.15915494, s61", 0x80153df8U, 0, false, true, "" },
43    { "vval=%0.15915494; s_add_u32  s21, vval, s61",
44        0x80153df8U, 0, false, true, "" },
45    { "        s_add_u32       s21, s4, null\n", 0x80157d04U, 0, false, true, "" },
46    { "        s_add_u32       s21, null, s61\n", 0x80153d7dU, 0, false, true, "" },
47    { "        s_add_u32       null, s4, s61\n", 0x807d3d04U, 0, false, true, "" },
48    { "    s_add_u32  vcc[1:1], s4, s61", 0x806b3d04U, 0, false, true, "" },
49    { "    s_add_u32  vcc[1], s4, s61", 0x806b3d04U, 0, false, true, "" },
50    { "    s_add_u32  vcc[0:0], s4, s61", 0x806a3d04U, 0, false, true, "" },
51    { "    s_add_u32  vcc[0], s4, s61", 0x806a3d04U, 0, false, true, "" },
52    { "    s_add_u32  vcc_lo, s4, s61", 0x806a3d04U, 0, false, true, "" },
53    { "    s_add_u32  vcc_hi, s4, s61", 0x806b3d04U, 0, false, true, "" },
54    { "    s_add_u32  ttmp0, s4, s61", 0x806c3d04U, 0, false, true, "" },
55    { "    s_add_u32  ttmp1, s4, s61", 0x806d3d04U, 0, false, true, "" },
56    { "    s_add_u32  ttmp[2:2], s4, s61", 0x806e3d04U, 0, false, true, "" },
57    { "    s_add_u32  ttmp12, s4, s61", 0x80783d04U, 0, false, true, "" },
58    { "    s_add_u32  ttmp15, s4, s61", 0x807b3d04U, 0, false, true, "" },
59    { "s_add_u32 ttmp16, s4, s61", 0x807b3d04U, 0, false, false,
60        "test.s:1:11: Error: TTMPRegister number out of range (0-15)\n" },
61    { "    s_add_u32  tba_lo, s4, s61", 0, 0, false, false,
62        "test.s:1:16: Error: Expected 1 scalar register\n" },
63    { "    s_add_u32  tba_hi, s4, s61", 0, 0, false, false,
64        "test.s:1:16: Error: Expected 1 scalar register\n" },
65    { "    s_add_u32  tma_lo, s4, s61", 0, 0, false, false,
66        "test.s:1:16: Error: Expected 1 scalar register\n" },
67    { "    s_add_u32  tma_hi, s4, s61", 0, 0, false, false,
68        "test.s:1:16: Error: Expected 1 scalar register\n" },
69    { "s_add_u32 s21, shared_base, s61\n", 0x80153debU, 0, false, true, "" },
70    { "s_add_u32 s21, src_shared_base, s61\n", 0x80153debU, 0, false, true, "" },
71    { "s_add_u32 s21, shared_limit, s61\n", 0x80153decU, 0, false, true, "" },
72    { "s_add_u32 s21, src_shared_limit, s61\n", 0x80153decU, 0, false, true, "" },
73    { "s_add_u32 s21, private_base, s61\n", 0x80153dedU, 0, false, true, "" },
74    { "s_add_u32 s21, src_private_base, s61\n", 0x80153dedU, 0, false, true, "" },
75    { "s_add_u32 s21, private_limit, s61\n", 0x80153deeU, 0, false, true, "" },
76    { "s_add_u32 s21, src_private_limit, s61\n", 0x80153deeU, 0, false, true, "" },
77    { "s_add_u32 s21, pops_exiting_wave_id, s61\n", 0x80153defU, 0, false, true, "" },
78    { "s_add_u32 s21, src_pops_exiting_wave_id, s61\n", 0x80153defU, 0, false, true, "" },
79    { "s_add_u32 s21, execz, s61\n", 0x80153dfcU, 0, false, true, "" },
80    { "s_add_u32 s21, src_execz, s61\n", 0x80153dfcU, 0, false, true, "" },
81    { "s_add_u32 s21, vccz, s61\n", 0x80153dfbU, 0, false, true, "" },
82    { "s_add_u32 s21, src_vccz, s61\n", 0x80153dfbU, 0, false, true, "" },
83    { "s_add_u32 s21, scc, s61\n", 0x80153dfdU, 0, false, true, "" },
84    { "s_add_u32 s21, src_scc, s61\n", 0x80153dfdU, 0, false, true, "" },
85    /* register's symbols */
86    { "zx=%s[20:23]; ss=%s4; b=%s[57:67];s_add_u32  zx[1], ss, b[4]",
87            0x80153d04U, 0, false, true, "" },
88    { "xv=2; zx=%s[xv+18:xv+19]; ss=%s[xv+2]; b=%s[xv+55:xv+65];"
89        "s_add_u32  zx[1], ss, b[4]", 0x80153d04U, 0, false, true, "" },
90    { "zx=%s[20:23]; ss=%execz; b=%s[57:67];s_add_u32  zx[1], ss, b[4]",
91            0x80153dfcU, 0, false, true, "" },
92    /* literals */
93    { "    s_add_u32  s21, s4, 0x2a", 0x8015aa04U, 0, false, true, "" },
94    { "    s_add_u32  s21, s4, -7", 0x8015c704U, 0, false, true, "" },
95    { "    s_add_u32  s21, s4, lit(-7)", 0x8015ff04U, 0xfffffff9, true, true, "" },
96    { "    s_add_u32_e64  s21, s4, -7", 0x8015ff04U, 0xfffffff9, true, true, "" },
97    { "    s_add_u32  s21, s4, lit(0)", 0x8015ff04U, 0x0, true, true, "" },
98    { "    s_add_u32  s21, s4, lit(32)", 0x8015ff04U, 0x20, true, true, "" },
99    { "    s_add_u32_e64 s21, s4, 32", 0x8015ff04U, 0x20, true, true, "" },
100    { "    s_add_u32_e64 s21, 32, s4", 0x801504ffU, 0x20, true, true, "" },
101    { "    s_add_u32  s21, s4, lit  (  32  )  ", 0x8015ff04U, 0x20, true, true, "" },
102    { "    s_add_u32  s21, s4, LiT  (  32  )  ", 0x8015ff04U, 0x20, true, true, "" },
103    { "    s_add_u32  s21, s4, lit(0.0)", 0x8015ff04U, 0x0, true, true, "" },
104    { "    s_add_u32  s21, s4, lit(-.5)", 0x8015ff04U, 0xbf000000, true, true, "" },
105    { "    s_add_u32_e64  s21, s4, -.5", 0x8015ff04U, 0xbf000000, true, true, "" },
106    { "    s_add_u32  s21, s4, lit(2.0)", 0x8015ff04U, 0x40000000, true, true, "" },
107    { "    s_add_u32  s21, s4, lit  ( 2.0 )", 0x8015ff04U, 0x40000000, true, true, "" },
108    { "    s_add_u32_e64  s21, s4, 2.0", 0x8015ff04U, 0x40000000, true, true, "" },
109    { "    s_add_u32  s21, s4, 1.", 0x8015f204U, 0, false, true, "" },
110    { "    s_add_u32  s21, s4, -1.", 0x8015f304U, 0, false, true, "" },
111    { "    s_add_u32  s21, s4, 2.", 0x8015f404U, 0, false, true, "" },
112    { "    s_add_u32  s21, s4, -2.", 0x8015f504U, 0, false, true, "" },
113    { "    s_add_u32  s21, s4, 4.", 0x8015f604U, 0, false, true, "" },
114    { "    s_add_u32  s21, s4, -4.", 0x8015f704U, 0, false, true, "" },
115    { "    s_add_u32  s21, s4, 1234", 0x8015ff04U, 1234, true, true, "" },
116    { "    s_add_u32  s21, 1234, s4", 0x801504ffU, 1234, true, true, "" },
117    { "    s_add_u32  s21, s4, -4.5", 0x8015ff04U, 0xc0900000U, true, true, "" },
118    { "    s_add_u32  s21, s4, -4.5s", 0x8015ff04U, 0xc0900000U, true, true, "" },
119    { "    s_add_u32  s21, s4, -4.5h", 0x8015ff04U, 0xc480U, true, true, "" },
120    { "    s_add_u32  s21, s4, 3e-7", 0x8015ff04U, 0x34a10fb0U, true, true, "" },
121    /* 64-bit registers and literals */
122    { "    s_xor_b64 s[22:23], s[4:5], s[62:63]\n", 0x89963e04U, 0, false, true, "" },
123    { "s1=22; s2=4;s3=62;s_xor_b64 s[s1:s1+1], s[s2:s2+1], s[s3:s3+1]\n",
124        0x89963e04U, 0, false, true, "" },
125    { "    s_xor_b64 vcc, s[4:5], s[62:63]\n", 0x89ea3e04U, 0, false, true, "" },
126    { "    s_xor_b64 vcc[0:1], s[4:5], s[62:63]\n", 0x89ea3e04U, 0, false, true, "" },
127    { "    s_xor_b64 s[22:23], 1.0, s[62:63]\n", 0x89963ef2U, 0, false, true, "" },
128    { "    s_xor_b64 s[22:23], vccz, s[62:63]\n", 0x89963efbU, 0, false, true, "" },
129    { "    s_xor_b64 s[22:23], execz, s[62:63]\n", 0x89963efcU, 0, false, true, "" },
130    { "    s_xor_b64 s[22:23], scc, s[62:63]\n", 0x89963efdU, 0, false, true, "" },
131    /* SOP2 encodings */
132    { "    s_sub_u32  s21, s4, s61", 0x80953d04U, 0, false, true, "" },
133    { "    s_sub_u32_e32  s21, s4, s61", 0x80953d04U, 0, false, true, "" },
134    { "    s_add_i32  s21, s4, s61", 0x81153d04U, 0, false, true, "" },
135    { "    s_sub_i32  s21, s4, s61", 0x81953d04U, 0, false, true, "" },
136    { "    s_addc_u32  s21, s4, s61", 0x82153d04U, 0, false, true, "" },
137    { "    s_subb_u32  s21, s4, s61", 0x82953d04U, 0, false, true, "" },
138    { "    s_min_i32  s21, s4, s61", 0x83153d04U, 0, false, true, "" },
139    { "    s_min_u32  s21, s4, s61", 0x83953d04U, 0, false, true, "" },
140    { "    s_max_i32  s21, s4, s61", 0x84153d04U, 0, false, true, "" },
141    { "    s_max_u32  s21, s4, s61", 0x84953d04U, 0, false, true, "" },
142    { "    s_cselect_b32  s21, s4, s61", 0x85153d04U, 0, false, true, "" },
143    { "    s_cselect_b64  s[20:21], s[4:5], s[62:63]", 0x85943e04U, 0, false, true, "" },
144    { "    s_and_b32  s21, s4, s61", 0x87153d04U, 0, false, true, "" },
145    { "    s_and_b64  s[20:21], s[4:5], s[62:63]", 0x87943e04U, 0, false, true, "" },
146    { "    s_or_b32  s21, s4, s61", 0x88153d04U, 0, false, true, "" },
147    { "    s_or_b64  s[20:21], s[4:5], s[62:63]", 0x88943e04U, 0, false, true, "" },
148    { "    s_xor_b32  s21, s4, s61", 0x89153d04U, 0, false, true, "" },
149    { "    s_xor_b64  s[20:21], s[4:5], s[62:63]", 0x89943e04U, 0, false, true, "" },
150    { "    s_andn2_b32  s21, s4, s61", 0x8a153d04U, 0, false, true, "" },
151    { "    s_andn2_b64  s[20:21], s[4:5], s[62:63]", 0x8a943e04U, 0, false, true, "" },
152    { "    s_orn2_b32  s21, s4, s61", 0x8b153d04U, 0, false, true, "" },
153    { "    s_orn2_b64  s[20:21], s[4:5], s[62:63]", 0x8b943e04U, 0, false, true, "" },
154    { "    s_nand_b32  s21, s4, s61", 0x8c153d04U, 0, false, true, "" },
155    { "    s_nand_b64  s[20:21], s[4:5], s[62:63]", 0x8c943e04U, 0, false, true, "" },
156    { "    s_nor_b32  s21, s4, s61", 0x8d153d04U, 0, false, true, "" },
157    { "    s_nor_b64  s[20:21], s[4:5], s[62:63]", 0x8d943e04U, 0, false, true, "" },
158    { "    s_xnor_b32  s21, s4, s61", 0x8e153d04U, 0, false, true, "" },
159    { "    s_xnor_b64  s[20:21], s[4:5], s[62:63]", 0x8e943e04U, 0, false, true, "" },
160    { "    s_lshl_b32  s21, s4, s61", 0x8f153d04U, 0, false, true, "" },
161    { "    s_lshl_b64  s[20:21], s[4:5], s61", 0x8f943d04U, 0, false, true, "" },
162    { "    s_lshr_b32  s21, s4, s61", 0x90153d04U, 0, false, true, "" },
163    { "    s_lshr_b64  s[20:21], s[4:5], s61", 0x90943d04U, 0, false, true, "" },
164    { "    s_ashr_i32  s21, s4, s61", 0x91153d04U, 0, false, true, "" },
165    { "    s_ashr_i64  s[20:21], s[4:5], s61", 0x91943d04U, 0, false, true, "" },
166    { "    s_bfm_b32  s21, s4, s61", 0x92153d04U, 0, false, true, "" },
167    { "    s_bfm_b64  s[20:21], s4, s62", 0x92943e04U, 0, false, true, "" },
168    { "    s_mul_i32  s21, s4, s61", 0x93153d04U, 0, false, true, "" },
169    { "    s_bfe_u32  s21, s4, s61", 0x93953d04U, 0, false, true, "" },
170    { "    s_bfe_i32  s21, s4, s61", 0x94153d04U, 0, false, true, "" },
171    { "    s_bfe_u64  s[20:21], s[4:5], s61", 0x94943d04U, 0, false, true, "" },
172    { "    s_bfe_i64  s[20:21], s[4:5], s61", 0x95143d04U, 0, false, true, "" },
173    { "    s_cbranch_g_fork  s[4:5], s[62:63]", 0, 0, false, false,
174        "test.s:1:5: Error: Unknown instruction\n" },
175    { "    s_absdiff_i32  s21, s4, s61", 0x96153d04U, 0, false, true, "" },
176    { "        s_lshl1_add_u32 s21, s4, s61\n", 0x97153d04U, 0, false, true, "" },
177    { "        s_lshl2_add_u32 s21, s4, s61\n", 0x97953d04U, 0, false, true, "" },
178    { "        s_lshl3_add_u32 s21, s4, s61\n", 0x98153d04U, 0, false, true, "" },
179    { "        s_lshl4_add_u32 s21, s4, s61\n", 0x98953d04U, 0, false, true, "" },
180    { "        s_pack_ll_b32_b16 s21, s4, s61\n", 0x99153d04U, 0, false, true, "" },
181    { "        s_pack_lh_b32_b16 s21, s4, s61\n", 0x99953d04U, 0, false, true, "" },
182    { "        s_pack_hh_b32_b16 s21, s4, s61\n", 0x9a153d04U, 0, false, true, "" },
183    { "        s_mul_hi_u32    s21, s4, s61\n", 0x9a953d04U, 0, false, true, "" },
184    { "        s_mul_hi_i32    s21, s4, s61\n", 0x9b153d04U, 0, false, true, "" },
185    /* SOP1 */
186    { "    s_mov_b32  s86, s20", 0xbed60314U, 0, false, true, "" },
187    { "    s_mov_b32_e64  s86, -4", 0xbed603ffU, 0xfffffffcU, true, true, "" },
188    { "    s_mov_b32  s86, 0xadbc", 0xbed603ff, 0xadbc, true, true, "" },
189    { "    s_mov_b32  s86, xx; xx=0xadbc", 0xbed603ff, 0xadbc, true, true, "" },
190    { "    s_mov_b64  s[86:87], s[20:21]", 0xbed60414U, 0, false, true, "" },
191    { "    s_cmov_b32  s86, s20", 0xbed60514U, 0, false, true, "" },
192    { "    s_cmov_b64  s[86:87], s[20:21]", 0xbed60614U, 0, false, true, "" },
193    { "    s_not_b32  s86, s20", 0xbed60714U, 0, false, true, "" },
194    { "    s_not_b64  s[86:87], s[20:21]", 0xbed60814U, 0, false, true, "" },
195    { "    s_wqm_b32  s86, s20", 0xbed60914U, 0, false, true, "" },
196    { "    s_wqm_b64  s[86:87], s[20:21]", 0xbed60a14U, 0, false, true, "" },
197    { "    s_brev_b32  s86, s20", 0xbed60b14U, 0, false, true, "" },
198    { "    s_brev_b64  s[86:87], s[20:21]", 0xbed60c14U, 0, false, true, "" },
199    { "    s_bcnt0_i32_b32  s86, s20", 0xbed60d14U, 0, false, true, "" },
200    { "    s_bcnt0_i32_b64  s86, s[20:21]", 0xbed60e14U, 0, false, true, "" },
201    { "    s_bcnt1_i32_b32  s86, s20", 0xbed60f14U, 0, false, true, "" },
202    { "    s_bcnt1_i32_b64  s86, s[20:21]", 0xbed61014U, 0, false, true, "" },
203    { "    s_ff0_i32_b32  s86, s20", 0xbed61114U, 0, false, true, "" },
204    { "    s_ff0_i32_b64  s86, s[20:21]", 0xbed61214U, 0, false, true, "" },
205    { "    s_ff1_i32_b32  s86, s20", 0xbed61314U, 0, false, true, "" },
206    { "    s_ff1_i32_b64  s86, s[20:21]", 0xbed61414U, 0, false, true, "" },
207    { "    s_flbit_i32_b32  s86, s20", 0xbed61514U, 0, false, true, "" },
208    { "    s_flbit_i32_b64  s86, s[20:21]", 0xbed61614U, 0, false, true, "" },
209    { "    s_flbit_i32  s86, s20", 0xbed61714U, 0, false, true, "" },
210    { "    s_flbit_i32_i64  s86, s[20:21]", 0xbed61814U, 0, false, true, "" },
211    { "    s_sext_i32_i8  s86, s20", 0xbed61914U, 0, false, true, "" },
212    { "    s_sext_i32_i16  s86, s20", 0xbed61a14U, 0, false, true, "" },
213    { "    s_bitset0_b32  s86, s20", 0xbed61b14U, 0, false, true, "" },
214    { "    s_bitset0_b64  s[86:87], s20", 0xbed61c14U, 0, false, true, "" },
215    { "    s_bitset1_b32  s86, s20", 0xbed61d14U, 0, false, true, "" },
216    { "    s_bitset1_b64  s[86:87], s20", 0xbed61e14U, 0, false, true, "" },
217    { "    s_getpc_b64  s[86:87]", 0xbed61f00U, 0, false, true, "" },
218    { "    s_setpc_b64  s[20:21]", 0xbe802014U, 0, false, true, "" },
219    { "    s_swappc_b64  s[86:87], s[20:21]", 0xbed62114U, 0, false, true, "" },
220    { "    s_rfe_b64  s[20:21]", 0xbe802214U, 0, false, true, "" },
221    { "    s_and_saveexec_b64 s[86:87], s[20:21]", 0xbed62414U, 0, false, true, "" },
222    { "    s_or_saveexec_b64 s[86:87], s[20:21]", 0xbed62514U, 0, false, true, "" },
223    { "    s_xor_saveexec_b64 s[86:87], s[20:21]", 0xbed62614U, 0, false, true, "" },
224    { "    s_andn2_saveexec_b64 s[86:87], s[20:21]", 0xbed62714U, 0, false, true, "" },
225    { "    s_orn2_saveexec_b64 s[86:87], s[20:21]", 0xbed62814U, 0, false, true, "" },
226    { "    s_nand_saveexec_b64 s[86:87], s[20:21]", 0xbed62914U, 0, false, true, "" },
227    { "    s_nor_saveexec_b64 s[86:87], s[20:21]", 0xbed62a14U, 0, false, true, "" },
228    { "    s_xnor_saveexec_b64 s[86:87], s[20:21]", 0xbed62b14U, 0, false, true, "" },
229    { "    s_quadmask_b32  s86, s20",  0xbed62c14U, 0, false, true, "" },
230    { "    s_quadmask_b64  s[86:87], s[20:21]",  0xbed62d14U, 0, false, true, "" },
231    { "    s_movrels_b32  s86, s20",  0xbed62e14U, 0, false, true, "" },
232    { "    s_movrels_b64  s[86:87], s[20:21]",  0xbed62f14U, 0, false, true, "" },
233    { "    s_movreld_b32  s86, s20",  0xbed63014U, 0, false, true, "" },
234    { "    s_movreld_b64  s[86:87], s[20:21]",  0xbed63114U, 0, false, true, "" },
235    { "    s_cbranch_join  s20", 0xbe803214U, 0, false, false,
236        "test.s:1:5: Error: Unknown instruction\n" },
237    { "    s_mov_regrd_b32 s86, s20", 0xbed63314U, 0, false, false,
238        "test.s:1:5: Error: Unknown instruction\n" },
239    { "    s_abs_i32  s86, s20", 0xbed63414U, 0, false, true, "" },
240    { "    s_mov_fed_b32  s86, s20", 0xbed63514U, 0, false, true, "" },
241    { "    s_andn1_saveexec_b64 s[86:87], s[20:21]", 0xbed63714U, 0, false, true, "" },
242    { "    s_orn1_saveexec_b64 s[86:87], s[20:21]", 0xbed63814U, 0, false, true, "" },
243    { "    s_andn1_wrexec_b64 s[86:87], s[20:21]", 0xbed63914U, 0, false, true, "" },
244    { "    s_andn2_wrexec_b64 s[86:87], s[20:21]", 0xbed63a14U, 0, false, true, "" },
245    { "s_bitreplicate_b64_b32 s[86:87], s20\n", 0xbed63b14U, 0, false, true, "" },
246    { "    s_and_saveexec_b32 s86, s20", 0xbed63c14U, 0, false, true, "" },
247    { "    s_or_saveexec_b32 s86, s20", 0xbed63d14U, 0, false, true, "" },
248    { "    s_xor_saveexec_b32 s86, s20", 0xbed63e14U, 0, false, true, "" },
249    { "    s_andn2_saveexec_b32 s86, s20", 0xbed63f14U, 0, false, true, "" },
250    { "    s_orn2_saveexec_b32 s86, s20", 0xbed64014U, 0, false, true, "" },
251    { "    s_nand_saveexec_b32 s86, s20", 0xbed64114U, 0, false, true, "" },
252    { "    s_nor_saveexec_b32 s86, s20", 0xbed64214U, 0, false, true, "" },
253    { "    s_xnor_saveexec_b32 s86, s20", 0xbed64314U, 0, false, true, "" },
254    { "    s_andn1_saveexec_b32 s86, s20", 0xbed64414U, 0, false, true, "" },
255    { "    s_orn1_saveexec_b32 s86, s20", 0xbed64514U, 0, false, true, "" },
256    { "    s_andn1_wrexec_b32 s86, s20", 0xbed64614U, 0, false, true, "" },
257    { "    s_andn2_wrexec_b32 s86, s20", 0xbed64714U, 0, false, true, "" },
258    { "    s_movrelsd_2_b32 s86, s20", 0xbed64914U, 0, false, true, "" },
259    /* SOPC */
260    { "    s_cmp_eq_i32  s29, s69", 0xbf00451dU, 0, false, true, "" },
261    { "    s_cmp_eq_i32_e64  s29, 51", 0xbf00ff1dU, 51, true, true, "" },
262    { "    s_cmp_eq_i32_e64  51, s69", 0xbf0045ffU, 51, true, true, "" },
263    { "    s_cmp_eq_i32  12222, s69", 0xbf0045ffU, 12222, true, true, "" },
264    { "    s_cmp_eq_i32  xx, s69; xx=12222", 0xbf0045ffU, 12222, true, true, "" },
265    { "    s_cmp_eq_i32  s29, 32545", 0xbf00ff1dU, 32545, true, true, "" },
266    { "    s_cmp_eq_i32  s29, xx; xx=32545", 0xbf00ff1dU, 32545, true, true, "" },
267    { "    s_cmp_lg_i32  s29, s69", 0xbf01451dU, 0, false, true, "" },
268    { "    s_cmp_gt_i32  s29, s69", 0xbf02451dU, 0, false, true, "" },
269    { "    s_cmp_ge_i32  s29, s69", 0xbf03451dU, 0, false, true, "" },
270    { "    s_cmp_lt_i32  s29, s69", 0xbf04451dU, 0, false, true, "" },
271    { "    s_cmp_le_i32  s29, s69", 0xbf05451dU, 0, false, true, "" },
272    { "    s_cmp_eq_u32  s29, s69", 0xbf06451dU, 0, false, true, "" },
273    { "    s_cmp_lg_u32  s29, s69", 0xbf07451dU, 0, false, true, "" },
274    { "    s_cmp_gt_u32  s29, s69", 0xbf08451dU, 0, false, true, "" },
275    { "    s_cmp_ge_u32  s29, s69", 0xbf09451dU, 0, false, true, "" },
276    { "    s_cmp_lt_u32  s29, s69", 0xbf0a451dU, 0, false, true, "" },
277    { "    s_cmp_le_u32  s29, s69", 0xbf0b451dU, 0, false, true, "" },
278    { "    s_bitcmp0_b32  s29, s69", 0xbf0c451dU, 0, false, true, "" },
279    { "    s_bitcmp1_b32  s29, s69", 0xbf0d451dU, 0, false, true, "" },
280    { "    s_bitcmp0_b64  s[28:29], s69", 0xbf0e451cU, 0, false, true, "" },
281    { "    s_bitcmp1_b64  s[28:29], s69", 0xbf0f451cU, 0, false, true, "" },
282    { "    s_setvskip  s29, s69", 0xbf10451dU, 0, false, false,
283        "test.s:1:5: Error: Unknown instruction\n" },
284    { "    s_cmp_eq_u64  s[28:29], s[68:69]", 0xbf12441cU, 0, false, true, "" },
285    { "    s_cmp_lg_u64  s[28:29], s[68:69]", 0xbf13441cU, 0, false, true, "" },
286    { "    s_cmp_ne_u64  s[28:29], s[68:69]", 0xbf13441cU, 0, false, true, "" },
287    /* SOPK */
288    { "    s_movk_i32  s43, 0xd3b9", 0xb02bd3b9U, 0, false, true, "" },
289    { "xc = 0xd4ba\n    s_movk_i32  s43, xc", 0xb02bd4baU, 0, false, true, "" },
290    { "    s_movk_i32  s43, xc; xc = 0xd4ba", 0xb02bd4baU, 0, false, true, "" },
291    { "xc = 0x11d4ba\n    s_movk_i32  s43, xc", 0xb02bd4baU, 0, false, true,
292        "test.s:2:22: Warning: Value 0x11d4ba truncated to 0xd4ba\n" },
293    { "    s_movk_i32  s43, xc; xc = 0x22d4ba", 0xb02bd4baU, 0, false, true,
294        "test.s:1:22: Warning: Value 0x22d4ba truncated to 0xd4ba\n" },
295    { "    s_version 4331", 0xb08010ebU, 0, false, true, "" },
296    { "    s_cmovk_i32  s43, 0xd3b9", 0xb12bd3b9U, 0, false, true, "" },
297    { "    s_cmpk_eq_i32  s43, 0xd3b9", 0xb1abd3b9U, 0, false, true, "" },
298    { "    s_cmpk_lg_i32  s43, 0xd3b9", 0xb22bd3b9U, 0, false, true, "" },
299    { "    s_cmpk_gt_i32  s43, 0xd3b9", 0xb2abd3b9U, 0, false, true, "" },
300    { "    s_cmpk_ge_i32  s43, 0xd3b9", 0xb32bd3b9U, 0, false, true, "" },
301    { "    s_cmpk_lt_i32  s43, 0xd3b9", 0xb3abd3b9U, 0, false, true, "" },
302    { "    s_cmpk_le_i32  s43, 0xd3b9", 0xb42bd3b9U, 0, false, true, "" },
303    { "    s_cmpk_eq_u32  s43, 0xd3b9", 0xb4abd3b9U, 0, false, true, "" },
304    { "    s_cmpk_lg_u32  s43, 0xd3b9", 0xb52bd3b9U, 0, false, true, "" },
305    { "    s_cmpk_gt_u32  s43, 0xd3b9", 0xb5abd3b9U, 0, false, true, "" },
306    { "    s_cmpk_ge_u32  s43, 0xd3b9", 0xb62bd3b9U, 0, false, true, "" },
307    { "    s_cmpk_lt_u32  s43, 0xd3b9", 0xb6abd3b9U, 0, false, true, "" },
308    { "    s_cmpk_le_u32  s43, 0xd3b9", 0xb72bd3b9U, 0, false, true, "" },
309    { "    s_addk_i32  s43, 0xd3b9", 0xb7abd3b9U, 0, false, true, "" },
310    { "    s_mulk_i32  s43, 0xd3b9", 0xb82bd3b9U, 0, false, true, "" },
311    { "    s_cbranch_i_fork s[44:45], xxxx-8\nxxxx:\n", 0, 0, false, false,
312        "test.s:1:5: Error: Unknown instruction\n" },
313    { "    s_getreg_b32    s43, hwreg(mode, 0, 1)", 0xb92b0001U, 0, false, true, "" },
314    { "    s_getreg_b32    s43, hwreg  (mode, 0, 1)", 0xb92b0001U, 0, false, true, "" },
315    { "    s_getreg_b32    s43, hwreg  (mode  ,   0  , 1  )",
316                    0xb92b0001U, 0, false, true, "" },
317    { "    s_getreg_b32    s43, hwreg(HWREG_MODE, 0, 1)", 0xb92b0001U, 0, false, true, "" },
318    { "    s_getreg_b32    s43, hwreg(status, 0, 1)", 0xb92b0002U, 0, false, true, "" },
319    { "    s_getreg_b32    s43, hwreg(HWREG_STATUS, 0, 1)",
320        0xb92b0002U, 0, false, true, "" },
321    { "    s_getreg_b32    s43, hwreg(trapsts, 0, 1)", 0xb92b0003U, 0, false, true, "" },
322    { "    s_getreg_b32    s43, hwreg(HWREG_TRAPSTS, 0, 1)",
323                    0xb92b0003U, 0, false, true, "" },
324    { "    s_getreg_b32    s43, hwreg(hw_id, 0, 1)", 0xb92b0004U, 0, false, true, "" },
325    { "    s_getreg_b32    s43, hwreg(HWREG_HW_ID, 0, 1)",
326                    0xb92b0004U, 0, false, true, "" },
327    { "    s_getreg_b32    s43, hwreg(gpr_alloc, 0, 1)", 0xb92b0005U, 0, false, true, "" },
328    { "    s_getreg_b32    s43, hwreg(HWREG_GPR_ALLOC, 0, 1)",
329                    0xb92b0005U, 0, false, true, "" },
330    { "    s_getreg_b32    s43, hwreg(lds_alloc, 0, 1)", 0xb92b0006U, 0, false, true, "" },
331    { "    s_getreg_b32    s43, hwreg(HWREG_LDS_ALLOC, 0, 1)",
332                    0xb92b0006U, 0, false, true, "" },
333    { "    s_getreg_b32    s43, hwreg(ib_sts, 0, 1)", 0xb92b0007U, 0, false, true, "" },
334    { "    s_getreg_b32    s43, hwreg(HWREG_IB_STS, 0, 1)",
335                    0xb92b0007U, 0, false, true, "" },
336    { "    s_getreg_b32    s43, hwreg(pc_lo, 0, 1)", 0xb92b0008U, 0, false, true, "" },
337    { "    s_getreg_b32    s43, hwreg(HWREG_PC_LO, 0, 1)",
338                    0xb92b0008U, 0, false, true, "" },
339    { "    s_getreg_b32    s43, hwreg(pc_hi, 0, 1)", 0xb92b0009U, 0, false, true, "" },
340    { "    s_getreg_b32    s43, hwreg(HWREG_PC_HI, 0, 1)",
341                    0xb92b0009U, 0, false, true, "" },
342    { "    s_getreg_b32    s43, hwreg(inst_dw0, 0, 1)", 0xb92b000aU, 0, false, true, "" },
343    { "    s_getreg_b32    s43, hwreg(HWREG_INST_DW0, 0, 1)",
344                    0xb92b000aU, 0, false, true, "" },
345    { "    s_getreg_b32    s43, hwreg(inst_dw1, 0, 1)", 0xb92b000bU, 0, false, true, "" },
346    { "    s_getreg_b32    s43, hwreg(HWREG_INST_DW1, 0, 1)",
347                    0xb92b000bU, 0, false, true, "" },
348    { "    s_getreg_b32    s43, hwreg(ib_dbg0, 0, 1)", 0xb92b000cU, 0, false, true, "" },
349    { "    s_getreg_b32    s43, hwreg(HWREG_IB_DBG0, 0, 1)",
350                    0xb92b000cU, 0, false, true, "" },
351    { "    s_getreg_b32    s43, hwreg(trapsts, 10, 1)", 0xb92b0283u, 0, false, true, "" },
352    { "    s_getreg_b32    s43, hwreg(trapsts, 3, 10)", 0xb92b48c3u, 0, false, true, "" },
353    { "    s_getreg_b32    s43, hwreg(trapsts, 3, 32)", 0xb92bf8c3u, 0, false, true, "" },
354    { "    s_getreg_b32    s43, hwreg(@10, 0, 1)", 0xb92b000aU, 0, false, true, "" },
355    { "    s_getreg_b32    s43, hwreg(@8, 0, 1)", 0xb92b0008U, 0, false, true, "" },
356    { "    s_setreg_imm32_b32 hwreg(trapsts, 3, 10), 0x24da4f",
357                    0xba8048c3u, 0x24da4fU, true, true, "" },
358    { "    s_setreg_imm32_b32 hwreg(trapsts, 3, 10), xx; xx=0x24da4f",
359                    0xba8048c3u, 0x24da4fU, true, true, "" },
360    { "xx=0x24da4e;    s_setreg_imm32_b32 hwreg(trapsts, 3, 10), xx",
361                    0xba8048c3u, 0x24da4eU, true, true, "" },
362    { "     s_setreg_b32  hwreg(trapsts, 3, 10), s43", 0xb9ab48c3u, 0, false, true, "" },
363    { "    s_getreg_b32    s43, hwreg(ib_dbg1, 0, 1)", 0xb92b000dU, 0, false, true, "" },
364    { "    s_getreg_b32    s43, hwreg(flush_ib, 0, 1)", 0xb92b000eU, 0, false, true, "" },
365    { "    s_getreg_b32    s43, hwreg(HWREG_FLUSH_IB, 0, 1)",
366                0xb92b000eU, 0, false, true, "" },
367    { "    s_getreg_b32    s43, hwreg(sh_mem_bases, 0, 1)",
368                0xb92b000fU, 0, false, true, "" },
369    { "    s_getreg_b32    s43, hwreg(HWREG_SH_MEM_BASES, 0, 1)",
370                0xb92b000fU, 0, false, true, "" },
371    { "    s_getreg_b32    s43, hwreg(sq_shader_tba_lo, 0, 1)",
372                0xb92b0010U, 0, false, true, "" },
373    { "    s_getreg_b32    s43, hwreg(HWREG_SQ_SHADER_TBA_LO, 0, 1)",
374                0xb92b0010U, 0, false, true, "" },
375    { "    s_getreg_b32    s43, hwreg(sq_shader_tba_hi, 0, 1)",
376                0xb92b0011U, 0, false, true, "" },
377    { "    s_getreg_b32    s43, hwreg(HWREG_SQ_SHADER_TBA_HI, 0, 1)",
378                0xb92b0011U, 0, false, true, "" },
379    { "    s_getreg_b32    s43, hwreg(sq_shader_tma_lo, 0, 1)",
380                0xb92b0012U, 0, false, true, "" },
381    { "    s_getreg_b32    s43, hwreg(HWREG_SQ_SHADER_TMA_LO, 0, 1)",
382                0xb92b0012U, 0, false, true, "" },
383    { "    s_getreg_b32    s43, hwreg(sq_shader_tma_hi, 0, 1)",
384                0xb92b0013U, 0, false, true, "" },
385    { "    s_getreg_b32    s43, hwreg(HWREG_SQ_SHADER_TMA_HI, 0, 1)",
386                0xb92b0013U, 0, false, true, "" },
387    { "    s_getreg_b32    s43, hwreg(tba_lo, 0, 1)", 0xb92b0010U, 0, false, true, "" },
388    { "    s_getreg_b32    s43, hwreg(HWREG_TBA_LO, 0, 1)",
389                0xb92b0010U, 0, false, true, "" },
390    { "    s_getreg_b32    s43, hwreg(tba_hi, 0, 1)", 0xb92b0011U, 0, false, true, "" },
391    { "    s_getreg_b32    s43, hwreg(HWREG_TBA_HI, 0, 1)",
392                0xb92b0011U, 0, false, true, "" },
393    { "    s_getreg_b32    s43, hwreg(tma_lo, 0, 1)", 0xb92b0012U, 0, false, true, "" },
394    { "    s_getreg_b32    s43, hwreg(HWREG_TMA_LO, 0, 1)",
395                0xb92b0012U, 0, false, true, "" },
396    { "    s_getreg_b32    s43, hwreg(tma_hi, 0, 1)", 0xb92b0013U, 0, false, true, "" },
397    { "    s_getreg_b32    s43, hwreg(HWREG_TMA_HI, 0, 1)",
398                0xb92b0013U, 0, false, true, "" },
399    { "    s_getreg_b32    s43, hwreg(flat_scr_lo, 0, 1)",
400                0xb92b0014U, 0, false, true, "" },
401    { "    s_getreg_b32    s43, hwreg(HWREG_FLAT_SCR_LO, 0, 1)",
402                0xb92b0014U, 0, false, true, "" },
403    { "    s_getreg_b32    s43, hwreg(flat_scr_hi, 0, 1)",
404                0xb92b0015U, 0, false, true, "" },
405    { "    s_getreg_b32    s43, hwreg(HWREG_FLAT_SCR_HI, 0, 1)",
406                0xb92b0015U, 0, false, true, "" },
407    { "    s_getreg_b32    s43, hwreg(xnack_mask, 0, 1)",
408                0xb92b0016U, 0, false, true, "" },
409    { "    s_getreg_b32    s43, hwreg(HWREG_XNACK_MASK, 0, 1)",
410                0xb92b0016U, 0, false, true, "" },
411    { "    s_getreg_b32    s43, hwreg(pops_packer, 0, 1)",
412                0xb92b0017U, 0, false, true, "" },
413    { "    s_getreg_b32    s43, hwreg(HWREG_POPS_PACKER, 0, 1)",
414                0xb92b0017U, 0, false, true, "" },
415    // SOPK instructions
416    { "s_call_b64 s[44:45], xxxx+8\nxxxx:", 0xbb2c0002U, 0, false, true, "" },
417    { "    s_waitcnt_vscnt  s43, 0xd3b9", 0xbbabd3b9U, 0, false, true, "" },
418    { "    s_waitcnt_vmcnt  s43, 0xd3b9", 0xbc2bd3b9U, 0, false, true, "" },
419    { "    s_waitcnt_expcnt s43, 0xd3b9", 0xbcabd3b9U, 0, false, true, "" },
420    { "    s_waitcnt_lgkmcnt s43, 0xd3b9", 0xbd2bd3b9U, 0, false, true, "" },
421    { "    s_subvector_loop_begin s43, 0xd3b9", 0xbdabd3b9U, 0, false, true, "" },
422    { "    s_subvector_loop_end s43, 0xd3b9", 0xbe2bd3b9U, 0, false, true, "" },
423    /* SOPP encoding */
424    { "s_nop  0x0", 0xbf800000U, 0, false, true, "" },
425    { "s_nop  7", 0xbf800007U, 0, false, true, "" },
426    { "s_nop  644", 0xbf800284U, 0, false, true, "" },
427    { "xv=6; xt=65; s_nop  xv+xt", 0xbf800047U, 0, false, true, "" },
428    { "s_nop  xv+xt; xv=6; xt=65", 0xbf800047U, 0, false, true, "" },
429    { "s_endpgm", 0xbf810000U, 0, false, true, "" },
430    { "    s_wakeup\n", 0xbf830000U, 0, false, true, "" },
431    { "    s_branch xxxx-8\nxxxx:\n", 0xbf82fffeU, 0, false, true, "" },
432    { "xxxx:    s_branch xxxx-8\n", 0xbf82fffdU, 0, false, true, "" },
433    { "    s_branch xxxx+8\nxxxx:\n", 0xbf820002U, 0, false, true, "" },
434    { "    s_cbranch_scc0  xxxx-8\nxxxx:\n", 0xbf84fffeU, 0, false, true, "" },
435    { "    s_cbranch_scc1  xxxx-8\nxxxx:\n", 0xbf85fffeU, 0, false, true, "" },
436    { "    s_cbranch_vccz  xxxx-8\nxxxx:\n", 0xbf86fffeU, 0, false, true, "" },
437    { "    s_cbranch_vccnz  xxxx-8\nxxxx:\n", 0xbf87fffeU, 0, false, true, "" },
438    { "    s_cbranch_execz  xxxx-8\nxxxx:\n", 0xbf88fffeU, 0, false, true, "" },
439    { "    s_cbranch_execnz  xxxx-8\nxxxx:\n", 0xbf89fffeU, 0, false, true, "" },
440    { "s_barrier", 0xbf8a0000U, 0, false, true, "" },
441    { "s_waitcnt       vmcnt(6) & expcnt(3) & lgkmcnt(13)\n",
442        0xbf8c0d36U, 0, false, true, "" },
443    { "s_waitcnt       vmcnt(22) & expcnt(3) & lgkmcnt(13)\n",
444        0xbf8c4d36U, 0, false, true, "" },
445    { "s_waitcnt       vmcnt(38) & expcnt(3) & lgkmcnt(13)\n",
446        0xbf8c8d36U, 0, false, true, "" },
447    { "s_waitcnt       vmcnt(54) & expcnt(3) & lgkmcnt(13)\n",
448        0xbf8ccd36U, 0, false, true, "" },
449    { "s_waitcnt       vmcnt(15) & expcnt(3) & lgkmcnt(13)\n",
450        0xbf8c0d3fU, 0, false, true, "" },
451    { "s_waitcnt       vmcnt(31) & expcnt(3) & lgkmcnt(13)\n",
452        0xbf8c4d3fU, 0, false, true, "" },
453    { "s_waitcnt       vmcnt(47) & expcnt(3) & lgkmcnt(13)\n",
454        0xbf8c8d3fU, 0, false, true, "" },
455    { "s_waitcnt       expcnt(3) & lgkmcnt(13)\n", 0xbf8ccd3fU, 0, false, true, "" },
456    { "s_waitcnt       " "vmcnt(0) & expcnt(0) & lgkmcnt(0)\n",
457        0xbf8c0000U, 0, false, true, "" },
458    { "s_waitcnt  vmcnt(14) & expcnt(2)", 0xbf8c3f2eU, 0, false, true, "" },
459    { "s_waitcnt  lgkmcnt(13) & expcnt(2)", 0xbf8ccd2fU, 0, false, true, "" },
460    { "s_waitcnt  lgkmcnt(21) & expcnt(2)", 0xbf8cd52fU, 0, false, true, "" },
461    { "s_waitcnt  lgkmcnt(44) & expcnt(2)", 0xbf8cec2fU, 0, false, true, "" },
462    { "s_waitcnt  lgkmcnt(53) & expcnt(2)", 0xbf8cf52fU, 0, false, true, "" },
463    { "        s_waitcnt       vmcnt(6) & expcnt(3) & lgkmcnt(53)\n",
464        0xbf8c3536U, 0, false, true, "" },
465    /* other SOPP opcodes */
466    { "    s_sethalt       0x32b", 0xbf8d032bU, 0, false, true, "" },
467    { "    s_sleep         0x32b", 0xbf8e032bU, 0, false, true, "" },
468    { "    s_setprio       0x32b", 0xbf8f032bU, 0, false, true, "" },
469    /* sendmsg */
470    { "    s_sendmsg  sendmsg(interrupt)", 0xbf900001U, 0, false, true, "" },
471    { "    s_sendmsg  sendmsg(MSG_INTERRUPT)", 0xbf900001U, 0, false, true, "" },
472    { "    s_sendmsg  sendmsg(system)", 0xbf90000fU, 0, false, true, "" },
473    { "    s_sendmsg  sendmsg(MSG_SYSTEM)", 0xbf90000fU, 0, false, true, "" },
474    { "    s_sendmsg  sendmsg(MSG_SYSMSG)", 0xbf90000fU, 0, false, true, "" },
475    { "    s_sendmsg  sendmsg(gs, nop)", 0xbf900002U, 0, false, true, "" },
476    { "    s_sendmsg  sendmsg(MSG_GS, GS_OP_NOP)", 0xbf900002U, 0, false, true, "" },
477    { "    s_sendmsg  sendmsg(gs, cut, 0)", 0xbf900012U, 0, false, true, "" },
478    { "    s_sendmsg  sendmsg(MSG_GS, GS_OP_CUT, 0)", 0xbf900012U, 0, false, true, "" },
479    { "    s_sendmsg  sendmsg(gs, cut, 1)", 0xbf900112U, 0, false, true, "" },
480    { "    s_sendmsg  sendmsg(MSG_GS, GS_OP_CUT, 1)", 0xbf900112U, 0, false, true, "" },
481    { "    s_sendmsg  sendmsg(gs, emit, 0)", 0xbf900022U, 0, false, true, "" },
482    { "    s_sendmsg  sendmsg(MSG_GS, GS_OP_EMIT, 0)", 0xbf900022U, 0, false, true, "" },
483    { "    s_sendmsg  sendmsg(gs, emit_cut, 3)", 0xbf900332U, 0,
484        false, true, "" },
485    { "    s_sendmsg  sendmsg(gs, emit-cut, 3)", 0xbf900332U, 0,
486        false, true, "" },
487    { "    s_sendmsg  sendmsg ( gs    , emit_cut  , 3  )", 0xbf900332U, 0,
488        false, true, "" },
489    { "    s_sendmsg  sendmsg(MSG_GS, GS_OP_EMIT_CUT, 3)", 0xbf900332U, 0,
490        false, true, "" },
491    { "    s_sendmsg  sendmsg(gs_done, nop)", 0xbf900003U, 0, false, true, "" },
492    { "    s_sendmsg  sendmsg(MSG_GS_DONE, GS_OP_NOP)", 0xbf900003U, 0, false, true, "" },
493    { "    s_sendmsghalt  sendmsg(interrupt)", 0xbf910001U, 0, false, true, "" },
494    { "    s_sendmsg  sendmsg(@2, GS_OP_CUT, 0)", 0xbf900012U, 0, false, true, "" },
495    { "    s_sendmsg  sendmsg(@2, @1, 0)", 0xbf900012U, 0, false, true, "" },
496    { "    s_sendmsg  sendmsg(savewave)", 0xbf900004U, 0, false, true, "" },
497    { "    s_sendmsg  sendmsg(MSG_STALL_WAVE_GEN)", 0xbf900005U, 0, false, true, "" },
498    { "    s_sendmsg  sendmsg(stall_wave_gen)", 0xbf900005U, 0, false, true, "" },
499    { "    s_sendmsg  sendmsg(MSG_HALT_WAVES)", 0xbf900006U, 0, false, true, "" },
500    { "    s_sendmsg  sendmsg(halt_waves)", 0xbf900006U, 0, false, true, "" },
501    { "    s_sendmsg  sendmsg(MSG_ORDERED_PS_DONE)", 0xbf900007U, 0, false, true, "" },
502    { "    s_sendmsg  sendmsg(ordered_ps_done)", 0xbf900007U, 0, false, true, "" },
503    { "    s_sendmsg  sendmsg(MSG_EARLY_PRIM_DEALLOC)", 0xbf900008U, 0, false, true, "" },
504    { "    s_sendmsg  sendmsg(early_prim_dealloc)", 0xbf900008U, 0, false, true, "" },
505    { "    s_sendmsg  sendmsg(MSG_GS_ALLOC_REQ)", 0xbf900009U, 0, false, true, "" },
506    { "    s_sendmsg  sendmsg(gs_alloc_req)", 0xbf900009U, 0, false, true, "" },
507    { "    s_sendmsg  sendmsg(MSG_GET_DOORBELL)", 0xbf90000aU, 0, false, true, "" },
508    { "    s_sendmsg  sendmsg(get_doorbell)", 0xbf90000aU, 0, false, true, "" },
509    /* msg errors */
510    { "    s_sendmsg  sendmsg(interrupxt)", 0, 0, false, false,
511        "test.s:1:24: Error: Unknown message\n" },
512    { "    s_sendmsg  sendmsg(gs, nop__x)", 0, 0, false, false,
513        "test.s:1:28: Error: Unknown GSOP\n" },
514    { "    s_sendmsg  sendmsg(gs, nop__x", 0, 0, false, false,
515        "test.s:1:28: Error: Unknown GSOP\n"
516        "test.s:1:34: Error: Unterminated sendmsg function\n" },
517    { "    s_sendmsg  sendmsg(gs, cut, 122)", 0xbf900212U, 0, false, true,
518        "test.s:1:33: Warning: StreamId (3rd argument) out of range\n" },
519    /* other SOPP encoding */
520    { "    s_trap  0x32b", 0xbf92032bU, 0, false, true, "" },
521    { "    s_icache_inv", 0xbf930000U, 0, false, true, "" },
522    { "    s_incperflevel  0x1234", 0xbf941234U, 0, false, true, "" },
523    { "    s_decperflevel  0x1234", 0xbf951234U, 0, false, true, "" },
524    { "    s_ttracedata", 0xbf960000U, 0, false, true, "" },
525    { "    s_setkill  0x32b", 0xbf8b032bU, 0, false, true, "" },
526    { "xxx: s_cbranch_cdbgsys xxx+16", 0xbf970003U, 0, false, true, "" },
527    { "xxx: s_cbranch_cdbguser xxx+16", 0xbf980003U, 0, false, true, "" },
528    { "xxx: s_cbranch_cdbgsys_or_user xxx+16", 0xbf990003U, 0, false, true, "" },
529    { "xxx: s_cbranch_cdbgsys_and_user xxx+16", 0xbf9a0003U, 0, false, true, "" },
530    { "        s_endpgm_ordered_ps_done\n", 0xbf9e0000U, 0, false, true, "" },
531    { "        s_code_end\n", 0xbf9f0000U, 0, false, true, ""  },
532    { "        s_inst_prefetch 0x1234\n", 0xbfa01234U, 0, false, true, "" },
533    { "        s_clause        0x1234\n", 0xbfa11234U, 0, false, true, "" },
534    { "        s_wait_idle\n", 0xbfa20000U, 0, false, true, "" },
535    { "        s_waitcnt_decptr 0x1234\n", 0xbfa31234U, 0, false, true, "" },
536    { "        s_round_mode    0x1234\n", 0xbfa41234U, 0, false, true, "" },
537    { "        s_denorm_mode   0x1234\n", 0xbfa51234U, 0, false, true, "" },
538    { "        s_ttracedata_imm 0x1234\n", 0xbfa81234U, 0, false, true, "" },
539    /* SMEM encoding */
540    { "    s_load_dword    s3, s[0:1], s4\n", 0xf40000c0U, 0x08000000U, true, true, "" },
541    { "        s_load_dword    s3, s[0:1], 0x6ba23\n",
542                0xf40000c0U, 0xfa06ba23U, true, true, "" },
543    { "        s_load_dword    s3, s[18:19], s4\n",
544                0xf40000c9U, 0x08000000U, true, true, "" },
545    { "        s_load_dword    s3, s[18:19], 0x6ba23\n",
546                0xf40000c9U, 0xfa06ba23U, true, true, "" },
547    { "        s_load_dword    s3, s[0:1], s4 glc dlc\n",
548                0xf40140c0U, 0x08000000U, true, true, "" },
549    { "        s_load_dword    s3, s[0:1], s4 glc:1 dlc:1\n",
550                0xf40140c0U, 0x08000000U, true, true, "" },
551    { "        s_load_dword    s3, s[0:1], s4 dlc\n",
552                0xf40040c0U, 0x08000000U, true, true, "" },
553    { "        s_load_dword    s3, s[0:1], s4 nv\n",
554                0xf40080c0U, 0x08000000U, true, true, "" },
555    { "        s_load_dword    s3, s[0:1], s4 dlc:0 nv\n",
556                0xf40080c0U, 0x08000000U, true, true, "" },
557    { "        s_load_dword    s3, s[6:7], s4 nv glc:0\n",
558                0xf40080c3U, 0x08000000U, true, true, "" },
559    { "ft=42; by=21; s_load_dword    s3, s[18:19], ft*by\n",
560                0xf40000c9U, 0xfa000372U, true, true, "" },
561    { "s_load_dword    s3, s[18:19], ft*by; ft=42; by=21\n",
562                0xf40000c9U, 0xfa000372U, true, true, "" },
563    { "s7=0x3cda; s_load_dword    s3, s[18:19], @s7\n",
564                0xf40000c9U, 0xfa003cdaU, true, true, "" },
565    { "x7=0x1f3cda; s_load_dword    s3, s[18:19], x7\n", 0xf40000c9U, 0xfa0f3cdaU,
566            true, true, "test.s:1:44: Warning: Value 0x1f3cda truncated to 0xf3cda\n" },
567    { "s_load_dword    s3, s[18:19], x7; x7=0x1f3cda\n", 0xf40000c9U, 0xfa0f3cdaU,
568            true, true, "test.s:1:31: Warning: Value 0x1f3cda truncated to 0xf3cda\n" },
569    /* SMEM errors */
570    { "    s_load_dword  s[50:53], s[58:59], 0x1345b", 0, 0, false, false,
571        "test.s:1:19: Error: Required 1 scalar register\n" },
572    { "    s_load_dword  s50, s[58:58], 0x1345b", 0, 0, false, false,
573        "test.s:1:24: Error: Required 2 scalar registers\n" },
574    { "    s_load_dword    s50, -1, 0x5b", 0, 0, false, false,
575        "test.s:1:26: Error: Some garbages at register name place\n" },
576    { "    s_load_dword    s50, execz, 0x5b", 0, 0, false, false,
577        "test.s:1:26: Error: Expected 2 scalar registers\n" },
578    /* SMEM instructions */
579    { "    s_load_dwordx2  s[6:7], s[18:19], s4\n",
580                0xf4040189U, 0x08000000U, true, true, "" },
581    { "    s_load_dwordx4  s[12:15], s[18:19], s4\n",
582                0xf4080309U, 0x08000000U, true, true, "" },
583    { "    s_load_dwordx8  s[12:19], s[18:19], s4\n",
584                0xf40c0309U, 0x08000000U, true, true, "" },
585    { "    s_load_dwordx16 s[12:27], s[18:19], s4\n",
586                0xf4100309U, 0x08000000U, true, true, "" },
587    { "    s_scratch_load_dword s3, s[18:19], s4\n",
588                0xf41400c9U, 0x08000000U, true, true, "" },
589    { "    s_scratch_load_dwordx2 s[6:7], s[18:19], s4\n",
590                0xf4180189U, 0x08000000U, true, true, "" },
591    { "    s_scratch_load_dwordx4 s[12:15], s[18:19], s4\n",
592                0xf41c0309U, 0x08000000U, true, true, "" },
593    { "    s_buffer_load_dword s3, s[20:23], s4\n",
594                0xf42000caU, 0x08000000U, true, true, "" },
595    { "    s_buffer_load_dwordx2 s[6:7], s[20:23], s4\n",
596                0xf424018aU, 0x08000000U, true, true, "" },
597    { "    s_buffer_load_dwordx4 s[12:15], s[20:23], s4\n",
598                0xf428030aU, 0x08000000U, true, true, "" },
599    { "    s_buffer_load_dwordx8 s[12:19], s[20:23], s4\n",
600                0xf42c030aU, 0x08000000U, true, true, "" },
601    { "    s_buffer_load_dwordx16 s[12:27], s[20:23], s4\n",
602                0xf430030aU, 0x08000000U, true, true, "" },
603    { "    s_store_dword   s3, s[20:21], s4\n", 0xf44000caU, 0x08000000U, true, true, "" },
604    { "    s_store_dwordx2 s[6:7], s[20:21], s4\n",
605                0xf444018aU, 0x08000000U, true, true, "" },
606    { "    s_store_dwordx4 s[12:15], s[20:21], s4\n",
607                0xf448030aU, 0x08000000U, true, true, "" },
608    { "    s_scratch_store_dword s3, s[18:19], s4\n",
609                0xf45400c9U, 0x08000000U, true, true, "" },
610    { "    s_scratch_store_dwordx2 s[6:7], s[18:19], s4\n",
611                0xf4580189U, 0x08000000U, true, true, "" },
612    { "    s_scratch_store_dwordx4 s[12:15], s[18:19], s4\n",
613                0xf45c0309U, 0x08000000U, true, true, "" },
614    { "    s_buffer_store_dword s3, s[20:23], s4\n",
615                0xf46000caU, 0x08000000U, true, true, "" },
616    { "    s_buffer_store_dwordx2 s[6:7], s[20:23], s4\n",
617                0xf464018aU, 0x08000000U, true, true, "" },
618    { "    s_buffer_store_dwordx4 s[12:15], s[20:23], s4\n",
619                0xf468030aU, 0x08000000U, true, true, "" },
620    { "    s_gl1_inv\n", 0xf47c0000U, 0x00000000U, true, true, "" },
621    { "    s_dcache_inv\n", 0xf4800000U, 0x00000000U, true, true, "" },
622    { "    s_dcache_wb\n", 0xf4840000U, 0x00000000U, true, true, "" },
623    { "    s_memtime       s[6:7]\n", 0xf4900180U, 0x00000000U, true, true, "" },
624    { "    s_memrealtime   s[6:7]\n", 0xf4940180U, 0x00000000U, true, true, "" },
625    { "    s_atc_probe     0x3, s[20:21], s4\n",
626                0xf49800caU, 0x08000000U, true, true, "" },
627    { "    s_atc_probe_buffer 0x3, s[20:23], s4\n",
628                0xf49c00caU, 0x08000000U, true, true, "" },
629    { "    s_dcache_discard s[20:21], s4\n", 0xf4a0000aU, 0x08000000U, true, true, "" },
630    { "    s_dcache_discard_x2 s[20:21], s4\n", 0xf4a4000aU, 0x08000000U, true, true, "" },
631    { "    s_get_waveid_in_workgroup s7\n", 0xf4a801c0U, 0x00000000U, true, true, "" },
632    { "    s_buffer_atomic_swap s3, s[20:23], s4\n",
633                0xf50000caU, 0x08000000U, true, true, "" },
634    { "    s_buffer_atomic_cmpswap s[10:11], s[20:23], s4\n",
635                0xf504028aU, 0x08000000U, true, true, "" },
636    { "    s_buffer_atomic_add s3, s[20:23], s4\n",
637                0xf50800caU, 0x08000000U, true, true, "" },
638    { "    s_buffer_atomic_sub s3, s[20:23], s4\n",
639                0xf50c00caU, 0x08000000U, true, true, "" },
640    { "    s_buffer_atomic_smin s3, s[20:23], s4\n",
641                0xf51000caU, 0x08000000U, true, true, "" },
642    { "    s_buffer_atomic_umin s3, s[20:23], s4\n",
643                0xf51400caU, 0x08000000U, true, true, "" },
644    { "    s_buffer_atomic_smax s3, s[20:23], s4\n",
645                0xf51800caU, 0x08000000U, true, true, "" },
646    { "    s_buffer_atomic_umax s3, s[20:23], s4\n",
647                0xf51c00caU, 0x08000000U, true, true, "" },
648    { "    s_buffer_atomic_and s3, s[20:23], s4\n",
649                0xf52000caU, 0x08000000U, true, true, "" },
650    { "    s_buffer_atomic_or s3, s[20:23], s4\n",
651                0xf52400caU, 0x08000000U, true, true, "" },
652    { "    s_buffer_atomic_xor s3, s[20:23], s4\n",
653                0xf52800caU, 0x08000000U, true, true, "" },
654    { "    s_buffer_atomic_inc s3, s[20:23], s4\n",
655                0xf52c00caU, 0x08000000U, true, true, "" },
656    { "    s_buffer_atomic_dec s3, s[20:23], s4\n",
657                0xf53000caU, 0x08000000U, true, true, "" },
658    { "    s_buffer_atomic_swap_x2 s[6:7], s[20:23], s4\n",
659                0xf580018aU, 0x08000000U, true, true, "" },
660    { "    s_buffer_atomic_cmpswap_x2 s[12:15], s[20:23], s4\n",
661                0xf584030aU, 0x08000000U, true, true, "" },
662    { "    s_buffer_atomic_add_x2 s[10:11], s[20:23], s4\n",
663                0xf588028aU, 0x08000000U, true, true, "" },
664    { "    s_buffer_atomic_sub_x2 s[10:11], s[20:23], s4\n",
665                0xf58c028aU, 0x08000000U, true, true, "" },
666    { "    s_buffer_atomic_smin_x2 s[10:11], s[20:23], s4\n",
667                0xf590028aU, 0x08000000U, true, true, "" },
668    { "    s_buffer_atomic_umin_x2 s[10:11], s[20:23], s4\n",
669                0xf594028aU, 0x08000000U, true, true, "" },
670    { "    s_buffer_atomic_smax_x2 s[10:11], s[20:23], s4\n",
671                0xf598028aU, 0x08000000U, true, true, "" },
672    { "    s_buffer_atomic_umax_x2 s[10:11], s[20:23], s4\n",
673                0xf59c028aU, 0x08000000U, true, true, "" },
674    { "    s_buffer_atomic_and_x2 s[10:11], s[20:23], s4\n",
675                0xf5a0028aU, 0x08000000U, true, true, "" },
676    { "    s_buffer_atomic_or_x2 s[10:11], s[20:23], s4\n",
677                0xf5a4028aU, 0x08000000U, true, true, "" },
678    { "    s_buffer_atomic_xor_x2 s[10:11], s[20:23], s4\n",
679                0xf5a8028aU, 0x08000000U, true, true, "" },
680    { "    s_buffer_atomic_inc_x2 s[10:11], s[20:23], s4\n",
681                0xf5ac028aU, 0x08000000U, true, true, "" },
682    { "    s_buffer_atomic_dec_x2 s[10:11], s[20:23], s4\n",
683                0xf5b0028aU, 0x08000000U, true, true, "" },
684    { "    s_atomic_swap   s3, s[20:21], s4\n", 0xf60000caU, 0x08000000U, true, true, "" },
685    { "    s_atomic_cmpswap s[10:11], s[20:21], s4\n",
686                0xf604028aU, 0x08000000U, true, true, "" },
687    { "    s_atomic_add    s3, s[20:21], s4\n", 0xf60800caU, 0x08000000U, true, true, "" },
688    { "    s_atomic_sub    s3, s[20:21], s4\n", 0xf60c00caU, 0x08000000U, true, true, "" },
689    { "    s_atomic_smin   s3, s[20:21], s4\n", 0xf61000caU, 0x08000000U, true, true, "" },
690    { "    s_atomic_umin   s3, s[20:21], s4\n", 0xf61400caU, 0x08000000U, true, true, "" },
691    { "    s_atomic_smax   s3, s[20:21], s4\n", 0xf61800caU, 0x08000000U, true, true, "" },
692    { "    s_atomic_umax   s3, s[20:21], s4\n", 0xf61c00caU, 0x08000000U, true, true, "" },
693    { "    s_atomic_and    s3, s[20:21], s4\n", 0xf62000caU, 0x08000000U, true, true, "" },
694    { "    s_atomic_or     s3, s[20:21], s4\n", 0xf62400caU, 0x08000000U, true, true, "" },
695    { "    s_atomic_xor    s3, s[20:21], s4\n", 0xf62800caU, 0x08000000U, true, true, "" },
696    { "    s_atomic_inc    s3, s[20:21], s4\n", 0xf62c00caU, 0x08000000U, true, true, "" },
697    { "    s_atomic_dec    s3, s[20:21], s4\n", 0xf63000caU, 0x08000000U, true, true, "" },
698    { "    s_atomic_swap_x2 s[6:7], s[20:21], s4\n",
699                0xf680018aU, 0x08000000U, true, true, "" },
700    { "    s_atomic_cmpswap_x2 s[12:15], s[20:21], s4\n",
701                0xf684030aU, 0x08000000U, true, true, "" },
702    { "    s_atomic_add_x2 s[10:11], s[20:21], s4\n",
703                0xf688028aU, 0x08000000U, true, true, "" },
704    { "    s_atomic_sub_x2 s[10:11], s[20:21], s4\n",
705                0xf68c028aU, 0x08000000U, true, true, "" },
706    { "    s_atomic_smin_x2 s[10:11], s[20:21], s4\n",
707                0xf690028aU, 0x08000000U, true, true, "" },
708    { "    s_atomic_umin_x2 s[10:11], s[20:21], s4\n",
709                0xf694028aU, 0x08000000U, true, true, "" },
710    { "    s_atomic_smax_x2 s[10:11], s[20:21], s4\n",
711                0xf698028aU, 0x08000000U, true, true, "" },
712    { "    s_atomic_umax_x2 s[10:11], s[20:21], s4\n",
713                0xf69c028aU, 0x08000000U, true, true, "" },
714    { "    s_atomic_and_x2 s[10:11], s[20:21], s4\n",
715                0xf6a0028aU, 0x08000000U, true, true, "" },
716    { "    s_atomic_or_x2  s[10:11], s[20:21], s4\n",
717                0xf6a4028aU, 0x08000000U, true, true, "" },
718    { "    s_atomic_xor_x2 s[10:11], s[20:21], s4\n",
719                0xf6a8028aU, 0x08000000U, true, true, "" },
720    { "    s_atomic_inc_x2 s[10:11], s[20:21], s4\n",
721                0xf6ac028aU, 0x08000000U, true, true, "" },
722    { "    s_atomic_dec_x2 s[10:11], s[20:21], s4\n",
723                0xf6b0028aU, 0x08000000U, true, true, "" },
724    /* VOP2/(VOP2 in VOP3) encoding */
725    { "    v_cndmask_b32   v154, v21, v107, vcc", 0x0334d715U, 0, false, true, "" },
726    { "    v_cndmask_b32   v154, v21, v107, vcc     ", 0x0334d715U, 0, false, true, "" },
727    { "    v_cndmask_b32   v[154:154], v[21:21], v[107], vcc",
728        0x0334d715U, 0, false, true, "" },
729    { "    v_cndmask_b32   v[  154 : 154], v[ 21:21 ], v[ 107  ], vcc",
730        0x0334d715U, 0, false, true, "" },
731    { "    v_cndmask_b32   v154  , v21 , v107  , vcc", 0x0334d715U, 0, false, true, "" },
732    { "    v_cndmask_b32   v154, lds, v107, vcc", 0x0334d6feU, 0, false, true, "" },
733    { "    v_cndmask_b32   v154, lds_direct, v107, vcc", 0x0334d6feU, 0, false, true, "" },
734    { "    v_cndmask_b32   v154, src_lds_direct, v107, vcc",
735        0x0334d6feU, 0, false, true, "" },
736    { "    v_add_f32   v154, s21, v107", 0x0734d615U, 0, false, true, "" },
737    { "    v_cndmask_b32   v154, 2, v107, vcc", 0x0334d682U, 0, false, true, "" },
738    { "    v_cndmask_b32   v154, -9, v107, vcc", 0x0334d6c9U, 0, false, true, "" },
739    { "    v_cndmask_b32   v154, 20e-1, v107, vcc", 0x0334d6f4U, 0, false, true, "" },
740    { "    v_cndmask_b32   v154, 1323, v107, vcc", 0x0334d6ffU, 1323, true, true, "" },
741    { "xx=1323;v_cndmask_b32   v154, xx, v107, vcc", 0x0334d6ffU, 1323, true, true, "" },
742    { "v_cndmask_b32   v154, xx, v107, vcc; xx=1323", 0x0334d6ffU, 1323, true, true, "" },
743    { "v_cndmask_b32   v154, xx, v107, vcc; xx=2", 0x0334d6ffU, 2, true, true, "" },
744    { "v0=1323;v_cndmask_b32   v154, @v0, v107, vcc", 0x0334d6ffU, 1323, true, true, "" },
745    { "v_cndmask_b32   v154, @v0, v107, vcc; v0=1323", 0x0334d6ffU, 1323, true, true, "" },
746    { "s0=1323;v_cndmask_b32   v154, @s0, v107, vcc", 0x0334d6ffU, 1323, true, true, "" },
747    { "v_cndmask_b32   v154, @s0, v107, vcc; s0=1323", 0x0334d6ffU, 1323, true, true, "" },
748    { "    v_add_f32  v154, v21, v107", 0x0734d715U, 0, false, true, "" },
749    { "tx=%s21; v_add_f32  v154, tx, v107", 0x0734d615U, 0, false, true, "" },
750    { "    v_add_f32  v154, s21, v107", 0x0734d615U, 0, false, true, "" },
751    { " fla=%v154;   v_add_f32  fla, s21, v107", 0x0734d615U, 0, false, true, "" },
752    { "    v_add_f32  v154, v21, v107 vop3", 0xd503009aU, 0x0002d715U, true, true, "" },
753    { "    v_add_f32  v154, v21, v107 vop3:1", 0xd503009aU, 0x0002d715U, true, true, "" },
754    { "    v_add_f32_e64  v154, v21, v107", 0xd503009aU, 0x0002d715U, true, true, "" },
755    { "    v_add_f32_e64  v154, v21, v107 vop3:0",
756        0xd503009aU, 0x0002d715U, true, true, "" },
757    { "    v_add_f32  v154, v21, s98", 0xd503009aU, 0x0000c515U, true, true, "" },
758    { "    v_add_f32  v154, abs(v21), v107", 0xd503019aU, 0x0002d715U, true, true, "" },
759    { "    v_add_f32  v154, |v21|, v107", 0xd503019aU, 0x0002d715U, true, true, "" },
760    { "dd=%v21; v_add_f32  v154, |dd|, v107", 0xd503019aU, 0x0002d715U, true, true, "" },
761    { "    v_add_f32  v154, abs(v21), abs(v107)",
762        0xd503039aU, 0x0002d715U, true, true, "" },
763    { "    v_add_f32  v154, v21, v107 abs:3",
764        0xd503039aU, 0x0002d715U, true, true, "" },
765    { "    v_add_f32  v154, v21, abs(v107)", 0xd503029aU, 0x0002d715U, true, true, "" },
766    { "    v_add_f32  v154, -v21, v107", 0xd503009aU, 0x2002d715U, true, true, "" },
767    { "    v_add_f32  v154, v21, -v107", 0xd503009aU, 0x4002d715U, true, true, "" },
768    { "    v_add_f32  v154, v21, v107 neg:2", 0xd503009aU, 0x4002d715U, true, true, "" },
769    { "    v_add_f32  v154, v21, v107 neg:[0,1]",
770        0xd503009aU, 0x4002d715U, true, true, "" },
771    { "    v_add_f32  v154, v21, v107 neg: [ 0  , 1  ] ",
772        0xd503009aU, 0x4002d715U, true, true, "" },
773    { "    v_add_f32  v154, -v21, -v107", 0xd503009aU, 0x6002d715U, true, true, "" },
774    { "    v_add_f32  v154, -abs(v21), -abs(v107)",
775        0xd503039aU, 0x6002d715U, true, true, "" },
776    { "    v_add_f32  v154, v21, v107 neg:3 abs:3",
777        0xd503039aU, 0x6002d715U, true, true, "" },
778    { "    v_add_f32  v154, v21, v107 neg:[1,1] abs:[1,1]",
779        0xd503039aU, 0x6002d715U, true, true, "" },
780    { "    v_add_f32  v154, v21, v107 mul:2", 0xd503009aU, 0x0802d715U, true, true, "" },
781    { "    v_add_f32  v154, v21, v107 omod:1", 0xd503009aU, 0x0802d715U, true, true, "" },
782    { "    v_add_f32  v154, v21, v107 mul:2 clamp:0",
783        0xd503009aU, 0x0802d715U, true, true, "" },
784    { "    v_add_f32  v154, v21, v107 mul:002", 0xd503009aU, 0x0802d715U, true, true, "" },
785    { "    v_add_f32  v154, v21, v107 mul:4", 0xd503009aU, 0x1002d715U, true, true, "" },
786    { "    v_add_f32  v154, v21, v107 omod:2", 0xd503009aU, 0x1002d715U, true, true, "" },
787    { "    v_add_f32  v154, v21, v107 div:2", 0xd503009aU, 0x1802d715U, true, true, "" },
788    { "    v_add_f32  v154, v21, v107 omod:3", 0xd503009aU, 0x1802d715U, true, true, "" },
789    { "    v_add_f32  v154, v21, v107 div:002", 0xd503009aU, 0x1802d715U, true, true, "" },
790    { "    v_add_f32  v154, v21, v107 mul:2 clamp",
791        0xd503809aU, 0x0802d715U, true, true, "" },
792    { "    v_add_f32  v154, v21, v107 mul:2 clamp:1",
793        0xd503809aU, 0x0802d715U, true, true, "" },
794    { "    v_add_f32  v154, v21, v107 clamp", 0xd503809aU, 0x0002d715U, true, true, "" },
795    { "    v_cndmask_b32   v154, v21, v107, s[6:7]",
796        0xd501009aU, 0x001ad715U, true, true, "" },
797    { "    v_cndmask_b32   v154, abs(v21), abs(v107), s[6:7] clamp",
798        0xd501839aU, 0x001ad715U, true, true, "" },
799    /* negated expressions */
800    { "vx=7;    v_add_f32  v154, -vx, v107", 0x0734d6c7U, 0, false, true, "" },
801    { "v12ZZ=7;    v_add_f32  v154, -v12ZZ, v107", 0x0734d6c7U, 0, false, true, "" },
802    { "v_add_f32  v154, -vx, v107; vx=7", 0x0734d6ffU, uint32_t(-7), true, true, "" },
803    { "vx=7737;    v_add_f32  v154, -vx, v107",
804        0x0734d6ffU, uint32_t(-7737), true, true, "" },
805    { "    v_add_f32  v154, s2, s2", 0xd503009aU, 0x0402U, true, true, "" },
806    /* var long names */
807    { "xtmp1111111111111111111222222222=67777\n"
808        "v_add_f32  v154, xtmp1111111111111111111222222222, v107",
809        0x0734d6ffU, 67777, true, true, "" },
810    // VOP3/VOP2 more than 2 SGPR registers
811    { "    v_add_f32  v154, s2, s4", 0xd503009aU, 0x00000802U, true, true, "" },
812    /* VOP2 errors */
813    { "    v_cndmask_b32   v[154:155], v21, v107, vcc", 0, 0, false, false,
814        "test.s:1:21: Error: Required 1 vector register\n" },
815    { "    v_cndmask_b32   v154, v[21:22], v107, vcc", 0, 0, false, false,
816        "test.s:1:27: Error: Required 1 vector register\n" },
817    { "    v_cndmask_b32   v154, v21, v[107:108], vcc", 0, 0, false, false,
818        "test.s:1:32: Error: Required 1 vector register\n" },
819    { "    v_cndmask_b32   v[154:, v21, v107, vcc", 0, 0, false, false,
820        "test.s:1:27: Error: Expected expression\n" },
821    { "    v_cndmask_b32   v[14, v21, v107, vcc", 0, 0, false, false,
822        "test.s:1:21: Error: Unterminated vector register range\n" },
823    { "    v_cndmask_b32   v[14:15, v21, v107, vcc", 0, 0, false, false,
824        "test.s:1:21: Error: Unterminated vector register range\n" },
825    { "    v_cndmask_b32   v256, v21, v107, vcc", 0, 0, false, false,
826        "test.s:1:24: Error: Number is too big\n"
827        "test.s:1:24: Error: Expected ',' before argument\n" },
828    { "    v_cndmask_b32   v[255:256], v21, v107, vcc", 0, 0, false, false,
829        "test.s:1:21: Error: Some vector register number out of range\n" },
830    { "    v_add_f32  v154, v21, v107 mul,", 0, 0, false, false,
831        "test.s:1:35: Error: Expected ':' before multiplier number\n"
832        "test.s:1:35: Error: Some garbages at VOP modifier place\n" },
833    { "    v_add_f32  v154, v21, v107 div,", 0, 0, false, false,
834        "test.s:1:35: Error: Expected ':' before divider number\n"
835        "test.s:1:35: Error: Some garbages at VOP modifier place\n" },
836    /* VOP2 in VOP3 errors */
837    { "    v_add_f32  v154, v21, v107 mul:3", 0, 0, false, false,
838        "test.s:1:32: Error: Unknown VOP3 mul:X modifier\n" },
839    { "    v_add_f32  v154, v21, v107 mul:", 0, 0, false, false,
840        "test.s:1:36: Error: Missing number\n" },
841    { "    v_add_f32  v154, v21, v107 mul", 0, 0, false, false,
842        "test.s:1:35: Error: Expected ':' before multiplier number\n" },
843    { "    v_add_f32  v154, v21, v107 mxl", 0, 0, false, false,
844        "test.s:1:32: Error: Unknown VOP modifier\n" },
845    { "    v_add_f32  v154, abs(v21), 12343", 0, 0, false, false,
846        "test.s:1:5: Error: Literal in VOP3 encoding is illegal\n" },
847    { "    v_add_f32  v154, 13243, abs(v21)", 0, 0, false, false,
848        "test.s:1:5: Error: Literal in VOP3 encoding is illegal\n" },
849    { "    v_add_f32  v154, 3123, s3", 0, 0, false, false,
850        "test.s:1:5: Error: Literal with SGPR or M0 is illegal\n" },
851    { "    v_add_f32  v154, 3123, m0", 0, 0, false, false,
852        "test.s:1:5: Error: Literal with SGPR or M0 is illegal\n" },
853    { "    v_add_f32  v154, s3, 3123", 0, 0, false, false,
854        "test.s:1:5: Error: Literal with SGPR or M0 is illegal\n" },
855    { "    v_add_f32  v154, m0, 3123", 0, 0, false, false,
856        "test.s:1:5: Error: Literal with SGPR or M0 is illegal\n" },
857    /* VOP2 encoding - VOP_SDWA */
858    { "   v_cndmask_b32   v154, v0, v107, vcc dst_sel:byte0 src0_sel:byte0 src1_sel:byte0",
859        0x0334d6f9U, 0, true, true, "" },
860    { "   v_cndmask_b32   v154, v0, v107, vcc dst_sel:byte_0 src0_sel:BYTE_0 src1_sel:b0",
861        0x0334d6f9U, 0, true, true, "" },
862    { "   v_cndmask_b32   v154, v0, v107, vcc dst_sel :byte_0 src0_sel : b0 src1_sel : b0 ",
863        0x0334d6f9U, 0, true, true, "" },
864    { "   v_cndmask_b32   v154, v61, v107, vcc dst_sel:byte0 src0_sel:byte0 src1_sel:byte0",
865        0x0334d6f9U, 0x3dU, true, true, "" },
866    { "   v_cndmask_b32   v154, v61, v107, vcc dst_sel:byte3 src0_sel:byte2 src1_sel:byte1",
867        0x0334d6f9U, 0x0102033dU, true, true, "" },
868    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:b1 src0_sel:byte1 src1_sel:byte_1",
869        0x0334d6f9U, 0x01010141U, true, true, "" },
870    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:b2 src0_sel:byte2 src1_sel:byte_2",
871        0x0334d6f9U, 0x02020241U, true, true, "" },
872    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:@2 src0_sel:@2 src1_sel:@2",
873        0x0334d6f9U, 0x02020241U, true, true, "" },
874    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:b3 src0_sel:byte3 src1_sel:byte_3",
875        0x0334d6f9U, 0x03030341U, true, true, "" },
876    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:w0 src0_sel:word0 src1_sel:word_0",
877        0x0334d6f9U, 0x04040441U, true, true, "" },
878    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:w1 src0_sel:word1 src1_sel:word_1",
879        0x0334d6f9U, 0x05050541U, true, true, "" },
880    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:w1 src0_sel:word0 src1_sel:dword",
881        0x0334d6f9U, 0x06040541U, true, true, "" },
882    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:@5 src0_sel:@4 src1_sel:@6",
883        0x0334d6f9U, 0x06040541U, true, true, "" },
884    { "   v_cndmask_b32   v154, v65, v107, vcc dst_un:preserve",
885        0x0334d6f9U, 0x06061641U, true, true, "" },
886    { "   v_cndmask_b32   v154, v65, v107, vcc dst_unused:UNUSED_PRESERVE",
887        0x0334d6f9U, 0x06061641U, true, true, "" },
888    { "   v_cndmask_b32   v154, v65, v107, vcc dst_unused : SEXT",
889        0x0334d6f9U, 0x06060e41U, true, true, "" },
890    { "   v_cndmask_b32   v154, v65, v107, vcc dst_unused : @1",
891        0x0334d6f9U, 0x06060e41U, true, true, "" },
892    { "   v_cndmask_b32   v154, v65, v107, vcc dst_unused:pad",
893        0x0334d6f9U, 0x06060641U, true, true, "" },
894    /* VOP_SDWA - operand modifiers */
895    { "   v_cndmask_b32   v154, abs(v65), v107, vcc dst_sel:word1",
896        0x0334d6f9U, 0x06260541U, true, true, "" },
897    { "   v_cndmask_b32   v154, -abs(v65), v107, vcc dst_sel:word1",
898        0x0334d6f9U, 0x06360541U, true, true, "" },
899    { "   v_cndmask_b32   v154, sext(-abs(v65)), v107, vcc dst_sel:word1",
900        0x0334d6f9U, 0x063e0541U, true, true, "" },
901    { "   v_cndmask_b32   v154, sext(-v65), v107, vcc dst_sel:word1",
902        0x0334d6f9U, 0x061e0541U, true, true, "" },
903    { "   v_cndmask_b32   v154, v65, abs(v107), vcc dst_sel:word1",
904        0x0334d6f9U, 0x26060541U, true, true, "" },
905    { "   v_cndmask_b32   v154, v65, -abs(v107), vcc dst_sel:word1",
906        0x0334d6f9U, 0x36060541U, true, true, "" },
907    { "   v_cndmask_b32   v154, v65, sext(-abs(v107)), vcc dst_sel:word1",
908        0x0334d6f9U, 0x3e060541U, true, true, "" },
909    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:word1 sext:2 neg:2 abs:2",
910        0x0334d6f9U, 0x3e060541U, true, true, "" },
911    { "   v_cndmask_b32   v154, v65, sext(-v107), vcc dst_sel:word1",
912        0x0334d6f9U, 0x1e060541U, true, true, "" },
913    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:word1 sext:2 neg:2",
914        0x0334d6f9U, 0x1e060541U, true, true, "" },
915    { "   v_cndmask_b32   v154, v65, v107, vcc dst_sel:word1 sext:[0,1] neg:[0,1]",
916        0x0334d6f9U, 0x1e060541U, true, true, "" },
917    { "   v_cndmask_b32   v154, abs(v65), v107, vcc clamp dst_sel:word1",
918        0x0334d6f9U, 0x06262541U, true, true, "" },
919    /* VOP_SDWA - warnings */
920    { "   v_cndmask_b32   v154, abs(v65), v107, vcc dst_sel:word1 dst_sel:word0",
921        0x0334d6f9U, 0x06260441U, true, true,
922        "test.s:1:60: Warning: Dst_sel is already defined\n" },
923    { "   v_cndmask_b32   v154, abs(v65), v107, vcc src0_sel:word1 src0_sel:word0",
924        0x0334d6f9U, 0x06240641U, true, true,
925        "test.s:1:61: Warning: Src0_sel is already defined\n" },
926    { "   v_cndmask_b32   v154, abs(v65), v107, vcc src1_sel:word1 src1_sel:word0",
927        0x0334d6f9U, 0x04260641U, true, true,
928        "test.s:1:61: Warning: Src1_sel is already defined\n" },
929    { "   v_cndmask_b32   v154, v65, v107, vcc dst_unused:pad dst_un:PRESERVE",
930        0x0334d6f9U, 0x06061641U, true, true,
931        "test.s:1:56: Warning: Dst_unused is already defined\n" },
932    /* VOP_SDWA - errors */
933    { "   v_cndmask_b32   v154, v67, v107, vcc dst_sel:byte", 0, 0, false, false,
934        "test.s:1:49: Error: Unknown dst_sel\n" },
935    { "   v_cndmask_b32   v154, v67, v107, vcc dst_sel:", 0, 0, false, false,
936        "test.s:1:49: Error: Expected dst_sel\n" },
937    { "   v_cndmask_b32   v154, v67, v107, vcc dst_sel  ", 0, 0, false, false,
938        "test.s:1:50: Error: Expected ':' before dst_sel\n" },
939    { "   v_cndmask_b32   v154, v67, v107, vcc src0_sel:byte", 0, 0, false, false,
940        "test.s:1:50: Error: Unknown src0_sel\n" },
941    { "   v_cndmask_b32   v154, v67, v107, vcc src0_sel:", 0, 0, false, false,
942        "test.s:1:50: Error: Expected src0_sel\n" },
943    { "   v_cndmask_b32   v154, v67, v107, vcc src0_sel  ", 0, 0, false, false,
944        "test.s:1:51: Error: Expected ':' before src0_sel\n" },
945    { "   v_cndmask_b32   v154, v67, v107, vcc src1_sel:byte", 0, 0, false, false,
946        "test.s:1:50: Error: Unknown src1_sel\n" },
947    { "   v_cndmask_b32   v154, v67, v107, vcc src1_sel:", 0, 0, false, false,
948        "test.s:1:50: Error: Expected src1_sel\n" },
949    { "   v_cndmask_b32   v154, v67, v107, vcc src1_sel  ", 0, 0, false, false,
950        "test.s:1:51: Error: Expected ':' before src1_sel\n" },
951    { "   v_cndmask_b32   v154, v65, v107, vcc dst_unused:xpad", 0, 0, false, false,
952        "test.s:1:52: Error: Unknown dst_unused\n" },
953    { "   v_cndmask_b32   v154, v65, v107, vcc dst_unused", 0, 0, false, false,
954        "test.s:1:51: Error: Expected ':' before dst_unused\n" },
955    { "   v_cndmask_b32   v154, 65, v107, vcc dst_sel:word1", 0, 0, false, false,
956        "test.s:1:4: Error: Literal with SDWA or DPP word is illegal\n" },
957    // extra from GCN 1.4
958    { "   v_cndmask_b32   v154, v0, v107, vcc dst_sel:byte0 src0_sel:byte0 src1_sel:byte0",
959        0x0334d6f9U, 0, true, true, "" },
960    { "   v_cndmask_b32   v154, v0, v107, vcc "
961        "mul:4 dst_sel:byte0 src0_sel:byte0 src1_sel:byte0",
962        0x0334d6f9U, 0x8000, true, true, "" },
963    { "v_add_f32   v154, v61, v107 dst_sel:byte0 src0_sel:byte0 src1_sel:byte0\n",
964        0x0734d6f9U, 0x0000003dU, true, true, "" },
965    { "v_add_f32   v154, v61, vcc_hi dst_sel:byte0 src0_sel:byte0 src1_sel:byte0\n",
966        0x0734d6f9U, 0x8000003dU, true, true, "" },
967    { "v_add_f32   v154, s61, v107 dst_sel:byte0 src0_sel:byte0 src1_sel:byte0\n",
968        0x0734d6f9U, 0x0080003dU, true, true, "" },
969    { "v_cndmask_b32   v154, sext(-abs(v65)), v107, vcc mul:2",
970        0x0334d6f9U, 0x063e4641U, true, true, "" },
971    { "v_add_f32   v154, sext(-abs(v65)), vcc_hi",
972        0x0734d6f9U, 0x863e0641U, true, true, "" },
973    { "v_add_f32   v154, sext(-abs(s65)), v107",
974        0x0734d6f9U, 0x06be0641U, true, true, "" },
975    /* VOP2 - DPP */
976    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bank_mask:0 row_mask:0",
977        0x0334d6faU, 0xbe, true, true, ""  },
978    { "   v_cndmask_b32  v154, v190, v107, vcc bank_mask:0 row_mask:0",
979        0x0334d6faU, 0xe4be, true, true, ""  },
980    { "   v_cndmask_b32_dpp  v154, v190, v107, vcc bank_mask:0 row_mask:0",
981        0x0334d6faU, 0xe4be, true, true, ""  },
982    { "   v_cndmask_b32_dpp  v154, v190, v107, vcc",
983        0x0334d6faU, 0xff00e4be, true, true, ""  },
984    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[2,1,0,3] "
985        "bank_mask:14 row_mask:11", 0x0334d6faU, 0xbe00c6be, true, true, "" },
986    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[3,2,1,2] "
987        "bank_mask:14 row_mask:11", 0x0334d6faU, 0xbe009bbe, true, true, "" },
988    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm :  [ 2  , 1 , 0  , 3  ] "
989        "bank_mask  : 14 row_mask  :  11   ", 0x0334d6faU, 0xbe00c6be, true, true, "" },
990    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bound_ctrl",
991        0x0334d6faU, 0xff0800be, true, true, "" },
992    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bound_ctrl : 1",
993        0x0334d6faU, 0xff0800be, true, true, "" },
994    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bound_ctrl : 0 ",
995        0x0334d6faU, 0xff0800be, true, true, "" },
996    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bound_ctrl:0:1",
997        0x0334d6faU, 0xff0800be, true, true, "" },
998    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bound_ctrl:0:0",
999        0x0334d6faU, 0xff0000be, true, true, "" },
1000    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bound_ctrl:1:1",
1001        0x0334d6faU, 0xff0800be, true, true, "" },
1002    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bound_ctrl:1:0",
1003        0x0334d6faU, 0xff0000be, true, true, "" },
1004    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bank_mask:0 row_mask:0",
1005        0x0334d6faU, 0xbe, true, true, "" },
1006    { "   v_cndmask_b32  v154, v190, v107, vcc row_shl:3 ",
1007        0x0334d6faU, 0xff0103be, true, true, "" },
1008    { "   v_cndmask_b32  v154, v190, v107, vcc row_shl:14 ",
1009        0x0334d6faU, 0xff010ebe, true, true, "" },
1010    { "   v_cndmask_b32  v154, v190, v107, vcc row_shr:3 ",
1011        0x0334d6faU, 0xff0113be, true, true, "" },
1012    { "   v_cndmask_b32  v154, v190, v107, vcc row_shr:14 ",
1013        0x0334d6faU, 0xff011ebe, true, true, "" },
1014    { "   v_cndmask_b32  v154, v190, v107, vcc row_ror:3 ",
1015        0x0334d6faU, 0xff0123be, true, true, "" },
1016    { "   v_cndmask_b32  v154, v190, v107, vcc row_ror:14 ",
1017        0x0334d6faU, 0xff012ebe, true, true, "" },
1018    { "   v_cndmask_b32  v154, v190, v107, vcc row_ror :  14 ",
1019        0x0334d6faU, 0xff012ebe, true, true, "" },
1020    { "   v_cndmask_b32  v154, v190, v107, vcc row_mirror",
1021        0x0334d6faU, 0xff0140be, true, true, "" },
1022    { "   v_cndmask_b32  v154, v190, v107, vcc row_half_mirror",
1023        0x0334d6faU, 0xff0141be, true, true, "" },
1024    { "   v_cndmask_b32  v154, v190, v107, vcc row_hmirror",
1025        0x0334d6faU, 0xff0141be, true, true, "" },
1026    { "   v_cndmask_b32  v154, abs(v190), -v107, vcc row_shl:3 ",
1027        0x0334d6faU, 0xff6103be, true, true, "" },
1028    { "   v_cndmask_b32  v154, abs(v190), -abs(v107), vcc row_shl:3 ",
1029        0x0334d6faU, 0xffe103be, true, true, "" },
1030    { "   v_cndmask_b32  v154, -v190, -abs(v107), vcc row_shl:3 ",
1031        0x0334d6faU, 0xffd103be, true, true, "" },
1032    /* VOP_DPP warnings */
1033    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[2,1,0,3] bank_mask:1 "
1034        "bank_mask:14 row_mask:2 row_mask:11", 0x0334d6faU, 0xbe00c6be, true, true,
1035        "test.s:1:73: Warning: Bank_mask is already defined\n"
1036        "test.s:1:97: Warning: Row_mask is already defined\n"  },
1037    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[0,0,0,0] bound_ctrl:0 bound_ctrl",
1038        0x0334d6faU, 0xff0800be, true, true,
1039        "test.s:1:74: Warning: BoundCtrl is already defined\n" },
1040    { "   v_cndmask_b32  v154, v190, v107, vcc row_ror:2 row_ror:1 ",
1041        0x0334d6faU, 0xff0121be, true, true,
1042        "test.s:1:51: Warning: DppCtrl is already defined\n" },
1043    { "   v_cndmask_b32  v154, v190, v107, vcc row_half_mirror row_ror:1 ",
1044        0x0334d6faU, 0xff0121be, true, true,
1045        "test.s:1:57: Warning: DppCtrl is already defined\n" },
1046    { "   v_cndmask_b32  v154, v190, v107, vcc row_ror:35 ",
1047        0x0334d6faU, 0xff0123be, true, true,
1048        "test.s:1:49: Warning: Value 0x23 truncated to 0x3\n" },
1049    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[2,1,0,3] "
1050        "bank_mask:0xdde row_mask:0xabc3b", 0x0334d6faU, 0xbe00c6be, true, true,
1051        "test.s:1:71: Warning: Value 0xdde truncated to 0xe\n"
1052        "test.s:1:86: Warning: Value 0xabc3b truncated to 0xb\n" },
1053    /* VOP_DPP errors */
1054    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[2,,0,3]", 0, 0, false, false,
1055        "test.s:1:54: Error: Expected expression\n" },
1056    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[2,1,0,3  ", 0, 0, false, false,
1057        "test.s:1:61: Error: Unterminated quad_perm\n" },
1058    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[2 1 0 3]  ", 0, 0, false, false,
1059        "test.s:1:54: Error: Expected ',' before quad_perm component\n"
1060        "test.s:1:54: Error: Some garbages at VOP modifier place\n"
1061        "test.s:1:56: Error: Some garbages at VOP modifier place\n"
1062        "test.s:1:58: Error: Some garbages at VOP modifier place\n" },
1063    { "   v_cndmask_b32  v154, v190, v107, vcc row_shl:0", 0, 0, false, false,
1064        "test.s:1:49: Error: Illegal zero shift for row_XXX shift\n" },
1065    { "   v_cndmask_b32  v154, v190, v107, vcc row_shl:32", 0, 0, false, false,
1066        "test.s:1:49: Warning: Value 0x20 truncated to 0x0\n"
1067        "test.s:1:49: Error: Illegal zero shift for row_XXX shift\n" },
1068    { "   v_cndmask_b32  v154, v190, v107, vcc row_shl:1 bound_ctrl:3", 0, 0, false, false,
1069        "test.s:1:62: Error: Value must be '0' or '1'\n"
1070        "test.s:1:62: Error: Some garbages at VOP modifier place\n" },
1071    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm:[2,1,0,3] "
1072        "bank_mask:, row_mask:", 0, 0, false, false,
1073        "test.s:1:71: Error: Expected expression\n"
1074        "test.s:1:71: Error: Some garbages at VOP modifier place\n"
1075        "test.s:1:82: Error: Expected expression\n" },
1076    { "   v_cndmask_b32  v154, v190, v107, vcc quad_perm bank_mask row_mask",
1077        0, 0, false, false, "test.s:1:51: Error: Expected ':' before quad_perm\n"
1078        "test.s:1:61: Error: Expected ':' before bank_mask\n"
1079        "test.s:1:69: Error: Expected ':' before row_mask\n" },
1080    { "   v_cndmask_b32  v154, v190, v107, vcc row_shl ", 0, 0, false, false,
1081        "test.s:1:49: Error: Expected ':' before row_shl\n" },
1082    { "   v_cndmask_b32  v154, sext(v190), v107, vcc row_shl:3 ", 0, 0, false, false,
1083        "test.s:1:4: Error: SEXT modifiers is unavailable for DPP word\n" },
1084    { "   v_cndmask_b32  v154, 12333, v107, vcc bank_mask:0 row_mask:0", 0, 0,
1085        false, false, "test.s:1:4: Error: Literal with SDWA or DPP word is illegal\n" },
1086    { "   v_cndmask_b32  v154, v190, v107, vcc wave_shl ", 0, 0, false, false,
1087        "test.s:1:41: Error: Unknown VOP modifier\n" },
1088    { "   v_cndmask_b32  v154, v190, v107, vcc wave_rol ", 0, 0, false, false,
1089        "test.s:1:41: Error: Unknown VOP modifier\n" },
1090    { "   v_cndmask_b32  v154, v190, v107, vcc wave_shr ", 0, 0, false, false,
1091        "test.s:1:41: Error: Unknown VOP modifier\n" },
1092    { "   v_cndmask_b32  v154, v190, v107, vcc wave_ror ", 0, 0, false, false,
1093        "test.s:1:41: Error: Unknown VOP modifier\n" },
1094    { "   v_cndmask_b32  v154, v190, v107, vcc row_bcast:15", 0, 0, false, false,
1095        "test.s:1:41: Error: Unknown VOP modifier\n"
1096        "test.s:1:50: Error: Some garbages at VOP modifier place\n" },
1097    { "   v_cndmask_b32  v154, v190, v107, vcc row_bcast15", 0, 0, false, false,
1098        "test.s:1:41: Error: Unknown VOP modifier\n" },
1099    { "   v_cndmask_b32  v154, v190, v107, vcc row_bcast:31", 0, 0, false, false,
1100        "test.s:1:41: Error: Unknown VOP modifier\n"
1101        "test.s:1:50: Error: Some garbages at VOP modifier place\n" },
1102    { "   v_cndmask_b32  v154, v190, v107, vcc row_bcast31", 0, 0, false, false,
1103        "test.s:1:41: Error: Unknown VOP modifier\n" },
1104    /* VOP DPP for GFX10 */
1105    { "v_add_f32       v154, v190, v107 row_share:6 bank_mask:0 row_mask:0\n",
1106        0x0734d6faU, 0x156be, true, true, "" },
1107    { "v_add_f32       v154, v190, v107 row_share:15 bank_mask:0 row_mask:0\n",
1108        0x0734d6faU, 0x15fbe, true, true, "" },
1109    { "v_add_f32       v154, v190, v107 row_share:0 bank_mask:0 row_mask:0\n",
1110        0x0734d6faU, 0x150be, true, true, "" },
1111    { "v_add_f32       v154, v190, v107 row_xmask:6 bank_mask:0 row_mask:0\n",
1112        0x0734d6faU, 0x166be, true, true, "" },
1113    { "v_add_f32       v154, v190, v107 row_xmask:15 bank_mask:0 row_mask:0\n",
1114        0x0734d6faU, 0x16fbe, true, true, "" },
1115    { "v_add_f32       v154, v190, v107 row_xmask:0 bank_mask:0 row_mask:0\n",
1116        0x0734d6faU, 0x160be, true, true, "" },
1117    { "v_add_f32       v154, v190, v107 row_mirror bank_mask:0 row_mask:0 fi\n",
1118        0x0734d6faU, 0x540be, true, true, "" },
1119    { "v_add_f32       v154, v190, v107 row_mirror bank_mask:0 row_mask:0 fi:1\n",
1120        0x0734d6faU, 0x540be, true, true, "" },
1121    { "v_add_f32       v154, v190, v107 row_mirror bank_mask:0 row_mask:0 fi  :  1\n",
1122        0x0734d6faU, 0x540be, true, true, "" },
1123    { "v_add_f32       v154, v190, v107 row_mirror bank_mask:0 row_mask:0 fi:0\n",
1124        0x0734d6faU, 0x140be, true, true, "" },
1125    /* VOP DPP8 */
1126    { "v_add_f32       v154, v190, v107 dpp8:[1,7,2,5,6,3,6,4]\n",
1127        0x0734d6e9U, 0x99eab9be, true, true, "" },
1128    { "v_add_f32_dpp   v154, v190, v107 dpp8:[1,7,2,5,6,3,6,4]\n",
1129        0x0734d6e9U, 0x99eab9be, true, true, "" },
1130    { "v_add_f32       v154, v190, v107 dpp8 :  [ 1 ,  7, 2, 5, 6, 3 , 6 , 4  ]  \n",
1131        0x0734d6e9U, 0x99eab9be, true, true, "" },
1132    { "a=6; v_add_f32       v154, v190, v107 dpp8:[1,7,2,5,a,a/2,a,4]\n",
1133        0x0734d6e9U, 0x99eab9be, true, true, "" },
1134    { "v_add_f32       v154, v190, v107 dpp8:[1,7,2,5,6,3,6,4] fi\n",
1135        0x0734d6eaU, 0x99eab9be, true, true, "" },
1136    { "v_add_f32       v154, v190, v107  fi:1   dpp8:[1,7,2,5,6,3,6,4]\n",
1137        0x0734d6eaU, 0x99eab9be, true, true, "" },
1138    { "v_add_f32       v154, v190, v107 dpp8:[1,7,2,13,6,3,6,4]\n",
1139        0x0734d6e9U, 0x99eab9be, true, true,
1140        "test.s:1:46: Warning: Value 0xd truncated to 0x5\n" },
1141    { "v_add_f32       v154, v190, v107 dpp8:[1,7,2,5,6,3,6,0x1114]\n",
1142        0x0734d6e9U, 0x99eab9be, true, true,
1143        "test.s:1:54: Warning: Value 0x1114 truncated to 0x4\n" },
1144    { "v_add_f32       v154, v190, v107 dpp8:[0,7,0,0,0,0,0,0]\n",
1145        0x0734d6e9U, 0x38be, true, true, "" },
1146    { "v_add_f32       v154, v190, v107 dpp8:[0,0,7,0,0,0,0,0]\n",
1147        0x0734d6e9U, 0x1c0be, true, true, "" },
1148    { "v_add_f32       v154, v190, v107 dpp8:[0,0,0,7,0,0,0,0]\n",
1149        0x0734d6e9U, 0xe00be, true, true, "" },
1150    { "v_add_f32       v154, v190, v107 dpp8:[0,0,0,0,0,0,7,0]\n",
1151        0x0734d6e9U, 0x1c0000be, true, true, "" },
1152    { "v_add_f32       v154, v190, v107 dpp8:[0,0,0,0,0,0,0,7]\n",
1153        0x0734d6e9U, 0xe00000be, true, true, "" },
1154    /* VOP DPP8 errors */
1155    { "v_add_f32  v154, v190, abs(v107) dpp8:[1,7,2,5,6,3,6,4]\n", 0, 0, false, false,
1156        "test.s:1:1: Error: ABS and NEG modifiers is unavailable for DPP8 word\n" },
1157    { "v_add_f32  v154, v190, -v107 dpp8:[1,7,2,5,6,3,6,4]\n", 0, 0, false, false,
1158        "test.s:1:1: Error: ABS and NEG modifiers is unavailable for DPP8 word\n" },
1159    { "v_add_f32  v154, abs(v190), v107 dpp8:[1,7,2,5,6,3,6,4]\n", 0, 0, false, false,
1160        "test.s:1:1: Error: ABS and NEG modifiers is unavailable for DPP8 word\n" },
1161    { "v_add_f32  v154, -v190, v107 dpp8:[1,7,2,5,6,3,6,4]\n", 0, 0, false, false,
1162        "test.s:1:1: Error: ABS and NEG modifiers is unavailable for DPP8 word\n" },
1163    { "v_add_f32       v154, s10, v107 dpp8:[1,7,2,5,6,3,6,4]\n", 0, 0, false, false,
1164        "test.s:1:1: Error: SRC0 must be a vector register with DPP word\n" },
1165    { "v_add_f32 v154, v190, sext(v107) dpp8:[1,7,2,5,6,3,6,4]\n", 0, 0, false, false,
1166        "test.s:1:1: Error: SEXT modifiers is unavailable for DPP word\n" },
1167    { "v_add_f32 v154, v190, v107 row_shl:3 dpp8:[1,7,2,5,6,3,6,4]\n", 0, 0, false, false,
1168        "test.s:1:28: Error: Mixing modifiers from different encodings is illegal\n" },
1169    { nullptr, 0, 0, false, false, 0 }
1170};
Note: See TracBrowser for help on using the repository browser.