source: CLRX/CLRadeonExtender/trunk/tests/amdasm/AsmBasicsCases2.cpp @ 3632

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

CLRadeonExtender: Asm: Tentative implementation of '.while' pseudo-op (repetition).

File size: 79.2 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 <sstream>
22#include <CLRX/utils/Containers.h>
23#include <CLRX/amdasm/Assembler.h>
24#include "../TestUtils.h"
25#include "AsmBasics.h"
26
27using namespace CLRX;
28
29const AsmTestCase asmTestCases2Tbl[] =
30{
31    /* 0 - undef test */
32    {   R"ffDXD(.eqv xz, a*b
33        .int xz+xz*7
34        .eqv ulu,xz*xz
35        .int ulu
36        .undef xz
37        .int xz
38        a = 3; b = 8
39       
40        xz1=a*b
41        .int xz1
42        .undef xz1
43        .int xz1
44       
45        xz2=a1*b1
46        .int xz2
47        .undef xz2
48        .int xz2
49       
50        xz2=a1*b1
51        .undef xz2
52        .undef xz2)ffDXD",
53        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
54        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
55            {
56                0xc0, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00,
57                0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
58                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59                0x00, 0x00, 0x00, 0x00
60            } } },
61        {
62            { ".", 28U, 0, 0U, true, false, false, 0, 0 },
63            { "a", 3U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
64            { "a1", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
65            { "b", 8U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
66            { "b1", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
67            { "ulu", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
68            { "xz", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
69            { "xz1", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
70            { "xz2", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 }
71        },
72        true, "test.s:21:16: Warning: Symbol 'xz2' already doesn't exist\n", ""
73    },
74    /* 1 - include test 1 */
75    {   R"ffDXD(            .include "inc1.s"
76            .include "inc2.s"
77            .include "inc3.s")ffDXD",
78        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
79        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
80            { 11,22,44,55, 11,22,44,58, 31,23,44,55 } } },
81        { { ".", 12U, 0, 0U, true, false, false, 0, 0 } },
82        true, "", "",
83        { CLRX_SOURCE_DIR "/tests/amdasm/incdir0", CLRX_SOURCE_DIR "/tests/amdasm/incdir1" }
84    },
85    /* 2 - include test 2 */
86    {   R"ffDXD(            .include "incdir0\\inc1.s"
87            .include "incdir0/inc2.s"
88            .include "incdir1\\inc3.s")ffDXD",
89        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
90        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
91            { 11,22,44,55, 11,22,44,58, 31,23,44,55 } } },
92        { { ".", 12U, 0, 0U, true, false, false, 0, 0 } },
93        true, "", "",
94        { CLRX_SOURCE_DIR "/tests/amdasm" }
95    },
96    /* 3 - failed include */
97    {   R"ffDXD(            .include "incdir0\\incx.s"
98            .include "xxxx.s"
99            .include "xxxa.s")ffDXD",
100        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
101        { },
102        { { ".", 0U, 0, 0U, true, false, false, 0, 0 } },
103        false, "test.s:1:22: Error: Include file "
104        "'incdir0\\incx.s' not found or unavailable in any directory\n"
105        "test.s:2:22: Error: Include file 'xxxx.s' "
106        "not found or unavailable in any directory\n"
107        "test.s:3:22: Error: Include file 'xxxa.s' "
108        "not found or unavailable in any directory\n", "",
109        { CLRX_SOURCE_DIR "/tests/amdasm" }
110    },
111    /* 4 - incbin */
112    {   R"ffDXD(            .incbin "incbin1"
113            .incbin "incbin2"
114            .incbin "incbin3")ffDXD",
115        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
116        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
117            {
118                0x12, 0x87, 0x17, 0x87, 0x8C, 0xD8, 0xA8, 0x93,
119                0x89, 0xA9, 0x81, 0xA8, 0x94, 0xD3, 0x89, 0xC8,
120                0x9A, 0x13, 0x89, 0x89, 0xDD, 0x12, 0x31, 0x12,
121                0x1D, 0xCD, 0xAF, 0x12, 0xCD, 0xCD, 0x33, 0x81,
122                0xA8, 0x11, 0xD3, 0x22, 0xC8, 0x9A, 0x12, 0x34,
123                0x56, 0x78, 0x90, 0xCD, 0xAD, 0xFC, 0x1A, 0x2A,
124                0x3D, 0x4D, 0x6D, 0x3C
125            } } },
126        { { ".", 52U, 0, 0U, true, false, false, 0, 0 } },
127        true, "", "",
128        { CLRX_SOURCE_DIR "/tests/amdasm/incdir0", CLRX_SOURCE_DIR "/tests/amdasm/incdir1" }
129    },
130    /* 5 - incbin (choose offset and size) */
131    {   R"ffDXD(            .incbin "incbin1",3,4
132            .incbin "incbin2",2
133            .incbin "incbin3", 0, 9)ffDXD",
134        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
135        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
136            {
137                0x87, 0x8C, 0xD8, 0xA8, 0x12, 0x1D, 0xCD, 0xAF,
138                0x12, 0xCD, 0xCD, 0x33, 0x81, 0xA8, 0x11, 0xD3,
139                0x22, 0xC8, 0x9A, 0x12, 0x34, 0x56, 0x78, 0x90,
140                0xCD, 0xAD, 0xFC, 0x1A
141            } } },
142        { { ".", 28U, 0, 0U, true, false, false, 0, 0 } },
143        true, "", "",
144        { CLRX_SOURCE_DIR "/tests/amdasm/incdir0", CLRX_SOURCE_DIR "/tests/amdasm/incdir1" }
145    },
146    /* 6 - failed incbin */
147    {   R"ffDXD(            .incbin "incdir0\\incbinx"
148            .incbin "xxxx.bin"
149            .incbin "xxxa.bin")ffDXD",
150        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
151        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } } },
152        { { ".", 0U, 0, 0U, true, false, false, 0, 0 } },
153        false, "test.s:1:21: Error: Binary file "
154        "'incdir0\\incbinx' not found or unavailable in any directory\n"
155        "test.s:2:21: Error: Binary file 'xxxx.bin' "
156        "not found or unavailable in any directory\n"
157        "test.s:3:21: Error: Binary file 'xxxa.bin' "
158        "not found or unavailable in any directory\n", "",
159        { CLRX_SOURCE_DIR "/tests/amdasm" }
160    },
161    /* 7 - absolute section and errors */
162    {   R"ffDXD(        .struct 6
163label1:
164        .struct 7
165label2:
166        .org 3,44
167label3:
168        .offset .+20
169label4:)ffDXD",
170        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
171        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } } },
172        {
173            { ".", 23U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
174            { "label1", 6U, ASMSECT_ABS, 0U, true, true, false, 0, 0 },
175            { "label2", 7U, ASMSECT_ABS, 0U, true, true, false, 0, 0 },
176            { "label3", 3U, ASMSECT_ABS, 0U, true, true, false, 0, 0 },
177            { "label4", 23U, ASMSECT_ABS, 0U, true, true, false, 0, 0 }
178        },
179        true, "test.s:5:14: Warning: Fill value is ignored inside absolute section\n", ""
180    },
181    /* 8 */
182    {   R"ffDXD(        .struct 6
183label1:
184        .struct 7
185label2:
186        .org 3,44
187label3:
188        .incbin "offset.s"
189        .byte 11,2,2,,44
190        .hword 11,2,2,,44
191        .int 11,2,2,,44
192        .long 11,2,2,,44
193        .half 11,2,2,,44
194        .single 11,2,2,,44
195        .double 11,2,2,,44
196        .string "ala","ma","kota"
197        .string16 "ala","ma","kota"
198        .string32 "ala","ma","kota"
199        .string64 "ala","ma","kota"
200        .ascii "ala","ma","kota"
201        .asciz "ala","ma","kota"
202        .offset .+20
203label4:
204        .offset %%%%)ffDXD",
205        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
206        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } } },
207        {
208            { ".", 23U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
209            { "label1", 6U, ASMSECT_ABS, 0U, true, true, false, 0, 0 },
210            { "label2", 7U, ASMSECT_ABS, 0U, true, true, false, 0, 0 },
211            { "label3", 3U, ASMSECT_ABS, 0U, true, true, false, 0, 0 },
212            { "label4", 23U, ASMSECT_ABS, 0U, true, true, false, 0, 0 }
213        },
214        false, R"ffDXD(test.s:5:14: Warning: Fill value is ignored inside absolute section
215test.s:7:9: Error: Writing data into non-writeable section is illegal
216test.s:8:9: Error: Writing data into non-writeable section is illegal
217test.s:9:9: Error: Writing data into non-writeable section is illegal
218test.s:10:9: Error: Writing data into non-writeable section is illegal
219test.s:11:9: Error: Writing data into non-writeable section is illegal
220test.s:12:9: Error: Writing data into non-writeable section is illegal
221test.s:13:9: Error: Writing data into non-writeable section is illegal
222test.s:14:9: Error: Writing data into non-writeable section is illegal
223test.s:15:9: Error: Writing data into non-writeable section is illegal
224test.s:16:9: Error: Writing data into non-writeable section is illegal
225test.s:17:9: Error: Writing data into non-writeable section is illegal
226test.s:18:9: Error: Writing data into non-writeable section is illegal
227test.s:19:9: Error: Writing data into non-writeable section is illegal
228test.s:20:9: Error: Writing data into non-writeable section is illegal
229test.s:23:17: Error: Expected primary expression before operator
230test.s:23:19: Error: Expected primary expression before operator
231)ffDXD", ""
232    },
233    /* 9 - empty lines inside macro,repeats */
234    {   R"ffDXD(            .rept 1
235
236.error "111"
237
238
239  .error "222"
240
241
242.error "333"
243            .endr
244            .irp xv,aa,bb,cc
245
246.error "111a"
247
248
249  .error "222a"
250
251
252.error "333a"
253            .endr
254            .macro macro
255
256.error "uurggg"
257
258.error "uurggg"
259            .endm
260            macro)ffDXD",
261        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
262        { },
263        { { ".", 0U, 0, 0U, true, false, false, 0, 0 } },
264        false, R"ffDXD(In repetition 1/1:
265test.s:3:1: Error: 111
266In repetition 1/1:
267test.s:6:3: Error: 222
268In repetition 1/1:
269test.s:9:1: Error: 333
270In repetition 1/3:
271test.s:13:1: Error: 111a
272In repetition 1/3:
273test.s:16:3: Error: 222a
274In repetition 1/3:
275test.s:19:1: Error: 333a
276In repetition 2/3:
277test.s:13:1: Error: 111a
278In repetition 2/3:
279test.s:16:3: Error: 222a
280In repetition 2/3:
281test.s:19:1: Error: 333a
282In repetition 3/3:
283test.s:13:1: Error: 111a
284In repetition 3/3:
285test.s:16:3: Error: 222a
286In repetition 3/3:
287test.s:19:1: Error: 333a
288In macro substituted from test.s:27:13:
289test.s:23:1: Error: uurggg
290In macro substituted from test.s:27:13:
291test.s:25:1: Error: uurggg
292)ffDXD", ""
293    },
294    /* 10 - IRP and IRPC */
295    {   R"ffDXD(        .irp Xv, aa , cv  ,  dd,  12AA,  ff
296        .string "::\Xv\()__"
297        .endr
298        .irp Xv, aa  cv    dd   12AA  ff
299        .string "::\Xv\()__"
300        .endr
301        .irpc Xv, 1 5  66 [ ] aa
302        .string "::\Xv\()__"
303        .endr
304        .irpc Xv, x , y
305        .string "::\Xv\()__"
306        .endr
307        .irp Xv,   
308        .string "::\Xv\()__"
309        .endr
310        .irpc Xv,   
311        .string "::\Xv\()__"
312        .endr)ffDXD",
313        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
314        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, {
315            0x3a, 0x3a, 0x61, 0x61, 0x5f, 0x5f, 0x00, 0x3a,
316            0x3a, 0x63, 0x76, 0x5f, 0x5f, 0x00, 0x3a, 0x3a,
317            0x64, 0x64, 0x5f, 0x5f, 0x00, 0x3a, 0x3a, 0x31,
318            0x32, 0x41, 0x41, 0x5f, 0x5f, 0x00, 0x3a, 0x3a,
319            0x66, 0x66, 0x5f, 0x5f, 0x00, 0x3a, 0x3a, 0x61,
320            0x61, 0x5f, 0x5f, 0x00, 0x3a, 0x3a, 0x63, 0x76,
321            0x5f, 0x5f, 0x00, 0x3a, 0x3a, 0x64, 0x64, 0x5f,
322            0x5f, 0x00, 0x3a, 0x3a, 0x31, 0x32, 0x41, 0x41,
323            0x5f, 0x5f, 0x00, 0x3a, 0x3a, 0x66, 0x66, 0x5f,
324            0x5f, 0x00, 0x3a, 0x3a, 0x31, 0x5f, 0x5f, 0x00,
325            0x3a, 0x3a, 0x35, 0x5f, 0x5f, 0x00, 0x3a, 0x3a,
326            0x36, 0x5f, 0x5f, 0x00, 0x3a, 0x3a, 0x36, 0x5f,
327            0x5f, 0x00, 0x3a, 0x3a, 0x5b, 0x5f, 0x5f, 0x00,
328            0x3a, 0x3a, 0x5d, 0x5f, 0x5f, 0x00, 0x3a, 0x3a,
329            0x61, 0x5f, 0x5f, 0x00, 0x3a, 0x3a, 0x61, 0x5f,
330            0x5f, 0x00, 0x3a, 0x3a, 0x78, 0x5f, 0x5f, 0x00,
331            0x3a, 0x3a, 0x2c, 0x5f, 0x5f, 0x00, 0x3a, 0x3a,
332            0x79, 0x5f, 0x5f, 0x00, 0x3a, 0x3a, 0x5f, 0x5f,
333            0x00, 0x3a, 0x3a, 0x5f, 0x5f, 0x00
334        } } },
335        { { ".", 150U, 0, 0U, true, false, false, 0, 0 } },
336        true, "", ""
337    },
338    /* 11 - section arithmetics */
339    {   R"ffDXD(            .amd
340            .kernel a
341al:         .ascii "aaabbcc"
342ae:
343            .kernel b
344bl:         .ascii "aaabbcc"
345be:
346            .int al-ae-bl+be
347            .int -bl+be
348            z = al*7-(ae-al)*al
349            z1 = (ae*7+be*19)-3*be-(be<<4)-6*ae)ffDXD",
350        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "a", "b" },
351        {
352            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
353            { ".text", 0, AsmSectionType::CODE,
354                { 0x61, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63 } },
355            { ".text", 1, AsmSectionType::CODE,
356                {   0x61, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63, 0x00,
357                    0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00
358                } }
359        },
360        {
361            { ".", 15U, 2, 0U, true, false, false, 0, 0 },
362            { "ae", 7U, 1, 0U, true, true, false, 0, 0 },
363            { "al", 0U, 1, 0U, true, true, false, 0, 0 },
364            { "be", 7U, 2, 0U, true, true, false, 0, 0 },
365            { "bl", 0U, 2, 0U, true, true, false, 0, 0 },
366            { "z", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
367            { "z1", 7U, 1, 0U, true, false, false, 0, 0 }
368        },
369        true, "", ""
370    },
371    /* 12 - next test of sections' arithmetics */
372    {   R"ffDXD(.amd
373            .kernel a
374            .ascii "xx1"
375al:         .ascii "aaabbccdd"
376ae:
377            .kernel b
378            .ascii "x1212"
379bl:         .ascii "bbcc"
380be:
381            .kernel c
382            .ascii "1234355667"
383cl:         .ascii "abbcc"
384ce:
385            x0 = ae-al
386            x1 = 5-(-al)
387            x2 = al-7
388            x3 = ce-al-be+ae+bl-cl+9
389            x4 = (-21*al+21*bl-7*cl)  - ((ae*7 - 12*bl)*-3 - 8*be + 7*(-ce-bl))
390            x5 = (ae<<5 + bl<<2) - al*32 - be*4
391            y00 = al-bl==al-bl
392            y01 = al+cl+bl!=cl+al+bl
393            y02 = al+cl+bl<cl+al+bl
394            y03 = al+cl+bl>cl+al+bl
395            y04 = al+cl+bl<=cl+al+bl
396            y05 = al+cl+bl>=cl+al+bl
397            y06 = al+cl+bl<@cl+al+bl
398            y07 = al+cl+bl>@cl+al+bl
399            y08 = al+cl+bl<=@cl+al+bl
400            y09 = al+cl+bl>=@cl+al+bl
401           
402            y12 = al+cl+bl<cl+al+bl+99
403            y13 = al+cl+bl>cl+al+bl+99
404            y14 = al+cl+bl<=cl+al+bl+99
405            y15 = al+cl+bl>=cl+al+bl+99
406            y16 = al+cl+bl<@cl+al+bl+99
407            y17 = al+cl+bl>@cl+al+bl+99
408            y18 = al+cl+bl<=@cl+al+bl+99
409            y19 = al+cl+bl>=@cl+al+bl+99
410           
411            y22 = al+cl+bl<cl+al+bl-99
412            y23 = al+cl+bl>cl+al+bl-99
413            y24 = al+cl+bl<=cl+al+bl-99
414            y25 = al+cl+bl>=cl+al+bl-99
415            y26 = al+cl+bl<@cl+al+bl-99
416            y27 = al+cl+bl>@cl+al+bl-99
417            y28 = al+cl+bl<=@cl+al+bl-99
418            y29 = al+cl+bl>=@cl+al+bl-99
419            z0 = al-ae ? bl : ce)ffDXD",
420        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "a", "b", "c" },
421        {
422            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
423            { ".text", 0, AsmSectionType::CODE,
424                {   0x78, 0x78, 0x31, 0x61, 0x61, 0x61, 0x62, 0x62,
425                    0x63, 0x63, 0x64, 0x64 } },
426            { ".text", 1, AsmSectionType::CODE,
427                { 0x78, 0x31, 0x32, 0x31, 0x32, 0x62, 0x62, 0x63, 0x63 } },
428            { ".text", 2, AsmSectionType::CODE,
429                {   0x31, 0x32, 0x33, 0x34, 0x33, 0x35, 0x35, 0x36,
430                    0x36, 0x37, 0x61, 0x62, 0x62, 0x63, 0x63 } }
431        },
432        {
433            { ".", 15U, 3, 0U, true, false, false, 0, 0 },
434            { "ae", 12U, 1, 0U, true, true, false, 0, 0 },
435            { "al", 3U, 1, 0U, true, true, false, 0, 0 },
436            { "be", 9U, 2, 0U, true, true, false, 0, 0 },
437            { "bl", 5U, 2, 0U, true, true, false, 0, 0 },
438            { "ce", 15U, 3, 0U, true, true, false, 0, 0 },
439            { "cl", 10U, 3, 0U, true, true, false, 0, 0 },
440            { "x0", 9U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
441            { "x1", 8U, 1, 0U, true, false, false, 0, 0 },
442            { "x2", 18446744073709551612U, 1, 0U, true, false, false, 0, 0 },
443            { "x3", 19U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
444            { "x4", 256U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
445            { "x5", 272U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
446            { "y00", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
447            { "y01", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
448            { "y02", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
449            { "y03", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
450            { "y04", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
451            { "y05", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
452            { "y06", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
453            { "y07", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
454            { "y08", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
455            { "y09", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
456            { "y12", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
457            { "y13", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
458            { "y14", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
459            { "y15", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
460            { "y16", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
461            { "y17", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
462            { "y18", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
463            { "y19", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
464            { "y22", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
465            { "y23", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
466            { "y24", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
467            { "y25", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
468            { "y26", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
469            { "y27", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
470            { "y28", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
471            { "y29", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
472            { "z0", 5U, 2, 0U, true, false, false, 0, 0 }
473        }, true, "", ""
474    },
475    /* 13 - error of section arithmetics */
476    {   R"ffDXD(            .amd
477            .kernel a
478            .ascii "xx1"
479al:         .ascii "aaabbccdd"
480ae:
481            .kernel b
482            .ascii "x1212"
483bl:         .ascii "bbcc"
484be:
485            .kernel c
486            .ascii "1234355667"
487cl:         .ascii "abbcc"
488ce:
489            e0 = al-be+be*7
490            e0 = ~al
491            e0 = (-23*al+21*bl-7*cl)  - ((ae*7 - 12*bl)*-3 - 8*be + 7*(-ce-bl))
492            e0 = (ae<<5 + bl<<2) - al*32 - be*7
493            e0 = al>>7
494            e0 = al/7
495            e0 = al%7
496            e0 = al>>>7
497            e0 = al//6
498            e0 = al%%6
499            e0 = al|6
500            e0 = al&6
501            e0 = al^6
502            e0 = al&&6
503            e0 = al||6
504            e0 = al!6
505            e0 = al==7
506            e0 = al!=7
507            e0 = al<7
508            e0 = al>7
509            e0 = al<=7
510            e0 = al>=7
511            e0 = al<@7
512            e0 = al>@7
513            e0 = al<=@7
514            e0 = al>=@7
515            z0 = al-bl ? bl : ce)ffDXD",
516        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "a", "b", "c" },
517        {
518            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
519            { ".text", 0, AsmSectionType::CODE,
520                {   0x78, 0x78, 0x31, 0x61, 0x61, 0x61, 0x62, 0x62,
521                    0x63, 0x63, 0x64, 0x64 } },
522            { ".text", 1, AsmSectionType::CODE,
523                { 0x78, 0x31, 0x32, 0x31, 0x32, 0x62, 0x62, 0x63, 0x63 } },
524            { ".text", 2, AsmSectionType::CODE,
525                {   0x31, 0x32, 0x33, 0x34, 0x33, 0x35, 0x35, 0x36,
526                    0x36, 0x37, 0x61, 0x62, 0x62, 0x63, 0x63 } }
527        },
528        {
529            { ".", 15U, 3, 0U, true, false, false, 0, 0 },
530            { "ae", 12U, 1, 0U, true, true, false, 0, 0 },
531            { "al", 3U, 1, 0U, true, true, false, 0, 0 },
532            { "be", 9U, 2, 0U, true, true, false, 0, 0 },
533            { "bl", 5U, 2, 0U, true, true, false, 0, 0 },
534            { "ce", 15U, 3, 0U, true, true, false, 0, 0 },
535            { "cl", 10U, 3, 0U, true, true, false, 0, 0 },
536            { "e0", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
537            { "z0", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 }
538        }, false, 
539R"ffDXD(test.s:14:18: Error: Only one relative=1 (section) can be result of expression
540test.s:15:18: Error: Only one relative=1 (section) can be result of expression
541test.s:16:18: Error: Only one relative=1 (section) can be result of expression
542test.s:17:18: Error: Only one relative=1 (section) can be result of expression
543test.s:18:18: Error: Shift right is not allowed for any relative value
544test.s:19:18: Error: Signed division is not allowed for any relative value
545test.s:20:18: Error: Signed Modulo is not allowed for any relative value
546test.s:21:18: Error: Signed shift right is not allowed for any relative value
547test.s:22:18: Error: Division is not allowed for any relative value
548test.s:23:18: Error: Modulo is not allowed for any relative value
549test.s:24:18: Error: Binary OR is not allowed for any relative value
550test.s:25:18: Error: Binary AND is not allowed for any relative value
551test.s:26:18: Error: Binary XOR is not allowed for any relative value
552test.s:27:18: Error: Logical AND is not allowed for any relative value
553test.s:28:18: Error: Logical OR is not allowed for any relative value
554test.s:29:18: Error: Binary ORNOT is not allowed for any relative value
555test.s:30:18: Error: For comparisons two values must have this same relatives!
556test.s:31:18: Error: For comparisons two values must have this same relatives!
557test.s:32:18: Error: For comparisons two values must have this same relatives!
558test.s:33:18: Error: For comparisons two values must have this same relatives!
559test.s:34:18: Error: For comparisons two values must have this same relatives!
560test.s:35:18: Error: For comparisons two values must have this same relatives!
561test.s:36:18: Error: For comparisons two values must have this same relatives!
562test.s:37:18: Error: For comparisons two values must have this same relatives!
563test.s:38:18: Error: For comparisons two values must have this same relatives!
564test.s:39:18: Error: For comparisons two values must have this same relatives!
565test.s:40:18: Error: Choice is not allowed for first relative value
566)ffDXD", ""
567    },
568    /* 14 - relatives inside '.eqv' expressions */
569    {   R"ffDXD(            .amd
570            .kernel a
571            .ascii "xx1"
572al:         .ascii "aaabbccdd"
573ae:
574            .kernel b
575            .ascii "x1212"
576bl:         .ascii "bbcc"
577be:
578            .kernel c
579            .ascii "1234355667"
580cl:         .ascii "abbcc"
581ce:
582            .eqv v0, cl-ce
583            .eqv v1, be+v0
584            .eqv v2, 5+v0
585            x0 = v1-v2
586            x1 = v1+7)ffDXD",
587        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "a", "b", "c" },
588        {
589            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
590            { ".text", 0, AsmSectionType::CODE,
591                {   0x78, 0x78, 0x31, 0x61, 0x61, 0x61, 0x62, 0x62,
592                    0x63, 0x63, 0x64, 0x64 } },
593            { ".text", 1, AsmSectionType::CODE,
594                { 0x78, 0x31, 0x32, 0x31, 0x32, 0x62, 0x62, 0x63, 0x63 } },
595            { ".text", 2, AsmSectionType::CODE,
596                {   0x31, 0x32, 0x33, 0x34, 0x33, 0x35, 0x35, 0x36,
597                    0x36, 0x37, 0x61, 0x62, 0x62, 0x63, 0x63 } }
598        },
599        {
600            { ".", 15U, 3, 0U, true, false, false, 0, 0 },
601            { "ae", 12U, 1, 0U, true, true, false, 0, 0 },
602            { "al", 3U, 1, 0U, true, true, false, 0, 0 },
603            { "be", 9U, 2, 0U, true, true, false, 0, 0 },
604            { "bl", 5U, 2, 0U, true, true, false, 0, 0 },
605            { "ce", 15U, 3, 0U, true, true, false, 0, 0 },
606            { "cl", 10U, 3, 0U, true, true, false, 0, 0 },
607            { "v0", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
608            { "v1", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
609            { "v2", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
610            { "x0", 4U, 2, 0U, true, false, false, 0, 0 },
611            { "x1", 11U, 2, 0U, true, false, false, 0, 0 }
612        }, true, "", ""
613    },
614    /* 15 - raw code section tests */
615    {   R"ffDXD(            .rawcode
616            .text
617            .byte 1,2,2,3,4
618            .main
619            .byte 0xf,0xf0,0xdd
620            .section .text
621            .byte 12,14)ffDXD",
622        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
623        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
624            { 0x01, 0x02, 0x02, 0x03, 0x04, 0x0f, 0xf0, 0xdd, 0x0c, 0x0e } } },
625        { { ".", 10U, 0, 0U, true, false, false, 0, 0 } },
626        true, "", ""
627    },
628    /* 16 - raw code section tests (errors) */
629    {   R"ffDXD(            .rawcode
630            .data
631            .rodata
632            .section .notes
633            .kernel test1
634            .main)ffDXD",
635        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
636        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE, { } } },
637        { { ".", 0U, 0, 0U, true, false, false, 0, 0 } },
638        false, "test.s:2:13: Error: Only section '.text' can be in raw code\n"
639        "test.s:3:13: Error: Only section '.text' can be in raw code\n"
640        "test.s:4:13: Error: Only section '.text' can be in raw code\n"
641        "test.s:5:13: Error: In rawcode defining kernels is not allowed\n", ""
642    },
643    /* 17 - Gallium format (sections) */
644    {   R"ffDXD(            .gallium
645            .ascii "some text"
646            .main
647            .rodata
648            .ascii "some data"
649            .text
650aa1: bb2:   # kernel labels
651            .byte 220
652            .rodata
653            .byte 211
654            .section .comment
655            .string "this is comment"
656            .kernel aa1
657            .kernel bb2
658            .main
659            .string "next comment"
660            .kernel aa1
661            .kernel bb2
662            .text
663            .ascii "next text"
664            .kernel bb2
665            .globaldata
666            .ascii "endofdata"
667            .section .test1
668            .string "this is test"
669            .section .test1
670            .string "aa")ffDXD",
671        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false, { "aa1", "bb2" },
672        {
673            { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
674                {
675                    0x73, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x65, 0x78,
676                    0x74, 0xdc, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74,
677                    0x65, 0x78, 0x74
678                } },
679            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA,
680                {
681                    0x73, 0x6f, 0x6d, 0x65, 0x20, 0x64, 0x61, 0x74,
682                    0x61, 0xd3, 0x65, 0x6e, 0x64, 0x6f, 0x66, 0x64,
683                    0x61, 0x74, 0x61
684                } },
685            { ".comment", ASMKERN_GLOBAL, AsmSectionType::GALLIUM_COMMENT,
686                {
687                    0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
688                    0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00,
689                    0x6e, 0x65, 0x78, 0x74, 0x20, 0x63, 0x6f, 0x6d,
690                    0x6d, 0x65, 0x6e, 0x74, 0x00
691                } },
692            { nullptr, 0, AsmSectionType::CONFIG, { } },
693            { nullptr, 1, AsmSectionType::CONFIG, { } },
694            { ".test1", ASMKERN_GLOBAL, AsmSectionType::EXTRA_SECTION,
695                { 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
696                  0x74, 0x65, 0x73, 0x74, 0x00, 0x61, 0x61, 0x00 } }
697        },
698        {
699            { ".", 16U, 5, 0U, true, false, false, 0, 0 },
700            { "aa1", 9U, 0, 0U, true, true, false, 0, 0 },
701            { "bb2", 9U, 0, 0U, true, true, false, 0, 0 }
702        },
703        true, "", ""
704    },
705    /* 18 - Gallium format (sections, errors) */
706    {   R"ffDXD(            .gallium
707            .kernel aa22
708            .int 24,5,6
709            .fill 10,4,0xff
710            .p2align 4)ffDXD",
711        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false, { "aa22" },
712        {
713            { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE, { } },
714            { nullptr, 0, AsmSectionType::CONFIG, { } }
715        },
716        { { ".", 0U, 1, 0U, true, false, false, 0, 0 } },
717        false, "test.s:3:13: Error: Writing data into non-writeable section is illegal\n"
718        "test.s:4:13: Error: Writing data into non-writeable section is illegal\n"
719        "test.s:5:13: Error: Change output counter inside non-addressable "
720        "section is illegal\n", ""
721    },
722    /* 19 - AmdFormat (sections) */
723    {   R"ffDXD(            .amd
724            .globaldata
725            .ascii "aaabbb"
726            .section .ulu
727            .ascii "server"
728            .kernel aaa1
729            .section .ulu2
730            .ascii "linux"
731            .main
732            .section .ulu
733            .ascii "xserver"
734            .kernel aaa1
735            .ascii "oops"
736            .dATa
737            .string "dd777dd"
738            .section .ulu
739            .ascii "uline"
740            .main
741            .ascii "..xXx.."
742            .kernel aaa1
743            .ascii "nfx"
744           
745            .kernel bxv
746            .asciz "zeroOne"
747            .roDATA
748            .asciz "zeroTwo"
749            .kernel aaa1
750            .ascii "33"
751            .mAIn
752            .asciz "top1"
753            .globaldata
754            .ascii "nextType"
755            .kernel aaa1
756            .tEXt
757            .main
758            .ascii "yetAnother"
759            .kernel aaa1
760            .asciz "burger"
761            .main
762            .kernel aaa1
763            .asciz "radeon"
764            .kernel bxv
765            .asciz "fury")ffDXD",
766        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "aaa1", "bxv" },
767        {
768            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
769                {   0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x6e, 0x65,
770                    0x78, 0x74, 0x54, 0x79, 0x70, 0x65, 0x79, 0x65,
771                    0x74, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72 } },
772            { ".ulu", ASMKERN_GLOBAL, AsmSectionType::EXTRA_SECTION,
773                {   0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x78, 0x73,
774                    0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x2e, 0x78,
775                    0x58, 0x78, 0x2e, 0x2e, 0x74, 0x6f, 0x70, 0x31, 0x00 } },
776            { ".text", 0, AsmSectionType::CODE,
777                {   0x62, 0x75, 0x72, 0x67, 0x65, 0x72, 0x00, 0x72,
778                    0x61, 0x64, 0x65, 0x6f, 0x6e, 0x00 } },
779            { ".ulu2", 0, AsmSectionType::EXTRA_SECTION,
780                {   0x6c, 0x69, 0x6e, 0x75, 0x78, 0x6f, 0x6f, 0x70, 0x73 } },
781            { ".data", 0, AsmSectionType::DATA,
782                {   0x64, 0x64, 0x37, 0x37, 0x37, 0x64, 0x64, 0x00 } },
783            { ".ulu", 0, AsmSectionType::EXTRA_SECTION,
784                { 0x75, 0x6c, 0x69, 0x6e, 0x65, 0x6e, 0x66, 0x78, 0x33, 0x33 } },
785            { ".text", 1, AsmSectionType::CODE,
786                { 0x7a, 0x65, 0x72, 0x6f, 0x4f, 0x6e, 0x65, 0x00 } },
787            { ".rodata", 1, AsmSectionType::EXTRA_SECTION,
788                {   0x7a, 0x65, 0x72, 0x6f, 0x54, 0x77, 0x6f, 0x00,
789                    0x66, 0x75, 0x72, 0x79, 0x00 } }
790        },
791        { { ".", 13U, 7, 0U, true, false, false, 0, 0 } },
792        true, "", ""
793    },
794    /* 20 - .gpu/.arch tests */
795    {   ".amd\n.gpu Tahiti\n",
796        BinaryFormat::AMD, GPUDeviceType::TAHITI, false,
797        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
798    },
799    /* 21 - .gpu/.arch tests */
800    {   ".amd\n.gpu CapeVerde\n",
801        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
802        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
803    },
804    /* 22 - .gpu/.arch tests */
805    {   ".amd\n.gpu Bonaire\n",
806        BinaryFormat::AMD, GPUDeviceType::BONAIRE, false,
807        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
808    },
809    /* 23 - .gpu/.arch tests */
810    {   ".amd\n.gpu Mullins\n",
811        BinaryFormat::AMD, GPUDeviceType::MULLINS, false,
812        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
813    },
814    /* 24 - .gpu/.arch tests */
815    {   ".amd\n.gpu Hainan\n",
816        BinaryFormat::AMD, GPUDeviceType::HAINAN, false,
817        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
818    },
819    /* 25 - .gpu/.arch tests */
820    {   ".amd\n.gpu Iceland\n",
821        BinaryFormat::AMD, GPUDeviceType::ICELAND, false,
822        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
823    },
824    /* 26 - .gpu/.arch tests */
825    {   ".amd\n.arch GCN1.0\n",
826        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
827        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
828    },
829    /* 27 - .gpu/.arch tests */
830    {   ".amd\n.arch GCN1.1\n",
831        BinaryFormat::AMD, GPUDeviceType::BONAIRE, false,
832        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
833    },
834    /* 28 - .gpu/.arch tests */
835    {   ".amd\n.arch GCN1.2\n",
836        BinaryFormat::AMD, GPUDeviceType::ICELAND, false,
837        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
838    },
839    /* 29 - arch gpu conditionals */
840    {   ".amd\n.gpu Tahiti\n.ifarch GCN1.0\n.print \"GCN1.0\"\n.endif\n",
841        BinaryFormat::AMD, GPUDeviceType::TAHITI, false,
842        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "GCN1.0\n",
843    },
844    /* 30 - arch gpu conditionals */
845    {   ".amd\n.gpu Hawaii\n.ifarch GCN1.0\n.print \"GCN1.0\"\n.endif\n",
846        BinaryFormat::AMD, GPUDeviceType::HAWAII, false,
847        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
848    },
849    /* 31 - arch gpu conditionals */
850    {   ".amd\n.gpu Tonga\n.ifarch GCN1.2\n.print \"GCN1.2\"\n.endif\n",
851        BinaryFormat::AMD, GPUDeviceType::TONGA, false,
852        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "GCN1.2\n",
853    },
854    /* 32 - arch gpu conditionals */
855    {   ".amd\n.gpu Bonaire\n.ifnarch GCN1.2\n.print \"notGCN1.2\"\n.endif\n",
856        BinaryFormat::AMD, GPUDeviceType::BONAIRE, false,
857        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "notGCN1.2\n",
858    },
859    /* 33 - gpu conditionals */
860    {   ".amd\n.gpu Pitcairn\n.ifgpu Pitcairn\n.print \"pitcairn\"\n.endif\n",
861        BinaryFormat::AMD, GPUDeviceType::PITCAIRN, false,
862        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "pitcairn\n",
863    },
864    /* 34 - gpu conditionals */
865    {   ".amd\n.gpu Iceland\n.ifgpu Pitcairn\n.print \"pitcairn\"\n.endif\n",
866        BinaryFormat::AMD, GPUDeviceType::ICELAND, false,
867        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
868    },
869    /* 35 - gpu conditionals */
870    {   ".amd\n.gpu Iceland\n.ifngpu Pitcairn\n.print \"notpitcairn\"\n.endif\n",
871        BinaryFormat::AMD, GPUDeviceType::ICELAND, false,
872        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
873        true, "", "notpitcairn\n",
874    },
875    /* 36 - formats */
876    {   ".amd\n.iffmt catalyst\n.print \"catalystfmt\"\n.endif\n",
877        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
878        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
879        true, "", "catalystfmt\n",
880    },
881    /* 37 - formats */
882    {   ".format amd\n.iffmt catalyst\n.print \"catalystfmt\"\n.endif\n",
883        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
884        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
885        true, "", "catalystfmt\n",
886    },
887    /* 38 - formats */
888    {   ".gallium\n.iffmt catalyst\n.print \"catalystfmt\"\n.endif\n",
889        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false,
890        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
891    },
892    /* 39 - formats */
893    {   ".format gallium\n.iffmt catalyst\n.print \"catalystfmt\"\n.endif\n",
894        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false,
895        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
896    },
897    /* 40 - formats */
898    {   ".amd\n.ifnfmt catalyst\n.print \"notcatalystfmt\"\n.endif\n",
899        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
900        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
901    },
902    /* 41 - formats */
903    {   ".gallium\n.ifnfmt catalyst\n.print \"notcatalystfmt\"\n.endif\n",
904        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false,
905        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
906        true, "", "notcatalystfmt\n",
907    },
908    /* 42 - bitness conditional */
909    {   ".amd\n.32bit\n.if32\n.print \"is32bit\"\n.endif\n",
910        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
911        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
912        true, "", "is32bit\n",
913    },
914    /* 43 - bitness conditional */
915    {   ".amd\n.64bit\n.if32\n.print \"is32bit\"\n.endif\n",
916        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, true,
917        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
918    },
919    /* 44 - unresolved expression and resolved expression */
920    {   R"ffDXD(sym3 = sym7*sym4
921        sym3 = 17
922        sym7 = 1
923        sym4 = 3)ffDXD",
924        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { }, { },
925        {
926            { ".", 0, 0, 0, true, false, false, 0, 0 },
927            { "sym3", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
928            { "sym4", 3, ASMSECT_ABS, 0, true, false, false, 0, 0 },
929            { "sym7", 1, ASMSECT_ABS, 0, true, false, false, 0, 0 }
930        }, true, "", ""
931    },
932    /* 45 - register ranges assignment */
933    {   R"ffDXD(sym1 = 123
934        sym1 = %v[12:15]
935        sym2 = x*21
936        sym2 = %v[120:125]
937        sym3 = %sym2[1:3]
938        sym4 = %v[120:125]
939        sym4 = 12
940        .set sym5, %v[120:125]
941        .equiv sym6, %v[120:125]
942        x=43)ffDXD",
943        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
944        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA } },
945        {
946            { ".", 0, 0, 0, true, false, false, 0, 0 },
947            { "sym1", (256+12) | ((256+16ULL)<<32), ASMSECT_ABS, 0,
948                true, false, false, 0, 0, true },
949            { "sym2", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
950                true, false, false, 0, 0, true },
951            { "sym3", (256+121) | ((256+124ULL)<<32), ASMSECT_ABS, 0,
952                true, false, false, 0, 0, true },
953            { "sym4", 12, ASMSECT_ABS, 0, true, false, 0, 0 },
954            { "sym5", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
955                true, false, false, 0, 0, true },
956            { "sym6", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
957                true, true, false, 0, 0, true },
958            { "x", 43, ASMSECT_ABS, 0, true, false, 0, 0 }
959        }, true, "", ""
960    },
961    /* 46 */
962    {   R"ffDXD(. = %s3 # error
963        .equiv sym6, %v[120:125]
964        .equiv sym6, %v[120:125] # error
965        .eqv sym7, %v[120:126]
966        .eqv sym7, %v[120:127] # error
967        .size sym6 , 4
968        .global sym6, sym7
969        .local sym6, sym7
970        .weak sym6, sym7
971        )ffDXD",
972        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
973        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA } },
974        {
975            { ".", 0, 0, 0, true, false, false, 0, 0 },
976            { "sym6", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
977                true, true, false, 0, 0, true },
978            { "sym7", (256+120) | ((256+127ULL)<<32), ASMSECT_ABS, 0,
979                true, true, false, 0, 0, true },
980        }, false, R"ffDXD(test.s:1:1: Error: Symbol '.' requires a resolved expression
981test.s:3:16: Error: Symbol 'sym6' is already defined
982test.s:5:14: Error: Symbol 'sym7' is already defined
983test.s:6:15: Error: Symbol must not be register symbol
984test.s:7:17: Error: Symbol must not be register symbol
985test.s:7:23: Error: Symbol must not be register symbol
986test.s:8:16: Error: Symbol must not be register symbol
987test.s:8:22: Error: Symbol must not be register symbol
988test.s:9:15: Error: Symbol must not be register symbol
989test.s:9:21: Error: Symbol must not be register symbol
990)ffDXD", ""
991    },
992    /* 47 - altmacro */
993    {   R"ffDXD(.altmacro
994        .macro test a,b,c
995        .byte a,b,c,a+b
996        .endm
997        test 2,4,7
998        test a,b,c
999        a=10
1000        b=54
1001        c=26
1002        )ffDXD",
1003        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1004        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1005            { 2, 4, 7, 6, 10, 54, 26, 64} } },
1006        {
1007            { ".", 8U, 0, 0U, true, false, false, 0, 0 },
1008            { "a", 10U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1009            { "b", 54U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1010            { "c", 26U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
1011        },
1012        true, "", ""
1013    },
1014    /* 48 - altmacro */
1015    {   R"ffDXD(.altmacro
1016        .macro test a,b,c
1017        local al,bl,cl,dl
1018al:     .byte a
1019bl:     .byte b
1020cl:     .byte c
1021dl:     .byte a+b
1022        .endm
1023        test 2,4,7
1024        test a,b,c
1025        a=10
1026        b=54
1027        c=26
1028        )ffDXD",
1029        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1030        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1031            { 2, 4, 7, 6, 10, 54, 26, 64} } },
1032        {
1033            { ".", 8U, 0, 0U, true, false, false, 0, 0 },
1034            { ".LL0", 0U, 0, 0U, true, true, false, 0, 0 },
1035            { ".LL1", 1U, 0, 0U, true, true, false, 0, 0 },
1036            { ".LL2", 2U, 0, 0U, true, true, false, 0, 0 },
1037            { ".LL3", 3U, 0, 0U, true, true, false, 0, 0 },
1038            { ".LL4", 4U, 0, 0U, true, true, false, 0, 0 },
1039            { ".LL5", 5U, 0, 0U, true, true, false, 0, 0 },
1040            { ".LL6", 6U, 0, 0U, true, true, false, 0, 0 },
1041            { ".LL7", 7U, 0, 0U, true, true, false, 0, 0 },
1042            { "a", 10U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1043            { "b", 54U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1044            { "c", 26U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
1045        },
1046        true, "", ""
1047    },
1048    /* 49 - altmacro */
1049    {
1050        R"ffDXD(.altmacro
1051.macro test1 v1 v2
1052xx: yyx:    local t1 , t6
1053    .string "v1 v2 vxx t1  \t6 t9 "
1054.endm
1055someval = 221
1056        test1 %-(12+someval*2),  <aaa!!>
1057     )ffDXD",
1058        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1059        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1060            { 
1061                0x2d, 0x34, 0x35, 0x34, 0x20, 0x61, 0x61, 0x61,
1062                0x21, 0x20, 0x76, 0x78, 0x78, 0x20, 0x2e, 0x4c,
1063                0x4c, 0x30, 0x20, 0x20, 0x2e, 0x4c, 0x4c, 0x31,
1064                0x20, 0x74, 0x39, 0x20, 0x00
1065            } } },
1066        {
1067            { ".", 29U, 0, 0U, true, false, false, 0, 0 },
1068            { "someval", 221U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1069            { "xx", 0U, 0, 0U, true, true, false, 0, 0 },
1070            { "yyx", 0U, 0, 0U, true, true, false, 0, 0 }
1071        },
1072        true, "", ""
1073    },
1074    /* 50 - altmacro */
1075    {   R"ffDXD(.altmacro
1076        .macro test a$xx,_b.,$$c
1077        .byte a$xx,_b.,$\
1078$c,a$x\
1079x+_b.
1080        .endm
1081        test 2,4,7
1082        test a,b,c
1083        a=10
1084        b=54
1085        c=26
1086        )ffDXD",
1087        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1088        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1089            { 2, 4, 7, 6, 10, 54, 26, 64} } },
1090        {
1091            { ".", 8U, 0, 0U, true, false, false, 0, 0 },
1092            { "a", 10U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1093            { "b", 54U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1094            { "c", 26U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
1095        },
1096        true, "", ""
1097    },
1098    /* 51 - altmacro */
1099    {
1100        R"ffDXD(.altmacro
1101        .macro test v1
1102a: b: _c:    local a a .\
1103. ..\
1104 d a
1105        .endm
1106        test 44)ffDXD",
1107        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1108        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } } },
1109        {
1110            { ".", 0U, 0, 0U, true, false, false, 0, 0 },
1111            { "_c", 0U, 0, 0U, true, true, false, 0, 0 },
1112            { "a", 0U, 0, 0U, true, true, false, 0, 0 },
1113            { "b", 0U, 0, 0U, true, true, false, 0, 0 }
1114        },
1115        false, R"ffDXD(In macro substituted from test.s:7:9:
1116test.s:3:22: Error: Name 'a' was already used by local or macro argument
1117In macro substituted from test.s:7:9:
1118test.s:4:3: Error: Name '..' was already used by local or macro argument
1119In macro substituted from test.s:7:9:
1120test.s:5:4: Error: Name 'a' was already used by local or macro argument
1121)ffDXD", ""
1122    },
1123    /* 52 - altmacro */
1124    {
1125        R"ffDXD(.altmacro
1126.macro testw vx
1127local sx2
1128        .string "<vx>sx2"
1129.endm
1130
1131.macro testx vx
1132        #.noaltmacro
1133        testw aaarrggg
1134x\():    local ad
1135        .string "\vx (ad)"
1136Local sx
1137        .string "sx\()___"
1138.endm
1139
1140        testx "aaaax!! bbb!!")ffDXD",
1141        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1142        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1143            {
1144                0x3c, 0x61, 0x61, 0x61, 0x72, 0x72, 0x67, 0x67,
1145                0x67, 0x3e, 0x2e, 0x4c, 0x4c, 0x30, 0x00, 0x61,
1146                0x61, 0x61, 0x61, 0x78, 0x21, 0x20, 0x62, 0x62,
1147                0x62, 0x21, 0x20, 0x28, 0x2e, 0x4c, 0x4c, 0x31,
1148                0x29, 0x00, 0x2e, 0x4c, 0x4c, 0x32, 0x5f, 0x5f,
1149                0x5f, 0x00,
1150            } } },
1151        {
1152            { ".", 42U, 0, 0U, true, false, false, 0, 0 },
1153            { "x", 15U, 0, 0U, true, true, false, 0, 0 }
1154        },
1155        true, "", ""
1156    },
1157    /* 53 - altmacro */
1158    {   R"ffDXD(.rept 1
1159        .int 0xaaddd
1160loop:   .rept 10
1161        .int 0x10
1162        .endr
1163        .int 0xaaaa
1164
1165        .endr           
1166            .int 12343)ffDXD",
1167        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1168        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1169            { 
1170                0xdd, 0xad, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00,
1171                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1172                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1173                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1174                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1175                0x10, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
1176                0x37, 0x30, 0x00, 0x00
1177            } } },
1178        {
1179            { ".", 52U, 0, 0U, true, false, false, 0, 0 },
1180            { "loop", 4U, 0, 0U, true, true, false, 0, 0 }
1181        },
1182        true, "", ""
1183    },
1184    /* 54 - altmacro */
1185    {   R"ffDXD(.irpc x, "abc"
1186        .int 0xaaddd
1187\x\()loop\x: .rept 3
1188        .int 0x10
1189        .endr
1190        .int 0xaaaa
1191
1192        .endr           
1193            .int 12343)ffDXD",
1194        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1195        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1196            { 
1197                0xdd, 0xad, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00,
1198                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1199                0xaa, 0xaa, 0x00, 0x00, 0xdd, 0xad, 0x0a, 0x00,
1200                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1201                0x10, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
1202                0xdd, 0xad, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00,
1203                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1204                0xaa, 0xaa, 0x00, 0x00, 0x37, 0x30, 0x00, 0x00
1205            } } },
1206        {
1207            { ".", 64U, 0, 0U, true, false, false, 0, 0 },
1208            { "aloopa", 4U, 0, 0U, true, true, false, 0, 0 },
1209            { "bloopb", 24U, 0, 0U, true, true, false, 0, 0 },
1210            { "cloopc", 44U, 0, 0U, true, true, false, 0, 0 }
1211        },
1212        true, "", ""
1213    },
1214    /* 55 - macro name case sensitives */
1215    {   R"ffDXD(.macrocase
1216            .macro one1
1217            .byte 2
1218            .endm
1219            one1
1220            ONE1
1221            .nomacrocase
1222            .macro one2
1223            .byte 4
1224            .endm
1225            .macro ONE2
1226            .byte 5
1227            .endm
1228            one2
1229            ONE2
1230)ffDXD",
1231        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1232        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1233            {
1234                2, 2, 4, 5
1235            } } },
1236        { { ".", 4U, 0, 0U, true, false, false, 0, 0 } },
1237        true, "", ""
1238    },
1239    /*
1240     * Scopes tests
1241     */
1242    /* 56 - standard symbol assignment */
1243    {   R"ffDXD(sym1 = 7
1244        .scope ala
1245        sym2 = 81
1246        sym3 = ::beata::sym7*sym4
1247        sym4 = ::beata::sym5*::beata::sym6+::beata::sym7 - sym1
1248        .ends
1249        .scope beata
1250        sym5 = 17
1251        sym6 = 43
1252        sym7 = 91
1253        .ends)ffDXD",
1254        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { }, { },
1255        {
1256            { ".", 0, 0, 0, true, false, false, 0, 0 },
1257            { "ala::sym2", 81, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1258            { "ala::sym3", 91*(17*43+91-7), ASMSECT_ABS, 0, true, false, false, 0, 0 },
1259            { "ala::sym4", 17*43+91-7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1260            { "beata::sym5", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1261            { "beata::sym6", 43, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1262            { "beata::sym7", 91, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1263            { "sym1", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1264        }, true, "", ""
1265    },
1266    /* 57 - standard symbol assignment 2 */
1267    {   R"ffDXD(sym1 = 7
1268        .scope beata
1269        sym5 = 17
1270        sym6 = 43
1271        sym7 = 91
1272        .ends
1273        .scope ala
1274        sym2 = 81
1275        sym3 = beata::sym7*sym4
1276        sym4 = beata::sym5*beata::sym6+beata::sym7 - sym1
1277        .ends
1278        )ffDXD",
1279        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { }, { },
1280        {
1281            { ".", 0, 0, 0, true, false, false, 0, 0 },
1282            { "ala::sym2", 81, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1283            { "ala::sym3", 91*(17*43+91-7), ASMSECT_ABS, 0, true, false, false, 0, 0 },
1284            { "ala::sym4", 17*43+91-7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1285            { "beata::sym5", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1286            { "beata::sym6", 43, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1287            { "beata::sym7", 91, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1288            { "sym1", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1289        }, true, "", ""
1290    },
1291    /* 58 - visibility */
1292    {
1293        R"ffDXD(.rawcode
1294            .byte 0
1295            sym1 = 5
1296            .byte sym1
1297            .scope
1298                sym1 = 7
1299                .byte sym1
1300                .scope
1301                    sym1 = 9
1302                    .byte sym1
1303                .ends
1304                .byte sym1
1305            .ends
1306            .byte sym1
1307           
1308            sym1 = 15
1309            .byte sym1
1310            .scope ala
1311                sym1 = 17
1312                .byte sym1
1313                .scope beta
1314                    sym1 = 19
1315                    .byte sym1
1316                .ends
1317                .byte sym1
1318            .ends
1319            .byte sym1
1320            .byte ala::beta::sym1
1321        )ffDXD",
1322        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1323        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1324            { 0, 5, 7, 9, 7, 5, 15, 17, 19, 17, 15, 19 } } },
1325        {
1326            { ".", 12, 0, 0, true, false, false, 0, 0 },
1327            { "ala::beta::sym1", 19, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1328            { "ala::sym1", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1329            { "sym1", 15, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1330        }, true, "", ""
1331    },
1332    /* 59 - visibility 2 */
1333    {   R"ffDXD(.rawcode
1334            .byte 0
1335            sym1 = 1
1336            sym2 = 2
1337            sym3 = 3
1338            sym4 = 4
1339            .scope ala
1340                .scope x1
1341                    sym1 = 9
1342                    sym4 = 10
1343                    sym8 = 25
1344                    sym9 = 30
1345                .ends
1346                .scope x2
1347                    sym2 = 8
1348                    sym3 = 11
1349                    sym8 = 26
1350                    sym9 = 31
1351                .ends
1352                sym1 = 6
1353                sym3 = 7
1354            .ends
1355            .scope beta
1356                sym2 = 12
1357                .scope x1
1358                    sym1 = 14
1359                    sym4 = 15
1360                    sym8 = 27
1361                .ends
1362                .scope x2
1363                    sym2 = 16
1364                    sym3 = 17
1365                .ends
1366                .scope y2
1367                    sym2 = 19
1368                    sym3 = 20
1369                    sym4 = 22
1370                .ends
1371                sym3 = 13
1372            .ends
1373            .byte sym1,sym2,sym3,sym4
1374            .scope ala
1375                .byte sym1,sym2,sym3,sym4
1376                .scope x1
1377                    .byte sym1,sym2,sym3,sym4
1378                .ends
1379                .scope x2
1380                    .byte sym1,sym2,sym3,sym4
1381                .ends
1382            .ends
1383            .scope beta
1384                .byte sym1,sym2,sym3,sym4
1385                .scope x1
1386                    .byte sym1,sym2,sym3,sym4
1387                .ends
1388                .scope x2
1389                    .byte sym1,sym2,sym3,sym4
1390                .ends
1391                .scope y2
1392                    .byte sym1,sym2,sym3,sym4
1393                .ends
1394            .ends
1395            # using
1396            .using ::ala::x1
1397            .byte sym1,sym2,sym3,sym4,sym8
1398            .using ::ala::x2
1399            .byte sym1,sym2,sym3,sym4,sym8
1400            .unusing ::ala::x2
1401            .byte sym1,sym2,sym3,sym4,sym8
1402            .unusing ::ala::x1
1403            .using ::ala::x2
1404            .byte sym1,sym2,sym3,sym4,sym8
1405            .using ::ala::x1
1406            .byte sym1,sym2,sym3,sym4,sym8
1407            .using ::beta::x1
1408            .scope ala
1409                .using x2
1410                .byte sym1,sym2,sym3,sym4,sym8
1411                .using x1
1412                .byte sym1,sym2,sym3,sym4,sym8
1413                .unusing
1414            .ends
1415            .byte sym1,sym2,sym3,sym4,sym8
1416            .byte sym1,sym2,sym3,sym4,sym8,sym9
1417            .unusing
1418            .byte sym1,sym2,sym3,sym4,sym8,sym9
1419           
1420            # recursive finding by usings
1421            .scope ela
1422                .using ala::x1
1423                .using ala::x2
1424            .ends
1425            .scope newscope
1426                .using ela
1427            .ends
1428            .byte newscope::sym8, newscope::sym9
1429            .scope newscope
1430                .byte sym8, sym9
1431            .ends
1432            .byte ::newscope::sym8, ::newscope::sym9
1433            # recursive finding scopes through using
1434            .scope jula
1435                .using ::ala
1436            .ends
1437            .scope xela
1438                .using ::jula
1439            .ends
1440            .unusing
1441            .scope
1442                .using jula::x1
1443                .byte sym8, sym9
1444            .ends
1445            .scope
1446                .using xela::x2
1447                .byte sym8, sym9
1448            .ends
1449            .scope looper
1450                .using ::looper # !!!
1451                .byte somebody
1452            .ends
1453            .scope looper3
1454                .using ::looper2
1455            .ends
1456            .scope looper2
1457                .using ::looper3 # !!!
1458                .byte somebody2
1459            .ends
1460        )ffDXD",
1461        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1462        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1463            { 0, 1, 2, 3, 4,
1464                6, 2, 7, 4,
1465                9, 2, 7, 10,
1466                6, 8, 11, 4,
1467                1, 12, 13, 4,
1468                14, 12, 13, 15,
1469                1, 16, 17, 4,
1470                1, 19, 20, 22,
1471                // using
1472                1, 2, 3, 4, 25,
1473                1, 2, 3, 4, 26,
1474                1, 2, 3, 4, 25,
1475                1, 2, 3, 4, 26,
1476                1, 2, 3, 4, 25,
1477                6, 8, 7, 4, 26,
1478                6, 8, 7, 10, 25,
1479                1, 2, 3, 4, 27,
1480                1, 2, 3, 4, 27, 30,
1481                1, 2, 3, 4, 0, 0,
1482                // recursive using
1483                26, 31, 26, 31, 26, 31,
1484                25, 30, 26, 31, 0, 0
1485            } } },
1486        {
1487            { ".", 97, 0, 0, true, false, false, 0, 0 },
1488            { "ala::sym1", 6, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1489            { "ala::sym3", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1490            { "ala::x1::sym1", 9, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1491            { "ala::x1::sym4", 10, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1492            { "ala::x1::sym8", 25, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1493            { "ala::x1::sym9", 30, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1494            { "ala::x2::sym2", 8, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1495            { "ala::x2::sym3", 11, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1496            { "ala::x2::sym8", 26, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1497            { "ala::x2::sym9", 31, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1498            { "beta::sym2", 12, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1499            { "beta::sym3", 13, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1500            { "beta::x1::sym1", 14, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1501            { "beta::x1::sym4", 15, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1502            { "beta::x1::sym8", 27, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1503            { "beta::x2::sym2", 16, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1504            { "beta::x2::sym3", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1505            { "beta::y2::sym2", 19, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1506            { "beta::y2::sym3", 20, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1507            { "beta::y2::sym4", 22, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1508            { "looper2::somebody2", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1509            { "looper::somebody", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1510            { "sym1", 1, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1511            { "sym2", 2, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1512            { "sym3", 3, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1513            { "sym4", 4, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1514            { "sym8", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1515            { "sym9", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 }
1516        }, true, "", ""
1517    },
1518    /* 60 - scope finding */
1519    {   R"ffDXD(.rawcode
1520        .byte 0
1521        obj = 1
1522        .scope ala
1523            obj = 2
1524            .scope beta
1525                obj = 3
1526                obj4 = 28
1527                .scope ala
1528                    obj = 4
1529                .ends
1530                .scope ceta
1531                    obj = 5
1532                    obj4 = 26
1533                .ends
1534            .ends
1535            .scope ceta
1536                obj = 6
1537                obj2 = 23
1538                .scope beta
1539                    obj = 7
1540                    obj4 = 27
1541                .ends
1542                .scope ceta
1543                    obj = 8
1544                    obj2 = 24
1545                .ends
1546                .scope buru
1547                    obj = 9
1548                .ends
1549            .ends
1550            .scope linux
1551                obj = 10
1552                .scope wifi
1553                    obj = 11
1554                    obj1 = 22
1555                    obj5 = 30
1556                .ends
1557                .scope ala
1558                    obj3 = 25
1559                    obj = 12
1560                .ends
1561            .ends
1562        .ends
1563        .byte obj, ala::obj, ala::beta::obj, ala::beta::ala::obj, ala::beta::ceta::obj
1564        .byte ala::ceta::obj, ala::ceta::beta::obj, ala::ceta::ceta::obj
1565        .byte ala::ceta::buru::obj, ala::linux::obj, ala::linux::wifi::obj
1566        .byte ala::linux::ala::obj
1567        # inside scopes
1568        .scope ala
1569            .scope beta
1570                # linux::beta::obj created because not scope found by first scope name
1571                .byte ala::obj, beta::obj, ceta::obj, ceta::beta::obj, linux::ala::obj
1572                .byte ::ala::obj, ::obj
1573            .ends
1574            .scope ceta
1575                # linux::beta::obj created because not scope found by first scope name
1576                # from current scope
1577                .byte ala::obj, beta::obj, ceta::obj, ceta::beta::obj, ceta::ceta::obj
1578            .ends
1579            .scope new
1580                .byte ala::obj, beta::obj, ceta::obj, ceta::beta::obj, ceta::ceta::obj
1581            .ends
1582            .scope
1583                .byte ala::obj, beta::obj, ceta::obj, ceta::beta::obj, ceta::ceta::obj
1584                .byte ::ala::obj, linux::wifi::obj
1585                .scope ala
1586                    obj = 66
1587                    .byte obj
1588                .ends
1589            .ends
1590            .scope
1591                .scope ala
1592                    .byte obj
1593                .ends
1594            .ends
1595        .ends
1596        # with using
1597        .using ala::linux::wifi
1598        .byte obj1
1599        .scope new
1600            .using ala::ceta
1601            .byte obj2
1602            .using ala::ceta::ceta
1603            .byte obj2
1604            .scope
1605                .using ala::ceta::ceta
1606                .using ala::ceta
1607                .byte obj2
1608            .ends
1609            .scope
1610                .using ala::ceta::beta
1611                .using ala::beta::ceta
1612                .using ala::linux::ala
1613                .byte obj3, obj2, obj4, obj5
1614            .ends
1615        .ends
1616        .scope ala
1617            .using beta
1618            .byte obj4
1619            .scope ceta
1620                .using beta
1621                .byte obj4
1622                .unusing
1623                .byte obj4
1624            .ends
1625        .ends
1626        .unusing
1627        .using ::ala::beta::ceta
1628        .using ::ala::ceta::beta
1629        .using ::ala::beta::ceta
1630        .byte obj4
1631        )ffDXD",
1632        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1633        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1634            { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
1635              4, 3, 5, 0, 12, 2, 1, 2, 7, 8, 0, 0,
1636              2, 3, 6, 7, 8, 2, 3, 6, 7, 8, 2, 11, 66, 2,
1637              // using
1638              22, 23, 24, 23, 25, 24, 26, 30,
1639              28, 27, 28, 26
1640            } } },
1641        {
1642            { ".", 51, 0, 0, true, false, false, 0, 0 },
1643            { "ala::beta::ala::obj", 4, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1644            { "ala::beta::ceta::beta::obj", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1645            { "ala::beta::ceta::obj", 5, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1646            { "ala::beta::ceta::obj4", 26, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1647            { "ala::beta::obj", 3, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1648            { "ala::beta::obj4", 28, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1649            { "ala::ceta::beta::obj", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1650            { "ala::ceta::beta::obj4", 27, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1651            { "ala::ceta::buru::obj", 9, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1652            { "ala::ceta::ceta::beta::obj", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1653            { "ala::ceta::ceta::ceta::obj", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1654            { "ala::ceta::ceta::obj", 8, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1655            { "ala::ceta::ceta::obj2", 24, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1656            { "ala::ceta::obj", 6, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1657            { "ala::ceta::obj2", 23, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1658            { "ala::linux::ala::obj", 12, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1659            { "ala::linux::ala::obj3", 25, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1660            { "ala::linux::obj", 10, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1661            { "ala::linux::wifi::obj", 11, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1662            { "ala::linux::wifi::obj1", 22, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1663            { "ala::linux::wifi::obj5", 30, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1664            { "ala::obj", 2, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1665            { "obj", 1, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1666        }, true, "", ""
1667    },
1668    /* 61 - creating symbols, labels */
1669    {   R"ffDXD(.rawcode
1670        .byte 0
1671        sym1 = 25
1672        .set sym2, 27
1673        .equ sym3, 28
1674        .equiv sym4, 29
1675        .eqv sym5, 31
1676        label1:
1677        .scope creta
1678            .byte sym1, sym2, sym3, sym4, sym5, sym6
1679            sym1 = 15
1680            .set sym2, 17
1681            .equ sym3, 18
1682            .equiv sym4, 19
1683            .eqv sym5, 21
1684            sym6 = 16
1685            label1:
1686            .scope ula
1687                .byte sym1, sym2, sym3, sym4, sym5, sym6, sym7
1688                sym1 = 5
1689                .set sym2, 7
1690                .equ sym3, 8
1691                .equiv sym4, 9
1692                .eqv sym5, 11
1693                sym6 = 6
1694                sym7 = 106
1695                label1:
1696            .ends
1697        .ends
1698        .byte creta::sym2, creta::ula::sym7
1699        creta::ula::label2:
1700        .scope creta
1701            .scope ula
1702                .byte label2-label1
1703            .ends
1704        .ends
1705        )ffDXD",
1706        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1707        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1708            { 0, 25, 27, 28, 29, 31, 16, 15, 17, 18, 19, 21, 16, 106, 17, 106, 2 } } },
1709        {
1710            { ".", 17, 0, 0, true, false, false, 0, 0 },
1711            { "creta::label1", 7, 0, 0, true, true, false, 0, 0 },
1712            { "creta::sym1", 15, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1713            { "creta::sym2", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1714            { "creta::sym3", 18, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1715            { "creta::sym4", 19, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1716            { "creta::sym5", 21, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1717            { "creta::sym6", 16, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1718            { "creta::ula::label1", 14, 0, 0, true, true, false, 0, 0 },
1719            { "creta::ula::label2", 16, 0, 0, true, true, false, 0, 0 },
1720            { "creta::ula::sym1", 5, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1721            { "creta::ula::sym2", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1722            { "creta::ula::sym3", 8, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1723            { "creta::ula::sym4", 9, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1724            { "creta::ula::sym5", 11, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1725            { "creta::ula::sym6", 6, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1726            { "creta::ula::sym7", 106, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1727            { "label1", 1, 0, 0, true, true, false, 0, 0 },
1728            { "sym1", 25, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1729            { "sym2", 27, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1730            { "sym3", 28, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1731            { "sym4", 29, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1732            { "sym5", 31, ASMSECT_ABS, 0, true, true, false, 0, 0 }
1733        }, true, "", ""
1734    },
1735    /* 62 - local labels and counter */
1736    {   R"ffDXD(.rawcode
1737            start: .int 3,5,6
1738label1: vx0 = start
1739        vx2 = label1+6
1740        vx3 = label2+8
1741        .int 1,2,3,4
1742label2: .int 3,6,7
1743        vx4 = 2f
1744.scope ala
17452:      .int 11
1746.ends
1747        vx5 = 2b
1748        vx6 = 2f
1749        vx7 = 3f
1750.scope ela
17512:      .int 12
1752.ends
1753.scope cola
17543:
1755.ends
1756        vx8 = 3b
1757        # program counter
1758.scope aaa
1759        .int .-start
1760.ends
1761.scope bbb
1762        . = 60
1763.ends
1764        )ffDXD",
1765        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1766        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1767            { 3, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
1768              3, 0, 0 ,0, 4, 0, 0, 0, 3, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0,
1769              11, 0, 0, 0, 12, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } },
1770        {
1771            { ".", 60, 0, 0, true, false, false, 0, 0 },
1772            { "2b", 44, 0, 0, true, false, false, 0, 0 },
1773            { "2f", 44, 0, 0, false, false, false, 0, 0 },
1774            { "3b", 48, 0, 0, true, false, false, 0, 0 },
1775            { "3f", 48, 0, 0, false, false, false, 0, 0 },
1776            { "label1", 12, 0, 0, true, true, false, 0, 0 },
1777            { "label2", 28, 0, 0, true, true, false, 0, 0 },
1778            { "start", 0, 0, 0, true, true, false, 0, 0 },
1779            { "vx0", 0, 0, 0, true, false, false, 0, 0 },
1780            { "vx2", 18, 0, 0, true, false, false, 0, 0 },
1781            { "vx3", 36, 0, 0, true, false, false, 0, 0 },
1782            { "vx4", 40, 0, 0, true, false, false, 0, 0 },
1783            { "vx5", 40, 0, 0, true, false, false, 0, 0 },
1784            { "vx6", 44, 0, 0, true, false, false, 0, 0 },
1785            { "vx7", 48, 0, 0, true, false, false, 0, 0 },
1786            { "vx8", 48, 0, 0, true, false, false, 0, 0 },
1787        }, true, "", ""
1788    },
1789    /* 63 - get_version (AMD) */
1790    {   R"ffDXD(            .amd
1791            .kernel a
1792            .driver_version 200206
1793            .get_driver_version alaver
1794.scope Vx
1795            .get_driver_version alaver
1796.ends
1797.scope tx
1798            totver = 65
1799            blaver = 112
1800            .get_driver_version totver
1801.ends
1802            .get_driver_version tx::blaver
1803)ffDXD",
1804        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "a" },
1805        {
1806            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
1807            { ".text", 0, AsmSectionType::CODE,
1808                {  } }
1809        },
1810        {
1811            { ".", 0U, 1, 0U, true, false, false, 0, 0 },
1812            { "Vx::alaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1813            { "alaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1814            { "tx::blaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1815            { "tx::totver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1816        },
1817        true, "", ""
1818    },
1819    /* 64 - get_version (AMDCL2) */
1820    {   R"ffDXD(            .amdcl2
1821            .kernel a
1822            .driver_version 200206
1823            .get_driver_version alaver
1824.scope Vx
1825            .get_driver_version alaver
1826.ends
1827.scope tx
1828            totver = 65
1829            blaver = 112
1830            .get_driver_version totver
1831.ends
1832            .get_driver_version tx::blaver
1833)ffDXD",
1834        BinaryFormat::AMDCL2, GPUDeviceType::CAPE_VERDE, false, { "a" },
1835        {
1836            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
1837            { ".text", 0, AsmSectionType::CODE,
1838                {  } }
1839        },
1840        {
1841            { ".", 0U, 1, 0U, true, false, false, 0, 0 },
1842            { "Vx::alaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1843            { "alaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1844            { "tx::blaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1845            { "tx::totver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1846        },
1847        true, "", ""
1848    },
1849    /* 65 - register ranges */
1850    {   R"ffDXD(
1851        .scope ala
1852            sym1 = 123
1853            sym1 = %v[12:15]
1854            .scope bela
1855                sym2 = ::x*21
1856                sym2 = %v[120:125]
1857                sym3 = %sym2[1:3]
1858            .ends
1859            sym4 = %v[120:125]
1860            sym4 = 12
1861        .ends
1862        .scope black
1863            .set sym5, %v[120:125]
1864            .equiv sym6, %v[120:125]
1865        .ends
1866        sym8 = %v[ala::sym4:ala::sym4+4]
1867        sym9 = %::black::sym5[1:2]
1868        x=43)ffDXD",
1869        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1870        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA } },
1871        {
1872            { ".", 0, 0, 0, true, false, false, 0, 0 },
1873            { "ala::bela::sym2", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
1874                true, false, false, 0, 0, true },
1875            { "ala::bela::sym3", (256+121) | ((256+124ULL)<<32), ASMSECT_ABS, 0,
1876                true, false, false, 0, 0, true },
1877            { "ala::sym1", (256+12) | ((256+16ULL)<<32), ASMSECT_ABS, 0,
1878                true, false, false, 0, 0, true },
1879            { "ala::sym4", 12, ASMSECT_ABS, 0, true, false, 0, 0 },
1880            { "black::sym5", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
1881                true, false, false, 0, 0, true },
1882            { "black::sym6", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
1883                true, true, false, 0, 0, true },
1884            { "sym8", (256+12) | ((256+17ULL)<<32), ASMSECT_ABS, 0,
1885                true, false, false, 0, 0, true },
1886            { "sym9", (256+121) | ((256+123ULL)<<32), ASMSECT_ABS, 0,
1887                true, false, false, 0, 0, true },
1888            { "x", 43, ASMSECT_ABS, 0, true, false, 0, 0 }
1889        }, true, "", ""
1890    },
1891    /* 66 - scope errors */
1892    {   R"ffDXD(.rawcode
1893            ala::bx::. = 7
1894            .byte 1
1895            .int tlx::blx::.
1896            .using 
1897        )ffDXD",
1898        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1899        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE, { 1 } } },
1900        {
1901            { ".", 1, 0, 0, true, false, false, 0, 0 }
1902        }, false, "test.s:2:13: Error: Symbol '.' can be only in global scope\n"
1903        "test.s:4:18: Error: Symbol '.' can be only in global scope\n"
1904        "test.s:4:18: Error: Expression have unresolved symbol 'tlx::blx::.'\n"
1905        "test.s:5:21: Error: Expected scope path\n", ""
1906    },
1907    /* 67 - get_* */
1908    {   R"ffDXD(.amdcl2
1909            .gpu Mullins
1910            .get_gpu GPUX
1911            .get_arch ARCHY
1912            .get_64bit _64bitZZ
1913            .get_format FORMATWWW
1914)ffDXD",
1915        BinaryFormat::AMDCL2, GPUDeviceType::MULLINS, false, { },
1916        {
1917            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA, { } }
1918        },
1919        {
1920            { ".", 0U, 0, 0U, true, false, false, 0, 0 },
1921            { "ARCHY", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1922            { "FORMATWWW", 3U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1923            { "GPUX", 12U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1924            { "_64bitZZ", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1925        }, true, "", ""
1926    },
1927    /* 68 - get_* */
1928    {   R"ffDXD(.amdcl2
1929            .gpu Mullins
1930            .64bit
1931            .get_gpu GPUX
1932            .get_arch ARCHY
1933            .get_64bit _64bitZZ
1934            .get_format FORMATWWW
1935)ffDXD",
1936        BinaryFormat::AMDCL2, GPUDeviceType::MULLINS, true, { },
1937        {
1938            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA, { } }
1939        },
1940        {
1941            { ".", 0U, 0, 0U, true, false, false, 0, 0 },
1942            { "ARCHY", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1943            { "FORMATWWW", 3U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1944            { "GPUX", 12U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1945            { "_64bitZZ", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1946        }, true, "", ""
1947    },
1948    /* 69 - get_version */
1949    {   R"ffDXD(.amdcl2
1950            .get_version CLRX_VERSION
1951)ffDXD",
1952        BinaryFormat::AMDCL2, GPUDeviceType::CAPE_VERDE, false, { },
1953        {
1954            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA, { } }
1955        },
1956        {
1957            { ".", 0U, 0, 0U, true, false, false, 0, 0 },
1958            { "CLRX_VERSION", CLRX_MAJOR_VERSION*10000U + CLRX_MINOR_VERSION*100U +
1959                    CLRX_MICRO_VERSION, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1960        }, true, "", ""
1961    },
1962    /* 70 - '.for' repetition */
1963    {
1964        R"ffDXD(
1965            .for  x = 1  ,  x<  16,  x+x
1966                .int x
1967            .endr
1968)ffDXD",
1969        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1970        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1971            {
1972                0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
1973                0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
1974            } } },
1975        {
1976            { ".", 16U, 0, 0U, true, false, false, 0, 0 },
1977            { "x", 16U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
1978        }, true, "", ""
1979    },
1980    /* 71 - '.for' repetition (error if x is onceDefined) */
1981    {
1982        R"ffDXD(
1983            .equiv x, 0
1984            .for  x = 1  ,  x<  16,  x+x
1985                .int x
1986            .endr
1987)ffDXD",
1988        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1989        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1990            {
1991                0x00, 0x00, 0x00, 0x00
1992            } } },
1993        {
1994            { ".", 4U, 0, 0U, true, false, false, 0, 0 },
1995            { "x", 0U, ASMSECT_ABS, 0U, true, true, false, 0, 0 }
1996        }, false, "test.s:3:19: Error: Symbol 'x' is already defined\n"
1997            "test.s:5:13: Error: No '.rept' before '.endr'\n", ""
1998    },
1999    /* 72 - '.for' repetition (error due to undefined symbols) */
2000    {
2001        R"ffDXD(
2002            .for  x = 1  ,  x<  16,  x+x+vv
2003                .int x
2004            .endr
2005)ffDXD",
2006        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2007        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2008            {
2009                0x01, 0x00, 0x00, 0x00
2010            } } },
2011        {
2012            { ".", 4U, 0, 0U, true, false, false, 0, 0 },
2013            { "vv", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
2014            { "x", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2015        }, false, "test.s:2:36: Error: Expression have unresolved symbol 'vv'\n", ""
2016    },
2017    /* 73 - '.for' repetition (error due to undefined symbols) */
2018    {
2019        R"ffDXD(
2020            .for  x = 1  ,  x<  16+vv ,  x+x
2021                .int x
2022            .endr
2023)ffDXD",
2024        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2025        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2026            {
2027                0x01, 0x00, 0x00, 0x00
2028            } } },
2029        {
2030            { ".", 4U, 0, 0U, true, false, false, 0, 0 },
2031            { "vv", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
2032            { "x", 2U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2033        }, false, "test.s:2:27: Error: Expression have unresolved symbol 'vv'\n", ""
2034    },
2035    /* 74 - '.for' repetition - with expr symbol */
2036    {   R"ffDXD(
2037        .eqv c,11+d
2038        d=7
2039        .for x =  1,x<16+c,x+x
2040            .int x
2041        .endr
2042        .int c
2043)ffDXD",
2044        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2045        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2046            {
2047                0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
2048                0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
2049                0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
2050                0x12, 0x00, 0x00, 0x00
2051            } } },
2052        {
2053            { ".", 28U, 0, 0U, true, false, false, 0, 0 },
2054            { "c", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
2055            { "d", 7U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2056            { "x", 64U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2057        }, true, "", ""
2058    },
2059    /* 75 - '.while' repetition */
2060    {
2061        R"ffDXD(
2062            x=1
2063            .while  x  <  16
2064                .int x
2065                x=x+x
2066            .endr
2067)ffDXD",
2068        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2069        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2070            {
2071                0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
2072                0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
2073            } } },
2074        {
2075            { ".", 16U, 0, 0U, true, false, false, 0, 0 },
2076            { "x", 16U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2077        }, true, "", ""
2078    },
2079    { nullptr }
2080};
Note: See TracBrowser for help on using the repository browser.