1 // RUN
: not llvm-mc
-triple
=amdgcn
-mcpu
=tahiti
-show-encoding
%s | FileCheck
--check-prefix
=GCN
%s
2 // RUN
: llvm-mc
-triple
=amdgcn
-mcpu
=bonaire
-show-encoding
%s | FileCheck
--check-prefixes
=GCN
,CI
%s
3 // RUN
: not llvm-mc
-triple
=amdgcn
-mcpu
=fiji
-show-encoding
%s | FileCheck
--check-prefix
=VI
%s
5 // RUN
: not llvm-mc
-triple
=amdgcn
-mcpu
=tahiti
%s
2>&1 | FileCheck
%s
--check-prefix
=NOSI
--implicit-check-
not=error
:
6 // RUN
: not llvm-mc
-triple
=amdgcn
-mcpu
=fiji
%s
2>&1 | FileCheck
%s
--check-prefix
=NOVI
--implicit-check-
not=error
:
8 //===----------------------------------------------------------------------===//
10 //===----------------------------------------------------------------------===//
12 // SP3 requires the immediate offset
, but we allow to drop it for
13 // compatibility reasons.
14 s_load_dword s1
, s
[2:3]
15 // GCN
: s_load_dword s1
, s
[2:3], 0x0 ; encoding
: [0x00,0x83,0x00,0xc0]
16 // VI
: s_load_dword s1
, s
[2:3], 0x0 ; encoding
: [0x41,0x00,0x02,0xc0,0x00,0x00,0x00,0x00]
18 s_load_dword s1
, s
[2:3], 0xfc
19 // GCN
: s_load_dword s1
, s
[2:3], 0xfc ; encoding
: [0xfc,0x83,0x00,0xc0]
20 // VI
: s_load_dword s1
, s
[2:3], 0xfc ; encoding
: [0x41,0x00,0x02,0xc0,0xfc,0x00,0x00,0x00]
22 s_load_dword s1
, s
[2:3], 0xff
23 // GCN
: s_load_dword s1
, s
[2:3], 0xff ; encoding
: [0xff,0x83,0x00,0xc0]
24 // VI
: s_load_dword s1
, s
[2:3], 0xff ; encoding
: [0x41,0x00,0x02,0xc0,0xff,0x00,0x00,0x00]
26 s_load_dword s1
, s
[2:3], 0x100
27 // NOSI
: :[[@LINE-
1]]:{{[0-9]+}}: error
: operands are
not valid for this GPU
or mode
28 // CI
: s_load_dword s1
, s
[2:3], 0x100 ; encoding
: [0xff,0x82,0x00,0xc0,0x00,0x01,0x00,0x00]
29 // VI
: s_load_dword s1
, s
[2:3], 0x100 ; encoding
: [0x41,0x00,0x02,0xc0,0x00,0x01,0x00,0x00]
31 s_load_dword s1
, s
[2:3], 0xfffff
32 // NOSI
: :[[@LINE-
1]]:{{[0-9]+}}: error
: operands are
not valid for this GPU
or mode
33 // CI
: s_load_dword s1
, s
[2:3], 0xfffff ; encoding
: [0xff,0x82,0x00,0xc0,0xff,0xff,0x0f,0x00]
34 // VI
: s_load_dword s1
, s
[2:3], 0xfffff ; encoding
: [0x41,0x00,0x02,0xc0,0xff,0xff,0x0f,0x00]
36 s_load_dword s1
, s
[2:3], 0x100000
37 // NOSI
: :[[@LINE-
1]]:{{[0-9]+}}: error
: operands are
not valid for this GPU
or mode
38 // CI
: s_load_dword s1
, s
[2:3], 0x100000 ; encoding
: [0xff,0x82,0x00,0xc0,0x00,0x00,0x10,0x00]
39 // NOVI
: :[[@LINE-
3]]:{{[0-9]+}}: error
: expected
a 20-bit unsigned offset
41 s_load_dword s1
, s
[2:3], 0xffffffff
42 // NOSI
: :[[@LINE-
1]]:{{[0-9]+}}: error
: operands are
not valid for this GPU
or mode
43 // CI
: s_load_dword s1
, s
[2:3], 0xffffffff ; encoding
: [0xff,0x82,0x00,0xc0,0xff,0xff,0xff,0xff]
44 // NOVI
: :[[@LINE-
3]]:{{[0-9]+}}: error
: expected
a 20-bit unsigned offset
46 //===----------------------------------------------------------------------===//
48 //===----------------------------------------------------------------------===//
50 s_load_dword s1
, s
[2:3], 1
51 // GCN
: s_load_dword s1
, s
[2:3], 0x1 ; encoding
: [0x01,0x83,0x00,0xc0]
52 // VI
: s_load_dword s1
, s
[2:3], 0x1 ; encoding
: [0x41,0x00,0x02,0xc0,0x01,0x00,0x00,0x00]
54 s_load_dword s1
, s
[2:3], s4
55 // GCN
: s_load_dword s1
, s
[2:3], s4 ; encoding
: [0x04,0x82,0x00,0xc0]
56 // VI
: s_load_dword s1
, s
[2:3], s4 ; encoding
: [0x41,0x00,0x00,0xc0,0x04,0x00,0x00,0x00]
58 s_load_dword tba_lo
, s
[2:3], s4
59 // GCN
: s_load_dword tba_lo
, s
[2:3], s4 ; encoding
: [0x04,0x02,0x36,0xc0]
60 // VI
: s_load_dword tba_lo
, s
[2:3], s4 ; encoding
: [0x01,0x1b,0x00,0xc0,0x04,0x00,0x00,0x00]
62 s_load_dword tba_hi
, s
[2:3], s4
63 // GCN
: s_load_dword tba_hi
, s
[2:3], s4 ; encoding
: [0x04,0x82,0x36,0xc0]
64 // VI
: s_load_dword tba_hi
, s
[2:3], s4 ; encoding
: [0x41,0x1b,0x00,0xc0,0x04,0x00,0x00,0x00]
66 s_load_dword tma_lo
, s
[2:3], s4
67 // GCN
: s_load_dword tma_lo
, s
[2:3], s4 ; encoding
: [0x04,0x02,0x37,0xc0]
68 // VI
: s_load_dword tma_lo
, s
[2:3], s4 ; encoding
: [0x81,0x1b,0x00,0xc0,0x04,0x00,0x00,0x00]
70 s_load_dword tma_hi
, s
[2:3], s4
71 // GCN
: s_load_dword tma_hi
, s
[2:3], s4 ; encoding
: [0x04,0x82,0x37,0xc0]
72 // VI
: s_load_dword tma_hi
, s
[2:3], s4 ; encoding
: [0xc1,0x1b,0x00,0xc0,0x04,0x00,0x00,0x00]
74 s_load_dword ttmp0
, s
[2:3], s4
75 // GCN
: s_load_dword ttmp0
, s
[2:3], s4 ; encoding
: [0x04,0x02,0x38,0xc0]
76 // VI
: s_load_dword ttmp0
, s
[2:3], s4 ; encoding
: [0x01,0x1c,0x00,0xc0,0x04,0x00,0x00,0x00]
78 s_load_dwordx2 s
[2:3], s
[2:3], 1
79 // GCN
: s_load_dwordx2 s
[2:3], s
[2:3], 0x1 ; encoding
: [0x01,0x03,0x41,0xc0]
80 // VI
: s_load_dwordx2 s
[2:3], s
[2:3], 0x1 ; encoding
: [0x81,0x00,0x06,0xc0,0x01,0x00,0x00,0x00]
82 s_load_dwordx2 s
[2:3], s
[2:3], s4
83 // GCN
: s_load_dwordx2 s
[2:3], s
[2:3], s4 ; encoding
: [0x04,0x02,0x41,0xc0]
84 // VI
: s_load_dwordx2 s
[2:3], s
[2:3], s4 ; encoding
: [0x81,0x00,0x04,0xc0,0x04,0x00,0x00,0x00]
86 s_load_dwordx2 tba
, s
[2:3], s4
87 // GCN
: s_load_dwordx2 tba
, s
[2:3], s4 ; encoding
: [0x04,0x02,0x76,0xc0]
88 // VI
: s_load_dwordx2 tba
, s
[2:3], s4 ; encoding
: [0x01,0x1b,0x04,0xc0,0x04,0x00,0x00,0x00]
90 s_load_dwordx2 tma
, s
[2:3], s4
91 // GCN
: s_load_dwordx2 tma
, s
[2:3], s4 ; encoding
: [0x04,0x02,0x77,0xc0]
92 // VI
: s_load_dwordx2 tma
, s
[2:3], s4 ; encoding
: [0x81,0x1b,0x04,0xc0,0x04,0x00,0x00,0x00]
94 s_load_dwordx2 ttmp
[2:3], s
[2:3], s4
95 // GCN
: s_load_dwordx2 ttmp
[2:3], s
[2:3], s4 ; encoding
: [0x04,0x02,0x79,0xc0]
96 // VI
: s_load_dwordx2 ttmp
[2:3], s
[2:3], s4 ; encoding
: [0x81,0x1c,0x04,0xc0,0x04,0x00,0x00,0x00]
98 s_load_dwordx4 s
[4:7], s
[2:3], 1
99 // GCN
: s_load_dwordx4 s
[4:7], s
[2:3], 0x1 ; encoding
: [0x01,0x03,0x82,0xc0]
100 // VI
: s_load_dwordx4 s
[4:7], s
[2:3], 0x1 ; encoding
: [0x01,0x01,0x0a,0xc0,0x01,0x00,0x00,0x00]
102 s_load_dwordx4 s
[4:7], s
[2:3], s4
103 // GCN
: s_load_dwordx4 s
[4:7], s
[2:3], s4 ; encoding
: [0x04,0x02,0x82,0xc0]
104 // VI
: s_load_dwordx4 s
[4:7], s
[2:3], s4 ; encoding
: [0x01,0x01,0x08,0xc0,0x04,0x00,0x00,0x00]
106 s_load_dwordx4 ttmp
[4:7], ttmp
[2:3], ttmp4
107 // GCN
: s_load_dwordx4 ttmp
[4:7], ttmp
[2:3], ttmp4 ; encoding
: [0x74,0x72,0xba,0xc0]
108 // VI
: s_load_dwordx4 ttmp
[4:7], ttmp
[2:3], ttmp4 ; encoding
: [0x39,0x1d,0x08,0xc0,0x74,0x00,0x00,0x00]
110 s_load_dwordx4 s
[100:103], s
[2:3], s4
111 // GCN
: s_load_dwordx4 s
[100:103], s
[2:3], s4 ; encoding
: [0x04,0x02,0xb2,0xc0]
112 // NOVI
: :[[@LINE-
2]]:{{[0-9]+}}: error
: s
[100:103] register
not available on this GPU
114 s_load_dwordx8 s
[8:15], s
[2:3], 1
115 // GCN
: s_load_dwordx8 s
[8:15], s
[2:3], 0x1 ; encoding
: [0x01,0x03,0xc4,0xc0]
116 // VI
: s_load_dwordx8 s
[8:15], s
[2:3], 0x1 ; encoding
: [0x01,0x02,0x0e,0xc0,0x01,0x00,0x00,0x00]
118 s_load_dwordx8 s
[8:15], s
[2:3], s4
119 // GCN
: s_load_dwordx8 s
[8:15], s
[2:3], s4 ; encoding
: [0x04,0x02,0xc4,0xc0]
120 // VI
: s_load_dwordx8 s
[8:15], s
[2:3], s4 ; encoding
: [0x01,0x02,0x0c,0xc0,0x04,0x00,0x00,0x00]
122 s_load_dwordx8 s
[96:103], s
[2:3], s4
123 // GCN
: s_load_dwordx8 s
[96:103], s
[2:3], s4 ; encoding
: [0x04,0x02,0xf0,0xc0]
124 // NOVI
: :[[@LINE-
2]]:{{[0-9]+}}: error
: s
[96:103] register
not available on this GPU
126 s_load_dwordx16 s
[16:31], s
[2:3], 1
127 // GCN
: s_load_dwordx16 s
[16:31], s
[2:3], 0x1 ; encoding
: [0x01,0x03,0x08,0xc1]
128 // VI
: s_load_dwordx16 s
[16:31], s
[2:3], 0x1 ; encoding
: [0x01,0x04,0x12,0xc0,0x01,0x00,0x00,0x00]
130 s_load_dwordx16 s
[16:31], s
[2:3], s4
131 // GCN
: s_load_dwordx16 s
[16:31], s
[2:3], s4 ; encoding
: [0x04,0x02,0x08,0xc1]
132 // VI
: s_load_dwordx16 s
[16:31], s
[2:3], s4 ; encoding
: [0x01,0x04,0x10,0xc0,0x04,0x00,0x00,0x00]
134 s_load_dwordx16 s
[88:103], s
[2:3], s4
135 // GCN
: s_load_dwordx16 s
[88:103], s
[2:3], s4 ; encoding
: [0x04,0x02,0x2c,0xc1]
136 // NOVI
: :[[@LINE-
2]]:{{[0-9]+}}: error
: s
[88:103] register
not available on this GPU
138 s_buffer_load_dword s1
, s
[4:7], 1
139 // GCN
: s_buffer_load_dword s1
, s
[4:7], 0x1 ; encoding
: [0x01,0x85,0x00,0xc2]
140 // VI
: s_buffer_load_dword s1
, s
[4:7], 0x1 ; encoding
: [0x42,0x00,0x22,0xc0,0x01,0x00,0x00,0x00]
142 s_buffer_load_dword s1
, s
[4:7], s4
143 // GCN
: s_buffer_load_dword s1
, s
[4:7], s4 ; encoding
: [0x04,0x84,0x00,0xc2]
144 // VI
: s_buffer_load_dword s1
, s
[4:7], s4 ; encoding
: [0x42,0x00,0x20,0xc0,0x04,0x00,0x00,0x00]
146 s_buffer_load_dword tba_lo
, s
[4:7], s4
147 // GCN
: s_buffer_load_dword tba_lo
, s
[4:7], s4 ; encoding
: [0x04,0x04,0x36,0xc2]
148 // VI
: s_buffer_load_dword tba_lo
, s
[4:7], s4 ; encoding
: [0x02,0x1b,0x20,0xc0,0x04,0x00,0x00,0x00]
150 s_buffer_load_dword tba_hi
, s
[4:7], s4
151 // GCN
: s_buffer_load_dword tba_hi
, s
[4:7], s4 ; encoding
: [0x04,0x84,0x36,0xc2]
152 // VI
: s_buffer_load_dword tba_hi
, s
[4:7], s4 ; encoding
: [0x42,0x1b,0x20,0xc0,0x04,0x00,0x00,0x00]
154 s_buffer_load_dword tma_lo
, s
[4:7], s4
155 // GCN
: s_buffer_load_dword tma_lo
, s
[4:7], s4 ; encoding
: [0x04,0x04,0x37,0xc2]
156 // VI
: s_buffer_load_dword tma_lo
, s
[4:7], s4 ; encoding
: [0x82,0x1b,0x20,0xc0,0x04,0x00,0x00,0x00]
158 s_buffer_load_dword tma_hi
, s
[4:7], s4
159 // GCN
: s_buffer_load_dword tma_hi
, s
[4:7], s4 ; encoding
: [0x04,0x84,0x37,0xc2]
160 // VI
: s_buffer_load_dword tma_hi
, s
[4:7], s4 ; encoding
: [0xc2,0x1b,0x20,0xc0,0x04,0x00,0x00,0x00]
162 s_buffer_load_dword ttmp1
, ttmp
[4:7], ttmp4
163 // GCN
: s_buffer_load_dword ttmp1
, ttmp
[4:7], ttmp4 ; encoding
: [0x74,0xf4,0x38,0xc2]
164 // VI
: s_buffer_load_dword ttmp1
, ttmp
[4:7], ttmp4 ; encoding
: [0x7a,0x1c,0x20,0xc0,0x74,0x00,0x00,0x00]
166 s_buffer_load_dwordx2 s
[8:9], s
[4:7], 1
167 // GCN
: s_buffer_load_dwordx2 s
[8:9], s
[4:7], 0x1 ; encoding
: [0x01,0x05,0x44,0xc2]
168 // VI
: s_buffer_load_dwordx2 s
[8:9], s
[4:7], 0x1 ; encoding
: [0x02,0x02,0x26,0xc0,0x01,0x00,0x00,0x00]
170 s_buffer_load_dwordx2 s
[8:9], s
[4:7], s4
171 // GCN
: s_buffer_load_dwordx2 s
[8:9], s
[4:7], s4 ; encoding
: [0x04,0x04,0x44,0xc2]
172 // VI
: s_buffer_load_dwordx2 s
[8:9], s
[4:7], s4 ; encoding
: [0x02,0x02,0x24,0xc0,0x04,0x00,0x00,0x00]
174 s_buffer_load_dwordx2 tba
, s
[4:7], s4
175 // GCN
: s_buffer_load_dwordx2 tba
, s
[4:7], s4 ; encoding
: [0x04,0x04,0x76,0xc2]
176 // VI
: s_buffer_load_dwordx2 tba
, s
[4:7], s4 ; encoding
: [0x02,0x1b,0x24,0xc0,0x04,0x00,0x00,0x00]
178 s_buffer_load_dwordx2 tma
, s
[4:7], s4
179 // GCN
: s_buffer_load_dwordx2 tma
, s
[4:7], s4 ; encoding
: [0x04,0x04,0x77,0xc2]
180 // VI
: s_buffer_load_dwordx2 tma
, s
[4:7], s4 ; encoding
: [0x82,0x1b,0x24,0xc0,0x04,0x00,0x00,0x00]
182 s_buffer_load_dwordx4 s
[8:11], s
[4:7], 1
183 // GCN
: s_buffer_load_dwordx4 s
[8:11], s
[4:7], 0x1 ; encoding
: [0x01,0x05,0x84,0xc2]
184 // VI
: s_buffer_load_dwordx4 s
[8:11], s
[4:7], 0x1 ; encoding
: [0x02,0x02,0x2a,0xc0,0x01,0x00,0x00,0x00]
186 s_buffer_load_dwordx4 s
[8:11], s
[4:7], s4
187 // GCN
: s_buffer_load_dwordx4 s
[8:11], s
[4:7], s4 ; encoding
: [0x04,0x04,0x84,0xc2]
188 // VI
: s_buffer_load_dwordx4 s
[8:11], s
[4:7], s4 ; encoding
: [0x02,0x02,0x28,0xc0,0x04,0x00,0x00,0x00]
190 s_buffer_load_dwordx4 ttmp
[8:11], ttmp
[4:7], ttmp4
191 // GCN
: s_buffer_load_dwordx4 ttmp
[8:11], ttmp
[4:7], ttmp4 ; encoding
: [0x74,0x74,0xbc,0xc2]
192 // VI
: s_buffer_load_dwordx4 ttmp
[8:11], ttmp
[4:7], ttmp4 ; encoding
: [0x3a,0x1e,0x28,0xc0,0x74,0x00,0x00,0x00]
194 s_buffer_load_dwordx4 s
[100:103], s
[4:7], s4
195 // GCN
: s_buffer_load_dwordx4 s
[100:103], s
[4:7], s4 ; encoding
: [0x04,0x04,0xb2,0xc2]
196 // NOVI
: :[[@LINE-
2]]:{{[0-9]+}}: error
: s
[100:103] register
not available on this GPU
198 s_buffer_load_dwordx8 s
[8:15], s
[4:7], 1
199 // GCN
: s_buffer_load_dwordx8 s
[8:15], s
[4:7], 0x1 ; encoding
: [0x01,0x05,0xc4,0xc2]
200 // VI
: s_buffer_load_dwordx8 s
[8:15], s
[4:7], 0x1 ; encoding
: [0x02,0x02,0x2e,0xc0,0x01,0x00,0x00,0x00]
202 s_buffer_load_dwordx8 s
[8:15], s
[4:7], s4
203 // GCN
: s_buffer_load_dwordx8 s
[8:15], s
[4:7], s4 ; encoding
: [0x04,0x04,0xc4,0xc2]
204 // VI
: s_buffer_load_dwordx8 s
[8:15], s
[4:7], s4 ; encoding
: [0x02,0x02,0x2c,0xc0,0x04,0x00,0x00,0x00]
206 s_buffer_load_dwordx8 s
[96:103], s
[4:7], s4
207 // GCN
: s_buffer_load_dwordx8 s
[96:103], s
[4:7], s4 ; encoding
: [0x04,0x04,0xf0,0xc2]
208 // NOVI
: :[[@LINE-
2]]:{{[0-9]+}}: error
: s
[96:103] register
not available on this GPU
210 s_buffer_load_dwordx16 s
[16:31], s
[4:7], 1
211 // GCN
: s_buffer_load_dwordx16 s
[16:31], s
[4:7], 0x1 ; encoding
: [0x01,0x05,0x08,0xc3]
212 // VI
: s_buffer_load_dwordx16 s
[16:31], s
[4:7], 0x1 ; encoding
: [0x02,0x04,0x32,0xc0,0x01,0x00,0x00,0x00]
214 s_buffer_load_dwordx16 s
[16:31], s
[4:7], s4
215 // GCN
: s_buffer_load_dwordx16 s
[16:31], s
[4:7], s4 ; encoding
: [0x04,0x04,0x08,0xc3]
216 // VI
: s_buffer_load_dwordx16 s
[16:31], s
[4:7], s4 ; encoding
: [0x02,0x04,0x30,0xc0,0x04,0x00,0x00,0x00]
218 s_buffer_load_dwordx16 s
[88:103], s
[4:7], s4
219 // GCN
: s_buffer_load_dwordx16 s
[88:103], s
[4:7], s4 ; encoding
: [0x04,0x04,0x2c,0xc3]
220 // NOVI
: :[[@LINE-
2]]:{{[0-9]+}}: error
: s
[88:103] register
not available on this GPU
223 // GCN
: s_dcache_inv ; encoding
: [0x00,0x00,0xc0,0xc7]
224 // VI
: s_dcache_inv ; encoding
: [0x00,0x00,0x80,0xc0,0x00,0x00,0x00,0x00]
227 // CI
: s_dcache_inv_vol ; encoding
: [0x00,0x00,0x40,0xc7]
228 // NOSI
: :[[@LINE-
2]]:{{[0-9]+}}: error
: instruction
not supported on this GPU
229 // VI
: s_dcache_inv_vol ; encoding
: [0x00,0x00,0x88,0xc0,0x00,0x00,0x00,0x00]
232 // GCN
: s_memtime s
[4:5] ; encoding
: [0x00,0x00,0x82,0xc7]
233 // VI
: s_memtime s
[4:5] ; encoding
: [0x00,0x01,0x90,0xc0,0x00,0x00,0x00,0x00]
236 // GCN
: s_memtime tba ; encoding
: [0x00,0x00,0xb6,0xc7]
237 // VI
: s_memtime tba ; encoding
: [0x00,0x1b,0x90,0xc0,0x00,0x00,0x00,0x00]
240 // GCN
: s_memtime tma ; encoding
: [0x00,0x00,0xb7,0xc7]
241 // VI
: s_memtime tma ; encoding
: [0x80,0x1b,0x90,0xc0,0x00,0x00,0x00,0x00]