source: CLRX/CLRadeonExtender/trunk/tests/amdasm/DisasmDataTest.cpp @ 4958

Last change on this file since 4958 was 4958, checked in by matszpk, 13 months ago

CLRadeonExtender: AmdBin?: Fixed old bug in parsing metadata.

File size: 82.1 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 <iostream>
22#include <sstream>
23#include <string>
24#include <cstring>
25#include <CLRX/amdbin/AmdBinaries.h>
26#include <CLRX/amdbin/AmdCL2Binaries.h>
27#include <CLRX/amdbin/GalliumBinaries.h>
28#include <CLRX/amdasm/Disassembler.h>
29#include "../TestUtils.h"
30
31using namespace CLRX;
32
33static const cxbyte disasmInput1Global[14] =
34{ 13, 56, 66, 213,
35  55, 93, 123, 85,
36  164, 234, 21, 37,
37  44, 188 };
38
39static const char* disasmInput1Kernel1Metadata =
40";ARGSTART:__OpenCL_DCT_kernel\n"
41";version:3:1:111\n"
42";device:pitcairn\n"
43";uniqueid:1024\n"
44";memory:uavprivate:0\n"
45";memory:hwlocal:0\n"
46";memory:hwregion:0\n"
47";pointer:output:float:1:1:0:uav:12:4:RW:0:0\n"
48";pointer:input:float:1:1:16:uav:13:4:RO:0:0\n"
49";pointer:dct8x8:float:1:1:32:uav:14:4:RO:0:0\n"
50";pointer:inter:float:1:1:48:hl:1:4:RW:0:0\n"
51";value:width:u32:1:1:64\n"
52";value:blockWidth:u32:1:1:80\n"
53";value:inverse:u32:1:1:96\n"
54";function:1:1030\n"
55";uavid:11\n"
56";printfid:9\n"
57";cbid:10\n"
58";privateid:8\n"
59";reflection:0:float*\n"
60";reflection:1:float*\n"
61";reflection:2:float*\n"
62";reflection:3:float*\n"
63";reflection:4:uint\n"
64";reflection:5:uint\n"
65";reflection:6:uint\n"
66";ARGEND:__OpenCL_DCT_kernel\n"
67"dessss9843re88888888888888888uuuuuuuufdd"
68"dessss9843re88888888888888888uuuuuuuufdd"
69"dessss9843re88888888888888888uuuuuuuufdd444444444444444444444444"
70"\r\r\t\t\t\t\txx\f\f\f\3777x833334441\n";
71
72static const cxbyte disasmInput1Kernel1Header[59] =
73{ 1, 2, 0, 0, 0, 44, 0, 0,
74  12, 3, 6, 3, 3, 2, 0, 0,
75  19, 19, 19, 19, 19, 19, 19, 19,
76  19, 19, 19, 19, 19, 19, 19, 19,
77  19, 19, 19, 19, 19, 19, 19, 18,
78  19, 19, 19, 19, 19, 19, 19, 19,
79  19, 19, 19, 19, 19, 19, 19, 19,
80  19, 19, 19
81};
82
83static const cxbyte disasmInput1Kernel1Data[40] =
84{
85    1, 4, 5, 6, 6, 6, 4, 3,
86    3, 5, 65, 13, 5, 5, 11, 57,
87    5, 65, 5, 0, 0, 0, 0, 5,
88    1, 15, 5, 1, 56, 0, 0, 5,
89    5, 65, 5, 0, 0, 78, 255, 5
90};
91
92static uint32_t disasmInput1Kernel1ProgInfo[13] =
93{
94    LEV(0xffcd44dcU), LEV(0x4543U),
95    LEV(0x456U), LEV(0x5663677U),
96    LEV(0x3cd90cU), LEV(0x3958a85U),
97    LEV(0x458c98d9U), LEV(0x344dbd9U),
98    LEV(0xd0d9d9dU), LEV(0x234455U),
99    LEV(0x1U), LEV(0x55U), LEV(0x4565U)
100};
101
102static uint32_t disasmInput1Kernel1Inputs[20] =
103{
104    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1113U),
105    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1113U),
106    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1114U),
107    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1113U),
108    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1113U)
109};
110
111static uint32_t disasmInput1Kernel1Outputs[17] =
112{
113    LEV(5U), LEV(6U), LEV(3U), LEV(13U), LEV(5U), LEV(117U), LEV(12U), LEV(3U),
114    LEV(785U), LEV(46U), LEV(55U), LEV(5U), LEV(2U), LEV(3U), LEV(0U), LEV(0U), LEV(44U)
115};
116
117static uint32_t disasmInput1Kernel1EarlyExit[3] = { LEV(1355U), LEV(44U), LEV(444U) };
118
119static uint32_t disasmInput1Kernel2EarlyExit[3] = { LEV(121U) };
120
121static CALDataSegmentEntry disasmInput1Kernel1Float32Consts[6] =
122{
123    { LEV(0U), LEV(5U) }, { LEV(66U), LEV(57U) }, { LEV(67U), LEV(334U) },
124    { LEV(1U), LEV(6U) }, { LEV(5U), LEV(86U) }, { LEV(2100U), LEV(466U) }
125};
126
127static CALSamplerMapEntry disasmInput1Kernel1InputSamplers[6] =
128{
129    { LEV(0U), LEV(5U) }, { LEV(66U), LEV(57U) }, { LEV(67U), LEV(334U) },
130    { LEV(1U), LEV(6U) }, { LEV(5U), LEV(86U) }, { LEV(2100U), LEV(466U) }
131};
132
133static uint32_t disasmInput1Kernel1UavOpMask[1] = { LEV(4556U) };
134
135/* AMD Input for disassembler for testing */
136static AmdDisasmInput disasmInput1 =
137{
138    GPUDeviceType::SPOOKY,
139    true,
140    "This\nis my\300\x31 stupid\r\"driver", "-O ccc",
141    sizeof(disasmInput1Global), disasmInput1Global,
142    {
143        { "kernelxVCR",
144          ::strlen(disasmInput1Kernel1Metadata),
145          disasmInput1Kernel1Metadata,
146          sizeof(disasmInput1Kernel1Header), disasmInput1Kernel1Header,
147          {
148              { { 8, 52, CALNOTE_ATI_PROGINFO,
149                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
150                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1ProgInfo) },
151              { { 8, 79, CALNOTE_ATI_INPUTS,
152                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
153                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1Inputs) },
154              { { 8, 67, CALNOTE_ATI_OUTPUTS,
155                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
156                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1Outputs) },
157              { { 8, 12, CALNOTE_ATI_EARLYEXIT,
158                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
159                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1EarlyExit) },
160              { { 8, 4, CALNOTE_ATI_EARLYEXIT,
161                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
162                 reinterpret_cast<cxbyte*>(disasmInput1Kernel2EarlyExit) },
163              { { 8, 48, CALNOTE_ATI_FLOAT32CONSTS,
164                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
165                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1Float32Consts) },
166              { { 8, 48, CALNOTE_ATI_INPUT_SAMPLERS,
167                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
168                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1InputSamplers) },
169              { { 8, 48, CALNOTE_ATI_CONSTANT_BUFFERS,
170                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
171                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1InputSamplers) },
172              { { 8, 48, 0x3d, { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
173                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1InputSamplers) },
174              { { 8, 4, CALNOTE_ATI_UAV_OP_MASK,
175                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
176                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1UavOpMask) },
177          },
178          sizeof(disasmInput1Kernel1Data), disasmInput1Kernel1Data,
179          0, nullptr
180        }
181    }
182};
183
184static const cxbyte galliumInput1Global[14] =
185{ 1,2,3,4,5,6,7,8,9,10,11,33,44,55 };
186
187/* Gallium Input for disassembler for testing */
188static const GalliumDisasmInput galliumDisasmData =
189{
190    GPUDeviceType::PITCAIRN, false, false, false, false,
191    sizeof(galliumInput1Global), galliumInput1Global,
192    {
193        { "kernel1",
194          { { 0xff1123, 0xcda1fa }, { 0x3bf1123, 0xfdca45 }, { 0x2dca6, 0xfbca168 } },
195          0, {
196              { GalliumArgType::SCALAR, false, GalliumArgSemantic::GENERAL, 4, 8, 12 },
197              { GalliumArgType::CONSTANT, false, GalliumArgSemantic::GENERAL, 1, 8, 12 },
198              { GalliumArgType::GLOBAL, false, GalliumArgSemantic::GENERAL, 4, 2, 12 },
199              { GalliumArgType::IMAGE2D_RDONLY, false,
200                  GalliumArgSemantic::GENERAL, 4, 7, 45 },
201              { GalliumArgType::IMAGE2D_WRONLY, false,
202                  GalliumArgSemantic::GENERAL, 4, 8, 45 },
203              { GalliumArgType::IMAGE3D_RDONLY, false,
204                  GalliumArgSemantic::GENERAL, 9, 7, 45 },
205              { GalliumArgType::IMAGE3D_WRONLY, false,
206                  GalliumArgSemantic::GENERAL, 12, 7, 45 },
207              { GalliumArgType::SAMPLER, false, GalliumArgSemantic::GENERAL, 17, 16, 74 },
208              { GalliumArgType::SCALAR, true, GalliumArgSemantic::GENERAL, 4, 8, 12 },
209              { GalliumArgType::SCALAR, false,
210                  GalliumArgSemantic::GRID_DIMENSION, 124, 8, 12 },
211              { GalliumArgType::SCALAR, false,
212                  GalliumArgSemantic::GRID_OFFSET, 4, 0, 32 }
213          } },
214        { "kernel2",
215          { { 0x234423, 0xaaabba }, { 0x3bdd123, 0x132235 }, { 0x11122, 0xf3424dd } },
216          0, {
217              { GalliumArgType::CONSTANT, false, GalliumArgSemantic::GENERAL, 1, 8, 12 },
218              { GalliumArgType::GLOBAL, false, GalliumArgSemantic::GENERAL, 4, 2, 12 },
219              { GalliumArgType::SCALAR, false, GalliumArgSemantic::GENERAL, 4, 8, 12 },
220              { GalliumArgType::IMAGE2D_RDONLY, false,
221                  GalliumArgSemantic::GENERAL, 4, 9, 45 },
222              { GalliumArgType::IMAGE2D_WRONLY, false,
223                  GalliumArgSemantic::GENERAL, 4, 8, 51 },
224              { GalliumArgType::IMAGE3D_RDONLY, false,
225                  GalliumArgSemantic::GENERAL, 9, 7, 45 },
226              { GalliumArgType::IMAGE3D_WRONLY, true,
227                  GalliumArgSemantic::GENERAL, 12, 7, 45 },
228              { GalliumArgType::SAMPLER, false, GalliumArgSemantic::GENERAL, 17, 16, 74 },
229              { GalliumArgType::SCALAR, true, GalliumArgSemantic::GENERAL, 4, 8, 12 },
230              { GalliumArgType::SCALAR, false,
231                  GalliumArgSemantic::GRID_DIMENSION, 124, 8, 12 },
232              { GalliumArgType::SCALAR, false,
233                  GalliumArgSemantic::GRID_OFFSET, 4, 32, 32 }
234          } }
235    },
236    0, nullptr
237};
238
239struct DisasmAmdTestCase
240{
241    const AmdDisasmInput* amdInput;
242    const GalliumDisasmInput* galliumInput;
243    const char* filename;
244    const char* expectedString;
245    bool config;
246    bool hsaConfig;
247    cxuint llvmVersion;
248    const char* exceptionString;
249};
250
251// disasm testcases
252static const DisasmAmdTestCase disasmDataTestCases[] =
253{
254    /* 0 - */
255    { &disasmInput1, nullptr, nullptr,
256        R"xxFxx(.amd
257.gpu Spooky
258.64bit
259.compile_options "-O ccc"
260.driver_info "This\nis my\3001 stupid\r\"driver"
261.globaldata
262    .byte 0x0d, 0x38, 0x42, 0xd5, 0x37, 0x5d, 0x7b, 0x55
263    .byte 0xa4, 0xea, 0x15, 0x25, 0x2c, 0xbc
264.kernel kernelxVCR
265    .header
266        .byte 0x01, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00
267        .byte 0x0c, 0x03, 0x06, 0x03, 0x03, 0x02, 0x00, 0x00
268        .fill 16, 1, 0x13
269        .byte 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x12
270        .fill 19, 1, 0x13
271    .metadata
272        .ascii ";ARGSTART:__OpenCL_DCT_kernel\n"
273        .ascii ";version:3:1:111\n"
274        .ascii ";device:pitcairn\n"
275        .ascii ";uniqueid:1024\n"
276        .ascii ";memory:uavprivate:0\n"
277        .ascii ";memory:hwlocal:0\n"
278        .ascii ";memory:hwregion:0\n"
279        .ascii ";pointer:output:float:1:1:0:uav:12:4:RW:0:0\n"
280        .ascii ";pointer:input:float:1:1:16:uav:13:4:RO:0:0\n"
281        .ascii ";pointer:dct8x8:float:1:1:32:uav:14:4:RO:0:0\n"
282        .ascii ";pointer:inter:float:1:1:48:hl:1:4:RW:0:0\n"
283        .ascii ";value:width:u32:1:1:64\n"
284        .ascii ";value:blockWidth:u32:1:1:80\n"
285        .ascii ";value:inverse:u32:1:1:96\n"
286        .ascii ";function:1:1030\n"
287        .ascii ";uavid:11\n"
288        .ascii ";printfid:9\n"
289        .ascii ";cbid:10\n"
290        .ascii ";privateid:8\n"
291        .ascii ";reflection:0:float*\n"
292        .ascii ";reflection:1:float*\n"
293        .ascii ";reflection:2:float*\n"
294        .ascii ";reflection:3:float*\n"
295        .ascii ";reflection:4:uint\n"
296        .ascii ";reflection:5:uint\n"
297        .ascii ";reflection:6:uint\n"
298        .ascii ";ARGEND:__OpenCL_DCT_kernel\n"
299        .ascii "dessss9843re88888888888888888uuuuuuuufdddessss9843re88888888888888888uuu"
300        .ascii "uuuuufdddessss9843re88888888888888888uuuuuuuufdd444444444444444444444444"
301        .ascii "\r\r\t\t\t\t\txx\f\f\f\3777x833334441\n"
302    .data
303        .byte 0x01, 0x04, 0x05, 0x06, 0x06, 0x06, 0x04, 0x03
304        .byte 0x03, 0x05, 0x41, 0x0d, 0x05, 0x05, 0x0b, 0x39
305        .byte 0x05, 0x41, 0x05, 0x00, 0x00, 0x00, 0x00, 0x05
306        .byte 0x01, 0x0f, 0x05, 0x01, 0x38, 0x00, 0x00, 0x05
307        .byte 0x05, 0x41, 0x05, 0x00, 0x00, 0x4e, 0xff, 0x05
308    .proginfo
309        .entry 0xffcd44dc, 0x00004543
310        .entry 0x00000456, 0x05663677
311        .entry 0x003cd90c, 0x03958a85
312        .entry 0x458c98d9, 0x0344dbd9
313        .entry 0x0d0d9d9d, 0x00234455
314        .entry 0x00000001, 0x00000055
315        .byte 0x65, 0x45, 0x00, 0x00
316    .inputs
317        .fill 8, 4, 0x00000459
318        .int 0x00000459, 0x00000459, 0x00000459, 0x0000045a
319        .fill 7, 4, 0x00000459
320        .byte 0x59, 0x04, 0x00
321    .outputs
322        .int 0x00000005, 0x00000006, 0x00000003, 0x0000000d
323        .int 0x00000005, 0x00000075, 0x0000000c, 0x00000003
324        .int 0x00000311, 0x0000002e, 0x00000037, 0x00000005
325        .int 0x00000002, 0x00000003, 0x00000000, 0x00000000
326        .byte 0x2c, 0x00, 0x00
327    .earlyexit
328        .byte 0x4b, 0x05, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00
329        .byte 0xbc, 0x01, 0x00, 0x00
330    .earlyexit 121
331    .floatconsts
332        .segment 0, 5
333        .segment 66, 57
334        .segment 67, 334
335        .segment 1, 6
336        .segment 5, 86
337        .segment 2100, 466
338    .inputsamplers
339        .sampler 0, 0x5
340        .sampler 66, 0x39
341        .sampler 67, 0x14e
342        .sampler 1, 0x6
343        .sampler 5, 0x56
344        .sampler 2100, 0x1d2
345    .constantbuffers
346        .cbmask 0, 5
347        .cbmask 66, 57
348        .cbmask 67, 334
349        .cbmask 1, 6
350        .cbmask 5, 86
351        .cbmask 2100, 466
352    .calnote 0x3d
353        .byte 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
354        .byte 0x42, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00
355        .byte 0x43, 0x00, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00
356        .byte 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00
357        .byte 0x05, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00
358        .byte 0x34, 0x08, 0x00, 0x00, 0xd2, 0x01, 0x00, 0x00
359    .uavopmask 4556
360)xxFxx", false, false
361    },
362    /* 1 - */
363    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/samplekernels.clo",
364        R"xxFxx(.amd
365.gpu Pitcairn
366.32bit
367.compile_options ""
368.driver_info "@(#) OpenCL 1.2 AMD-APP (1702.3).  Driver version: 1702.3 (VM)"
369.kernel add
370    .header
371        .fill 16, 1, 0x00
372        .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
373        .fill 8, 1, 0x00
374    .metadata
375        .ascii ";ARGSTART:__OpenCL_add_kernel\n"
376        .ascii ";version:3:1:111\n"
377        .ascii ";device:pitcairn\n"
378        .ascii ";uniqueid:1024\n"
379        .ascii ";memory:uavprivate:0\n"
380        .ascii ";memory:hwlocal:0\n"
381        .ascii ";memory:hwregion:0\n"
382        .ascii ";value:n:u32:1:1:0\n"
383        .ascii ";pointer:adat:u32:1:1:16:uav:12:4:RO:0:0\n"
384        .ascii ";constarg:1:adat\n"
385        .ascii ";pointer:bdat:u32:1:1:32:uav:13:4:RO:0:0\n"
386        .ascii ";constarg:2:bdat\n"
387        .ascii ";pointer:cdat:u32:1:1:48:uav:14:4:RW:0:0\n"
388        .ascii ";function:1:1028\n"
389        .ascii ";uavid:11\n"
390        .ascii ";printfid:9\n"
391        .ascii ";cbid:10\n"
392        .ascii ";privateid:8\n"
393        .ascii ";reflection:0:uint\n"
394        .ascii ";reflection:1:uint*\n"
395        .ascii ";reflection:2:uint*\n"
396        .ascii ";reflection:3:uint*\n"
397        .ascii ";ARGEND:__OpenCL_add_kernel\n"
398    .data
399        .fill 4736, 1, 0x00
400    .inputs
401    .outputs
402    .uav
403        .entry 12, 4, 0, 5
404        .entry 13, 4, 0, 5
405        .entry 14, 4, 0, 5
406        .entry 11, 4, 0, 5
407    .condout 0
408    .floatconsts
409    .intconsts
410    .boolconsts
411    .earlyexit 0
412    .globalbuffers
413    .constantbuffers
414        .cbmask 0, 0
415        .cbmask 1, 0
416    .inputsamplers
417    .scratchbuffers
418        .int 0x00000000
419    .persistentbuffers
420    .proginfo
421        .entry 0x80001000, 0x00000003
422        .entry 0x80001001, 0x00000017
423        .entry 0x80001002, 0x00000000
424        .entry 0x80001003, 0x00000002
425        .entry 0x80001004, 0x00000002
426        .entry 0x80001005, 0x00000002
427        .entry 0x80001006, 0x00000000
428        .entry 0x80001007, 0x00000004
429        .entry 0x80001008, 0x00000004
430        .entry 0x80001009, 0x00000002
431        .entry 0x8000100a, 0x00000001
432        .entry 0x8000100b, 0x00000008
433        .entry 0x8000100c, 0x00000004
434        .entry 0x80001041, 0x00000003
435        .entry 0x80001042, 0x00000010
436        .entry 0x80001863, 0x00000066
437        .entry 0x80001864, 0x00000100
438        .entry 0x80001043, 0x000000c0
439        .entry 0x80001044, 0x00000000
440        .entry 0x80001045, 0x00000000
441        .entry 0x00002e13, 0x00000098
442        .entry 0x8000001c, 0x00000100
443        .entry 0x8000001d, 0x00000000
444        .entry 0x8000001e, 0x00000000
445        .entry 0x80001841, 0x00000000
446        .entry 0x8000001f, 0x00007000
447        .entry 0x80001843, 0x00007000
448        .entry 0x80001844, 0x00000000
449        .entry 0x80001845, 0x00000000
450        .entry 0x80001846, 0x00000000
451        .entry 0x80001847, 0x00000000
452        .entry 0x80001848, 0x00000000
453        .entry 0x80001849, 0x00000000
454        .entry 0x8000184a, 0x00000000
455        .entry 0x8000184b, 0x00000000
456        .entry 0x8000184c, 0x00000000
457        .entry 0x8000184d, 0x00000000
458        .entry 0x8000184e, 0x00000000
459        .entry 0x8000184f, 0x00000000
460        .entry 0x80001850, 0x00000000
461        .entry 0x80001851, 0x00000000
462        .entry 0x80001852, 0x00000000
463        .entry 0x80001853, 0x00000000
464        .entry 0x80001854, 0x00000000
465        .entry 0x80001855, 0x00000000
466        .entry 0x80001856, 0x00000000
467        .entry 0x80001857, 0x00000000
468        .entry 0x80001858, 0x00000000
469        .entry 0x80001859, 0x00000000
470        .entry 0x8000185a, 0x00000000
471        .entry 0x8000185b, 0x00000000
472        .entry 0x8000185c, 0x00000000
473        .entry 0x8000185d, 0x00000000
474        .entry 0x8000185e, 0x00000000
475        .entry 0x8000185f, 0x00000000
476        .entry 0x80001860, 0x00000000
477        .entry 0x80001861, 0x00000000
478        .entry 0x80001862, 0x00000000
479        .entry 0x8000000a, 0x00000001
480        .entry 0x80000078, 0x00000040
481        .entry 0x80000081, 0x00008000
482        .entry 0x80000082, 0x00000000
483    .subconstantbuffers
484    .uavmailboxsize 0
485    .uavopmask
486        .byte 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
487        .fill 120, 1, 0x00
488    .text
489/*c2000504         */ s_buffer_load_dword s0, s[4:7], 0x4
490/*c2008518         */ s_buffer_load_dword s1, s[4:7], 0x18
491/*c2020900         */ s_buffer_load_dword s4, s[8:11], 0x0
492/*c2028904         */ s_buffer_load_dword s5, s[8:11], 0x4
493/*c2030908         */ s_buffer_load_dword s6, s[8:11], 0x8
494/*c203890c         */ s_buffer_load_dword s7, s[8:11], 0xc
495/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
496/*8380ff00 0000ffff*/ s_min_u32       s0, s0, 0xffff
497/*9300000c         */ s_mul_i32       s0, s12, s0
498/*80000100         */ s_add_u32       s0, s0, s1
499/*4a000000         */ v_add_i32       v0, vcc, s0, v0
500/*7d880004         */ v_cmp_gt_u32    vcc, s4, v0
501/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
502/*bf880011         */ s_cbranch_execz .L128_0
503/*c0840360         */ s_load_dwordx4  s[8:11], s[2:3], 0x60
504/*c0860368         */ s_load_dwordx4  s[12:15], s[2:3], 0x68
505/*34000082         */ v_lshlrev_b32   v0, 2, v0
506/*4a020005         */ v_add_i32       v1, vcc, s5, v0
507/*4a040006         */ v_add_i32       v2, vcc, s6, v0
508/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
509/*eba01000 80020101*/ tbuffer_load_format_x v1, v1, s[8:11], 0 offen format:[32,float]
510/*eba01000 80030202*/ tbuffer_load_format_x v2, v2, s[12:15], 0 offen format:[32,float]
511/*c0840370         */ s_load_dwordx4  s[8:11], s[2:3], 0x70
512/*bf8c0f70         */ s_waitcnt       vmcnt(0)
513/*4a020501         */ v_add_i32       v1, vcc, v1, v2
514/*4a000007         */ v_add_i32       v0, vcc, s7, v0
515/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
516/*eba41000 80020100*/ tbuffer_store_format_x v1, v0, s[8:11], 0 offen format:[32,float]
517.L128_0:
518/*bf810000         */ s_endpgm
519.kernel multiply
520    .header
521        .fill 16, 1, 0x00
522        .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
523        .fill 8, 1, 0x00
524    .metadata
525        .ascii ";ARGSTART:__OpenCL_multiply_kernel\n"
526        .ascii ";version:3:1:111\n"
527        .ascii ";device:pitcairn\n"
528        .ascii ";uniqueid:1025\n"
529        .ascii ";memory:uavprivate:0\n"
530        .ascii ";memory:hwlocal:0\n"
531        .ascii ";memory:hwregion:0\n"
532        .ascii ";value:n:u32:1:1:0\n"
533        .ascii ";pointer:adat:u32:1:1:16:uav:12:4:RO:0:0\n"
534        .ascii ";constarg:1:adat\n"
535        .ascii ";pointer:bdat:u32:1:1:32:uav:13:4:RO:0:0\n"
536        .ascii ";constarg:2:bdat\n"
537        .ascii ";pointer:cdat:u32:1:1:48:uav:14:4:RW:0:0\n"
538        .ascii ";function:1:1029\n"
539        .ascii ";uavid:11\n"
540        .ascii ";printfid:9\n"
541        .ascii ";cbid:10\n"
542        .ascii ";privateid:8\n"
543        .ascii ";reflection:0:uint\n"
544        .ascii ";reflection:1:uint*\n"
545        .ascii ";reflection:2:uint*\n"
546        .ascii ";reflection:3:uint*\n"
547        .ascii ";ARGEND:__OpenCL_multiply_kernel\n"
548    .data
549        .fill 4736, 1, 0x00
550    .inputs
551    .outputs
552    .uav
553        .entry 12, 4, 0, 5
554        .entry 13, 4, 0, 5
555        .entry 14, 4, 0, 5
556        .entry 11, 4, 0, 5
557    .condout 0
558    .floatconsts
559    .intconsts
560    .boolconsts
561    .earlyexit 0
562    .globalbuffers
563    .constantbuffers
564        .cbmask 0, 0
565        .cbmask 1, 0
566    .inputsamplers
567    .scratchbuffers
568        .int 0x00000000
569    .persistentbuffers
570    .proginfo
571        .entry 0x80001000, 0x00000003
572        .entry 0x80001001, 0x00000017
573        .entry 0x80001002, 0x00000000
574        .entry 0x80001003, 0x00000002
575        .entry 0x80001004, 0x00000002
576        .entry 0x80001005, 0x00000002
577        .entry 0x80001006, 0x00000000
578        .entry 0x80001007, 0x00000004
579        .entry 0x80001008, 0x00000004
580        .entry 0x80001009, 0x00000002
581        .entry 0x8000100a, 0x00000001
582        .entry 0x8000100b, 0x00000008
583        .entry 0x8000100c, 0x00000004
584        .entry 0x80001041, 0x00000003
585        .entry 0x80001042, 0x00000014
586        .entry 0x80001863, 0x00000066
587        .entry 0x80001864, 0x00000100
588        .entry 0x80001043, 0x000000c0
589        .entry 0x80001044, 0x00000000
590        .entry 0x80001045, 0x00000000
591        .entry 0x00002e13, 0x00000098
592        .entry 0x8000001c, 0x00000100
593        .entry 0x8000001d, 0x00000000
594        .entry 0x8000001e, 0x00000000
595        .entry 0x80001841, 0x00000000
596        .entry 0x8000001f, 0x00007000
597        .entry 0x80001843, 0x00007000
598        .entry 0x80001844, 0x00000000
599        .entry 0x80001845, 0x00000000
600        .entry 0x80001846, 0x00000000
601        .entry 0x80001847, 0x00000000
602        .entry 0x80001848, 0x00000000
603        .entry 0x80001849, 0x00000000
604        .entry 0x8000184a, 0x00000000
605        .entry 0x8000184b, 0x00000000
606        .entry 0x8000184c, 0x00000000
607        .entry 0x8000184d, 0x00000000
608        .entry 0x8000184e, 0x00000000
609        .entry 0x8000184f, 0x00000000
610        .entry 0x80001850, 0x00000000
611        .entry 0x80001851, 0x00000000
612        .entry 0x80001852, 0x00000000
613        .entry 0x80001853, 0x00000000
614        .entry 0x80001854, 0x00000000
615        .entry 0x80001855, 0x00000000
616        .entry 0x80001856, 0x00000000
617        .entry 0x80001857, 0x00000000
618        .entry 0x80001858, 0x00000000
619        .entry 0x80001859, 0x00000000
620        .entry 0x8000185a, 0x00000000
621        .entry 0x8000185b, 0x00000000
622        .entry 0x8000185c, 0x00000000
623        .entry 0x8000185d, 0x00000000
624        .entry 0x8000185e, 0x00000000
625        .entry 0x8000185f, 0x00000000
626        .entry 0x80001860, 0x00000000
627        .entry 0x80001861, 0x00000000
628        .entry 0x80001862, 0x00000000
629        .entry 0x8000000a, 0x00000001
630        .entry 0x80000078, 0x00000040
631        .entry 0x80000081, 0x00008000
632        .entry 0x80000082, 0x00000000
633    .subconstantbuffers
634    .uavmailboxsize 0
635    .uavopmask
636        .byte 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
637        .fill 120, 1, 0x00
638    .text
639/*c2000504         */ s_buffer_load_dword s0, s[4:7], 0x4
640/*c2008518         */ s_buffer_load_dword s1, s[4:7], 0x18
641/*c2020900         */ s_buffer_load_dword s4, s[8:11], 0x0
642/*c2028904         */ s_buffer_load_dword s5, s[8:11], 0x4
643/*c2030908         */ s_buffer_load_dword s6, s[8:11], 0x8
644/*c203890c         */ s_buffer_load_dword s7, s[8:11], 0xc
645/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
646/*8380ff00 0000ffff*/ s_min_u32       s0, s0, 0xffff
647/*9300000c         */ s_mul_i32       s0, s12, s0
648/*80000100         */ s_add_u32       s0, s0, s1
649/*4a000000         */ v_add_i32       v0, vcc, s0, v0
650/*7d880004         */ v_cmp_gt_u32    vcc, s4, v0
651/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
652/*bf880011         */ s_cbranch_execz .L128_1
653/*c0840360         */ s_load_dwordx4  s[8:11], s[2:3], 0x60
654/*c0860368         */ s_load_dwordx4  s[12:15], s[2:3], 0x68
655/*c0880370         */ s_load_dwordx4  s[16:19], s[2:3], 0x70
656/*34000082         */ v_lshlrev_b32   v0, 2, v0
657/*4a020005         */ v_add_i32       v1, vcc, s5, v0
658/*4a040006         */ v_add_i32       v2, vcc, s6, v0
659/*4a000007         */ v_add_i32       v0, vcc, s7, v0
660/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
661/*eba01000 80020101*/ tbuffer_load_format_x v1, v1, s[8:11], 0 offen format:[32,float]
662/*eba01000 80030202*/ tbuffer_load_format_x v2, v2, s[12:15], 0 offen format:[32,float]
663/*bf8c0f70         */ s_waitcnt       vmcnt(0)
664/*d2d60001 00020302*/ v_mul_lo_i32    v1, v2, v1
665/*eba41000 80040100*/ tbuffer_store_format_x v1, v0, s[16:19], 0 offen format:[32,float]
666.L128_1:
667/*bf810000         */ s_endpgm
668)xxFxx", false, false
669    },
670    /* 2 - */
671    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/samplekernels_64.clo",
672        R"xxFxx(.amd
673.gpu Pitcairn
674.64bit
675.compile_options ""
676.driver_info "@(#) OpenCL 1.2 AMD-APP (1702.3).  Driver version: 1702.3 (VM)"
677.kernel add
678    .header
679        .fill 16, 1, 0x00
680        .byte 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
681        .fill 8, 1, 0x00
682    .metadata
683        .ascii ";ARGSTART:__OpenCL_add_kernel\n"
684        .ascii ";version:3:1:111\n"
685        .ascii ";device:pitcairn\n"
686        .ascii ";uniqueid:1024\n"
687        .ascii ";memory:uavprivate:0\n"
688        .ascii ";memory:hwlocal:0\n"
689        .ascii ";memory:hwregion:0\n"
690        .ascii ";value:n:u32:1:1:0\n"
691        .ascii ";pointer:adat:u32:1:1:16:uav:12:4:RO:0:0\n"
692        .ascii ";constarg:1:adat\n"
693        .ascii ";pointer:bdat:u32:1:1:32:uav:13:4:RO:0:0\n"
694        .ascii ";constarg:2:bdat\n"
695        .ascii ";pointer:cdat:u32:1:1:48:uav:14:4:RW:0:0\n"
696        .ascii ";function:1:1028\n"
697        .ascii ";memory:64bitABI\n"
698        .ascii ";uavid:11\n"
699        .ascii ";printfid:9\n"
700        .ascii ";cbid:10\n"
701        .ascii ";privateid:8\n"
702        .ascii ";reflection:0:uint\n"
703        .ascii ";reflection:1:uint*\n"
704        .ascii ";reflection:2:uint*\n"
705        .ascii ";reflection:3:uint*\n"
706        .ascii ";ARGEND:__OpenCL_add_kernel\n"
707    .data
708        .fill 4736, 1, 0x00
709    .inputs
710    .outputs
711    .uav
712        .entry 12, 4, 0, 5
713        .entry 13, 4, 0, 5
714        .entry 14, 4, 0, 5
715        .entry 11, 4, 0, 5
716    .condout 0
717    .floatconsts
718    .intconsts
719    .boolconsts
720    .earlyexit 0
721    .globalbuffers
722    .constantbuffers
723        .cbmask 0, 0
724        .cbmask 1, 0
725    .inputsamplers
726    .scratchbuffers
727        .int 0x00000000
728    .persistentbuffers
729    .proginfo
730        .entry 0x80001000, 0x00000003
731        .entry 0x80001001, 0x00000017
732        .entry 0x80001002, 0x00000000
733        .entry 0x80001003, 0x00000002
734        .entry 0x80001004, 0x00000002
735        .entry 0x80001005, 0x00000002
736        .entry 0x80001006, 0x00000000
737        .entry 0x80001007, 0x00000004
738        .entry 0x80001008, 0x00000004
739        .entry 0x80001009, 0x00000002
740        .entry 0x8000100a, 0x00000001
741        .entry 0x8000100b, 0x00000008
742        .entry 0x8000100c, 0x00000004
743        .entry 0x80001041, 0x00000008
744        .entry 0x80001042, 0x00000014
745        .entry 0x80001863, 0x00000066
746        .entry 0x80001864, 0x00000100
747        .entry 0x80001043, 0x000000c0
748        .entry 0x80001044, 0x00000000
749        .entry 0x80001045, 0x00000000
750        .entry 0x00002e13, 0x00000098
751        .entry 0x8000001c, 0x00000100
752        .entry 0x8000001d, 0x00000000
753        .entry 0x8000001e, 0x00000000
754        .entry 0x80001841, 0x00000000
755        .entry 0x8000001f, 0x00007000
756        .entry 0x80001843, 0x00007000
757        .entry 0x80001844, 0x00000000
758        .entry 0x80001845, 0x00000000
759        .entry 0x80001846, 0x00000000
760        .entry 0x80001847, 0x00000000
761        .entry 0x80001848, 0x00000000
762        .entry 0x80001849, 0x00000000
763        .entry 0x8000184a, 0x00000000
764        .entry 0x8000184b, 0x00000000
765        .entry 0x8000184c, 0x00000000
766        .entry 0x8000184d, 0x00000000
767        .entry 0x8000184e, 0x00000000
768        .entry 0x8000184f, 0x00000000
769        .entry 0x80001850, 0x00000000
770        .entry 0x80001851, 0x00000000
771        .entry 0x80001852, 0x00000000
772        .entry 0x80001853, 0x00000000
773        .entry 0x80001854, 0x00000000
774        .entry 0x80001855, 0x00000000
775        .entry 0x80001856, 0x00000000
776        .entry 0x80001857, 0x00000000
777        .entry 0x80001858, 0x00000000
778        .entry 0x80001859, 0x00000000
779        .entry 0x8000185a, 0x00000000
780        .entry 0x8000185b, 0x00000000
781        .entry 0x8000185c, 0x00000000
782        .entry 0x8000185d, 0x00000000
783        .entry 0x8000185e, 0x00000000
784        .entry 0x8000185f, 0x00000000
785        .entry 0x80001860, 0x00000000
786        .entry 0x80001861, 0x00000000
787        .entry 0x80001862, 0x00000000
788        .entry 0x8000000a, 0x00000001
789        .entry 0x80000078, 0x00000040
790        .entry 0x80000081, 0x00008000
791        .entry 0x80000082, 0x00000000
792    .subconstantbuffers
793    .uavmailboxsize 0
794    .uavopmask
795        .byte 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
796        .fill 120, 1, 0x00
797    .text
798/*c2000504         */ s_buffer_load_dword s0, s[4:7], 0x4
799/*c2008518         */ s_buffer_load_dword s1, s[4:7], 0x18
800/*c2420904         */ s_buffer_load_dwordx2 s[4:5], s[8:11], 0x4
801/*c2430908         */ s_buffer_load_dwordx2 s[6:7], s[8:11], 0x8
802/*c247090c         */ s_buffer_load_dwordx2 s[14:15], s[8:11], 0xc
803/*c2040900         */ s_buffer_load_dword s8, s[8:11], 0x0
804/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
805/*8380ff00 0000ffff*/ s_min_u32       s0, s0, 0xffff
806/*9300000c         */ s_mul_i32       s0, s12, s0
807/*80000100         */ s_add_u32       s0, s0, s1
808/*4a000000         */ v_add_i32       v0, vcc, s0, v0
809/*7e020280         */ v_mov_b32       v1, 0
810/*7e040208         */ v_mov_b32       v2, s8
811/*7e060280         */ v_mov_b32       v3, 0
812/*7dc20500         */ v_cmp_lt_u64    vcc, v[0:1], v[2:3]
813/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
814/*bf880018         */ s_cbranch_execz .L168_0
815/*c0840360         */ s_load_dwordx4  s[8:11], s[2:3], 0x60
816/*c0880368         */ s_load_dwordx4  s[16:19], s[2:3], 0x68
817/*d2c20000 00010500*/ v_lshl_b64      v[0:1], v[0:1], 2
818/*4a040004         */ v_add_i32       v2, vcc, s4, v0
819/*7e060205         */ v_mov_b32       v3, s5
820/*50060303         */ v_addc_u32      v3, vcc, v3, v1, vcc
821/*4a0c0006         */ v_add_i32       v6, vcc, s6, v0
822/*7e0a0207         */ v_mov_b32       v5, s7
823/*500e0305         */ v_addc_u32      v7, vcc, v5, v1, vcc
824/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
825/*eba08000 80020202*/ tbuffer_load_format_x v2, v[2:3], s[8:11], 0 addr64 format:[32,float]
826/*eba08000 80040306*/ tbuffer_load_format_x v3, v[6:7], s[16:19], 0 addr64 format:[32,float]
827/*c0820370         */ s_load_dwordx4  s[4:7], s[2:3], 0x70
828/*bf8c0f70         */ s_waitcnt       vmcnt(0)
829/*4a040702         */ v_add_i32       v2, vcc, v2, v3
830/*4a00000e         */ v_add_i32       v0, vcc, s14, v0
831/*7e06020f         */ v_mov_b32       v3, s15
832/*50020303         */ v_addc_u32      v1, vcc, v3, v1, vcc
833/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
834/*eba48000 80010200*/ tbuffer_store_format_x v2, v[0:1], s[4:7], 0 addr64 format:[32,float]
835.L168_0:
836/*bf810000         */ s_endpgm
837.kernel multiply
838    .header
839        .fill 16, 1, 0x00
840        .byte 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
841        .fill 8, 1, 0x00
842    .metadata
843        .ascii ";ARGSTART:__OpenCL_multiply_kernel\n"
844        .ascii ";version:3:1:111\n"
845        .ascii ";device:pitcairn\n"
846        .ascii ";uniqueid:1025\n"
847        .ascii ";memory:uavprivate:0\n"
848        .ascii ";memory:hwlocal:0\n"
849        .ascii ";memory:hwregion:0\n"
850        .ascii ";value:n:u32:1:1:0\n"
851        .ascii ";pointer:adat:u32:1:1:16:uav:12:4:RO:0:0\n"
852        .ascii ";constarg:1:adat\n"
853        .ascii ";pointer:bdat:u32:1:1:32:uav:13:4:RO:0:0\n"
854        .ascii ";constarg:2:bdat\n"
855        .ascii ";pointer:cdat:u32:1:1:48:uav:14:4:RW:0:0\n"
856        .ascii ";function:1:1029\n"
857        .ascii ";memory:64bitABI\n"
858        .ascii ";uavid:11\n"
859        .ascii ";printfid:9\n"
860        .ascii ";cbid:10\n"
861        .ascii ";privateid:8\n"
862        .ascii ";reflection:0:uint\n"
863        .ascii ";reflection:1:uint*\n"
864        .ascii ";reflection:2:uint*\n"
865        .ascii ";reflection:3:uint*\n"
866        .ascii ";ARGEND:__OpenCL_multiply_kernel\n"
867    .data
868        .fill 4736, 1, 0x00
869    .inputs
870    .outputs
871    .uav
872        .entry 12, 4, 0, 5
873        .entry 13, 4, 0, 5
874        .entry 14, 4, 0, 5
875        .entry 11, 4, 0, 5
876    .condout 0
877    .floatconsts
878    .intconsts
879    .boolconsts
880    .earlyexit 0
881    .globalbuffers
882    .constantbuffers
883        .cbmask 0, 0
884        .cbmask 1, 0
885    .inputsamplers
886    .scratchbuffers
887        .int 0x00000000
888    .persistentbuffers
889    .proginfo
890        .entry 0x80001000, 0x00000003
891        .entry 0x80001001, 0x00000017
892        .entry 0x80001002, 0x00000000
893        .entry 0x80001003, 0x00000002
894        .entry 0x80001004, 0x00000002
895        .entry 0x80001005, 0x00000002
896        .entry 0x80001006, 0x00000000
897        .entry 0x80001007, 0x00000004
898        .entry 0x80001008, 0x00000004
899        .entry 0x80001009, 0x00000002
900        .entry 0x8000100a, 0x00000001
901        .entry 0x8000100b, 0x00000008
902        .entry 0x8000100c, 0x00000004
903        .entry 0x80001041, 0x00000008
904        .entry 0x80001042, 0x00000014
905        .entry 0x80001863, 0x00000066
906        .entry 0x80001864, 0x00000100
907        .entry 0x80001043, 0x000000c0
908        .entry 0x80001044, 0x00000000
909        .entry 0x80001045, 0x00000000
910        .entry 0x00002e13, 0x00000098
911        .entry 0x8000001c, 0x00000100
912        .entry 0x8000001d, 0x00000000
913        .entry 0x8000001e, 0x00000000
914        .entry 0x80001841, 0x00000000
915        .entry 0x8000001f, 0x00007000
916        .entry 0x80001843, 0x00007000
917        .entry 0x80001844, 0x00000000
918        .entry 0x80001845, 0x00000000
919        .entry 0x80001846, 0x00000000
920        .entry 0x80001847, 0x00000000
921        .entry 0x80001848, 0x00000000
922        .entry 0x80001849, 0x00000000
923        .entry 0x8000184a, 0x00000000
924        .entry 0x8000184b, 0x00000000
925        .entry 0x8000184c, 0x00000000
926        .entry 0x8000184d, 0x00000000
927        .entry 0x8000184e, 0x00000000
928        .entry 0x8000184f, 0x00000000
929        .entry 0x80001850, 0x00000000
930        .entry 0x80001851, 0x00000000
931        .entry 0x80001852, 0x00000000
932        .entry 0x80001853, 0x00000000
933        .entry 0x80001854, 0x00000000
934        .entry 0x80001855, 0x00000000
935        .entry 0x80001856, 0x00000000
936        .entry 0x80001857, 0x00000000
937        .entry 0x80001858, 0x00000000
938        .entry 0x80001859, 0x00000000
939        .entry 0x8000185a, 0x00000000
940        .entry 0x8000185b, 0x00000000
941        .entry 0x8000185c, 0x00000000
942        .entry 0x8000185d, 0x00000000
943        .entry 0x8000185e, 0x00000000
944        .entry 0x8000185f, 0x00000000
945        .entry 0x80001860, 0x00000000
946        .entry 0x80001861, 0x00000000
947        .entry 0x80001862, 0x00000000
948        .entry 0x8000000a, 0x00000001
949        .entry 0x80000078, 0x00000040
950        .entry 0x80000081, 0x00008000
951        .entry 0x80000082, 0x00000000
952    .subconstantbuffers
953    .uavmailboxsize 0
954    .uavopmask
955        .byte 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
956        .fill 120, 1, 0x00
957    .text
958/*c2000504         */ s_buffer_load_dword s0, s[4:7], 0x4
959/*c2008518         */ s_buffer_load_dword s1, s[4:7], 0x18
960/*c2420904         */ s_buffer_load_dwordx2 s[4:5], s[8:11], 0x4
961/*c2430908         */ s_buffer_load_dwordx2 s[6:7], s[8:11], 0x8
962/*c247090c         */ s_buffer_load_dwordx2 s[14:15], s[8:11], 0xc
963/*c2040900         */ s_buffer_load_dword s8, s[8:11], 0x0
964/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
965/*8380ff00 0000ffff*/ s_min_u32       s0, s0, 0xffff
966/*9300000c         */ s_mul_i32       s0, s12, s0
967/*80000100         */ s_add_u32       s0, s0, s1
968/*4a000000         */ v_add_i32       v0, vcc, s0, v0
969/*7e020280         */ v_mov_b32       v1, 0
970/*7e040208         */ v_mov_b32       v2, s8
971/*7e060280         */ v_mov_b32       v3, 0
972/*7dc20500         */ v_cmp_lt_u64    vcc, v[0:1], v[2:3]
973/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
974/*bf880019         */ s_cbranch_execz .L172_1
975/*c0840360         */ s_load_dwordx4  s[8:11], s[2:3], 0x60
976/*c0880368         */ s_load_dwordx4  s[16:19], s[2:3], 0x68
977/*d2c20000 00010500*/ v_lshl_b64      v[0:1], v[0:1], 2
978/*4a040004         */ v_add_i32       v2, vcc, s4, v0
979/*7e060205         */ v_mov_b32       v3, s5
980/*50060303         */ v_addc_u32      v3, vcc, v3, v1, vcc
981/*4a0c0006         */ v_add_i32       v6, vcc, s6, v0
982/*7e0a0207         */ v_mov_b32       v5, s7
983/*500e0305         */ v_addc_u32      v7, vcc, v5, v1, vcc
984/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
985/*eba08000 80020202*/ tbuffer_load_format_x v2, v[2:3], s[8:11], 0 addr64 format:[32,float]
986/*eba08000 80040306*/ tbuffer_load_format_x v3, v[6:7], s[16:19], 0 addr64 format:[32,float]
987/*c0820370         */ s_load_dwordx4  s[4:7], s[2:3], 0x70
988/*bf8c0f70         */ s_waitcnt       vmcnt(0)
989/*d2d60002 00020503*/ v_mul_lo_i32    v2, v3, v2
990/*4a00000e         */ v_add_i32       v0, vcc, s14, v0
991/*7e06020f         */ v_mov_b32       v3, s15
992/*50020303         */ v_addc_u32      v1, vcc, v3, v1, vcc
993/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
994/*eba48000 80010200*/ tbuffer_store_format_x v2, v[0:1], s[4:7], 0 addr64 format:[32,float]
995.L172_1:
996/*bf810000         */ s_endpgm
997)xxFxx", false, false
998    },
999    /* 3 - */
1000    { nullptr, &galliumDisasmData, nullptr,
1001        R"fxDfx(.gallium
1002.gpu Pitcairn
1003.32bit
1004.rodata
1005    .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
1006    .byte 0x09, 0x0a, 0x0b, 0x21, 0x2c, 0x37
1007.kernel kernel1
1008    .args
1009        .arg scalar, 4, 8, 12, zext, general
1010        .arg constant, 1, 8, 12, zext, general
1011        .arg global, 4, 2, 12, zext, general
1012        .arg image2d_rd, 4, 7, 45, zext, general
1013        .arg image2d_wr, 4, 8, 45, zext, general
1014        .arg image3d_rd, 9, 7, 45, zext, general
1015        .arg image3d_wr, 12, 7, 45, zext, general
1016        .arg sampler, 17, 16, 74, zext, general
1017        .arg scalar, 4, 8, 12, sext, general
1018        .arg scalar, 124, 8, 12, zext, griddim
1019        .arg scalar, 4, 0, 32, zext, gridoffset
1020    .proginfo
1021        .entry 0x00ff1123, 0x00cda1fa
1022        .entry 0x03bf1123, 0x00fdca45
1023        .entry 0x0002dca6, 0x0fbca168
1024.kernel kernel2
1025    .args
1026        .arg constant, 1, 8, 12, zext, general
1027        .arg global, 4, 2, 12, zext, general
1028        .arg scalar, 4, 8, 12, zext, general
1029        .arg image2d_rd, 4, 9, 45, zext, general
1030        .arg image2d_wr, 4, 8, 51, zext, general
1031        .arg image3d_rd, 9, 7, 45, zext, general
1032        .arg image3d_wr, 12, 7, 45, sext, general
1033        .arg sampler, 17, 16, 74, zext, general
1034        .arg scalar, 4, 8, 12, sext, general
1035        .arg scalar, 124, 8, 12, zext, griddim
1036        .arg scalar, 4, 32, 32, zext, gridoffset
1037    .proginfo
1038        .entry 0x00234423, 0x00aaabba
1039        .entry 0x03bdd123, 0x00132235
1040        .entry 0x00011122, 0x0f3424dd
1041)fxDfx", false, false, 0
1042    },
1043    /* 4 - configuration dump test cases */
1044    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/amd1.clo",
1045        R"ffDXD(.amd
1046.gpu Bonaire
1047.32bit
1048.compile_options "-O"
1049.driver_info "@(#) OpenCL 1.2 AMD-APP (1912.5).  Driver version: 1912.5 (VM)"
1050.kernel xT1
1051    .config
1052        .dims xyz
1053        .cws 2, 7, 1
1054        .sgprsnum 18
1055        .vgprsnum 222
1056        .floatmode 0xc0
1057        .scratchbuffer 108
1058        .uavid 11
1059        .uavprivate 314
1060        .printfid 9
1061        .privateid 8
1062        .cbid 10
1063        .earlyexit 1
1064        .condout 5
1065        .pgmrsrc2 0x7520139d
1066        .useprintf
1067        .exceptions 0x75
1068        .userdata ptr_uav_table, 0, 2, 2
1069        .userdata imm_const_buffer, 0, 4, 4
1070        .userdata imm_const_buffer, 7, 12, 2
1071        .arg x, "float", float
1072        .arg xff, "SP", float
1073        .arg x4, "float4", float4
1074        .arg aaa, "SP4", float4
1075        .arg vv, "double3", double3
1076        .arg vv3, "SP4", double3
1077        .arg sampler, "sampler_t", sampler
1078        .arg structor, "TypeX", structure, 24
1079        .arg structor2, "TypeX", structure, 24
1080        .arg img1, "IMG2D", image2d, read_only, 0
1081        .arg img1a, "IMG2DA", image2d_array, read_only, 1
1082        .arg img2, "TDIMG", image3d, write_only, 0
1083        .arg buf1, "uint*", uint*, global, const, 12
1084        .arg buf2, "ColorData", structure*, 52, global, const, 13
1085        .arg const2, "ColorData", structure*, 52, constant, volatile, 0, 14
1086        .arg dblloc, "double*", double*, local,
1087        .arg counterx, "counter32_t", counter32, 0
1088        .arg sampler2, "sampler_t", sampler
1089        .arg countery, "counter32_t", counter32, 1
1090    .text
1091/*bf810000         */ s_endpgm
1092/*4a040501         */ v_add_i32       v2, vcc, v1, v2
1093)ffDXD", true, false
1094    },
1095    /* 5 - configuration dump test cases (diff dimensions in local_id and group_id */
1096    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/amd1-diffdims.clo",
1097        R"ffDXD(.amd
1098.gpu Bonaire
1099.32bit
1100.compile_options "-O"
1101.driver_info "@(#) OpenCL 1.2 AMD-APP (1912.5).  Driver version: 1912.5 (VM)"
1102.kernel xT1
1103    .config
1104        .dims xyz, xy
1105        .cws 2, 7, 1
1106        .sgprsnum 18
1107        .vgprsnum 222
1108        .floatmode 0xc0
1109        .scratchbuffer 108
1110        .uavid 11
1111        .uavprivate 314
1112        .printfid 9
1113        .privateid 8
1114        .cbid 10
1115        .earlyexit 1
1116        .condout 5
1117        .pgmrsrc2 0x75200b9d
1118        .useprintf
1119        .exceptions 0x75
1120        .userdata ptr_uav_table, 0, 2, 2
1121        .userdata imm_const_buffer, 0, 4, 4
1122        .userdata imm_const_buffer, 7, 12, 2
1123        .arg x, "float", float
1124        .arg xff, "SP", float
1125        .arg x4, "float4", float4
1126        .arg aaa, "SP4", float4
1127        .arg vv, "double3", double3
1128        .arg vv3, "SP4", double3
1129        .arg sampler, "sampler_t", sampler
1130        .arg structor, "TypeX", structure, 24
1131        .arg structor2, "TypeX", structure, 24
1132        .arg img1, "IMG2D", image2d, read_only, 0
1133        .arg img1a, "IMG2DA", image2d_array, read_only, 1
1134        .arg img2, "TDIMG", image3d, write_only, 0
1135        .arg buf1, "uint*", uint*, global, const, 12
1136        .arg buf2, "ColorData", structure*, 52, global, const, 13
1137        .arg const2, "ColorData", structure*, 52, constant, volatile, 0, 14
1138        .arg dblloc, "double*", double*, local,
1139        .arg counterx, "counter32_t", counter32, 0
1140        .arg sampler2, "sampler_t", sampler
1141        .arg countery, "counter32_t", counter32, 1
1142    .text
1143/*bf810000         */ s_endpgm
1144/*4a040501         */ v_add_i32       v2, vcc, v1, v2
1145)ffDXD", true, false
1146    },
1147    /* 6 - amdcl2 config */
1148    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/amdcl2.clo",
1149        R"ffDXD(.amdcl2
1150.gpu Bonaire
1151.64bit
1152.arch_minor 0
1153.arch_stepping 0
1154.driver_version 191205
1155.compile_options ""
1156.acl_version "AMD-COMP-LIB-v0.8 (0.0.SC_BUILD_NUMBER)"
1157.kernel aaa1
1158    .config
1159        .dims x
1160        .sgprsnum 12
1161        .vgprsnum 1
1162        .localsize 1000
1163        .floatmode 0xda
1164        .pgmrsrc1 0x00ada040
1165        .pgmrsrc2 0x0000008c
1166        .dx10clamp
1167        .ieeemode
1168        .useargs
1169        .priority 0
1170        .arg _.global_offset_0, "size_t", long
1171        .arg _.global_offset_1, "size_t", long
1172        .arg _.global_offset_2, "size_t", long
1173        .arg _.printf_buffer, "size_t", void*, global, , rdonly
1174        .arg _.vqueue_pointer, "size_t", long
1175        .arg _.aqlwrap_pointer, "size_t", long
1176        .arg n, "uint", uint
1177        .arg in, "uint*", uint*, global, const
1178        .arg out, "uint*", uint*, global,
1179    .text
1180/*8709ac05         */ s_and_b32       s9, s5, 44
1181/*870a8505         */ s_and_b32       s10, s5, 5
1182/*870b8505         */ s_and_b32       s11, s5, 5
1183/*bf810000         */ s_endpgm
1184.kernel aaa2
1185    .config
1186        .dims x, xyz
1187        .sgprsnum 12
1188        .vgprsnum 1
1189        .localsize 1000
1190        .floatmode 0xda
1191        .scratchbuffer 2342
1192        .pgmrsrc1 0x00fda840
1193        .pgmrsrc2 0x12001095
1194        .privmode
1195        .debugmode
1196        .dx10clamp
1197        .ieeemode
1198        .exceptions 0x12
1199        .useargs
1200        .usesetup
1201        .useenqueue
1202        .priority 2
1203        .arg _.global_offset_0, "size_t", long
1204        .arg _.global_offset_1, "size_t", long
1205        .arg _.global_offset_2, "size_t", long
1206        .arg _.printf_buffer, "size_t", void*, global, , rdonly
1207        .arg _.vqueue_pointer, "size_t", long
1208        .arg _.aqlwrap_pointer, "size_t", long
1209        .arg n, "uint", uint
1210        .arg in, "float*", float*, global, const
1211        .arg out, "float*", float*, global,
1212        .arg q, "queue_t", queue
1213        .arg piper, "pipe", pipe, rdonly
1214        .arg ce, "clk_event_t", clkevent
1215    .text
1216/*8709ac05         */ s_and_b32       s9, s5, 44
1217/*bf810000         */ s_endpgm
1218.kernel gfd12
1219    .config
1220        .dims xyz
1221        .cws 8, 5, 2
1222        .sgprsnum 25
1223        .vgprsnum 78
1224        .localsize 656
1225        .floatmode 0xf4
1226        .pgmrsrc1 0x012f40d3
1227        .pgmrsrc2 0x0fcdf7d8
1228        .dx10clamp
1229        .tgsize
1230        .exceptions 0x0f
1231        .useargs
1232        .usesetup
1233        .usegeneric
1234        .priority 0
1235        .arg _.global_offset_0, "size_t", long
1236        .arg _.global_offset_1, "size_t", long
1237        .arg _.global_offset_2, "size_t", long
1238        .arg _.printf_buffer, "size_t", void*, global, , rdonly
1239        .arg _.vqueue_pointer, "size_t", long
1240        .arg _.aqlwrap_pointer, "size_t", long
1241        .arg n, "uint", uint
1242        .arg in, "double*", double*, global, const
1243        .arg out, "double*", double*, global,
1244        .arg v, "uchar", uchar
1245        .arg v2, "uchar", uchar
1246    .text
1247/*7e020302         */ v_mov_b32       v1, v2
1248/*4a0206b7         */ v_add_i32       v1, vcc, 55, v3
1249/*bf810000         */ s_endpgm
1250)ffDXD", true, false
1251    },
1252    /* 7 - amdcl2 config */
1253    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/amdcl2.clo",
1254        R"ffDXD(.amdcl2
1255.gpu Bonaire
1256.64bit
1257.arch_minor 0
1258.arch_stepping 0
1259.driver_version 191205
1260.compile_options ""
1261.acl_version "AMD-COMP-LIB-v0.8 (0.0.SC_BUILD_NUMBER)"
1262.kernel aaa1
1263    .hsaconfig
1264        .dims x
1265        .sgprsnum 16
1266        .vgprsnum 4
1267        .dx10clamp
1268        .ieeemode
1269        .floatmode 0xda
1270        .priority 0
1271        .userdatanum 6
1272        .pgmrsrc1 0x00ada040
1273        .pgmrsrc2 0x0000008c
1274        .codeversion 1, 1
1275        .machine 1, 0, 0, 0
1276        .kernel_code_entry_offset 0x100
1277        .use_private_segment_buffer
1278        .use_kernarg_segment_ptr
1279        .private_elem_size 4
1280        .use_ptr64
1281        .workgroup_group_segment_size 1000
1282        .kernarg_segment_size 80
1283        .wavefront_sgpr_count 14
1284        .workitem_vgpr_count 1
1285        .kernarg_segment_align 16
1286        .group_segment_align 16
1287        .private_segment_align 16
1288        .wavefront_size 64
1289        .call_convention 0x0
1290    .control_directive
1291        .fill 128, 1, 0x00
1292    .hsaconfig
1293        .arg _.global_offset_0, "size_t", long
1294        .arg _.global_offset_1, "size_t", long
1295        .arg _.global_offset_2, "size_t", long
1296        .arg _.printf_buffer, "size_t", void*, global, , rdonly
1297        .arg _.vqueue_pointer, "size_t", long
1298        .arg _.aqlwrap_pointer, "size_t", long
1299        .arg n, "uint", uint
1300        .arg in, "uint*", uint*, global, const
1301        .arg out, "uint*", uint*, global,
1302    .text
1303/*8709ac05         */ s_and_b32       s9, s5, 44
1304/*870a8505         */ s_and_b32       s10, s5, 5
1305/*870b8505         */ s_and_b32       s11, s5, 5
1306/*bf810000         */ s_endpgm
1307.kernel aaa2
1308    .hsaconfig
1309        .dims x, xyz
1310        .sgprsnum 16
1311        .vgprsnum 4
1312        .privmode
1313        .debugmode
1314        .dx10clamp
1315        .ieeemode
1316        .floatmode 0xda
1317        .priority 2
1318        .userdatanum 10
1319        .pgmrsrc1 0x00fda840
1320        .pgmrsrc2 0x12001095
1321        .codeversion 1, 1
1322        .machine 1, 0, 0, 0
1323        .kernel_code_entry_offset 0x100
1324        .use_private_segment_buffer
1325        .use_dispatch_ptr
1326        .use_kernarg_segment_ptr
1327        .use_flat_scratch_init
1328        .private_elem_size 4
1329        .use_ptr64
1330        .workitem_private_segment_size 2342
1331        .workgroup_group_segment_size 1000
1332        .kernarg_segment_size 96
1333        .wavefront_sgpr_count 16
1334        .workitem_vgpr_count 1
1335        .kernarg_segment_align 16
1336        .group_segment_align 16
1337        .private_segment_align 16
1338        .wavefront_size 64
1339        .call_convention 0x0
1340    .control_directive
1341        .fill 128, 1, 0x00
1342    .hsaconfig
1343        .arg _.global_offset_0, "size_t", long
1344        .arg _.global_offset_1, "size_t", long
1345        .arg _.global_offset_2, "size_t", long
1346        .arg _.printf_buffer, "size_t", void*, global, , rdonly
1347        .arg _.vqueue_pointer, "size_t", long
1348        .arg _.aqlwrap_pointer, "size_t", long
1349        .arg n, "uint", uint
1350        .arg in, "float*", float*, global, const
1351        .arg out, "float*", float*, global,
1352        .arg q, "queue_t", queue
1353        .arg piper, "pipe", pipe, rdonly
1354        .arg ce, "clk_event_t", clkevent
1355    .text
1356/*8709ac05         */ s_and_b32       s9, s5, 44
1357/*bf810000         */ s_endpgm
1358.kernel gfd12
1359    .hsaconfig
1360        .cws 8, 5, 2
1361        .dims xyz
1362        .sgprsnum 32
1363        .vgprsnum 80
1364        .dx10clamp
1365        .tgsize
1366        .floatmode 0xf4
1367        .priority 0
1368        .exceptions 0x01
1369        .localsize 210432
1370        .userdatanum 12
1371        .pgmrsrc1 0x012f40d3
1372        .pgmrsrc2 0x0fcdf7d8
1373        .codeversion 1, 1
1374        .machine 1, 0, 0, 0
1375        .kernel_code_entry_offset 0x100
1376        .use_private_segment_buffer
1377        .use_dispatch_ptr
1378        .use_queue_ptr
1379        .use_kernarg_segment_ptr
1380        .use_flat_scratch_init
1381        .private_elem_size 4
1382        .use_ptr64
1383        .workgroup_group_segment_size 656
1384        .kernarg_segment_size 80
1385        .wavefront_sgpr_count 29
1386        .workitem_vgpr_count 78
1387        .kernarg_segment_align 16
1388        .group_segment_align 16
1389        .private_segment_align 16
1390        .wavefront_size 64
1391        .call_convention 0x0
1392    .control_directive
1393        .fill 128, 1, 0x00
1394    .hsaconfig
1395        .arg _.global_offset_0, "size_t", long
1396        .arg _.global_offset_1, "size_t", long
1397        .arg _.global_offset_2, "size_t", long
1398        .arg _.printf_buffer, "size_t", void*, global, , rdonly
1399        .arg _.vqueue_pointer, "size_t", long
1400        .arg _.aqlwrap_pointer, "size_t", long
1401        .arg n, "uint", uint
1402        .arg in, "double*", double*, global, const
1403        .arg out, "double*", double*, global,
1404        .arg v, "uchar", uchar
1405        .arg v2, "uchar", uchar
1406    .text
1407/*7e020302         */ v_mov_b32       v1, v2
1408/*4a0206b7         */ v_add_i32       v1, vcc, 55, v3
1409/*bf810000         */ s_endpgm
1410)ffDXD", true, true
1411    },
1412    /* 8 - gallium config */
1413    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/gallium1.clo",
1414        R"ffDXD(.gallium
1415.gpu CapeVerde
1416.32bit
1417.rodata
1418    .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
1419    .byte 0x03, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00
1420    .byte 0x2d, 0x00, 0x00, 0x00
1421.kernel one1
1422    .args
1423        .arg scalar, 4, 8, 4, sext, general
1424        .arg scalar, 16, 16, 32, sext, general
1425        .arg scalar, 4, 4, 4, zext, imgformat
1426        .arg global, 8, 8, 8, zext, general
1427        .arg scalar, 4, 4, 4, zext, griddim
1428        .arg scalar, 4, 4, 4, zext, gridoffset
1429    .config
1430        .dims x
1431        .sgprsnum 104
1432        .vgprsnum 12
1433        .privmode
1434        .debugmode
1435        .ieeemode
1436        .tgsize
1437        .floatmode 0xfe
1438        .priority 3
1439        .exceptions 0x7f
1440        .localsize 32768
1441        .userdatanum 16
1442        .scratchbuffer 48
1443        .pgmrsrc1 0xffdfef02
1444        .pgmrsrc2 0x004004a1
1445.kernel secondx
1446    .args
1447    .config
1448        .dims xyz
1449        .sgprsnum 8
1450        .vgprsnum 56
1451        .tgsize
1452        .floatmode 0xd0
1453        .priority 3
1454        .localsize 256
1455        .userdatanum 16
1456        .pgmrsrc1 0x000d0c0d
1457        .pgmrsrc2 0x3d0097a0
1458.text
1459secondx:
1460/*3a040480         */ v_xor_b32       v2, 0, v2
1461/*bf810000         */ s_endpgm
1462.fill 62, 4, 0
1463one1:
1464/*7e000301         */ v_mov_b32       v0, v1
1465/*7e000303         */ v_mov_b32       v0, v3
1466)ffDXD", true, false, 0
1467    },
1468    /* 9 - gallium config - different dimensions for group_ids and local_ids */
1469    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/gallium1-diffdims.clo",
1470        R"ffDXD(.gallium
1471.gpu CapeVerde
1472.32bit
1473.rodata
1474    .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
1475    .byte 0x03, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00
1476    .byte 0x2d, 0x00, 0x00, 0x00
1477.kernel one1
1478    .args
1479        .arg scalar, 4, 8, 4, sext, general
1480        .arg scalar, 16, 16, 32, sext, general
1481        .arg scalar, 4, 4, 4, zext, imgformat
1482        .arg global, 8, 8, 8, zext, general
1483        .arg scalar, 4, 4, 4, zext, griddim
1484        .arg scalar, 4, 4, 4, zext, gridoffset
1485    .config
1486        .dims x
1487        .sgprsnum 104
1488        .vgprsnum 12
1489        .privmode
1490        .debugmode
1491        .ieeemode
1492        .tgsize
1493        .floatmode 0xfe
1494        .priority 3
1495        .exceptions 0x7f
1496        .localsize 32768
1497        .userdatanum 16
1498        .scratchbuffer 48
1499        .pgmrsrc1 0xffdfef02
1500        .pgmrsrc2 0x004004a1
1501.kernel secondx
1502    .args
1503    .config
1504        .dims yz, xyz
1505        .sgprsnum 8
1506        .vgprsnum 56
1507        .tgsize
1508        .floatmode 0xd0
1509        .priority 3
1510        .localsize 256
1511        .userdatanum 16
1512        .pgmrsrc1 0x000d0c0d
1513        .pgmrsrc2 0x3d009720
1514.text
1515secondx:
1516/*3a040480         */ v_xor_b32       v2, 0, v2
1517/*bf810000         */ s_endpgm
1518.fill 62, 4, 0
1519one1:
1520/*7e000301         */ v_mov_b32       v0, v1
1521/*7e000303         */ v_mov_b32       v0, v3
1522)ffDXD", true, false, 0
1523    },
1524    /* 10 - gallium config */
1525    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/new-gallium-llvm40.clo",
1526        R"ffDXD(.gallium
1527.gpu CapeVerde
1528.64bit
1529.driver_version 170000
1530.llvm_version 40000
1531.kernel vectorAdd
1532    .args
1533        .arg scalar, 4, 4, 4, zext, general
1534        .arg global, 8, 8, 8, zext, general
1535        .arg global, 8, 8, 8, zext, general
1536        .arg global, 8, 8, 8, zext, general
1537        .arg scalar, 4, 4, 4, zext, griddim
1538        .arg scalar, 4, 4, 4, zext, gridoffset
1539    .config
1540        .dims x
1541        .sgprsnum 24
1542        .vgprsnum 4
1543        .dx10clamp
1544        .ieeemode
1545        .floatmode 0xc0
1546        .priority 0
1547        .userdatanum 8
1548        .pgmrsrc1 0x00ac0080
1549        .pgmrsrc2 0x00000090
1550        .spilledsgprs 0
1551        .spilledvgprs 0
1552        .hsa_dims x
1553        .hsa_sgprsnum 24
1554        .hsa_vgprsnum 4
1555        .hsa_dx10clamp
1556        .hsa_ieeemode
1557        .hsa_floatmode 0xc0
1558        .hsa_priority 0
1559        .hsa_userdatanum 8
1560        .hsa_pgmrsrc1 0x00ac0080
1561        .hsa_pgmrsrc2 0x00000090
1562        .codeversion 1, 0
1563        .machine 1, 0, 0, 0
1564        .kernel_code_entry_offset 0x100
1565        .use_private_segment_buffer
1566        .use_dispatch_ptr
1567        .use_kernarg_segment_ptr
1568        .private_elem_size 4
1569        .use_ptr64
1570        .kernarg_segment_size 48
1571        .wavefront_sgpr_count 18
1572        .workitem_vgpr_count 4
1573        .kernarg_segment_align 16
1574        .group_segment_align 16
1575        .private_segment_align 16
1576        .wavefront_size 64
1577        .call_convention 0x0
1578    .control_directive
1579        .fill 128, 1, 0x00
1580.text
1581vectorAdd:
1582.skip 256
1583/*c0000501         */ s_load_dword    s0, s[4:5], 0x1
1584/*c0008709         */ s_load_dword    s1, s[6:7], 0x9
1585/*c0010700         */ s_load_dword    s2, s[6:7], 0x0
1586/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1587/*8700ff00 0000ffff*/ s_and_b32       s0, s0, 0xffff
1588/*93000800         */ s_mul_i32       s0, s0, s8
1589/*81000100         */ s_add_i32       s0, s0, s1
1590/*4a000000         */ v_add_i32       v0, vcc, s0, v0
1591/*7d880002         */ v_cmp_gt_u32    vcc, s2, v0
1592/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
1593/*bf880014         */ s_cbranch_execz .L384_0
1594/*7e000280         */ v_mov_b32       v0, 0
1595/*c0400702         */ s_load_dwordx2  s[0:1], s[6:7], 0x2
1596/*be820380         */ s_mov_b32       s2, 0
1597/*be8303ff 0000f000*/ s_mov_b32       s3, 0xf000
1598/*c0440704         */ s_load_dwordx2  s[8:9], s[6:7], 0x4
1599/*be8a0402         */ s_mov_b64       s[10:11], s[2:3]
1600/*c0460706         */ s_load_dwordx2  s[12:13], s[6:7], 0x6
1601/*be8e0402         */ s_mov_b64       s[14:15], s[2:3]
1602/*d2c20000 00010500*/ v_lshl_b64      v[0:1], v[0:1], 2
1603/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1604/*e0308000 80000200*/ buffer_load_dword v2, v[0:1], s[0:3], 0 addr64
1605/*e0308000 80020300*/ buffer_load_dword v3, v[0:1], s[8:11], 0 addr64
1606/*bf8c0f70         */ s_waitcnt       vmcnt(0)
1607/*06040503         */ v_add_f32       v2, v3, v2
1608/*e0708000 80000200*/ buffer_store_dword v2, v[0:1], s[0:3], 0 addr64
1609.L384_0:
1610/*bf810000         */ s_endpgm
1611)ffDXD", true, false, 40000U
1612    },
1613    /* 11 - gallium config - different dimensions for group_ids and local_ids */
1614    { nullptr, nullptr, CLRX_SOURCE_DIR
1615        "/tests/amdasm/amdbins/new-gallium-llvm40-diffdims.clo",
1616        R"ffDXD(.gallium
1617.gpu CapeVerde
1618.64bit
1619.driver_version 170000
1620.llvm_version 40000
1621.kernel vectorAdd
1622    .args
1623        .arg scalar, 4, 4, 4, zext, general
1624        .arg global, 8, 8, 8, zext, general
1625        .arg global, 8, 8, 8, zext, general
1626        .arg global, 8, 8, 8, zext, general
1627        .arg scalar, 4, 4, 4, zext, griddim
1628        .arg scalar, 4, 4, 4, zext, gridoffset
1629    .config
1630        .dims x, xy
1631        .sgprsnum 24
1632        .vgprsnum 4
1633        .dx10clamp
1634        .ieeemode
1635        .floatmode 0xc0
1636        .priority 0
1637        .userdatanum 8
1638        .pgmrsrc1 0x00ac0080
1639        .pgmrsrc2 0x00000890
1640        .spilledsgprs 0
1641        .spilledvgprs 0
1642        .hsa_dims x, xy
1643        .hsa_sgprsnum 24
1644        .hsa_vgprsnum 4
1645        .hsa_dx10clamp
1646        .hsa_ieeemode
1647        .hsa_floatmode 0xc0
1648        .hsa_priority 0
1649        .hsa_userdatanum 8
1650        .hsa_pgmrsrc1 0x00ac0080
1651        .hsa_pgmrsrc2 0x00000890
1652        .codeversion 1, 0
1653        .machine 1, 0, 0, 0
1654        .kernel_code_entry_offset 0x100
1655        .use_private_segment_buffer
1656        .use_dispatch_ptr
1657        .use_kernarg_segment_ptr
1658        .private_elem_size 4
1659        .use_ptr64
1660        .kernarg_segment_size 48
1661        .wavefront_sgpr_count 18
1662        .workitem_vgpr_count 4
1663        .kernarg_segment_align 16
1664        .group_segment_align 16
1665        .private_segment_align 16
1666        .wavefront_size 64
1667        .call_convention 0x0
1668    .control_directive
1669        .fill 128, 1, 0x00
1670.text
1671vectorAdd:
1672.skip 256
1673/*c0000501         */ s_load_dword    s0, s[4:5], 0x1
1674/*c0008709         */ s_load_dword    s1, s[6:7], 0x9
1675/*c0010700         */ s_load_dword    s2, s[6:7], 0x0
1676/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1677/*8700ff00 0000ffff*/ s_and_b32       s0, s0, 0xffff
1678/*93000800         */ s_mul_i32       s0, s0, s8
1679/*81000100         */ s_add_i32       s0, s0, s1
1680/*4a000000         */ v_add_i32       v0, vcc, s0, v0
1681/*7d880002         */ v_cmp_gt_u32    vcc, s2, v0
1682/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
1683/*bf880014         */ s_cbranch_execz .L384_0
1684/*7e000280         */ v_mov_b32       v0, 0
1685/*c0400702         */ s_load_dwordx2  s[0:1], s[6:7], 0x2
1686/*be820380         */ s_mov_b32       s2, 0
1687/*be8303ff 0000f000*/ s_mov_b32       s3, 0xf000
1688/*c0440704         */ s_load_dwordx2  s[8:9], s[6:7], 0x4
1689/*be8a0402         */ s_mov_b64       s[10:11], s[2:3]
1690/*c0460706         */ s_load_dwordx2  s[12:13], s[6:7], 0x6
1691/*be8e0402         */ s_mov_b64       s[14:15], s[2:3]
1692/*d2c20000 00010500*/ v_lshl_b64      v[0:1], v[0:1], 2
1693/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1694/*e0308000 80000200*/ buffer_load_dword v2, v[0:1], s[0:3], 0 addr64
1695/*e0308000 80020300*/ buffer_load_dword v3, v[0:1], s[8:11], 0 addr64
1696/*bf8c0f70         */ s_waitcnt       vmcnt(0)
1697/*06040503         */ v_add_f32       v2, v3, v2
1698/*e0708000 80000200*/ buffer_store_dword v2, v[0:1], s[0:3], 0 addr64
1699.L384_0:
1700/*bf810000         */ s_endpgm
1701)ffDXD", true, false, 40000U
1702    },
1703    /* 12 - rocm config */
1704    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/rocm-fiji.hsaco",
1705        R"ffDXD(.rocm
1706.gpu Fiji
1707.arch_minor 0
1708.arch_stepping 3
1709.kernel test1
1710    .config
1711        .dims x
1712        .sgprsnum 16
1713        .vgprsnum 8
1714        .dx10clamp
1715        .floatmode 0xc0
1716        .priority 0
1717        .userdatanum 8
1718        .pgmrsrc1 0x002c0041
1719        .pgmrsrc2 0x00000090
1720        .codeversion 1, 0
1721        .machine 1, 8, 0, 3
1722        .kernel_code_entry_offset 0x100
1723        .use_private_segment_buffer
1724        .use_dispatch_ptr
1725        .use_kernarg_segment_ptr
1726        .private_elem_size 4
1727        .use_ptr64
1728        .kernarg_segment_size 8
1729        .wavefront_sgpr_count 15
1730        .workitem_vgpr_count 7
1731        .kernarg_segment_align 16
1732        .group_segment_align 16
1733        .private_segment_align 16
1734        .wavefront_size 64
1735        .call_convention 0x0
1736    .control_directive
1737        .fill 128, 1, 0x00
1738.kernel test2
1739    .config
1740        .dims x
1741        .sgprsnum 16
1742        .vgprsnum 8
1743        .dx10clamp
1744        .floatmode 0xc0
1745        .priority 0
1746        .userdatanum 8
1747        .pgmrsrc1 0x002c0041
1748        .pgmrsrc2 0x00000090
1749        .codeversion 1, 0
1750        .machine 1, 8, 0, 3
1751        .kernel_code_entry_offset 0x100
1752        .use_private_segment_buffer
1753        .use_dispatch_ptr
1754        .use_kernarg_segment_ptr
1755        .private_elem_size 4
1756        .use_ptr64
1757        .kernarg_segment_size 8
1758        .wavefront_sgpr_count 15
1759        .workitem_vgpr_count 7
1760        .kernarg_segment_align 16
1761        .group_segment_align 16
1762        .private_segment_align 16
1763        .wavefront_size 64
1764        .call_convention 0x0
1765    .control_directive
1766        .fill 128, 1, 0x00
1767.text
1768test1:
1769.skip 256
1770/*c0020082 00000004*/ s_load_dword    s2, s[4:5], 0x4
1771/*c0060003 00000000*/ s_load_dwordx2  s[0:1], s[6:7], 0x0
1772/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1773/*8602ff02 0000ffff*/ s_and_b32       s2, s2, 0xffff
1774/*92020802         */ s_mul_i32       s2, s2, s8
1775/*32000002         */ v_add_u32       v0, vcc, s2, v0
1776/*2202009f         */ v_ashrrev_i32   v1, 31, v0
1777/*d28f0001 00020082*/ v_lshlrev_b64   v[1:2], 2, v[0:1]
1778/*32060200         */ v_add_u32       v3, vcc, s0, v1
1779/*7e020201         */ v_mov_b32       v1, s1
1780/*38080302         */ v_addc_u32      v4, vcc, v2, v1, vcc
1781/*2600008f         */ v_and_b32       v0, 15, v0
1782/*7e020280         */ v_mov_b32       v1, 0
1783/*dc500000 02000003*/ flat_load_dword v2, v[3:4]
1784/*d28f0000 00020082*/ v_lshlrev_b64   v[0:1], 2, v[0:1]
1785/*be801c00         */ s_getpc_b64     s[0:1]
1786/*8000ff00 00000234*/ s_add_u32       s0, s0, 0x234
1787/*82018001         */ s_addc_u32      s1, s1, 0
1788/*320a0000         */ v_add_u32       v5, vcc, s0, v0
1789/*7e000201         */ v_mov_b32       v0, s1
1790/*380c0101         */ v_addc_u32      v6, vcc, v1, v0, vcc
1791/*dc500000 00000005*/ flat_load_dword v0, v[5:6]
1792/*bf8c0070         */ s_waitcnt       vmcnt(0) & lgkmcnt(0)
1793/*0a000500         */ v_mul_f32       v0, v0, v2
1794/*dc700000 00000003*/ flat_store_dword v[3:4], v0
1795/*bf810000         */ s_endpgm
1796.fill 29, 4, 0
1797test2:
1798.skip 256
1799/*c0020082 00000004*/ s_load_dword    s2, s[4:5], 0x4
1800/*c0060003 00000000*/ s_load_dwordx2  s[0:1], s[6:7], 0x0
1801/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1802/*8602ff02 0000ffff*/ s_and_b32       s2, s2, 0xffff
1803/*92020802         */ s_mul_i32       s2, s2, s8
1804/*32000002         */ v_add_u32       v0, vcc, s2, v0
1805/*2202009f         */ v_ashrrev_i32   v1, 31, v0
1806/*d28f0001 00020082*/ v_lshlrev_b64   v[1:2], 2, v[0:1]
1807/*32060200         */ v_add_u32       v3, vcc, s0, v1
1808/*7e020201         */ v_mov_b32       v1, s1
1809/*38080302         */ v_addc_u32      v4, vcc, v2, v1, vcc
1810/*2600008f         */ v_and_b32       v0, 15, v0
1811/*7e020280         */ v_mov_b32       v1, 0
1812/*dc500000 02000003*/ flat_load_dword v2, v[3:4]
1813/*d28f0000 00020082*/ v_lshlrev_b64   v[0:1], 2, v[0:1]
1814/*be801c00         */ s_getpc_b64     s[0:1]
1815/*8000ff00 00000074*/ s_add_u32       s0, s0, 0x74
1816/*82018001         */ s_addc_u32      s1, s1, 0
1817/*320a0000         */ v_add_u32       v5, vcc, s0, v0
1818/*7e000201         */ v_mov_b32       v0, s1
1819/*380c0101         */ v_addc_u32      v6, vcc, v1, v0, vcc
1820/*dc500000 00000005*/ flat_load_dword v0, v[5:6]
1821/*bf8c0070         */ s_waitcnt       vmcnt(0) & lgkmcnt(0)
1822/*02000500         */ v_add_f32       v0, v0, v2
1823/*dc700000 00000003*/ flat_store_dword v[3:4], v0
1824/*bf810000         */ s_endpgm
1825data1:
1826.global data1
1827        .byte 0xcd, 0xcc, 0x8c, 0x3f, 0x33, 0x33, 0x13, 0x40
1828        .byte 0x33, 0x33, 0x93, 0x40, 0x33, 0x33, 0xa3, 0x40
1829        .byte 0x85, 0xeb, 0x91, 0xbf, 0x3d, 0x0a, 0x27, 0xc0
1830        .byte 0x0a, 0xd7, 0x93, 0xc0, 0xb8, 0x1e, 0xa5, 0xc0
1831        .byte 0x9a, 0x99, 0x49, 0x41, 0xcd, 0xcc, 0xac, 0x40
1832        .byte 0x0a, 0xd7, 0x13, 0x40, 0xd7, 0xa3, 0x98, 0x40
1833        .byte 0x9a, 0x99, 0x49, 0xc1, 0xcd, 0xcc, 0xac, 0xc0
1834        .byte 0x0a, 0xd7, 0x13, 0xc0, 0xd7, 0xa3, 0x98, 0xc0
1835data2:
1836.global data2
1837        .byte 0xcd, 0x8c, 0xaa, 0x43, 0x33, 0x33, 0x13, 0x40
1838        .byte 0x33, 0x33, 0x93, 0x40, 0x52, 0xb8, 0xe6, 0x40
1839        .byte 0xb8, 0x1e, 0x81, 0xc1, 0x3d, 0x0a, 0x27, 0xc0
1840        .byte 0x85, 0xeb, 0x09, 0xc1, 0xb8, 0x1e, 0xa5, 0xc0
1841        .byte 0x9a, 0x99, 0x49, 0x41, 0xcd, 0xcc, 0xaa, 0x42
1842        .byte 0x0a, 0xd7, 0x33, 0x40, 0xd7, 0xa3, 0x98, 0x40
1843        .byte 0xcd, 0xcc, 0x94, 0xc1, 0x33, 0x33, 0xb3, 0xc0
1844        .byte 0x0a, 0xd7, 0x13, 0xc0, 0xd7, 0xa3, 0x98, 0xc0
1845)ffDXD", true, false
1846    },
1847    /* 13 - rocm config - different dimensions for group_ids and local_ids */
1848    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/rocm-fiji-diffdims.hsaco",
1849        R"ffDXD(.rocm
1850.gpu Fiji
1851.arch_minor 0
1852.arch_stepping 3
1853.kernel test1
1854    .config
1855        .dims x, xy
1856        .sgprsnum 16
1857        .vgprsnum 8
1858        .dx10clamp
1859        .floatmode 0xc0
1860        .priority 0
1861        .userdatanum 8
1862        .pgmrsrc1 0x002c0041
1863        .pgmrsrc2 0x00000890
1864        .codeversion 1, 0
1865        .machine 1, 8, 0, 3
1866        .kernel_code_entry_offset 0x100
1867        .use_private_segment_buffer
1868        .use_dispatch_ptr
1869        .use_kernarg_segment_ptr
1870        .private_elem_size 4
1871        .use_ptr64
1872        .kernarg_segment_size 8
1873        .wavefront_sgpr_count 15
1874        .workitem_vgpr_count 7
1875        .kernarg_segment_align 16
1876        .group_segment_align 16
1877        .private_segment_align 16
1878        .wavefront_size 64
1879        .call_convention 0x0
1880    .control_directive
1881        .fill 128, 1, 0x00
1882.kernel test2
1883    .config
1884        .dims x
1885        .sgprsnum 16
1886        .vgprsnum 8
1887        .dx10clamp
1888        .floatmode 0xc0
1889        .priority 0
1890        .userdatanum 8
1891        .pgmrsrc1 0x002c0041
1892        .pgmrsrc2 0x00000090
1893        .codeversion 1, 0
1894        .machine 1, 8, 0, 3
1895        .kernel_code_entry_offset 0x100
1896        .use_private_segment_buffer
1897        .use_dispatch_ptr
1898        .use_kernarg_segment_ptr
1899        .private_elem_size 4
1900        .use_ptr64
1901        .kernarg_segment_size 8
1902        .wavefront_sgpr_count 15
1903        .workitem_vgpr_count 7
1904        .kernarg_segment_align 16
1905        .group_segment_align 16
1906        .private_segment_align 16
1907        .wavefront_size 64
1908        .call_convention 0x0
1909    .control_directive
1910        .fill 128, 1, 0x00
1911.text
1912test1:
1913.skip 256
1914/*c0020082 00000004*/ s_load_dword    s2, s[4:5], 0x4
1915/*c0060003 00000000*/ s_load_dwordx2  s[0:1], s[6:7], 0x0
1916/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1917/*8602ff02 0000ffff*/ s_and_b32       s2, s2, 0xffff
1918/*92020802         */ s_mul_i32       s2, s2, s8
1919/*32000002         */ v_add_u32       v0, vcc, s2, v0
1920/*2202009f         */ v_ashrrev_i32   v1, 31, v0
1921/*d28f0001 00020082*/ v_lshlrev_b64   v[1:2], 2, v[0:1]
1922/*32060200         */ v_add_u32       v3, vcc, s0, v1
1923/*7e020201         */ v_mov_b32       v1, s1
1924/*38080302         */ v_addc_u32      v4, vcc, v2, v1, vcc
1925/*2600008f         */ v_and_b32       v0, 15, v0
1926/*7e020280         */ v_mov_b32       v1, 0
1927/*dc500000 02000003*/ flat_load_dword v2, v[3:4]
1928/*d28f0000 00020082*/ v_lshlrev_b64   v[0:1], 2, v[0:1]
1929/*be801c00         */ s_getpc_b64     s[0:1]
1930/*8000ff00 00000234*/ s_add_u32       s0, s0, 0x234
1931/*82018001         */ s_addc_u32      s1, s1, 0
1932/*320a0000         */ v_add_u32       v5, vcc, s0, v0
1933/*7e000201         */ v_mov_b32       v0, s1
1934/*380c0101         */ v_addc_u32      v6, vcc, v1, v0, vcc
1935/*dc500000 00000005*/ flat_load_dword v0, v[5:6]
1936/*bf8c0070         */ s_waitcnt       vmcnt(0) & lgkmcnt(0)
1937/*0a000500         */ v_mul_f32       v0, v0, v2
1938/*dc700000 00000003*/ flat_store_dword v[3:4], v0
1939/*bf810000         */ s_endpgm
1940.fill 29, 4, 0
1941test2:
1942.skip 256
1943/*c0020082 00000004*/ s_load_dword    s2, s[4:5], 0x4
1944/*c0060003 00000000*/ s_load_dwordx2  s[0:1], s[6:7], 0x0
1945/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1946/*8602ff02 0000ffff*/ s_and_b32       s2, s2, 0xffff
1947/*92020802         */ s_mul_i32       s2, s2, s8
1948/*32000002         */ v_add_u32       v0, vcc, s2, v0
1949/*2202009f         */ v_ashrrev_i32   v1, 31, v0
1950/*d28f0001 00020082*/ v_lshlrev_b64   v[1:2], 2, v[0:1]
1951/*32060200         */ v_add_u32       v3, vcc, s0, v1
1952/*7e020201         */ v_mov_b32       v1, s1
1953/*38080302         */ v_addc_u32      v4, vcc, v2, v1, vcc
1954/*2600008f         */ v_and_b32       v0, 15, v0
1955/*7e020280         */ v_mov_b32       v1, 0
1956/*dc500000 02000003*/ flat_load_dword v2, v[3:4]
1957/*d28f0000 00020082*/ v_lshlrev_b64   v[0:1], 2, v[0:1]
1958/*be801c00         */ s_getpc_b64     s[0:1]
1959/*8000ff00 00000074*/ s_add_u32       s0, s0, 0x74
1960/*82018001         */ s_addc_u32      s1, s1, 0
1961/*320a0000         */ v_add_u32       v5, vcc, s0, v0
1962/*7e000201         */ v_mov_b32       v0, s1
1963/*380c0101         */ v_addc_u32      v6, vcc, v1, v0, vcc
1964/*dc500000 00000005*/ flat_load_dword v0, v[5:6]
1965/*bf8c0070         */ s_waitcnt       vmcnt(0) & lgkmcnt(0)
1966/*02000500         */ v_add_f32       v0, v0, v2
1967/*dc700000 00000003*/ flat_store_dword v[3:4], v0
1968/*bf810000         */ s_endpgm
1969data1:
1970.global data1
1971        .byte 0xcd, 0xcc, 0x8c, 0x3f, 0x33, 0x33, 0x13, 0x40
1972        .byte 0x33, 0x33, 0x93, 0x40, 0x33, 0x33, 0xa3, 0x40
1973        .byte 0x85, 0xeb, 0x91, 0xbf, 0x3d, 0x0a, 0x27, 0xc0
1974        .byte 0x0a, 0xd7, 0x93, 0xc0, 0xb8, 0x1e, 0xa5, 0xc0
1975        .byte 0x9a, 0x99, 0x49, 0x41, 0xcd, 0xcc, 0xac, 0x40
1976        .byte 0x0a, 0xd7, 0x13, 0x40, 0xd7, 0xa3, 0x98, 0x40
1977        .byte 0x9a, 0x99, 0x49, 0xc1, 0xcd, 0xcc, 0xac, 0xc0
1978        .byte 0x0a, 0xd7, 0x13, 0xc0, 0xd7, 0xa3, 0x98, 0xc0
1979data2:
1980.global data2
1981        .byte 0xcd, 0x8c, 0xaa, 0x43, 0x33, 0x33, 0x13, 0x40
1982        .byte 0x33, 0x33, 0x93, 0x40, 0x52, 0xb8, 0xe6, 0x40
1983        .byte 0xb8, 0x1e, 0x81, 0xc1, 0x3d, 0x0a, 0x27, 0xc0
1984        .byte 0x85, 0xeb, 0x09, 0xc1, 0xb8, 0x1e, 0xa5, 0xc0
1985        .byte 0x9a, 0x99, 0x49, 0x41, 0xcd, 0xcc, 0xaa, 0x42
1986        .byte 0x0a, 0xd7, 0x33, 0x40, 0xd7, 0xa3, 0x98, 0x40
1987        .byte 0xcd, 0xcc, 0x94, 0xc1, 0x33, 0x33, 0xb3, 0xc0
1988        .byte 0x0a, 0xd7, 0x13, 0xc0, 0xd7, 0xa3, 0x98, 0xc0
1989)ffDXD", true, false
1990    },
1991    /* 14 - gallium old bin format disassembled as new binformat - error */
1992    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/gallium1.clo",
1993        "", true, false, 40000U,
1994        "Gallium kernel region is too small" // error
1995    },
1996    /* 15 - rocm llvm10  */
1997    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/two_kernels-rocm-llvm10.clo",
1998        R"ffDXD(.rocm
1999.gpu GFX1010
2000.arch_minor 1
2001.arch_stepping 0
2002.eflags 51
2003.llvm10binfmt
2004.metadatav3
2005.globaldata
2006.gdata:
2007.skip 64
2008.skip 64
2009.md_version 1, 0
2010.kernel sample_kernel
2011    .config
2012        .dims x
2013        .sgprsnum 16
2014        .vgprsnum 4
2015        .vgprsnum 0
2016        .dx10clamp
2017        .ieeemode
2018        .floatmode 0xf0
2019        .priority 0
2020        .exceptions 0x60
2021        .userdatanum 8
2022        .pgmrsrc1 0x60af0040
2023        .pgmrsrc2 0x00000090
2024        .pgmrsrc3 0x00000000
2025        .group_segment_fixed_size 0
2026        .private_segment_fixed_size 0
2027        .kernel_code_entry_offset 0x500
2028        .use_private_segment_buffer
2029        .use_dispatch_ptr
2030        .use_kernarg_segment_ptr
2031        .use_wave32
2032    .config
2033        .md_symname "sample_kernel.kd"
2034        .md_language "OpenCL C", 1, 2
2035        .md_kernarg_segment_size 64
2036        .md_kernarg_segment_align 8
2037        .md_group_segment_fixed_size 0
2038        .md_private_segment_fixed_size 0
2039        .md_wavefront_size 32
2040        .md_sgprsnum 11
2041        .md_vgprsnum 4
2042        .spilledsgprs 0
2043        .spilledvgprs 0
2044        .max_flat_work_group_size 256
2045        .arg g_input, "uint*", 8, 0, globalbuf, u32, global, default
2046        .arg g_output, "uint*", 8, 8, globalbuf, u32, global, default
2047        .arg , "", 8, 16, gox, i64
2048        .arg , "", 8, 24, goy, i64
2049        .arg , "", 8, 32, goz, i64
2050        .arg , "", 8, 40, none, i8
2051        .arg , "", 8, 48, none, i8
2052        .arg , "", 8, 56, none, i8
2053.kernel sample_kernel2
2054    .config
2055        .dims x
2056        .sgprsnum 16
2057        .vgprsnum 4
2058        .vgprsnum 0
2059        .dx10clamp
2060        .ieeemode
2061        .floatmode 0xf0
2062        .priority 0
2063        .exceptions 0x60
2064        .userdatanum 8
2065        .pgmrsrc1 0x60af0040
2066        .pgmrsrc2 0x00000090
2067        .pgmrsrc3 0x00000000
2068        .group_segment_fixed_size 0
2069        .private_segment_fixed_size 0
2070        .kernel_code_entry_offset 0x5c0
2071        .use_private_segment_buffer
2072        .use_dispatch_ptr
2073        .use_kernarg_segment_ptr
2074        .use_wave32
2075    .config
2076        .md_symname "sample_kernel2.kd"
2077        .md_language "OpenCL C", 1, 2
2078        .md_kernarg_segment_size 64
2079        .md_kernarg_segment_align 8
2080        .md_group_segment_fixed_size 0
2081        .md_private_segment_fixed_size 0
2082        .md_wavefront_size 32
2083        .md_sgprsnum 11
2084        .md_vgprsnum 5
2085        .spilledsgprs 0
2086        .spilledvgprs 0
2087        .max_flat_work_group_size 256
2088        .arg g_input2, "uint*", 8, 0, globalbuf, u32, global, default
2089        .arg g_output2, "uint*", 8, 8, globalbuf, u32, global, default
2090        .arg , "", 8, 16, gox, i64
2091        .arg , "", 8, 24, goy, i64
2092        .arg , "", 8, 32, goz, i64
2093        .arg , "", 8, 40, none, i8
2094        .arg , "", 8, 48, none, i8
2095        .arg , "", 8, 56, none, i8
2096.text
2097sample_kernel:
2098/*f4000102 fa000004*/ s_load_dword    s4, s[4:5], 0x4
2099/*f4000143 fa000010*/ s_load_dword    s5, s[6:7], 0x10
2100/*f4080003 fa000000*/ s_load_dwordx4  s[0:3], s[6:7], 0x0
2101/*7e020280         */ v_mov_b32       v1, 0
2102/*bf8cc07f         */ s_waitcnt       lgkmcnt(0)
2103/*8704ff04 0000ffff*/ s_and_b32       s4, s4, 0xffff
2104/*93080408         */ s_mul_i32       s8, s8, s4
2105/*d76d0000 04001005*/ v_add3_u32      v0, s5, s8, v0
2106/*d6ff0000 00020082*/ v_lshlrev_b64   v[0:1], 2, v[0:1]
2107/*d70f6a02 00020000*/ v_add_co_u32    v2, vcc_lo, s0, v0
2108/*50060201         */ v_add_co_ci_u32 v3, vcc_lo, s1, v1, vcc_lo
2109/*d70f6a00 00020002*/ v_add_co_u32    v0, vcc_lo, s2, v0
2110/*dc308000 027d0002*/ global_load_dword v2, v[2:3], off
2111/*50020203         */ v_add_co_ci_u32 v1, vcc_lo, s3, v1, vcc_lo
2112/*bf8c3f70         */ s_waitcnt       vmcnt(0)
2113/*dc708000 007d0200*/ global_store_dword v[0:1], v2, off
2114/*bf810000         */ s_endpgm
2115/*bf800000         */ s_nop           0x0
2116/*bf800000         */ s_nop           0x0
2117/*bf800000         */ s_nop           0x0
2118/*bf800000         */ s_nop           0x0
2119/*bf800000         */ s_nop           0x0
2120/*bf800000         */ s_nop           0x0
2121/*bf800000         */ s_nop           0x0
2122/*bf800000         */ s_nop           0x0
2123/*bf800000         */ s_nop           0x0
2124/*bf800000         */ s_nop           0x0
2125/*bf800000         */ s_nop           0x0
2126/*bf800000         */ s_nop           0x0
2127/*bf800000         */ s_nop           0x0
2128/*bf800000         */ s_nop           0x0
2129/*bf800000         */ s_nop           0x0
2130/*bf800000         */ s_nop           0x0
2131/*bf800000         */ s_nop           0x0
2132/*bf800000         */ s_nop           0x0
2133/*bf800000         */ s_nop           0x0
2134/*bf800000         */ s_nop           0x0
2135/*bf800000         */ s_nop           0x0
2136/*bf800000         */ s_nop           0x0
2137/*bf800000         */ s_nop           0x0
2138/*bf800000         */ s_nop           0x0
2139/*bf800000         */ s_nop           0x0
2140/*bf800000         */ s_nop           0x0
2141/*bf800000         */ s_nop           0x0
2142/*bf800000         */ s_nop           0x0
2143/*bf800000         */ s_nop           0x0
2144/*bf800000         */ s_nop           0x0
2145/*bf800000         */ s_nop           0x0
2146/*bf800000         */ s_nop           0x0
2147/*bf800000         */ s_nop           0x0
2148/*bf800000         */ s_nop           0x0
2149/*bf800000         */ s_nop           0x0
2150/*bf800000         */ s_nop           0x0
2151/*bf800000         */ s_nop           0x0
2152sample_kernel2:
2153/*f4000102 fa000004*/ s_load_dword    s4, s[4:5], 0x4
2154/*f4000143 fa000010*/ s_load_dword    s5, s[6:7], 0x10
2155/*f4080003 fa000000*/ s_load_dwordx4  s[0:3], s[6:7], 0x0
2156/*7e020280         */ v_mov_b32       v1, 0
2157/*bf8cc07f         */ s_waitcnt       lgkmcnt(0)
2158/*8704ff04 0000ffff*/ s_and_b32       s4, s4, 0xffff
2159/*93080408         */ s_mul_i32       s8, s8, s4
2160/*d76d0004 04001005*/ v_add3_u32      v4, s5, s8, v0
2161/*4a000887         */ v_add_nc_u32    v0, 7, v4
2162/*d6ff0002 00020082*/ v_lshlrev_b64   v[2:3], 2, v[0:1]
2163/*4a000885         */ v_add_nc_u32    v0, 5, v4
2164/*d6ff0000 00020082*/ v_lshlrev_b64   v[0:1], 2, v[0:1]
2165/*d70f6a02 00020400*/ v_add_co_u32    v2, vcc_lo, s0, v2
2166/*50060601         */ v_add_co_ci_u32 v3, vcc_lo, s1, v3, vcc_lo
2167/*d70f6a00 00020002*/ v_add_co_u32    v0, vcc_lo, s2, v0
2168/*dc308000 027d0002*/ global_load_dword v2, v[2:3], off
2169/*50020203         */ v_add_co_ci_u32 v1, vcc_lo, s3, v1, vcc_lo
2170/*bf8c3f70         */ s_waitcnt       vmcnt(0)
2171/*dc708000 007d0200*/ global_store_dword v[0:1], v2, off
2172/*bf810000         */ s_endpgm
2173/*bf9f0000         */ s_code_end
2174/*bf9f0000         */ s_code_end
2175/*bf9f0000         */ s_code_end
2176/*bf9f0000         */ s_code_end
2177/*bf9f0000         */ s_code_end
2178/*bf9f0000         */ s_code_end
2179/*bf9f0000         */ s_code_end
2180/*bf9f0000         */ s_code_end
2181/*bf9f0000         */ s_code_end
2182/*bf9f0000         */ s_code_end
2183/*bf9f0000         */ s_code_end
2184/*bf9f0000         */ s_code_end
2185/*bf9f0000         */ s_code_end
2186/*bf9f0000         */ s_code_end
2187/*bf9f0000         */ s_code_end
2188/*bf9f0000         */ s_code_end
2189/*bf9f0000         */ s_code_end
2190/*bf9f0000         */ s_code_end
2191/*bf9f0000         */ s_code_end
2192/*bf9f0000         */ s_code_end
2193/*bf9f0000         */ s_code_end
2194/*bf9f0000         */ s_code_end
2195/*bf9f0000         */ s_code_end
2196/*bf9f0000         */ s_code_end
2197/*bf9f0000         */ s_code_end
2198/*bf9f0000         */ s_code_end
2199/*bf9f0000         */ s_code_end
2200/*bf9f0000         */ s_code_end
2201/*bf9f0000         */ s_code_end
2202/*bf9f0000         */ s_code_end
2203/*bf9f0000         */ s_code_end
2204/*bf9f0000         */ s_code_end
2205/*bf9f0000         */ s_code_end
2206)ffDXD", true, false }
2207};
2208
2209static void testDisasmData(cxuint testId, const DisasmAmdTestCase& testCase)
2210{
2211    std::ostringstream disasmOss;
2212    std::string resultStr;
2213    Flags disasmFlags = DISASM_ALL&~DISASM_CODEPOS;
2214    if (testCase.config)
2215        disasmFlags |= DISASM_CONFIG;
2216    if (testCase.hsaConfig)
2217        disasmFlags |= DISASM_HSACONFIG;
2218   
2219    bool haveException = false;
2220    std::string resExceptionStr;
2221    try
2222    {
2223    if (testCase.filename == nullptr)
2224    {
2225        // disassemble input provided in testcase
2226        if (testCase.amdInput != nullptr)
2227        {
2228            Disassembler disasm(testCase.amdInput, disasmOss, disasmFlags);
2229            disasm.disassemble();
2230            resultStr = disasmOss.str();
2231        }
2232        else if (testCase.galliumInput != nullptr)
2233        {
2234            Disassembler disasm(testCase.galliumInput, disasmOss, disasmFlags);
2235            disasm.disassemble();
2236            resultStr = disasmOss.str();
2237        }
2238    }
2239    else
2240    {
2241        // disassemble file that filename provided by testcase
2242        Array<cxbyte> binaryData = loadDataFromFile(testCase.filename);
2243        if (isAmdBinary(binaryData.size(), binaryData.data()))
2244        {
2245            // if AMD OpenCL binary
2246            std::unique_ptr<AmdMainBinaryBase> base(createAmdBinaryFromCode(
2247                    binaryData.size(), binaryData.data(),
2248                    AMDBIN_CREATE_KERNELINFO | AMDBIN_CREATE_KERNELINFOMAP |
2249                    AMDBIN_CREATE_INNERBINMAP | AMDBIN_CREATE_KERNELHEADERS |
2250                    AMDBIN_CREATE_KERNELHEADERMAP | AMDBIN_INNER_CREATE_CALNOTES |
2251                    AMDBIN_CREATE_INFOSTRINGS));
2252            AmdMainGPUBinary32* amdGpuBin = static_cast<AmdMainGPUBinary32*>(base.get());
2253            Disassembler disasm(*amdGpuBin, disasmOss, disasmFlags);
2254            disasm.disassemble();
2255            resultStr = disasmOss.str();
2256        }
2257        else if (isAmdCL2Binary(binaryData.size(), binaryData.data()))
2258        {
2259            // if AMD OpenCL 2.0 binary
2260            AmdCL2MainGPUBinary64 amdBin(binaryData.size(), binaryData.data(),
2261                AMDBIN_CREATE_KERNELINFO | AMDBIN_CREATE_KERNELINFOMAP |
2262                AMDBIN_CREATE_INNERBINMAP | AMDBIN_CREATE_KERNELHEADERS |
2263                AMDBIN_CREATE_KERNELHEADERMAP | AMDBIN_INNER_CREATE_CALNOTES |
2264                AMDBIN_CREATE_INFOSTRINGS | AMDCL2BIN_INNER_CREATE_KERNELDATA |
2265                AMDCL2BIN_INNER_CREATE_KERNELDATAMAP | AMDCL2BIN_INNER_CREATE_KERNELSTUBS);
2266            Disassembler disasm(amdBin, disasmOss, disasmFlags);
2267            disasm.disassemble();
2268            resultStr = disasmOss.str();
2269        }
2270        else if (isROCmBinary(binaryData.size(), binaryData.data()))
2271        {
2272            // if ROCm (HSACO) binary
2273            ROCmBinary rocmBin(binaryData.size(), binaryData.data(), 0);
2274            Disassembler disasm(rocmBin, disasmOss, disasmFlags);
2275            disasm.disassemble();
2276            resultStr = disasmOss.str();
2277        }
2278        else
2279        {   /* gallium */
2280            GalliumBinary galliumBin(binaryData.size(),binaryData.data(), 0);
2281            Disassembler disasm(GPUDeviceType::CAPE_VERDE, galliumBin,
2282                            disasmOss, disasmFlags, testCase.llvmVersion);
2283            disasm.disassemble();
2284            resultStr = disasmOss.str();
2285        }
2286    }
2287    }
2288    catch(const DisasmException& ex)
2289    {
2290        resExceptionStr = ex.what();
2291        haveException = true;
2292    }
2293   
2294    std::string caseName;
2295    {
2296        std::ostringstream oss;
2297        oss << "DisasmCase#" << testId;
2298        oss.flush();
2299        caseName = oss.str();
2300    }
2301   
2302    if (testCase.exceptionString == nullptr)
2303        assertTrue("DisasmData", caseName + ".noexception", !haveException);
2304    else
2305    {
2306        assertTrue("DisasmData", caseName + ".exception", haveException);
2307        assertString("DisasmData", caseName + ".exceptionString",
2308                     testCase.exceptionString, resExceptionStr);
2309    }
2310   
2311    // compare output with expected string
2312    if (::strcmp(testCase.expectedString, resultStr.c_str()) != 0)
2313    {
2314        // print error
2315        std::ostringstream oss;
2316        oss << "Failed for #" << testId << std::endl;
2317        oss << resultStr << std::endl;
2318        oss.flush();
2319        throw Exception(oss.str());
2320    }
2321}
2322
2323int main(int argc, const char** argv)
2324{
2325    int retVal = 0;
2326    for (cxuint i = 0; i < sizeof(disasmDataTestCases)/sizeof(DisasmAmdTestCase); i++)
2327        try
2328        { testDisasmData(i, disasmDataTestCases[i]); }
2329        catch(const std::exception& ex)
2330        {
2331            std::cerr << ex.what() << std::endl;
2332            retVal = 1;
2333        }
2334    return retVal;
2335}
Note: See TracBrowser for help on using the repository browser.