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

Last change on this file since 2682 was 2682, checked in by matszpk, 3 years ago

CLRadeonExtender: Update copyright's years.

File size: 53.5 KB
Line 
1/*
2 *  CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3 *  Copyright (C) 2014-2017 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
30using namespace CLRX;
31
32static const cxbyte disasmInput1Global[14] =
33{ 13, 56, 66, 213,
34  55, 93, 123, 85,
35  164, 234, 21, 37,
36  44, 188 };
37
38static const char* disasmInput1Kernel1Metadata =
39";ARGSTART:__OpenCL_DCT_kernel\n"
40";version:3:1:111\n"
41";device:pitcairn\n"
42";uniqueid:1024\n"
43";memory:uavprivate:0\n"
44";memory:hwlocal:0\n"
45";memory:hwregion:0\n"
46";pointer:output:float:1:1:0:uav:12:4:RW:0:0\n"
47";pointer:input:float:1:1:16:uav:13:4:RO:0:0\n"
48";pointer:dct8x8:float:1:1:32:uav:14:4:RO:0:0\n"
49";pointer:inter:float:1:1:48:hl:1:4:RW:0:0\n"
50";value:width:u32:1:1:64\n"
51";value:blockWidth:u32:1:1:80\n"
52";value:inverse:u32:1:1:96\n"
53";function:1:1030\n"
54";uavid:11\n"
55";printfid:9\n"
56";cbid:10\n"
57";privateid:8\n"
58";reflection:0:float*\n"
59";reflection:1:float*\n"
60";reflection:2:float*\n"
61";reflection:3:float*\n"
62";reflection:4:uint\n"
63";reflection:5:uint\n"
64";reflection:6:uint\n"
65";ARGEND:__OpenCL_DCT_kernel\n"
66"dessss9843re88888888888888888uuuuuuuufdd"
67"dessss9843re88888888888888888uuuuuuuufdd"
68"dessss9843re88888888888888888uuuuuuuufdd444444444444444444444444"
69"\r\r\t\t\t\t\txx\f\f\f\3777x833334441\n";
70
71static const cxbyte disasmInput1Kernel1Header[59] =
72{ 1, 2, 0, 0, 0, 44, 0, 0,
73  12, 3, 6, 3, 3, 2, 0, 0,
74  19, 19, 19, 19, 19, 19, 19, 19,
75  19, 19, 19, 19, 19, 19, 19, 19,
76  19, 19, 19, 19, 19, 19, 19, 18,
77  19, 19, 19, 19, 19, 19, 19, 19,
78  19, 19, 19, 19, 19, 19, 19, 19,
79  19, 19, 19
80};
81
82static const cxbyte disasmInput1Kernel1Data[40] =
83{
84    1, 4, 5, 6, 6, 6, 4, 3,
85    3, 5, 65, 13, 5, 5, 11, 57,
86    5, 65, 5, 0, 0, 0, 0, 5,
87    1, 15, 5, 1, 56, 0, 0, 5,
88    5, 65, 5, 0, 0, 78, 255, 5
89};
90
91static uint32_t disasmInput1Kernel1ProgInfo[13] =
92{
93    LEV(0xffcd44dcU), LEV(0x4543U),
94    LEV(0x456U), LEV(0x5663677U),
95    LEV(0x3cd90cU), LEV(0x3958a85U),
96    LEV(0x458c98d9U), LEV(0x344dbd9U),
97    LEV(0xd0d9d9dU), LEV(0x234455U),
98    LEV(0x1U), LEV(0x55U), LEV(0x4565U)
99};
100
101static uint32_t disasmInput1Kernel1Inputs[20] =
102{
103    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1113U),
104    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1113U),
105    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1114U),
106    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1113U),
107    LEV(1113U), LEV(1113U), LEV(1113U), LEV(1113U)
108};
109
110static uint32_t disasmInput1Kernel1Outputs[17] =
111{
112    LEV(5U), LEV(6U), LEV(3U), LEV(13U), LEV(5U), LEV(117U), LEV(12U), LEV(3U),
113    LEV(785U), LEV(46U), LEV(55U), LEV(5U), LEV(2U), LEV(3U), LEV(0U), LEV(0U), LEV(44U)
114};
115
116static uint32_t disasmInput1Kernel1EarlyExit[3] = { LEV(1355U), LEV(44U), LEV(444U) };
117
118static uint32_t disasmInput1Kernel2EarlyExit[3] = { LEV(121U) };
119
120static CALDataSegmentEntry disasmInput1Kernel1Float32Consts[6] =
121{
122    { LEV(0U), LEV(5U) }, { LEV(66U), LEV(57U) }, { LEV(67U), LEV(334U) },
123    { LEV(1U), LEV(6U) }, { LEV(5U), LEV(86U) }, { LEV(2100U), LEV(466U) }
124};
125
126static CALSamplerMapEntry disasmInput1Kernel1InputSamplers[6] =
127{
128    { LEV(0U), LEV(5U) }, { LEV(66U), LEV(57U) }, { LEV(67U), LEV(334U) },
129    { LEV(1U), LEV(6U) }, { LEV(5U), LEV(86U) }, { LEV(2100U), LEV(466U) }
130};
131
132static uint32_t disasmInput1Kernel1UavOpMask[1] = { LEV(4556U) };
133
134static AmdDisasmInput disasmInput1 =
135{
136    GPUDeviceType::SPOOKY,
137    true,
138    "This\nis my\300\x31 stupid\r\"driver", "-O ccc",
139    sizeof(disasmInput1Global), disasmInput1Global,
140    {
141        { "kernelxVCR",
142          ::strlen(disasmInput1Kernel1Metadata),
143          disasmInput1Kernel1Metadata,
144          sizeof(disasmInput1Kernel1Header), disasmInput1Kernel1Header,
145          {
146              { { 8, 52, CALNOTE_ATI_PROGINFO,
147                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
148                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1ProgInfo) },
149              { { 8, 79, CALNOTE_ATI_INPUTS,
150                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
151                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1Inputs) },
152              { { 8, 67, CALNOTE_ATI_OUTPUTS,
153                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
154                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1Outputs) },
155              { { 8, 12, CALNOTE_ATI_EARLYEXIT,
156                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
157                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1EarlyExit) },
158              { { 8, 4, CALNOTE_ATI_EARLYEXIT,
159                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
160                 reinterpret_cast<cxbyte*>(disasmInput1Kernel2EarlyExit) },
161              { { 8, 48, CALNOTE_ATI_FLOAT32CONSTS,
162                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
163                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1Float32Consts) },
164              { { 8, 48, CALNOTE_ATI_INPUT_SAMPLERS,
165                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
166                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1InputSamplers) },
167              { { 8, 48, CALNOTE_ATI_CONSTANT_BUFFERS,
168                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
169                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1InputSamplers) },
170              { { 8, 48, 0x3d, { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
171                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1InputSamplers) },
172              { { 8, 4, CALNOTE_ATI_UAV_OP_MASK,
173                  { 'A', 'T', 'I', ' ', 'C', 'A', 'L', 0 } },
174                 reinterpret_cast<cxbyte*>(disasmInput1Kernel1UavOpMask) },
175          },
176          sizeof(disasmInput1Kernel1Data), disasmInput1Kernel1Data,
177          0, nullptr
178        }
179    }
180};
181
182static const cxbyte galliumInput1Global[14] =
183{ 1,2,3,4,5,6,7,8,9,10,11,33,44,55 };
184
185static const GalliumDisasmInput galliumDisasmData =
186{
187    GPUDeviceType::PITCAIRN, false,
188    sizeof(galliumInput1Global), galliumInput1Global,
189    {
190        { "kernel1",
191          { { 0xff1123, 0xcda1fa }, { 0x3bf1123, 0xfdca45 }, { 0x2dca6, 0xfbca168 } },
192          0, {
193              { GalliumArgType::SCALAR, false, GalliumArgSemantic::GENERAL, 4, 8, 12 },
194              { GalliumArgType::CONSTANT, false, GalliumArgSemantic::GENERAL, 1, 8, 12 },
195              { GalliumArgType::GLOBAL, false, GalliumArgSemantic::GENERAL, 4, 2, 12 },
196              { GalliumArgType::IMAGE2D_RDONLY, false,
197                  GalliumArgSemantic::GENERAL, 4, 7, 45 },
198              { GalliumArgType::IMAGE2D_WRONLY, false,
199                  GalliumArgSemantic::GENERAL, 4, 8, 45 },
200              { GalliumArgType::IMAGE3D_RDONLY, false,
201                  GalliumArgSemantic::GENERAL, 9, 7, 45 },
202              { GalliumArgType::IMAGE3D_WRONLY, false,
203                  GalliumArgSemantic::GENERAL, 12, 7, 45 },
204              { GalliumArgType::SAMPLER, false, GalliumArgSemantic::GENERAL, 17, 16, 74 },
205              { GalliumArgType::SCALAR, true, GalliumArgSemantic::GENERAL, 4, 8, 12 },
206              { GalliumArgType::SCALAR, false,
207                  GalliumArgSemantic::GRID_DIMENSION, 124, 8, 12 },
208              { GalliumArgType::SCALAR, false,
209                  GalliumArgSemantic::GRID_OFFSET, 4, 0, 32 }
210          } },
211        { "kernel2",
212          { { 0x234423, 0xaaabba }, { 0x3bdd123, 0x132235 }, { 0x11122, 0xf3424dd } },
213          0, {
214              { GalliumArgType::CONSTANT, false, GalliumArgSemantic::GENERAL, 1, 8, 12 },
215              { GalliumArgType::GLOBAL, false, GalliumArgSemantic::GENERAL, 4, 2, 12 },
216              { GalliumArgType::SCALAR, false, GalliumArgSemantic::GENERAL, 4, 8, 12 },
217              { GalliumArgType::IMAGE2D_RDONLY, false,
218                  GalliumArgSemantic::GENERAL, 4, 9, 45 },
219              { GalliumArgType::IMAGE2D_WRONLY, false,
220                  GalliumArgSemantic::GENERAL, 4, 8, 51 },
221              { GalliumArgType::IMAGE3D_RDONLY, false,
222                  GalliumArgSemantic::GENERAL, 9, 7, 45 },
223              { GalliumArgType::IMAGE3D_WRONLY, true,
224                  GalliumArgSemantic::GENERAL, 12, 7, 45 },
225              { GalliumArgType::SAMPLER, false, GalliumArgSemantic::GENERAL, 17, 16, 74 },
226              { GalliumArgType::SCALAR, true, GalliumArgSemantic::GENERAL, 4, 8, 12 },
227              { GalliumArgType::SCALAR, false,
228                  GalliumArgSemantic::GRID_DIMENSION, 124, 8, 12 },
229              { GalliumArgType::SCALAR, false,
230                  GalliumArgSemantic::GRID_OFFSET, 4, 32, 32 }
231          } }
232    },
233    0, nullptr
234};
235
236struct DisasmAmdTestCase
237{
238    const AmdDisasmInput* amdInput;
239    const GalliumDisasmInput* galliumInput;
240    const char* filename;
241    const char* expectedString;
242    bool config;
243};
244
245static const DisasmAmdTestCase disasmDataTestCases[] =
246{
247    { &disasmInput1, nullptr, nullptr,
248        R"xxFxx(.amd
249.gpu Spooky
250.64bit
251.compile_options "-O ccc"
252.driver_info "This\nis my\3001 stupid\r\"driver"
253.globaldata
254    .byte 0x0d, 0x38, 0x42, 0xd5, 0x37, 0x5d, 0x7b, 0x55
255    .byte 0xa4, 0xea, 0x15, 0x25, 0x2c, 0xbc
256.kernel kernelxVCR
257    .header
258        .byte 0x01, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00
259        .byte 0x0c, 0x03, 0x06, 0x03, 0x03, 0x02, 0x00, 0x00
260        .fill 16, 1, 0x13
261        .byte 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x12
262        .fill 19, 1, 0x13
263    .metadata
264        .ascii ";ARGSTART:__OpenCL_DCT_kernel\n"
265        .ascii ";version:3:1:111\n"
266        .ascii ";device:pitcairn\n"
267        .ascii ";uniqueid:1024\n"
268        .ascii ";memory:uavprivate:0\n"
269        .ascii ";memory:hwlocal:0\n"
270        .ascii ";memory:hwregion:0\n"
271        .ascii ";pointer:output:float:1:1:0:uav:12:4:RW:0:0\n"
272        .ascii ";pointer:input:float:1:1:16:uav:13:4:RO:0:0\n"
273        .ascii ";pointer:dct8x8:float:1:1:32:uav:14:4:RO:0:0\n"
274        .ascii ";pointer:inter:float:1:1:48:hl:1:4:RW:0:0\n"
275        .ascii ";value:width:u32:1:1:64\n"
276        .ascii ";value:blockWidth:u32:1:1:80\n"
277        .ascii ";value:inverse:u32:1:1:96\n"
278        .ascii ";function:1:1030\n"
279        .ascii ";uavid:11\n"
280        .ascii ";printfid:9\n"
281        .ascii ";cbid:10\n"
282        .ascii ";privateid:8\n"
283        .ascii ";reflection:0:float*\n"
284        .ascii ";reflection:1:float*\n"
285        .ascii ";reflection:2:float*\n"
286        .ascii ";reflection:3:float*\n"
287        .ascii ";reflection:4:uint\n"
288        .ascii ";reflection:5:uint\n"
289        .ascii ";reflection:6:uint\n"
290        .ascii ";ARGEND:__OpenCL_DCT_kernel\n"
291        .ascii "dessss9843re88888888888888888uuuuuuuufdddessss9843re88888888888888888uuu"
292        .ascii "uuuuufdddessss9843re88888888888888888uuuuuuuufdd444444444444444444444444"
293        .ascii "\r\r\t\t\t\t\txx\f\f\f\3777x833334441\n"
294    .data
295        .byte 0x01, 0x04, 0x05, 0x06, 0x06, 0x06, 0x04, 0x03
296        .byte 0x03, 0x05, 0x41, 0x0d, 0x05, 0x05, 0x0b, 0x39
297        .byte 0x05, 0x41, 0x05, 0x00, 0x00, 0x00, 0x00, 0x05
298        .byte 0x01, 0x0f, 0x05, 0x01, 0x38, 0x00, 0x00, 0x05
299        .byte 0x05, 0x41, 0x05, 0x00, 0x00, 0x4e, 0xff, 0x05
300    .proginfo
301        .entry 0xffcd44dc, 0x00004543
302        .entry 0x00000456, 0x05663677
303        .entry 0x003cd90c, 0x03958a85
304        .entry 0x458c98d9, 0x0344dbd9
305        .entry 0x0d0d9d9d, 0x00234455
306        .entry 0x00000001, 0x00000055
307        .byte 0x65, 0x45, 0x00, 0x00
308    .inputs
309        .fill 8, 4, 0x00000459
310        .int 0x00000459, 0x00000459, 0x00000459, 0x0000045a
311        .fill 7, 4, 0x00000459
312        .byte 0x59, 0x04, 0x00
313    .outputs
314        .int 0x00000005, 0x00000006, 0x00000003, 0x0000000d
315        .int 0x00000005, 0x00000075, 0x0000000c, 0x00000003
316        .int 0x00000311, 0x0000002e, 0x00000037, 0x00000005
317        .int 0x00000002, 0x00000003, 0x00000000, 0x00000000
318        .byte 0x2c, 0x00, 0x00
319    .earlyexit
320        .byte 0x4b, 0x05, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00
321        .byte 0xbc, 0x01, 0x00, 0x00
322    .earlyexit 121
323    .floatconsts
324        .segment 0, 5
325        .segment 66, 57
326        .segment 67, 334
327        .segment 1, 6
328        .segment 5, 86
329        .segment 2100, 466
330    .inputsamplers
331        .sampler 0, 0x5
332        .sampler 66, 0x39
333        .sampler 67, 0x14e
334        .sampler 1, 0x6
335        .sampler 5, 0x56
336        .sampler 2100, 0x1d2
337    .constantbuffers
338        .cbmask 0, 5
339        .cbmask 66, 57
340        .cbmask 67, 334
341        .cbmask 1, 6
342        .cbmask 5, 86
343        .cbmask 2100, 466
344    .calnote 0x3d
345        .byte 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
346        .byte 0x42, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00
347        .byte 0x43, 0x00, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00
348        .byte 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00
349        .byte 0x05, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00
350        .byte 0x34, 0x08, 0x00, 0x00, 0xd2, 0x01, 0x00, 0x00
351    .uavopmask 4556
352)xxFxx", false
353    },
354    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/samplekernels.clo",
355        R"xxFxx(.amd
356.gpu Pitcairn
357.32bit
358.compile_options ""
359.driver_info "@(#) OpenCL 1.2 AMD-APP (1702.3).  Driver version: 1702.3 (VM)"
360.kernel add
361    .header
362        .fill 16, 1, 0x00
363        .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
364        .fill 8, 1, 0x00
365    .metadata
366        .ascii ";ARGSTART:__OpenCL_add_kernel\n"
367        .ascii ";version:3:1:111\n"
368        .ascii ";device:pitcairn\n"
369        .ascii ";uniqueid:1024\n"
370        .ascii ";memory:uavprivate:0\n"
371        .ascii ";memory:hwlocal:0\n"
372        .ascii ";memory:hwregion:0\n"
373        .ascii ";value:n:u32:1:1:0\n"
374        .ascii ";pointer:adat:u32:1:1:16:uav:12:4:RO:0:0\n"
375        .ascii ";constarg:1:adat\n"
376        .ascii ";pointer:bdat:u32:1:1:32:uav:13:4:RO:0:0\n"
377        .ascii ";constarg:2:bdat\n"
378        .ascii ";pointer:cdat:u32:1:1:48:uav:14:4:RW:0:0\n"
379        .ascii ";function:1:1028\n"
380        .ascii ";uavid:11\n"
381        .ascii ";printfid:9\n"
382        .ascii ";cbid:10\n"
383        .ascii ";privateid:8\n"
384        .ascii ";reflection:0:uint\n"
385        .ascii ";reflection:1:uint*\n"
386        .ascii ";reflection:2:uint*\n"
387        .ascii ";reflection:3:uint*\n"
388        .ascii ";ARGEND:__OpenCL_add_kernel\n"
389    .data
390        .fill 4736, 1, 0x00
391    .inputs
392    .outputs
393    .uav
394        .entry 12, 4, 0, 5
395        .entry 13, 4, 0, 5
396        .entry 14, 4, 0, 5
397        .entry 11, 4, 0, 5
398    .condout 0
399    .floatconsts
400    .intconsts
401    .boolconsts
402    .earlyexit 0
403    .globalbuffers
404    .constantbuffers
405        .cbmask 0, 0
406        .cbmask 1, 0
407    .inputsamplers
408    .scratchbuffers
409        .int 0x00000000
410    .persistentbuffers
411    .proginfo
412        .entry 0x80001000, 0x00000003
413        .entry 0x80001001, 0x00000017
414        .entry 0x80001002, 0x00000000
415        .entry 0x80001003, 0x00000002
416        .entry 0x80001004, 0x00000002
417        .entry 0x80001005, 0x00000002
418        .entry 0x80001006, 0x00000000
419        .entry 0x80001007, 0x00000004
420        .entry 0x80001008, 0x00000004
421        .entry 0x80001009, 0x00000002
422        .entry 0x8000100a, 0x00000001
423        .entry 0x8000100b, 0x00000008
424        .entry 0x8000100c, 0x00000004
425        .entry 0x80001041, 0x00000003
426        .entry 0x80001042, 0x00000010
427        .entry 0x80001863, 0x00000066
428        .entry 0x80001864, 0x00000100
429        .entry 0x80001043, 0x000000c0
430        .entry 0x80001044, 0x00000000
431        .entry 0x80001045, 0x00000000
432        .entry 0x00002e13, 0x00000098
433        .entry 0x8000001c, 0x00000100
434        .entry 0x8000001d, 0x00000000
435        .entry 0x8000001e, 0x00000000
436        .entry 0x80001841, 0x00000000
437        .entry 0x8000001f, 0x00007000
438        .entry 0x80001843, 0x00007000
439        .entry 0x80001844, 0x00000000
440        .entry 0x80001845, 0x00000000
441        .entry 0x80001846, 0x00000000
442        .entry 0x80001847, 0x00000000
443        .entry 0x80001848, 0x00000000
444        .entry 0x80001849, 0x00000000
445        .entry 0x8000184a, 0x00000000
446        .entry 0x8000184b, 0x00000000
447        .entry 0x8000184c, 0x00000000
448        .entry 0x8000184d, 0x00000000
449        .entry 0x8000184e, 0x00000000
450        .entry 0x8000184f, 0x00000000
451        .entry 0x80001850, 0x00000000
452        .entry 0x80001851, 0x00000000
453        .entry 0x80001852, 0x00000000
454        .entry 0x80001853, 0x00000000
455        .entry 0x80001854, 0x00000000
456        .entry 0x80001855, 0x00000000
457        .entry 0x80001856, 0x00000000
458        .entry 0x80001857, 0x00000000
459        .entry 0x80001858, 0x00000000
460        .entry 0x80001859, 0x00000000
461        .entry 0x8000185a, 0x00000000
462        .entry 0x8000185b, 0x00000000
463        .entry 0x8000185c, 0x00000000
464        .entry 0x8000185d, 0x00000000
465        .entry 0x8000185e, 0x00000000
466        .entry 0x8000185f, 0x00000000
467        .entry 0x80001860, 0x00000000
468        .entry 0x80001861, 0x00000000
469        .entry 0x80001862, 0x00000000
470        .entry 0x8000000a, 0x00000001
471        .entry 0x80000078, 0x00000040
472        .entry 0x80000081, 0x00008000
473        .entry 0x80000082, 0x00000000
474    .subconstantbuffers
475    .uavmailboxsize 0
476    .uavopmask
477        .byte 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
478        .fill 120, 1, 0x00
479    .text
480/*c2000504         */ s_buffer_load_dword s0, s[4:7], 0x4
481/*c2008518         */ s_buffer_load_dword s1, s[4:7], 0x18
482/*c2020900         */ s_buffer_load_dword s4, s[8:11], 0x0
483/*c2028904         */ s_buffer_load_dword s5, s[8:11], 0x4
484/*c2030908         */ s_buffer_load_dword s6, s[8:11], 0x8
485/*c203890c         */ s_buffer_load_dword s7, s[8:11], 0xc
486/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
487/*8380ff00 0000ffff*/ s_min_u32       s0, s0, 0xffff
488/*9300000c         */ s_mul_i32       s0, s12, s0
489/*80000100         */ s_add_u32       s0, s0, s1
490/*4a000000         */ v_add_i32       v0, vcc, s0, v0
491/*7d880004         */ v_cmp_gt_u32    vcc, s4, v0
492/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
493/*bf880011         */ s_cbranch_execz .L128_0
494/*c0840360         */ s_load_dwordx4  s[8:11], s[2:3], 0x60
495/*c0860368         */ s_load_dwordx4  s[12:15], s[2:3], 0x68
496/*34000082         */ v_lshlrev_b32   v0, 2, v0
497/*4a020005         */ v_add_i32       v1, vcc, s5, v0
498/*4a040006         */ v_add_i32       v2, vcc, s6, v0
499/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
500/*eba01000 80020101*/ tbuffer_load_format_x v1, v1, s[8:11], 0 offen format:[32,float]
501/*eba01000 80030202*/ tbuffer_load_format_x v2, v2, s[12:15], 0 offen format:[32,float]
502/*c0840370         */ s_load_dwordx4  s[8:11], s[2:3], 0x70
503/*bf8c0f70         */ s_waitcnt       vmcnt(0)
504/*4a020501         */ v_add_i32       v1, vcc, v1, v2
505/*4a000007         */ v_add_i32       v0, vcc, s7, v0
506/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
507/*eba41000 80020100*/ tbuffer_store_format_x v1, v0, s[8:11], 0 offen format:[32,float]
508.L128_0:
509/*bf810000         */ s_endpgm
510.kernel multiply
511    .header
512        .fill 16, 1, 0x00
513        .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
514        .fill 8, 1, 0x00
515    .metadata
516        .ascii ";ARGSTART:__OpenCL_multiply_kernel\n"
517        .ascii ";version:3:1:111\n"
518        .ascii ";device:pitcairn\n"
519        .ascii ";uniqueid:1025\n"
520        .ascii ";memory:uavprivate:0\n"
521        .ascii ";memory:hwlocal:0\n"
522        .ascii ";memory:hwregion:0\n"
523        .ascii ";value:n:u32:1:1:0\n"
524        .ascii ";pointer:adat:u32:1:1:16:uav:12:4:RO:0:0\n"
525        .ascii ";constarg:1:adat\n"
526        .ascii ";pointer:bdat:u32:1:1:32:uav:13:4:RO:0:0\n"
527        .ascii ";constarg:2:bdat\n"
528        .ascii ";pointer:cdat:u32:1:1:48:uav:14:4:RW:0:0\n"
529        .ascii ";function:1:1029\n"
530        .ascii ";uavid:11\n"
531        .ascii ";printfid:9\n"
532        .ascii ";cbid:10\n"
533        .ascii ";privateid:8\n"
534        .ascii ";reflection:0:uint\n"
535        .ascii ";reflection:1:uint*\n"
536        .ascii ";reflection:2:uint*\n"
537        .ascii ";reflection:3:uint*\n"
538        .ascii ";ARGEND:__OpenCL_multiply_kernel\n"
539    .data
540        .fill 4736, 1, 0x00
541    .inputs
542    .outputs
543    .uav
544        .entry 12, 4, 0, 5
545        .entry 13, 4, 0, 5
546        .entry 14, 4, 0, 5
547        .entry 11, 4, 0, 5
548    .condout 0
549    .floatconsts
550    .intconsts
551    .boolconsts
552    .earlyexit 0
553    .globalbuffers
554    .constantbuffers
555        .cbmask 0, 0
556        .cbmask 1, 0
557    .inputsamplers
558    .scratchbuffers
559        .int 0x00000000
560    .persistentbuffers
561    .proginfo
562        .entry 0x80001000, 0x00000003
563        .entry 0x80001001, 0x00000017
564        .entry 0x80001002, 0x00000000
565        .entry 0x80001003, 0x00000002
566        .entry 0x80001004, 0x00000002
567        .entry 0x80001005, 0x00000002
568        .entry 0x80001006, 0x00000000
569        .entry 0x80001007, 0x00000004
570        .entry 0x80001008, 0x00000004
571        .entry 0x80001009, 0x00000002
572        .entry 0x8000100a, 0x00000001
573        .entry 0x8000100b, 0x00000008
574        .entry 0x8000100c, 0x00000004
575        .entry 0x80001041, 0x00000003
576        .entry 0x80001042, 0x00000014
577        .entry 0x80001863, 0x00000066
578        .entry 0x80001864, 0x00000100
579        .entry 0x80001043, 0x000000c0
580        .entry 0x80001044, 0x00000000
581        .entry 0x80001045, 0x00000000
582        .entry 0x00002e13, 0x00000098
583        .entry 0x8000001c, 0x00000100
584        .entry 0x8000001d, 0x00000000
585        .entry 0x8000001e, 0x00000000
586        .entry 0x80001841, 0x00000000
587        .entry 0x8000001f, 0x00007000
588        .entry 0x80001843, 0x00007000
589        .entry 0x80001844, 0x00000000
590        .entry 0x80001845, 0x00000000
591        .entry 0x80001846, 0x00000000
592        .entry 0x80001847, 0x00000000
593        .entry 0x80001848, 0x00000000
594        .entry 0x80001849, 0x00000000
595        .entry 0x8000184a, 0x00000000
596        .entry 0x8000184b, 0x00000000
597        .entry 0x8000184c, 0x00000000
598        .entry 0x8000184d, 0x00000000
599        .entry 0x8000184e, 0x00000000
600        .entry 0x8000184f, 0x00000000
601        .entry 0x80001850, 0x00000000
602        .entry 0x80001851, 0x00000000
603        .entry 0x80001852, 0x00000000
604        .entry 0x80001853, 0x00000000
605        .entry 0x80001854, 0x00000000
606        .entry 0x80001855, 0x00000000
607        .entry 0x80001856, 0x00000000
608        .entry 0x80001857, 0x00000000
609        .entry 0x80001858, 0x00000000
610        .entry 0x80001859, 0x00000000
611        .entry 0x8000185a, 0x00000000
612        .entry 0x8000185b, 0x00000000
613        .entry 0x8000185c, 0x00000000
614        .entry 0x8000185d, 0x00000000
615        .entry 0x8000185e, 0x00000000
616        .entry 0x8000185f, 0x00000000
617        .entry 0x80001860, 0x00000000
618        .entry 0x80001861, 0x00000000
619        .entry 0x80001862, 0x00000000
620        .entry 0x8000000a, 0x00000001
621        .entry 0x80000078, 0x00000040
622        .entry 0x80000081, 0x00008000
623        .entry 0x80000082, 0x00000000
624    .subconstantbuffers
625    .uavmailboxsize 0
626    .uavopmask
627        .byte 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
628        .fill 120, 1, 0x00
629    .text
630/*c2000504         */ s_buffer_load_dword s0, s[4:7], 0x4
631/*c2008518         */ s_buffer_load_dword s1, s[4:7], 0x18
632/*c2020900         */ s_buffer_load_dword s4, s[8:11], 0x0
633/*c2028904         */ s_buffer_load_dword s5, s[8:11], 0x4
634/*c2030908         */ s_buffer_load_dword s6, s[8:11], 0x8
635/*c203890c         */ s_buffer_load_dword s7, s[8:11], 0xc
636/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
637/*8380ff00 0000ffff*/ s_min_u32       s0, s0, 0xffff
638/*9300000c         */ s_mul_i32       s0, s12, s0
639/*80000100         */ s_add_u32       s0, s0, s1
640/*4a000000         */ v_add_i32       v0, vcc, s0, v0
641/*7d880004         */ v_cmp_gt_u32    vcc, s4, v0
642/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
643/*bf880011         */ s_cbranch_execz .L128_1
644/*c0840360         */ s_load_dwordx4  s[8:11], s[2:3], 0x60
645/*c0860368         */ s_load_dwordx4  s[12:15], s[2:3], 0x68
646/*c0880370         */ s_load_dwordx4  s[16:19], s[2:3], 0x70
647/*34000082         */ v_lshlrev_b32   v0, 2, v0
648/*4a020005         */ v_add_i32       v1, vcc, s5, v0
649/*4a040006         */ v_add_i32       v2, vcc, s6, v0
650/*4a000007         */ v_add_i32       v0, vcc, s7, v0
651/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
652/*eba01000 80020101*/ tbuffer_load_format_x v1, v1, s[8:11], 0 offen format:[32,float]
653/*eba01000 80030202*/ tbuffer_load_format_x v2, v2, s[12:15], 0 offen format:[32,float]
654/*bf8c0f70         */ s_waitcnt       vmcnt(0)
655/*d2d60001 00020302*/ v_mul_lo_i32    v1, v2, v1
656/*eba41000 80040100*/ tbuffer_store_format_x v1, v0, s[16:19], 0 offen format:[32,float]
657.L128_1:
658/*bf810000         */ s_endpgm
659)xxFxx", false
660    },
661    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/samplekernels_64.clo",
662        R"xxFxx(.amd
663.gpu Pitcairn
664.64bit
665.compile_options ""
666.driver_info "@(#) OpenCL 1.2 AMD-APP (1702.3).  Driver version: 1702.3 (VM)"
667.kernel add
668    .header
669        .fill 16, 1, 0x00
670        .byte 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
671        .fill 8, 1, 0x00
672    .metadata
673        .ascii ";ARGSTART:__OpenCL_add_kernel\n"
674        .ascii ";version:3:1:111\n"
675        .ascii ";device:pitcairn\n"
676        .ascii ";uniqueid:1024\n"
677        .ascii ";memory:uavprivate:0\n"
678        .ascii ";memory:hwlocal:0\n"
679        .ascii ";memory:hwregion:0\n"
680        .ascii ";value:n:u32:1:1:0\n"
681        .ascii ";pointer:adat:u32:1:1:16:uav:12:4:RO:0:0\n"
682        .ascii ";constarg:1:adat\n"
683        .ascii ";pointer:bdat:u32:1:1:32:uav:13:4:RO:0:0\n"
684        .ascii ";constarg:2:bdat\n"
685        .ascii ";pointer:cdat:u32:1:1:48:uav:14:4:RW:0:0\n"
686        .ascii ";function:1:1028\n"
687        .ascii ";memory:64bitABI\n"
688        .ascii ";uavid:11\n"
689        .ascii ";printfid:9\n"
690        .ascii ";cbid:10\n"
691        .ascii ";privateid:8\n"
692        .ascii ";reflection:0:uint\n"
693        .ascii ";reflection:1:uint*\n"
694        .ascii ";reflection:2:uint*\n"
695        .ascii ";reflection:3:uint*\n"
696        .ascii ";ARGEND:__OpenCL_add_kernel\n"
697    .data
698        .fill 4736, 1, 0x00
699    .inputs
700    .outputs
701    .uav
702        .entry 12, 4, 0, 5
703        .entry 13, 4, 0, 5
704        .entry 14, 4, 0, 5
705        .entry 11, 4, 0, 5
706    .condout 0
707    .floatconsts
708    .intconsts
709    .boolconsts
710    .earlyexit 0
711    .globalbuffers
712    .constantbuffers
713        .cbmask 0, 0
714        .cbmask 1, 0
715    .inputsamplers
716    .scratchbuffers
717        .int 0x00000000
718    .persistentbuffers
719    .proginfo
720        .entry 0x80001000, 0x00000003
721        .entry 0x80001001, 0x00000017
722        .entry 0x80001002, 0x00000000
723        .entry 0x80001003, 0x00000002
724        .entry 0x80001004, 0x00000002
725        .entry 0x80001005, 0x00000002
726        .entry 0x80001006, 0x00000000
727        .entry 0x80001007, 0x00000004
728        .entry 0x80001008, 0x00000004
729        .entry 0x80001009, 0x00000002
730        .entry 0x8000100a, 0x00000001
731        .entry 0x8000100b, 0x00000008
732        .entry 0x8000100c, 0x00000004
733        .entry 0x80001041, 0x00000008
734        .entry 0x80001042, 0x00000014
735        .entry 0x80001863, 0x00000066
736        .entry 0x80001864, 0x00000100
737        .entry 0x80001043, 0x000000c0
738        .entry 0x80001044, 0x00000000
739        .entry 0x80001045, 0x00000000
740        .entry 0x00002e13, 0x00000098
741        .entry 0x8000001c, 0x00000100
742        .entry 0x8000001d, 0x00000000
743        .entry 0x8000001e, 0x00000000
744        .entry 0x80001841, 0x00000000
745        .entry 0x8000001f, 0x00007000
746        .entry 0x80001843, 0x00007000
747        .entry 0x80001844, 0x00000000
748        .entry 0x80001845, 0x00000000
749        .entry 0x80001846, 0x00000000
750        .entry 0x80001847, 0x00000000
751        .entry 0x80001848, 0x00000000
752        .entry 0x80001849, 0x00000000
753        .entry 0x8000184a, 0x00000000
754        .entry 0x8000184b, 0x00000000
755        .entry 0x8000184c, 0x00000000
756        .entry 0x8000184d, 0x00000000
757        .entry 0x8000184e, 0x00000000
758        .entry 0x8000184f, 0x00000000
759        .entry 0x80001850, 0x00000000
760        .entry 0x80001851, 0x00000000
761        .entry 0x80001852, 0x00000000
762        .entry 0x80001853, 0x00000000
763        .entry 0x80001854, 0x00000000
764        .entry 0x80001855, 0x00000000
765        .entry 0x80001856, 0x00000000
766        .entry 0x80001857, 0x00000000
767        .entry 0x80001858, 0x00000000
768        .entry 0x80001859, 0x00000000
769        .entry 0x8000185a, 0x00000000
770        .entry 0x8000185b, 0x00000000
771        .entry 0x8000185c, 0x00000000
772        .entry 0x8000185d, 0x00000000
773        .entry 0x8000185e, 0x00000000
774        .entry 0x8000185f, 0x00000000
775        .entry 0x80001860, 0x00000000
776        .entry 0x80001861, 0x00000000
777        .entry 0x80001862, 0x00000000
778        .entry 0x8000000a, 0x00000001
779        .entry 0x80000078, 0x00000040
780        .entry 0x80000081, 0x00008000
781        .entry 0x80000082, 0x00000000
782    .subconstantbuffers
783    .uavmailboxsize 0
784    .uavopmask
785        .byte 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
786        .fill 120, 1, 0x00
787    .text
788/*c2000504         */ s_buffer_load_dword s0, s[4:7], 0x4
789/*c2008518         */ s_buffer_load_dword s1, s[4:7], 0x18
790/*c2420904         */ s_buffer_load_dwordx2 s[4:5], s[8:11], 0x4
791/*c2430908         */ s_buffer_load_dwordx2 s[6:7], s[8:11], 0x8
792/*c247090c         */ s_buffer_load_dwordx2 s[14:15], s[8:11], 0xc
793/*c2040900         */ s_buffer_load_dword s8, s[8:11], 0x0
794/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
795/*8380ff00 0000ffff*/ s_min_u32       s0, s0, 0xffff
796/*9300000c         */ s_mul_i32       s0, s12, s0
797/*80000100         */ s_add_u32       s0, s0, s1
798/*4a000000         */ v_add_i32       v0, vcc, s0, v0
799/*7e020280         */ v_mov_b32       v1, 0
800/*7e040208         */ v_mov_b32       v2, s8
801/*7e060280         */ v_mov_b32       v3, 0
802/*7dc20500         */ v_cmp_lt_u64    vcc, v[0:1], v[2:3]
803/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
804/*bf880018         */ s_cbranch_execz .L168_0
805/*c0840360         */ s_load_dwordx4  s[8:11], s[2:3], 0x60
806/*c0880368         */ s_load_dwordx4  s[16:19], s[2:3], 0x68
807/*d2c20000 00010500*/ v_lshl_b64      v[0:1], v[0:1], 2
808/*4a040004         */ v_add_i32       v2, vcc, s4, v0
809/*7e060205         */ v_mov_b32       v3, s5
810/*50060303         */ v_addc_u32      v3, vcc, v3, v1, vcc
811/*4a0c0006         */ v_add_i32       v6, vcc, s6, v0
812/*7e0a0207         */ v_mov_b32       v5, s7
813/*500e0305         */ v_addc_u32      v7, vcc, v5, v1, vcc
814/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
815/*eba08000 80020202*/ tbuffer_load_format_x v2, v[2:3], s[8:11], 0 addr64 format:[32,float]
816/*eba08000 80040306*/ tbuffer_load_format_x v3, v[6:7], s[16:19], 0 addr64 format:[32,float]
817/*c0820370         */ s_load_dwordx4  s[4:7], s[2:3], 0x70
818/*bf8c0f70         */ s_waitcnt       vmcnt(0)
819/*4a040702         */ v_add_i32       v2, vcc, v2, v3
820/*4a00000e         */ v_add_i32       v0, vcc, s14, v0
821/*7e06020f         */ v_mov_b32       v3, s15
822/*50020303         */ v_addc_u32      v1, vcc, v3, v1, vcc
823/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
824/*eba48000 80010200*/ tbuffer_store_format_x v2, v[0:1], s[4:7], 0 addr64 format:[32,float]
825.L168_0:
826/*bf810000         */ s_endpgm
827.kernel multiply
828    .header
829        .fill 16, 1, 0x00
830        .byte 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
831        .fill 8, 1, 0x00
832    .metadata
833        .ascii ";ARGSTART:__OpenCL_multiply_kernel\n"
834        .ascii ";version:3:1:111\n"
835        .ascii ";device:pitcairn\n"
836        .ascii ";uniqueid:1025\n"
837        .ascii ";memory:uavprivate:0\n"
838        .ascii ";memory:hwlocal:0\n"
839        .ascii ";memory:hwregion:0\n"
840        .ascii ";value:n:u32:1:1:0\n"
841        .ascii ";pointer:adat:u32:1:1:16:uav:12:4:RO:0:0\n"
842        .ascii ";constarg:1:adat\n"
843        .ascii ";pointer:bdat:u32:1:1:32:uav:13:4:RO:0:0\n"
844        .ascii ";constarg:2:bdat\n"
845        .ascii ";pointer:cdat:u32:1:1:48:uav:14:4:RW:0:0\n"
846        .ascii ";function:1:1029\n"
847        .ascii ";memory:64bitABI\n"
848        .ascii ";uavid:11\n"
849        .ascii ";printfid:9\n"
850        .ascii ";cbid:10\n"
851        .ascii ";privateid:8\n"
852        .ascii ";reflection:0:uint\n"
853        .ascii ";reflection:1:uint*\n"
854        .ascii ";reflection:2:uint*\n"
855        .ascii ";reflection:3:uint*\n"
856        .ascii ";ARGEND:__OpenCL_multiply_kernel\n"
857    .data
858        .fill 4736, 1, 0x00
859    .inputs
860    .outputs
861    .uav
862        .entry 12, 4, 0, 5
863        .entry 13, 4, 0, 5
864        .entry 14, 4, 0, 5
865        .entry 11, 4, 0, 5
866    .condout 0
867    .floatconsts
868    .intconsts
869    .boolconsts
870    .earlyexit 0
871    .globalbuffers
872    .constantbuffers
873        .cbmask 0, 0
874        .cbmask 1, 0
875    .inputsamplers
876    .scratchbuffers
877        .int 0x00000000
878    .persistentbuffers
879    .proginfo
880        .entry 0x80001000, 0x00000003
881        .entry 0x80001001, 0x00000017
882        .entry 0x80001002, 0x00000000
883        .entry 0x80001003, 0x00000002
884        .entry 0x80001004, 0x00000002
885        .entry 0x80001005, 0x00000002
886        .entry 0x80001006, 0x00000000
887        .entry 0x80001007, 0x00000004
888        .entry 0x80001008, 0x00000004
889        .entry 0x80001009, 0x00000002
890        .entry 0x8000100a, 0x00000001
891        .entry 0x8000100b, 0x00000008
892        .entry 0x8000100c, 0x00000004
893        .entry 0x80001041, 0x00000008
894        .entry 0x80001042, 0x00000014
895        .entry 0x80001863, 0x00000066
896        .entry 0x80001864, 0x00000100
897        .entry 0x80001043, 0x000000c0
898        .entry 0x80001044, 0x00000000
899        .entry 0x80001045, 0x00000000
900        .entry 0x00002e13, 0x00000098
901        .entry 0x8000001c, 0x00000100
902        .entry 0x8000001d, 0x00000000
903        .entry 0x8000001e, 0x00000000
904        .entry 0x80001841, 0x00000000
905        .entry 0x8000001f, 0x00007000
906        .entry 0x80001843, 0x00007000
907        .entry 0x80001844, 0x00000000
908        .entry 0x80001845, 0x00000000
909        .entry 0x80001846, 0x00000000
910        .entry 0x80001847, 0x00000000
911        .entry 0x80001848, 0x00000000
912        .entry 0x80001849, 0x00000000
913        .entry 0x8000184a, 0x00000000
914        .entry 0x8000184b, 0x00000000
915        .entry 0x8000184c, 0x00000000
916        .entry 0x8000184d, 0x00000000
917        .entry 0x8000184e, 0x00000000
918        .entry 0x8000184f, 0x00000000
919        .entry 0x80001850, 0x00000000
920        .entry 0x80001851, 0x00000000
921        .entry 0x80001852, 0x00000000
922        .entry 0x80001853, 0x00000000
923        .entry 0x80001854, 0x00000000
924        .entry 0x80001855, 0x00000000
925        .entry 0x80001856, 0x00000000
926        .entry 0x80001857, 0x00000000
927        .entry 0x80001858, 0x00000000
928        .entry 0x80001859, 0x00000000
929        .entry 0x8000185a, 0x00000000
930        .entry 0x8000185b, 0x00000000
931        .entry 0x8000185c, 0x00000000
932        .entry 0x8000185d, 0x00000000
933        .entry 0x8000185e, 0x00000000
934        .entry 0x8000185f, 0x00000000
935        .entry 0x80001860, 0x00000000
936        .entry 0x80001861, 0x00000000
937        .entry 0x80001862, 0x00000000
938        .entry 0x8000000a, 0x00000001
939        .entry 0x80000078, 0x00000040
940        .entry 0x80000081, 0x00008000
941        .entry 0x80000082, 0x00000000
942    .subconstantbuffers
943    .uavmailboxsize 0
944    .uavopmask
945        .byte 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
946        .fill 120, 1, 0x00
947    .text
948/*c2000504         */ s_buffer_load_dword s0, s[4:7], 0x4
949/*c2008518         */ s_buffer_load_dword s1, s[4:7], 0x18
950/*c2420904         */ s_buffer_load_dwordx2 s[4:5], s[8:11], 0x4
951/*c2430908         */ s_buffer_load_dwordx2 s[6:7], s[8:11], 0x8
952/*c247090c         */ s_buffer_load_dwordx2 s[14:15], s[8:11], 0xc
953/*c2040900         */ s_buffer_load_dword s8, s[8:11], 0x0
954/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
955/*8380ff00 0000ffff*/ s_min_u32       s0, s0, 0xffff
956/*9300000c         */ s_mul_i32       s0, s12, s0
957/*80000100         */ s_add_u32       s0, s0, s1
958/*4a000000         */ v_add_i32       v0, vcc, s0, v0
959/*7e020280         */ v_mov_b32       v1, 0
960/*7e040208         */ v_mov_b32       v2, s8
961/*7e060280         */ v_mov_b32       v3, 0
962/*7dc20500         */ v_cmp_lt_u64    vcc, v[0:1], v[2:3]
963/*be80246a         */ s_and_saveexec_b64 s[0:1], vcc
964/*bf880019         */ s_cbranch_execz .L172_1
965/*c0840360         */ s_load_dwordx4  s[8:11], s[2:3], 0x60
966/*c0880368         */ s_load_dwordx4  s[16:19], s[2:3], 0x68
967/*d2c20000 00010500*/ v_lshl_b64      v[0:1], v[0:1], 2
968/*4a040004         */ v_add_i32       v2, vcc, s4, v0
969/*7e060205         */ v_mov_b32       v3, s5
970/*50060303         */ v_addc_u32      v3, vcc, v3, v1, vcc
971/*4a0c0006         */ v_add_i32       v6, vcc, s6, v0
972/*7e0a0207         */ v_mov_b32       v5, s7
973/*500e0305         */ v_addc_u32      v7, vcc, v5, v1, vcc
974/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
975/*eba08000 80020202*/ tbuffer_load_format_x v2, v[2:3], s[8:11], 0 addr64 format:[32,float]
976/*eba08000 80040306*/ tbuffer_load_format_x v3, v[6:7], s[16:19], 0 addr64 format:[32,float]
977/*c0820370         */ s_load_dwordx4  s[4:7], s[2:3], 0x70
978/*bf8c0f70         */ s_waitcnt       vmcnt(0)
979/*d2d60002 00020503*/ v_mul_lo_i32    v2, v3, v2
980/*4a00000e         */ v_add_i32       v0, vcc, s14, v0
981/*7e06020f         */ v_mov_b32       v3, s15
982/*50020303         */ v_addc_u32      v1, vcc, v3, v1, vcc
983/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
984/*eba48000 80010200*/ tbuffer_store_format_x v2, v[0:1], s[4:7], 0 addr64 format:[32,float]
985.L172_1:
986/*bf810000         */ s_endpgm
987)xxFxx", false
988    },
989    { nullptr, &galliumDisasmData, nullptr,
990        R"fxDfx(.gallium
991.gpu Pitcairn
992.32bit
993.rodata
994    .byte 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
995    .byte 0x09, 0x0a, 0x0b, 0x21, 0x2c, 0x37
996.kernel kernel1
997    .args
998        .arg scalar, 4, 8, 12, zext, general
999        .arg constant, 1, 8, 12, zext, general
1000        .arg global, 4, 2, 12, zext, general
1001        .arg image2d_rd, 4, 7, 45, zext, general
1002        .arg image2d_wr, 4, 8, 45, zext, general
1003        .arg image3d_rd, 9, 7, 45, zext, general
1004        .arg image3d_wr, 12, 7, 45, zext, general
1005        .arg sampler, 17, 16, 74, zext, general
1006        .arg scalar, 4, 8, 12, sext, general
1007        .arg scalar, 124, 8, 12, zext, griddim
1008        .arg scalar, 4, 0, 32, zext, gridoffset
1009    .proginfo
1010        .entry 0x00ff1123, 0x00cda1fa
1011        .entry 0x03bf1123, 0x00fdca45
1012        .entry 0x0002dca6, 0x0fbca168
1013.kernel kernel2
1014    .args
1015        .arg constant, 1, 8, 12, zext, general
1016        .arg global, 4, 2, 12, zext, general
1017        .arg scalar, 4, 8, 12, zext, general
1018        .arg image2d_rd, 4, 9, 45, zext, general
1019        .arg image2d_wr, 4, 8, 51, zext, general
1020        .arg image3d_rd, 9, 7, 45, zext, general
1021        .arg image3d_wr, 12, 7, 45, sext, general
1022        .arg sampler, 17, 16, 74, zext, general
1023        .arg scalar, 4, 8, 12, sext, general
1024        .arg scalar, 124, 8, 12, zext, griddim
1025        .arg scalar, 4, 32, 32, zext, gridoffset
1026    .proginfo
1027        .entry 0x00234423, 0x00aaabba
1028        .entry 0x03bdd123, 0x00132235
1029        .entry 0x00011122, 0x0f3424dd
1030)fxDfx", false
1031    },
1032    /* configuration dump test cases */
1033    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/amd1.clo",
1034        R"ffDXD(.amd
1035.gpu Bonaire
1036.32bit
1037.compile_options "-O"
1038.driver_info "@(#) OpenCL 1.2 AMD-APP (1912.5).  Driver version: 1912.5 (VM)"
1039.kernel xT1
1040    .config
1041        .dims xyz
1042        .cws 2, 7, 1
1043        .sgprsnum 18
1044        .vgprsnum 222
1045        .floatmode 0xc0
1046        .scratchbuffer 108
1047        .uavid 11
1048        .uavprivate 314
1049        .printfid 9
1050        .privateid 8
1051        .cbid 10
1052        .earlyexit 1
1053        .condout 5
1054        .pgmrsrc2 0x7520139d
1055        .useprintf
1056        .exceptions 0x75
1057        .userdata ptr_uav_table, 0, 2, 2
1058        .userdata imm_const_buffer, 0, 4, 4
1059        .userdata imm_const_buffer, 7, 12, 2
1060        .arg x, "float", float
1061        .arg xff, "SP", float
1062        .arg x4, "float4", float
1063        .arg aaa, "SP4", float
1064        .arg vv, "double3", double
1065        .arg vv3, "SP4", double
1066        .arg sampler, "sampler_t", sampler
1067        .arg structor, "TypeX", structure, 24
1068        .arg structor2, "TypeX", structure, 24
1069        .arg img1, "IMG2D", image2d, read_only, 0
1070        .arg img1a, "IMG2DA", image2d_array, read_only, 1
1071        .arg img2, "TDIMG", image3d, write_only, 0
1072        .arg buf1, "uint*", uint*, global, const, 12
1073        .arg buf2, "ColorData", structure*, 52, global, const, 13
1074        .arg const2, "ColorData", structure*, 52, constant, volatile, 0, 14
1075        .arg dblloc, "double*", double*, local,
1076        .arg counterx, "counter32_t", counter32, 0
1077        .arg sampler2, "sampler_t", sampler
1078        .arg countery, "counter32_t", counter32, 1
1079    .text
1080/*bf810000         */ s_endpgm
1081/*4a040501         */ v_add_i32       v2, vcc, v1, v2
1082)ffDXD", true
1083    },
1084    /* amdcl2 config */
1085    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/amdcl2.clo",
1086        R"ffDXD(.amdcl2
1087.gpu Bonaire
1088.64bit
1089.arch_minor 0
1090.arch_stepping 0
1091.driver_version 191205
1092.compile_options ""
1093.acl_version "AMD-COMP-LIB-v0.8 (0.0.SC_BUILD_NUMBER)"
1094.kernel aaa1
1095    .config
1096        .dims x
1097        .sgprsnum 12
1098        .vgprsnum 1
1099        .localsize 1000
1100        .floatmode 0xda
1101        .pgmrsrc1 0x00ada040
1102        .pgmrsrc2 0x0000008c
1103        .dx10clamp
1104        .ieeemode
1105        .useargs
1106        .priority 0
1107        .arg _.global_offset_0, "size_t", long
1108        .arg _.global_offset_1, "size_t", long
1109        .arg _.global_offset_2, "size_t", long
1110        .arg _.printf_buffer, "size_t", void*, global, , rdonly
1111        .arg _.vqueue_pointer, "size_t", long
1112        .arg _.aqlwrap_pointer, "size_t", long
1113        .arg n, "uint", uint
1114        .arg in, "uint*", uint*, global, const
1115        .arg out, "uint*", uint*, global,
1116    .text
1117/*8709ac05         */ s_and_b32       s9, s5, 44
1118/*870a8505         */ s_and_b32       s10, s5, 5
1119/*870b8505         */ s_and_b32       s11, s5, 5
1120/*bf810000         */ s_endpgm
1121.kernel aaa2
1122    .config
1123        .dims x
1124        .sgprsnum 12
1125        .vgprsnum 1
1126        .localsize 1000
1127        .floatmode 0xda
1128        .scratchbuffer 2342
1129        .pgmrsrc1 0x00fda840
1130        .pgmrsrc2 0x12001095
1131        .privmode
1132        .debugmode
1133        .dx10clamp
1134        .ieeemode
1135        .exceptions 0x12
1136        .useargs
1137        .usesetup
1138        .useenqueue
1139        .priority 2
1140        .arg _.global_offset_0, "size_t", long
1141        .arg _.global_offset_1, "size_t", long
1142        .arg _.global_offset_2, "size_t", long
1143        .arg _.printf_buffer, "size_t", void*, global, , rdonly
1144        .arg _.vqueue_pointer, "size_t", long
1145        .arg _.aqlwrap_pointer, "size_t", long
1146        .arg n, "uint", uint
1147        .arg in, "float*", float*, global, const
1148        .arg out, "float*", float*, global,
1149        .arg q, "queue_t", queue
1150        .arg piper, "pipe", pipe, rdonly
1151        .arg ce, "clk_event_t", clkevent
1152    .text
1153/*8709ac05         */ s_and_b32       s9, s5, 44
1154/*bf810000         */ s_endpgm
1155.kernel gfd12
1156    .config
1157        .dims xyz
1158        .cws 8, 5, 2
1159        .sgprsnum 25
1160        .vgprsnum 78
1161        .localsize 656
1162        .floatmode 0xf4
1163        .pgmrsrc1 0x012f40d3
1164        .pgmrsrc2 0x0fcdf7d8
1165        .dx10clamp
1166        .tgsize
1167        .exceptions 0x0f
1168        .useargs
1169        .usesetup
1170        .usegeneric
1171        .priority 0
1172        .arg _.global_offset_0, "size_t", long
1173        .arg _.global_offset_1, "size_t", long
1174        .arg _.global_offset_2, "size_t", long
1175        .arg _.printf_buffer, "size_t", void*, global, , rdonly
1176        .arg _.vqueue_pointer, "size_t", long
1177        .arg _.aqlwrap_pointer, "size_t", long
1178        .arg n, "uint", uint
1179        .arg in, "double*", double*, global, const
1180        .arg out, "double*", double*, global,
1181        .arg v, "uchar", uchar
1182        .arg v2, "uchar", uchar
1183    .text
1184/*7e020302         */ v_mov_b32       v1, v2
1185/*4a0206b7         */ v_add_i32       v1, vcc, 55, v3
1186/*bf810000         */ s_endpgm
1187)ffDXD", true
1188    },
1189    /* gallium config */
1190    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/gallium1.clo",
1191        R"ffDXD(.gallium
1192.gpu CapeVerde
1193.32bit
1194.rodata
1195    .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
1196    .byte 0x03, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00
1197    .byte 0x2d, 0x00, 0x00, 0x00
1198.kernel one1
1199    .args
1200        .arg scalar, 4, 8, 4, sext, general
1201        .arg scalar, 16, 16, 32, sext, general
1202        .arg scalar, 4, 4, 4, zext, imgformat
1203        .arg global, 8, 8, 8, zext, general
1204        .arg scalar, 4, 4, 4, zext, griddim
1205        .arg scalar, 4, 4, 4, zext, gridoffset
1206    .config
1207        .dims x
1208        .sgprsnum 104
1209        .vgprsnum 12
1210        .privmode
1211        .debugmode
1212        .ieeemode
1213        .tgsize
1214        .floatmode 0xfe
1215        .priority 3
1216        .exceptions 0x7f
1217        .localsize 32768
1218        .userdatanum 16
1219        .scratchbuffer 48
1220        .pgmrsrc1 0xffdfef02
1221        .pgmrsrc2 0x004004a1
1222.kernel secondx
1223    .args
1224    .config
1225        .dims xyz
1226        .sgprsnum 8
1227        .vgprsnum 56
1228        .tgsize
1229        .floatmode 0xd0
1230        .priority 3
1231        .localsize 256
1232        .userdatanum 16
1233        .pgmrsrc1 0x000d0c0d
1234        .pgmrsrc2 0x3d0097a0
1235.text
1236secondx:
1237/*3a040480         */ v_xor_b32       v2, 0, v2
1238/*bf810000         */ s_endpgm
1239.fill 62, 4, 0
1240one1:
1241/*7e000301         */ v_mov_b32       v0, v1
1242/*7e000303         */ v_mov_b32       v0, v3
1243)ffDXD", true
1244    },
1245    /* rocm config */
1246    { nullptr, nullptr, CLRX_SOURCE_DIR "/tests/amdasm/amdbins/rocm-fiji.hsaco",
1247        R"ffDXD(.rocm
1248.gpu Fiji
1249.arch_minor 0
1250.arch_stepping 3
1251.kernel test1
1252    .config
1253        .dims x
1254        .sgprsnum 16
1255        .vgprsnum 8
1256        .dx10clamp
1257        .floatmode 0xc0
1258        .priority 0
1259        .userdatanum 8
1260        .pgmrsrc1 0x002c0041
1261        .pgmrsrc2 0x00000090
1262        .codeversion 1, 0
1263        .machine 1, 8, 0, 3
1264        .kernel_code_entry_offset 0x100
1265        .use_private_segment_buffer
1266        .use_dispatch_ptr
1267        .use_kernarg_segment_ptr
1268        .private_elem_size 4
1269        .use_ptr64
1270        .kernarg_segment_size 8
1271        .wavefront_sgpr_count 15
1272        .workitem_vgpr_count 7
1273        .kernarg_segment_align 16
1274        .group_segment_align 16
1275        .private_segment_align 16
1276        .wavefront_size 64
1277        .call_convention 0x0
1278    .control_directive
1279        .fill 128, 1, 0x00
1280.kernel test2
1281    .config
1282        .dims x
1283        .sgprsnum 16
1284        .vgprsnum 8
1285        .dx10clamp
1286        .floatmode 0xc0
1287        .priority 0
1288        .userdatanum 8
1289        .pgmrsrc1 0x002c0041
1290        .pgmrsrc2 0x00000090
1291        .codeversion 1, 0
1292        .machine 1, 8, 0, 3
1293        .kernel_code_entry_offset 0x100
1294        .use_private_segment_buffer
1295        .use_dispatch_ptr
1296        .use_kernarg_segment_ptr
1297        .private_elem_size 4
1298        .use_ptr64
1299        .kernarg_segment_size 8
1300        .wavefront_sgpr_count 15
1301        .workitem_vgpr_count 7
1302        .kernarg_segment_align 16
1303        .group_segment_align 16
1304        .private_segment_align 16
1305        .wavefront_size 64
1306        .call_convention 0x0
1307    .control_directive
1308        .fill 128, 1, 0x00
1309.text
1310test1:
1311.skip 256
1312/*c0020082 00000004*/ s_load_dword    s2, s[4:5], 0x4
1313/*c0060003 00000000*/ s_load_dwordx2  s[0:1], s[6:7], 0x0
1314/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1315/*8602ff02 0000ffff*/ s_and_b32       s2, s2, 0xffff
1316/*92020802         */ s_mul_i32       s2, s2, s8
1317/*32000002         */ v_add_u32       v0, vcc, s2, v0
1318/*2202009f         */ v_ashrrev_i32   v1, 31, v0
1319/*d28f0001 00020082*/ v_lshlrev_b64   v[1:2], 2, v[0:1]
1320/*32060200         */ v_add_u32       v3, vcc, s0, v1
1321/*7e020201         */ v_mov_b32       v1, s1
1322/*38080302         */ v_addc_u32      v4, vcc, v2, v1, vcc
1323/*2600008f         */ v_and_b32       v0, 15, v0
1324/*7e020280         */ v_mov_b32       v1, 0
1325/*dc500000 02000003*/ flat_load_dword v2, v[3:4]
1326/*d28f0000 00020082*/ v_lshlrev_b64   v[0:1], 2, v[0:1]
1327/*be801c00         */ s_getpc_b64     s[0:1]
1328/*8000ff00 00000234*/ s_add_u32       s0, s0, 0x234
1329/*82018001         */ s_addc_u32      s1, s1, 0
1330/*320a0000         */ v_add_u32       v5, vcc, s0, v0
1331/*7e000201         */ v_mov_b32       v0, s1
1332/*380c0101         */ v_addc_u32      v6, vcc, v1, v0, vcc
1333/*dc500000 00000005*/ flat_load_dword v0, v[5:6]
1334/*bf8c0070         */ s_waitcnt       vmcnt(0) & lgkmcnt(0)
1335/*0a000500         */ v_mul_f32       v0, v0, v2
1336/*dc700000 00000003*/ flat_store_dword v[3:4], v0
1337/*bf810000         */ s_endpgm
1338.fill 29, 4, 0
1339test2:
1340.skip 256
1341/*c0020082 00000004*/ s_load_dword    s2, s[4:5], 0x4
1342/*c0060003 00000000*/ s_load_dwordx2  s[0:1], s[6:7], 0x0
1343/*bf8c007f         */ s_waitcnt       lgkmcnt(0)
1344/*8602ff02 0000ffff*/ s_and_b32       s2, s2, 0xffff
1345/*92020802         */ s_mul_i32       s2, s2, s8
1346/*32000002         */ v_add_u32       v0, vcc, s2, v0
1347/*2202009f         */ v_ashrrev_i32   v1, 31, v0
1348/*d28f0001 00020082*/ v_lshlrev_b64   v[1:2], 2, v[0:1]
1349/*32060200         */ v_add_u32       v3, vcc, s0, v1
1350/*7e020201         */ v_mov_b32       v1, s1
1351/*38080302         */ v_addc_u32      v4, vcc, v2, v1, vcc
1352/*2600008f         */ v_and_b32       v0, 15, v0
1353/*7e020280         */ v_mov_b32       v1, 0
1354/*dc500000 02000003*/ flat_load_dword v2, v[3:4]
1355/*d28f0000 00020082*/ v_lshlrev_b64   v[0:1], 2, v[0:1]
1356/*be801c00         */ s_getpc_b64     s[0:1]
1357/*8000ff00 00000074*/ s_add_u32       s0, s0, 0x74
1358/*82018001         */ s_addc_u32      s1, s1, 0
1359/*320a0000         */ v_add_u32       v5, vcc, s0, v0
1360/*7e000201         */ v_mov_b32       v0, s1
1361/*380c0101         */ v_addc_u32      v6, vcc, v1, v0, vcc
1362/*dc500000 00000005*/ flat_load_dword v0, v[5:6]
1363/*bf8c0070         */ s_waitcnt       vmcnt(0) & lgkmcnt(0)
1364/*02000500         */ v_add_f32       v0, v0, v2
1365/*dc700000 00000003*/ flat_store_dword v[3:4], v0
1366/*bf810000         */ s_endpgm
1367data1:
1368.global data1
1369        .byte 0xcd, 0xcc, 0x8c, 0x3f, 0x33, 0x33, 0x13, 0x40
1370        .byte 0x33, 0x33, 0x93, 0x40, 0x33, 0x33, 0xa3, 0x40
1371        .byte 0x85, 0xeb, 0x91, 0xbf, 0x3d, 0x0a, 0x27, 0xc0
1372        .byte 0x0a, 0xd7, 0x93, 0xc0, 0xb8, 0x1e, 0xa5, 0xc0
1373        .byte 0x9a, 0x99, 0x49, 0x41, 0xcd, 0xcc, 0xac, 0x40
1374        .byte 0x0a, 0xd7, 0x13, 0x40, 0xd7, 0xa3, 0x98, 0x40
1375        .byte 0x9a, 0x99, 0x49, 0xc1, 0xcd, 0xcc, 0xac, 0xc0
1376        .byte 0x0a, 0xd7, 0x13, 0xc0, 0xd7, 0xa3, 0x98, 0xc0
1377data2:
1378.global data2
1379        .byte 0xcd, 0x8c, 0xaa, 0x43, 0x33, 0x33, 0x13, 0x40
1380        .byte 0x33, 0x33, 0x93, 0x40, 0x52, 0xb8, 0xe6, 0x40
1381        .byte 0xb8, 0x1e, 0x81, 0xc1, 0x3d, 0x0a, 0x27, 0xc0
1382        .byte 0x85, 0xeb, 0x09, 0xc1, 0xb8, 0x1e, 0xa5, 0xc0
1383        .byte 0x9a, 0x99, 0x49, 0x41, 0xcd, 0xcc, 0xaa, 0x42
1384        .byte 0x0a, 0xd7, 0x33, 0x40, 0xd7, 0xa3, 0x98, 0x40
1385        .byte 0xcd, 0xcc, 0x94, 0xc1, 0x33, 0x33, 0xb3, 0xc0
1386        .byte 0x0a, 0xd7, 0x13, 0xc0, 0xd7, 0xa3, 0x98, 0xc0
1387)ffDXD", true
1388    }
1389};
1390
1391static void testDisasmData(cxuint testId, const DisasmAmdTestCase& testCase)
1392{
1393    std::ostringstream disasmOss;
1394    std::string resultStr;
1395    Flags disasmFlags = DISASM_ALL;
1396    if (testCase.config)
1397        disasmFlags |= DISASM_CONFIG;
1398    if (testCase.filename == nullptr)
1399    {
1400        if (testCase.amdInput != nullptr)
1401        {
1402            Disassembler disasm(testCase.amdInput, disasmOss, disasmFlags);
1403            disasm.disassemble();
1404            resultStr = disasmOss.str();
1405        }
1406        else if (testCase.galliumInput != nullptr)
1407        {
1408            Disassembler disasm(testCase.galliumInput, disasmOss, disasmFlags);
1409            disasm.disassemble();
1410            resultStr = disasmOss.str();
1411        }
1412    }
1413    else
1414    {
1415        Array<cxbyte> binaryData = loadDataFromFile(testCase.filename);
1416        if (isAmdBinary(binaryData.size(), binaryData.data()))
1417        {
1418            std::unique_ptr<AmdMainBinaryBase> base(createAmdBinaryFromCode(
1419                    binaryData.size(), binaryData.data(),
1420                    AMDBIN_CREATE_KERNELINFO | AMDBIN_CREATE_KERNELINFOMAP |
1421                    AMDBIN_CREATE_INNERBINMAP | AMDBIN_CREATE_KERNELHEADERS |
1422                    AMDBIN_CREATE_KERNELHEADERMAP | AMDBIN_INNER_CREATE_CALNOTES |
1423                    AMDBIN_CREATE_INFOSTRINGS));
1424            AmdMainGPUBinary32* amdGpuBin = static_cast<AmdMainGPUBinary32*>(base.get());
1425            Disassembler disasm(*amdGpuBin, disasmOss, disasmFlags);
1426            disasm.disassemble();
1427            resultStr = disasmOss.str();
1428        }
1429        else if (isAmdCL2Binary(binaryData.size(), binaryData.data()))
1430        {
1431            AmdCL2MainGPUBinary64 amdBin(binaryData.size(), binaryData.data(),
1432                AMDBIN_CREATE_KERNELINFO | AMDBIN_CREATE_KERNELINFOMAP |
1433                AMDBIN_CREATE_INNERBINMAP | AMDBIN_CREATE_KERNELHEADERS |
1434                AMDBIN_CREATE_KERNELHEADERMAP | AMDBIN_INNER_CREATE_CALNOTES |
1435                AMDBIN_CREATE_INFOSTRINGS | AMDCL2BIN_INNER_CREATE_KERNELDATA |
1436                AMDCL2BIN_INNER_CREATE_KERNELDATAMAP | AMDCL2BIN_INNER_CREATE_KERNELSTUBS);
1437            Disassembler disasm(amdBin, disasmOss, disasmFlags);
1438            disasm.disassemble();
1439            resultStr = disasmOss.str();
1440        }
1441        else if (isROCmBinary(binaryData.size(), binaryData.data()))
1442        {
1443            ROCmBinary rocmBin(binaryData.size(), binaryData.data(), 0);
1444            Disassembler disasm(rocmBin, disasmOss, disasmFlags);
1445            disasm.disassemble();
1446            resultStr = disasmOss.str();
1447        }
1448        else
1449        {   /* gallium */
1450            GalliumBinary galliumBin(binaryData.size(),binaryData.data(), 0);
1451            Disassembler disasm(GPUDeviceType::CAPE_VERDE, galliumBin,
1452                            disasmOss, disasmFlags);
1453            disasm.disassemble();
1454            resultStr = disasmOss.str();
1455        }
1456    }
1457   
1458    if (::strcmp(testCase.expectedString, resultStr.c_str()) != 0)
1459    {   // print error
1460        std::ostringstream oss;
1461        oss << "Failed for #" << testId << std::endl;
1462        oss << resultStr << std::endl;
1463        oss.flush();
1464        throw Exception(oss.str());
1465    }
1466}
1467
1468int main(int argc, const char** argv)
1469{
1470    int retVal = 0;
1471    for (cxuint i = 0; i < sizeof(disasmDataTestCases)/sizeof(DisasmAmdTestCase); i++)
1472        try
1473        { testDisasmData(i, disasmDataTestCases[i]); }
1474        catch(const std::exception& ex)
1475        {
1476            std::cerr << ex.what() << std::endl;
1477            retVal = 1;
1478        }
1479    return retVal;
1480}
Note: See TracBrowser for help on using the repository browser.