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

Last change on this file since 4102 was 4102, checked in by matszpk, 12 months ago

CLRadeonExtender: Asm: Add enums (pseudo-ops '.enum').

File size: 91.9 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           
420            y30 = al&0
421            y31 = al&-1
422            y32 = 0&al
423            y33 = -1&al
424            y34 = al|0
425            y35 = al|-1
426            y36 = 0|al
427            y37 = -1|al
428            y38 = al^0
429            y39 = 0^al
430            y40 = al!0
431            y41 = al!-1
432            y42 = al&&0
433            y43 = 0&&al
434            y44 = al||1
435            y45 = 2||al
436            y46 = 0!-al
437            y47 = -1!al
438            z0 = al-ae ? bl : ce)ffDXD",
439        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "a", "b", "c" },
440        {
441            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
442            { ".text", 0, AsmSectionType::CODE,
443                {   0x78, 0x78, 0x31, 0x61, 0x61, 0x61, 0x62, 0x62,
444                    0x63, 0x63, 0x64, 0x64 } },
445            { ".text", 1, AsmSectionType::CODE,
446                { 0x78, 0x31, 0x32, 0x31, 0x32, 0x62, 0x62, 0x63, 0x63 } },
447            { ".text", 2, AsmSectionType::CODE,
448                {   0x31, 0x32, 0x33, 0x34, 0x33, 0x35, 0x35, 0x36,
449                    0x36, 0x37, 0x61, 0x62, 0x62, 0x63, 0x63 } }
450        },
451        {
452            { ".", 15U, 3, 0U, true, false, false, 0, 0 },
453            { "ae", 12U, 1, 0U, true, true, false, 0, 0 },
454            { "al", 3U, 1, 0U, true, true, false, 0, 0 },
455            { "be", 9U, 2, 0U, true, true, false, 0, 0 },
456            { "bl", 5U, 2, 0U, true, true, false, 0, 0 },
457            { "ce", 15U, 3, 0U, true, true, false, 0, 0 },
458            { "cl", 10U, 3, 0U, true, true, false, 0, 0 },
459            { "x0", 9U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
460            { "x1", 8U, 1, 0U, true, false, false, 0, 0 },
461            { "x2", 18446744073709551612U, 1, 0U, true, false, false, 0, 0 },
462            { "x3", 19U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
463            { "x4", 256U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
464            { "x5", 272U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
465            { "y00", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
466            { "y01", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
467            { "y02", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
468            { "y03", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
469            { "y04", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
470            { "y05", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
471            { "y06", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
472            { "y07", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
473            { "y08", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
474            { "y09", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
475            { "y12", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
476            { "y13", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
477            { "y14", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
478            { "y15", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
479            { "y16", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
480            { "y17", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
481            { "y18", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
482            { "y19", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
483            { "y22", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
484            { "y23", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
485            { "y24", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
486            { "y25", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
487            { "y26", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
488            { "y27", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
489            { "y28", 18446744073709551615U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
490            { "y29", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
491            { "y30", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
492            { "y31", 3U, 1, 0U, true, false, false, 0, 0 },
493            { "y32", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
494            { "y33", 3U, 1, 0U, true, false, false, 0, 0 },
495            { "y34", 3U, 1, 0U, true, false, false, 0, 0 },
496            { "y35", 0xffffffffffffffffULL, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
497            { "y36", 3U, 1, 0U, true, false, false, 0, 0 },
498            { "y37", 0xffffffffffffffffULL, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
499            { "y38", 3U, 1, 0U, true, false, false, 0, 0 },
500            { "y39", 3U, 1, 0U, true, false, false, 0, 0 },
501            { "y40", 0xffffffffffffffffULL, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
502            { "y41", 3U, 1, 0U, true, false, false, 0, 0 },
503            { "y42", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
504            { "y43", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
505            { "y44", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
506            { "y45", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
507            { "y46", 2U, 1, 0U, true, false, false, 0, 0 },
508            { "y47", 0xffffffffffffffffULL, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
509            { "z0", 5U, 2, 0U, true, false, false, 0, 0 }
510        }, true, "", ""
511    },
512    /* 13 - error of section arithmetics */
513    {   R"ffDXD(            .amd
514            .kernel a
515            .ascii "xx1"
516al:         .ascii "aaabbccdd"
517ae:
518            .kernel b
519            .ascii "x1212"
520bl:         .ascii "bbcc"
521be:
522            .kernel c
523            .ascii "1234355667"
524cl:         .ascii "abbcc"
525ce:
526            e0 = al-be+be*7
527            e0 = ~al
528            e0 = (-23*al+21*bl-7*cl)  - ((ae*7 - 12*bl)*-3 - 8*be + 7*(-ce-bl))
529            e0 = (ae<<5 + bl<<2) - al*32 - be*7
530            e0 = al>>7
531            e0 = al/7
532            e0 = al%7
533            e0 = al>>>7
534            e0 = al//6
535            e0 = al%%6
536            e0 = al|6
537            e0 = al&6
538            e0 = al^6
539            e0 = al&&6
540            e0 = al||0
541            e0 = al!6
542            e0 = al==7
543            e0 = al!=7
544            e0 = al<7
545            e0 = al>7
546            e0 = al<=7
547            e0 = al>=7
548            e0 = al<@7
549            e0 = al>@7
550            e0 = al<=@7
551            e0 = al>=@7
552            e0 = 2!al
553            e0 = 6|al
554            e0 = 6&al
555            e0 = 6^al
556            e0 = 6&&al
557            e0 = 0||al
558            z0 = al-bl ? bl : ce)ffDXD",
559        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "a", "b", "c" },
560        {
561            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
562            { ".text", 0, AsmSectionType::CODE,
563                {   0x78, 0x78, 0x31, 0x61, 0x61, 0x61, 0x62, 0x62,
564                    0x63, 0x63, 0x64, 0x64 } },
565            { ".text", 1, AsmSectionType::CODE,
566                { 0x78, 0x31, 0x32, 0x31, 0x32, 0x62, 0x62, 0x63, 0x63 } },
567            { ".text", 2, AsmSectionType::CODE,
568                {   0x31, 0x32, 0x33, 0x34, 0x33, 0x35, 0x35, 0x36,
569                    0x36, 0x37, 0x61, 0x62, 0x62, 0x63, 0x63 } }
570        },
571        {
572            { ".", 15U, 3, 0U, true, false, false, 0, 0 },
573            { "ae", 12U, 1, 0U, true, true, false, 0, 0 },
574            { "al", 3U, 1, 0U, true, true, false, 0, 0 },
575            { "be", 9U, 2, 0U, true, true, false, 0, 0 },
576            { "bl", 5U, 2, 0U, true, true, false, 0, 0 },
577            { "ce", 15U, 3, 0U, true, true, false, 0, 0 },
578            { "cl", 10U, 3, 0U, true, true, false, 0, 0 },
579            { "e0", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
580            { "z0", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 }
581        }, false, 
582R"ffDXD(test.s:14:18: Error: Only one relative=1 (section) can be result of expression
583test.s:15:18: Error: Only one relative=1 (section) can be result of expression
584test.s:16:18: Error: Only one relative=1 (section) can be result of expression
585test.s:17:18: Error: Only one relative=1 (section) can be result of expression
586test.s:18:18: Error: Shift right is not allowed for any relative value
587test.s:19:18: Error: Signed division is not allowed for any relative value
588test.s:20:18: Error: Signed Modulo is not allowed for any relative value
589test.s:21:18: Error: Signed shift right is not allowed for any relative value
590test.s:22:18: Error: Division is not allowed for any relative value
591test.s:23:18: Error: Modulo is not allowed for any relative value
592test.s:24:18: Error: Binary OR is not allowed for any relative value except special cases
593test.s:25:18: Error: Binary AND is not allowed for any relative value except special cases
594test.s:26:18: Error: Binary XOR is not allowed for any relative value except special cases
595test.s:27:18: Error: Logical AND is not allowed for any relative value except special cases
596test.s:28:18: Error: Logical OR is not allowed for any relative value except special cases
597test.s:29:18: Error: Binary ORNOT is not allowed for any relative value except special cases
598test.s:30:18: Error: For comparisons two values must have this same relatives!
599test.s:31:18: Error: For comparisons two values must have this same relatives!
600test.s:32:18: Error: For comparisons two values must have this same relatives!
601test.s:33:18: Error: For comparisons two values must have this same relatives!
602test.s:34:18: Error: For comparisons two values must have this same relatives!
603test.s:35:18: Error: For comparisons two values must have this same relatives!
604test.s:36:18: Error: For comparisons two values must have this same relatives!
605test.s:37:18: Error: For comparisons two values must have this same relatives!
606test.s:38:18: Error: For comparisons two values must have this same relatives!
607test.s:39:18: Error: For comparisons two values must have this same relatives!
608test.s:40:18: Error: Binary ORNOT is not allowed for any relative value except special cases
609test.s:41:18: Error: Binary OR is not allowed for any relative value except special cases
610test.s:42:18: Error: Binary AND is not allowed for any relative value except special cases
611test.s:43:18: Error: Binary XOR is not allowed for any relative value except special cases
612test.s:44:18: Error: Logical AND is not allowed for any relative value except special cases
613test.s:45:18: Error: Logical OR is not allowed for any relative value except special cases
614test.s:46:18: Error: Choice is not allowed for first relative value
615)ffDXD", ""
616    },
617    /* 14 - relatives inside '.eqv' expressions */
618    {   R"ffDXD(            .amd
619            .kernel a
620            .ascii "xx1"
621al:         .ascii "aaabbccdd"
622ae:
623            .kernel b
624            .ascii "x1212"
625bl:         .ascii "bbcc"
626be:
627            .kernel c
628            .ascii "1234355667"
629cl:         .ascii "abbcc"
630ce:
631            .eqv v0, cl-ce
632            .eqv v1, be+v0
633            .eqv v2, 5+v0
634            x0 = v1-v2
635            x1 = v1+7)ffDXD",
636        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "a", "b", "c" },
637        {
638            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
639            { ".text", 0, AsmSectionType::CODE,
640                {   0x78, 0x78, 0x31, 0x61, 0x61, 0x61, 0x62, 0x62,
641                    0x63, 0x63, 0x64, 0x64 } },
642            { ".text", 1, AsmSectionType::CODE,
643                { 0x78, 0x31, 0x32, 0x31, 0x32, 0x62, 0x62, 0x63, 0x63 } },
644            { ".text", 2, AsmSectionType::CODE,
645                {   0x31, 0x32, 0x33, 0x34, 0x33, 0x35, 0x35, 0x36,
646                    0x36, 0x37, 0x61, 0x62, 0x62, 0x63, 0x63 } }
647        },
648        {
649            { ".", 15U, 3, 0U, true, false, false, 0, 0 },
650            { "ae", 12U, 1, 0U, true, true, false, 0, 0 },
651            { "al", 3U, 1, 0U, true, true, false, 0, 0 },
652            { "be", 9U, 2, 0U, true, true, false, 0, 0 },
653            { "bl", 5U, 2, 0U, true, true, false, 0, 0 },
654            { "ce", 15U, 3, 0U, true, true, false, 0, 0 },
655            { "cl", 10U, 3, 0U, true, true, false, 0, 0 },
656            { "v0", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
657            { "v1", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
658            { "v2", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
659            { "x0", 4U, 2, 0U, true, false, false, 0, 0 },
660            { "x1", 11U, 2, 0U, true, false, false, 0, 0 }
661        }, true, "", ""
662    },
663    /* 15 - raw code section tests */
664    {   R"ffDXD(            .rawcode
665            .text
666            .byte 1,2,2,3,4
667            .main
668            .byte 0xf,0xf0,0xdd
669            .section .text
670            .byte 12,14)ffDXD",
671        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
672        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
673            { 0x01, 0x02, 0x02, 0x03, 0x04, 0x0f, 0xf0, 0xdd, 0x0c, 0x0e } } },
674        { { ".", 10U, 0, 0U, true, false, false, 0, 0 } },
675        true, "", ""
676    },
677    /* 16 - raw code section tests (errors) */
678    {   R"ffDXD(            .rawcode
679            .data
680            .rodata
681            .section .notes
682            .kernel test1
683            .main)ffDXD",
684        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
685        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE, { } } },
686        { { ".", 0U, 0, 0U, true, false, false, 0, 0 } },
687        false, "test.s:2:13: Error: Only section '.text' can be in raw code\n"
688        "test.s:3:13: Error: Only section '.text' can be in raw code\n"
689        "test.s:4:13: Error: Only section '.text' can be in raw code\n"
690        "test.s:5:13: Error: In rawcode defining kernels is not allowed\n", ""
691    },
692    /* 17 - Gallium format (sections) */
693    {   R"ffDXD(            .gallium
694            .ascii "some text"
695            .main
696            .rodata
697            .ascii "some data"
698            .text
699aa1: bb2:   # kernel labels
700            .byte 220
701            .rodata
702            .byte 211
703            .section .comment
704            .string "this is comment"
705            .kernel aa1
706            .kernel bb2
707            .main
708            .string "next comment"
709            .kernel aa1
710            .kernel bb2
711            .text
712            .ascii "next text"
713            .kernel bb2
714            .globaldata
715            .ascii "endofdata"
716            .section .test1
717            .string "this is test"
718            .section .test1
719            .string "aa")ffDXD",
720        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false, { "aa1", "bb2" },
721        {
722            { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
723                {
724                    0x73, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x65, 0x78,
725                    0x74, 0xdc, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74,
726                    0x65, 0x78, 0x74
727                } },
728            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA,
729                {
730                    0x73, 0x6f, 0x6d, 0x65, 0x20, 0x64, 0x61, 0x74,
731                    0x61, 0xd3, 0x65, 0x6e, 0x64, 0x6f, 0x66, 0x64,
732                    0x61, 0x74, 0x61
733                } },
734            { ".comment", ASMKERN_GLOBAL, AsmSectionType::GALLIUM_COMMENT,
735                {
736                    0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
737                    0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00,
738                    0x6e, 0x65, 0x78, 0x74, 0x20, 0x63, 0x6f, 0x6d,
739                    0x6d, 0x65, 0x6e, 0x74, 0x00
740                } },
741            { nullptr, 0, AsmSectionType::CONFIG, { } },
742            { nullptr, 1, AsmSectionType::CONFIG, { } },
743            { ".test1", ASMKERN_GLOBAL, AsmSectionType::EXTRA_SECTION,
744                { 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
745                  0x74, 0x65, 0x73, 0x74, 0x00, 0x61, 0x61, 0x00 } }
746        },
747        {
748            { ".", 16U, 5, 0U, true, false, false, 0, 0 },
749            { "aa1", 9U, 0, 0U, true, true, false, 0, 0 },
750            { "bb2", 9U, 0, 0U, true, true, false, 0, 0 }
751        },
752        true, "", ""
753    },
754    /* 18 - Gallium format (sections, errors) */
755    {   R"ffDXD(            .gallium
756            .kernel aa22
757            .int 24,5,6
758            .fill 10,4,0xff
759            .p2align 4)ffDXD",
760        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false, { "aa22" },
761        {
762            { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE, { } },
763            { nullptr, 0, AsmSectionType::CONFIG, { } }
764        },
765        { { ".", 0U, 1, 0U, true, false, false, 0, 0 } },
766        false, "test.s:3:13: Error: Writing data into non-writeable section is illegal\n"
767        "test.s:4:13: Error: Writing data into non-writeable section is illegal\n"
768        "test.s:5:13: Error: Change output counter inside non-addressable "
769        "section is illegal\n", ""
770    },
771    /* 19 - AmdFormat (sections) */
772    {   R"ffDXD(            .amd
773            .globaldata
774            .ascii "aaabbb"
775            .section .ulu
776            .ascii "server"
777            .kernel aaa1
778            .section .ulu2
779            .ascii "linux"
780            .main
781            .section .ulu
782            .ascii "xserver"
783            .kernel aaa1
784            .ascii "oops"
785            .dATa
786            .string "dd777dd"
787            .section .ulu
788            .ascii "uline"
789            .main
790            .ascii "..xXx.."
791            .kernel aaa1
792            .ascii "nfx"
793           
794            .kernel bxv
795            .asciz "zeroOne"
796            .roDATA
797            .asciz "zeroTwo"
798            .kernel aaa1
799            .ascii "33"
800            .mAIn
801            .asciz "top1"
802            .globaldata
803            .ascii "nextType"
804            .kernel aaa1
805            .tEXt
806            .main
807            .ascii "yetAnother"
808            .kernel aaa1
809            .asciz "burger"
810            .main
811            .kernel aaa1
812            .asciz "radeon"
813            .kernel bxv
814            .asciz "fury")ffDXD",
815        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "aaa1", "bxv" },
816        {
817            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
818                {   0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x6e, 0x65,
819                    0x78, 0x74, 0x54, 0x79, 0x70, 0x65, 0x79, 0x65,
820                    0x74, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72 } },
821            { ".ulu", ASMKERN_GLOBAL, AsmSectionType::EXTRA_SECTION,
822                {   0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x78, 0x73,
823                    0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x2e, 0x78,
824                    0x58, 0x78, 0x2e, 0x2e, 0x74, 0x6f, 0x70, 0x31, 0x00 } },
825            { ".text", 0, AsmSectionType::CODE,
826                {   0x62, 0x75, 0x72, 0x67, 0x65, 0x72, 0x00, 0x72,
827                    0x61, 0x64, 0x65, 0x6f, 0x6e, 0x00 } },
828            { ".ulu2", 0, AsmSectionType::EXTRA_SECTION,
829                {   0x6c, 0x69, 0x6e, 0x75, 0x78, 0x6f, 0x6f, 0x70, 0x73 } },
830            { ".data", 0, AsmSectionType::DATA,
831                {   0x64, 0x64, 0x37, 0x37, 0x37, 0x64, 0x64, 0x00 } },
832            { ".ulu", 0, AsmSectionType::EXTRA_SECTION,
833                { 0x75, 0x6c, 0x69, 0x6e, 0x65, 0x6e, 0x66, 0x78, 0x33, 0x33 } },
834            { ".text", 1, AsmSectionType::CODE,
835                { 0x7a, 0x65, 0x72, 0x6f, 0x4f, 0x6e, 0x65, 0x00 } },
836            { ".rodata", 1, AsmSectionType::EXTRA_SECTION,
837                {   0x7a, 0x65, 0x72, 0x6f, 0x54, 0x77, 0x6f, 0x00,
838                    0x66, 0x75, 0x72, 0x79, 0x00 } }
839        },
840        { { ".", 13U, 7, 0U, true, false, false, 0, 0 } },
841        true, "", ""
842    },
843    /* 20 - .gpu/.arch tests */
844    {   ".amd\n.gpu Tahiti\n",
845        BinaryFormat::AMD, GPUDeviceType::TAHITI, false,
846        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
847    },
848    /* 21 - .gpu/.arch tests */
849    {   ".amd\n.gpu CapeVerde\n",
850        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
851        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
852    },
853    /* 22 - .gpu/.arch tests */
854    {   ".amd\n.gpu Bonaire\n",
855        BinaryFormat::AMD, GPUDeviceType::BONAIRE, false,
856        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
857    },
858    /* 23 - .gpu/.arch tests */
859    {   ".amd\n.gpu Mullins\n",
860        BinaryFormat::AMD, GPUDeviceType::MULLINS, false,
861        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
862    },
863    /* 24 - .gpu/.arch tests */
864    {   ".amd\n.gpu Hainan\n",
865        BinaryFormat::AMD, GPUDeviceType::HAINAN, false,
866        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
867    },
868    /* 25 - .gpu/.arch tests */
869    {   ".amd\n.gpu Iceland\n",
870        BinaryFormat::AMD, GPUDeviceType::ICELAND, false,
871        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
872    },
873    /* 26 - .gpu/.arch tests */
874    {   ".amd\n.arch GCN1.0\n",
875        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
876        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
877    },
878    /* 27 - .gpu/.arch tests */
879    {   ".amd\n.arch GCN1.1\n",
880        BinaryFormat::AMD, GPUDeviceType::BONAIRE, false,
881        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
882    },
883    /* 28 - .gpu/.arch tests */
884    {   ".amd\n.arch GCN1.2\n",
885        BinaryFormat::AMD, GPUDeviceType::ICELAND, false,
886        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
887    },
888    /* 29 - arch gpu conditionals */
889    {   ".amd\n.gpu Tahiti\n.ifarch GCN1.0\n.print \"GCN1.0\"\n.endif\n",
890        BinaryFormat::AMD, GPUDeviceType::TAHITI, false,
891        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "GCN1.0\n",
892    },
893    /* 30 - arch gpu conditionals */
894    {   ".amd\n.gpu Hawaii\n.ifarch GCN1.0\n.print \"GCN1.0\"\n.endif\n",
895        BinaryFormat::AMD, GPUDeviceType::HAWAII, false,
896        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
897    },
898    /* 31 - arch gpu conditionals */
899    {   ".amd\n.gpu Tonga\n.ifarch GCN1.2\n.print \"GCN1.2\"\n.endif\n",
900        BinaryFormat::AMD, GPUDeviceType::TONGA, false,
901        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "GCN1.2\n",
902    },
903    /* 32 - arch gpu conditionals */
904    {   ".amd\n.gpu Bonaire\n.ifnarch GCN1.2\n.print \"notGCN1.2\"\n.endif\n",
905        BinaryFormat::AMD, GPUDeviceType::BONAIRE, false,
906        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "notGCN1.2\n",
907    },
908    /* 33 - gpu conditionals */
909    {   ".amd\n.gpu Pitcairn\n.ifgpu Pitcairn\n.print \"pitcairn\"\n.endif\n",
910        BinaryFormat::AMD, GPUDeviceType::PITCAIRN, false,
911        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "pitcairn\n",
912    },
913    /* 34 - gpu conditionals */
914    {   ".amd\n.gpu Iceland\n.ifgpu Pitcairn\n.print \"pitcairn\"\n.endif\n",
915        BinaryFormat::AMD, GPUDeviceType::ICELAND, false,
916        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
917    },
918    /* 35 - gpu conditionals */
919    {   ".amd\n.gpu Iceland\n.ifngpu Pitcairn\n.print \"notpitcairn\"\n.endif\n",
920        BinaryFormat::AMD, GPUDeviceType::ICELAND, false,
921        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
922        true, "", "notpitcairn\n",
923    },
924    /* 36 - formats */
925    {   ".amd\n.iffmt catalyst\n.print \"catalystfmt\"\n.endif\n",
926        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
927        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
928        true, "", "catalystfmt\n",
929    },
930    /* 37 - formats */
931    {   ".format amd\n.iffmt catalyst\n.print \"catalystfmt\"\n.endif\n",
932        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
933        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
934        true, "", "catalystfmt\n",
935    },
936    /* 38 - formats */
937    {   ".gallium\n.iffmt catalyst\n.print \"catalystfmt\"\n.endif\n",
938        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false,
939        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
940    },
941    /* 39 - formats */
942    {   ".format gallium\n.iffmt catalyst\n.print \"catalystfmt\"\n.endif\n",
943        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false,
944        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
945    },
946    /* 40 - formats */
947    {   ".amd\n.ifnfmt catalyst\n.print \"notcatalystfmt\"\n.endif\n",
948        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
949        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
950    },
951    /* 41 - formats */
952    {   ".gallium\n.ifnfmt catalyst\n.print \"notcatalystfmt\"\n.endif\n",
953        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false,
954        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
955        true, "", "notcatalystfmt\n",
956    },
957    /* 42 - bitness conditional */
958    {   ".amd\n.32bit\n.if32\n.print \"is32bit\"\n.endif\n",
959        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false,
960        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } },
961        true, "", "is32bit\n",
962    },
963    /* 43 - bitness conditional */
964    {   ".amd\n.64bit\n.if32\n.print \"is32bit\"\n.endif\n",
965        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, true,
966        { }, { }, { { ".", 0, 0, 0, true, false, false, 0, 0 } }, true, "", "",
967    },
968    /* 44 - unresolved expression and resolved expression */
969    {   R"ffDXD(sym3 = sym7*sym4
970        sym3 = 17
971        sym7 = 1
972        sym4 = 3)ffDXD",
973        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { }, { },
974        {
975            { ".", 0, 0, 0, true, false, false, 0, 0 },
976            { "sym3", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
977            { "sym4", 3, ASMSECT_ABS, 0, true, false, false, 0, 0 },
978            { "sym7", 1, ASMSECT_ABS, 0, true, false, false, 0, 0 }
979        }, true, "", ""
980    },
981    /* 45 - register ranges assignment */
982    {   R"ffDXD(sym1 = 123
983        sym1 = %v[12:15]
984        sym2 = x*21
985        sym2 = %v[120:125]
986        sym3 = %sym2[1:3]
987        sym4 = %v[120:125]
988        sym4 = 12
989        .set sym5, %v[120:125]
990        .equiv sym6, %v[120:125]
991        x=43)ffDXD",
992        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
993        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA } },
994        {
995            { ".", 0, 0, 0, true, false, false, 0, 0 },
996            { "sym1", (256+12) | ((256+16ULL)<<32), ASMSECT_ABS, 0,
997                true, false, false, 0, 0, true },
998            { "sym2", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
999                true, false, false, 0, 0, true },
1000            { "sym3", (256+121) | ((256+124ULL)<<32), ASMSECT_ABS, 0,
1001                true, false, false, 0, 0, true },
1002            { "sym4", 12, ASMSECT_ABS, 0, true, false, 0, 0 },
1003            { "sym5", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
1004                true, false, false, 0, 0, true },
1005            { "sym6", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
1006                true, true, false, 0, 0, true },
1007            { "x", 43, ASMSECT_ABS, 0, true, false, 0, 0 }
1008        }, true, "", ""
1009    },
1010    /* 46 */
1011    {   R"ffDXD(. = %s3 # error
1012        .equiv sym6, %v[120:125]
1013        .equiv sym6, %v[120:125] # error
1014        .eqv sym7, %v[120:126]
1015        .eqv sym7, %v[120:127] # error
1016        .size sym6 , 4
1017        .global sym6, sym7
1018        .local sym6, sym7
1019        .weak sym6, sym7
1020        )ffDXD",
1021        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1022        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA } },
1023        {
1024            { ".", 0, 0, 0, true, false, false, 0, 0 },
1025            { "sym6", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
1026                true, true, false, 0, 0, true },
1027            { "sym7", (256+120) | ((256+127ULL)<<32), ASMSECT_ABS, 0,
1028                true, true, false, 0, 0, true },
1029        }, false, R"ffDXD(test.s:1:1: Error: Symbol '.' requires a resolved expression
1030test.s:3:16: Error: Symbol 'sym6' is already defined
1031test.s:5:14: Error: Symbol 'sym7' is already defined
1032test.s:6:15: Error: Symbol must not be register symbol
1033test.s:7:17: Error: Symbol must not be register symbol
1034test.s:7:23: Error: Symbol must not be register symbol
1035test.s:8:16: Error: Symbol must not be register symbol
1036test.s:8:22: Error: Symbol must not be register symbol
1037test.s:9:15: Error: Symbol must not be register symbol
1038test.s:9:21: Error: Symbol must not be register symbol
1039)ffDXD", ""
1040    },
1041    /* 47 - altmacro */
1042    {   R"ffDXD(.altmacro
1043        .macro test a,b,c
1044        .byte a,b,c,a+b
1045        .endm
1046        test 2,4,7
1047        test a,b,c
1048        a=10
1049        b=54
1050        c=26
1051        )ffDXD",
1052        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1053        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1054            { 2, 4, 7, 6, 10, 54, 26, 64} } },
1055        {
1056            { ".", 8U, 0, 0U, true, false, false, 0, 0 },
1057            { "a", 10U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1058            { "b", 54U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1059            { "c", 26U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
1060        },
1061        true, "", ""
1062    },
1063    /* 48 - altmacro */
1064    {   R"ffDXD(.altmacro
1065        .macro test a,b,c
1066        local al,bl,cl,dl
1067al:     .byte a
1068bl:     .byte b
1069cl:     .byte c
1070dl:     .byte a+b
1071        .endm
1072        test 2,4,7
1073        test a,b,c
1074        a=10
1075        b=54
1076        c=26
1077        )ffDXD",
1078        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1079        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1080            { 2, 4, 7, 6, 10, 54, 26, 64} } },
1081        {
1082            { ".", 8U, 0, 0U, true, false, false, 0, 0 },
1083            { ".LL0", 0U, 0, 0U, true, true, false, 0, 0 },
1084            { ".LL1", 1U, 0, 0U, true, true, false, 0, 0 },
1085            { ".LL2", 2U, 0, 0U, true, true, false, 0, 0 },
1086            { ".LL3", 3U, 0, 0U, true, true, false, 0, 0 },
1087            { ".LL4", 4U, 0, 0U, true, true, false, 0, 0 },
1088            { ".LL5", 5U, 0, 0U, true, true, false, 0, 0 },
1089            { ".LL6", 6U, 0, 0U, true, true, false, 0, 0 },
1090            { ".LL7", 7U, 0, 0U, true, true, false, 0, 0 },
1091            { "a", 10U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1092            { "b", 54U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1093            { "c", 26U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
1094        },
1095        true, "", ""
1096    },
1097    /* 49 - altmacro */
1098    {
1099        R"ffDXD(.altmacro
1100.macro test1 v1 v2
1101xx: yyx:    local t1 , t6
1102    .string "v1 v2 vxx t1  \t6 t9 "
1103.endm
1104someval = 221
1105        test1 %-(12+someval*2),  <aaa!!>
1106     )ffDXD",
1107        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1108        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1109            { 
1110                0x2d, 0x34, 0x35, 0x34, 0x20, 0x61, 0x61, 0x61,
1111                0x21, 0x20, 0x76, 0x78, 0x78, 0x20, 0x2e, 0x4c,
1112                0x4c, 0x30, 0x20, 0x20, 0x2e, 0x4c, 0x4c, 0x31,
1113                0x20, 0x74, 0x39, 0x20, 0x00
1114            } } },
1115        {
1116            { ".", 29U, 0, 0U, true, false, false, 0, 0 },
1117            { "someval", 221U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1118            { "xx", 0U, 0, 0U, true, true, false, 0, 0 },
1119            { "yyx", 0U, 0, 0U, true, true, false, 0, 0 }
1120        },
1121        true, "", ""
1122    },
1123    /* 50 - altmacro */
1124    {   R"ffDXD(.altmacro
1125        .macro test a$xx,_b.,$$c
1126        .byte a$xx,_b.,$\
1127$c,a$x\
1128x+_b.
1129        .endm
1130        test 2,4,7
1131        test a,b,c
1132        a=10
1133        b=54
1134        c=26
1135        )ffDXD",
1136        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1137        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1138            { 2, 4, 7, 6, 10, 54, 26, 64} } },
1139        {
1140            { ".", 8U, 0, 0U, true, false, false, 0, 0 },
1141            { "a", 10U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1142            { "b", 54U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1143            { "c", 26U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
1144        },
1145        true, "", ""
1146    },
1147    /* 51 - altmacro */
1148    {
1149        R"ffDXD(.altmacro
1150        .macro test v1
1151a: b: _c:    local a a .\
1152. ..\
1153 d a
1154        .endm
1155        test 44)ffDXD",
1156        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1157        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } } },
1158        {
1159            { ".", 0U, 0, 0U, true, false, false, 0, 0 },
1160            { "_c", 0U, 0, 0U, true, true, false, 0, 0 },
1161            { "a", 0U, 0, 0U, true, true, false, 0, 0 },
1162            { "b", 0U, 0, 0U, true, true, false, 0, 0 }
1163        },
1164        false, R"ffDXD(In macro substituted from test.s:7:9:
1165test.s:3:22: Error: Name 'a' was already used by local or macro argument
1166In macro substituted from test.s:7:9:
1167test.s:4:3: Error: Name '..' was already used by local or macro argument
1168In macro substituted from test.s:7:9:
1169test.s:5:4: Error: Name 'a' was already used by local or macro argument
1170)ffDXD", ""
1171    },
1172    /* 52 - altmacro */
1173    {
1174        R"ffDXD(.altmacro
1175.macro testw vx
1176local sx2
1177        .string "<vx>sx2"
1178.endm
1179
1180.macro testx vx
1181        #.noaltmacro
1182        testw aaarrggg
1183x\():    local ad
1184        .string "\vx (ad)"
1185Local sx
1186        .string "sx\()___"
1187.endm
1188
1189        testx "aaaax!! bbb!!")ffDXD",
1190        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1191        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1192            {
1193                0x3c, 0x61, 0x61, 0x61, 0x72, 0x72, 0x67, 0x67,
1194                0x67, 0x3e, 0x2e, 0x4c, 0x4c, 0x30, 0x00, 0x61,
1195                0x61, 0x61, 0x61, 0x78, 0x21, 0x20, 0x62, 0x62,
1196                0x62, 0x21, 0x20, 0x28, 0x2e, 0x4c, 0x4c, 0x31,
1197                0x29, 0x00, 0x2e, 0x4c, 0x4c, 0x32, 0x5f, 0x5f,
1198                0x5f, 0x00,
1199            } } },
1200        {
1201            { ".", 42U, 0, 0U, true, false, false, 0, 0 },
1202            { "x", 15U, 0, 0U, true, true, false, 0, 0 }
1203        },
1204        true, "", ""
1205    },
1206    /* 53 - altmacro */
1207    {   R"ffDXD(.rept 1
1208        .int 0xaaddd
1209loop:   .rept 10
1210        .int 0x10
1211        .endr
1212        .int 0xaaaa
1213
1214        .endr           
1215            .int 12343)ffDXD",
1216        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1217        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1218            { 
1219                0xdd, 0xad, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00,
1220                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1221                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1222                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1223                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1224                0x10, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
1225                0x37, 0x30, 0x00, 0x00
1226            } } },
1227        {
1228            { ".", 52U, 0, 0U, true, false, false, 0, 0 },
1229            { "loop", 4U, 0, 0U, true, true, false, 0, 0 }
1230        },
1231        true, "", ""
1232    },
1233    /* 54 - altmacro */
1234    {   R"ffDXD(.irpc x, "abc"
1235        .int 0xaaddd
1236\x\()loop\x: .rept 3
1237        .int 0x10
1238        .endr
1239        .int 0xaaaa
1240
1241        .endr           
1242            .int 12343)ffDXD",
1243        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1244        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1245            { 
1246                0xdd, 0xad, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00,
1247                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1248                0xaa, 0xaa, 0x00, 0x00, 0xdd, 0xad, 0x0a, 0x00,
1249                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1250                0x10, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
1251                0xdd, 0xad, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00,
1252                0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
1253                0xaa, 0xaa, 0x00, 0x00, 0x37, 0x30, 0x00, 0x00
1254            } } },
1255        {
1256            { ".", 64U, 0, 0U, true, false, false, 0, 0 },
1257            { "aloopa", 4U, 0, 0U, true, true, false, 0, 0 },
1258            { "bloopb", 24U, 0, 0U, true, true, false, 0, 0 },
1259            { "cloopc", 44U, 0, 0U, true, true, false, 0, 0 }
1260        },
1261        true, "", ""
1262    },
1263    /* 55 - macro name case sensitives */
1264    {   R"ffDXD(.macrocase
1265            .macro one1
1266            .byte 2
1267            .endm
1268            one1
1269            ONE1
1270            .nomacrocase
1271            .macro one2
1272            .byte 4
1273            .endm
1274            .macro ONE2
1275            .byte 5
1276            .endm
1277            one2
1278            ONE2
1279)ffDXD",
1280        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1281        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
1282            {
1283                2, 2, 4, 5
1284            } } },
1285        { { ".", 4U, 0, 0U, true, false, false, 0, 0 } },
1286        true, "", ""
1287    },
1288    /*
1289     * Scopes tests
1290     */
1291    /* 56 - standard symbol assignment */
1292    {   R"ffDXD(sym1 = 7
1293        .scope ala
1294        sym2 = 81
1295        sym3 = ::beata::sym7*sym4
1296        sym4 = ::beata::sym5*::beata::sym6+::beata::sym7 - sym1
1297        .ends
1298        .scope beata
1299        sym5 = 17
1300        sym6 = 43
1301        sym7 = 91
1302        .ends)ffDXD",
1303        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { }, { },
1304        {
1305            { ".", 0, 0, 0, true, false, false, 0, 0 },
1306            { "ala::sym2", 81, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1307            { "ala::sym3", 91*(17*43+91-7), ASMSECT_ABS, 0, true, false, false, 0, 0 },
1308            { "ala::sym4", 17*43+91-7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1309            { "beata::sym5", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1310            { "beata::sym6", 43, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1311            { "beata::sym7", 91, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1312            { "sym1", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1313        }, true, "", ""
1314    },
1315    /* 57 - standard symbol assignment 2 */
1316    {   R"ffDXD(sym1 = 7
1317        .scope beata
1318        sym5 = 17
1319        sym6 = 43
1320        sym7 = 91
1321        .ends
1322        .scope ala
1323        sym2 = 81
1324        sym3 = beata::sym7*sym4
1325        sym4 = beata::sym5*beata::sym6+beata::sym7 - sym1
1326        .ends
1327        )ffDXD",
1328        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { }, { },
1329        {
1330            { ".", 0, 0, 0, true, false, false, 0, 0 },
1331            { "ala::sym2", 81, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1332            { "ala::sym3", 91*(17*43+91-7), ASMSECT_ABS, 0, true, false, false, 0, 0 },
1333            { "ala::sym4", 17*43+91-7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1334            { "beata::sym5", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1335            { "beata::sym6", 43, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1336            { "beata::sym7", 91, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1337            { "sym1", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1338        }, true, "", ""
1339    },
1340    /* 58 - visibility */
1341    {
1342        R"ffDXD(.rawcode
1343            .byte 0
1344            sym1 = 5
1345            .byte sym1
1346            .scope
1347                sym1 = 7
1348                .byte sym1
1349                .scope
1350                    sym1 = 9
1351                    .byte sym1
1352                .ends
1353                .byte sym1
1354            .ends
1355            .byte sym1
1356           
1357            sym1 = 15
1358            .byte sym1
1359            .scope ala
1360                sym1 = 17
1361                .byte sym1
1362                .scope beta
1363                    sym1 = 19
1364                    .byte sym1
1365                .ends
1366                .byte sym1
1367            .ends
1368            .byte sym1
1369            .byte ala::beta::sym1
1370        )ffDXD",
1371        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1372        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1373            { 0, 5, 7, 9, 7, 5, 15, 17, 19, 17, 15, 19 } } },
1374        {
1375            { ".", 12, 0, 0, true, false, false, 0, 0 },
1376            { "ala::beta::sym1", 19, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1377            { "ala::sym1", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1378            { "sym1", 15, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1379        }, true, "", ""
1380    },
1381    /* 59 - visibility 2 */
1382    {   R"ffDXD(.rawcode
1383            .byte 0
1384            sym1 = 1
1385            sym2 = 2
1386            sym3 = 3
1387            sym4 = 4
1388            .scope ala
1389                .scope x1
1390                    sym1 = 9
1391                    sym4 = 10
1392                    sym8 = 25
1393                    sym9 = 30
1394                .ends
1395                .scope x2
1396                    sym2 = 8
1397                    sym3 = 11
1398                    sym8 = 26
1399                    sym9 = 31
1400                .ends
1401                sym1 = 6
1402                sym3 = 7
1403            .ends
1404            .scope beta
1405                sym2 = 12
1406                .scope x1
1407                    sym1 = 14
1408                    sym4 = 15
1409                    sym8 = 27
1410                .ends
1411                .scope x2
1412                    sym2 = 16
1413                    sym3 = 17
1414                .ends
1415                .scope y2
1416                    sym2 = 19
1417                    sym3 = 20
1418                    sym4 = 22
1419                .ends
1420                sym3 = 13
1421            .ends
1422            .byte sym1,sym2,sym3,sym4
1423            .scope ala
1424                .byte sym1,sym2,sym3,sym4
1425                .scope x1
1426                    .byte sym1,sym2,sym3,sym4
1427                .ends
1428                .scope x2
1429                    .byte sym1,sym2,sym3,sym4
1430                .ends
1431            .ends
1432            .scope beta
1433                .byte sym1,sym2,sym3,sym4
1434                .scope x1
1435                    .byte sym1,sym2,sym3,sym4
1436                .ends
1437                .scope x2
1438                    .byte sym1,sym2,sym3,sym4
1439                .ends
1440                .scope y2
1441                    .byte sym1,sym2,sym3,sym4
1442                .ends
1443            .ends
1444            # using
1445            .using ::ala::x1
1446            .byte sym1,sym2,sym3,sym4,sym8
1447            .using ::ala::x2
1448            .byte sym1,sym2,sym3,sym4,sym8
1449            .unusing ::ala::x2
1450            .byte sym1,sym2,sym3,sym4,sym8
1451            .unusing ::ala::x1
1452            .using ::ala::x2
1453            .byte sym1,sym2,sym3,sym4,sym8
1454            .using ::ala::x1
1455            .byte sym1,sym2,sym3,sym4,sym8
1456            .using ::beta::x1
1457            .scope ala
1458                .using x2
1459                .byte sym1,sym2,sym3,sym4,sym8
1460                .using x1
1461                .byte sym1,sym2,sym3,sym4,sym8
1462                .unusing
1463            .ends
1464            .byte sym1,sym2,sym3,sym4,sym8
1465            .byte sym1,sym2,sym3,sym4,sym8,sym9
1466            .unusing
1467            .byte sym1,sym2,sym3,sym4,sym8,sym9
1468           
1469            # recursive finding by usings
1470            .scope ela
1471                .using ala::x1
1472                .using ala::x2
1473            .ends
1474            .scope newscope
1475                .using ela
1476            .ends
1477            .byte newscope::sym8, newscope::sym9
1478            .scope newscope
1479                .byte sym8, sym9
1480            .ends
1481            .byte ::newscope::sym8, ::newscope::sym9
1482            # recursive finding scopes through using
1483            .scope jula
1484                .using ::ala
1485            .ends
1486            .scope xela
1487                .using ::jula
1488            .ends
1489            .unusing
1490            .scope
1491                .using jula::x1
1492                .byte sym8, sym9
1493            .ends
1494            .scope
1495                .using xela::x2
1496                .byte sym8, sym9
1497            .ends
1498            .scope looper
1499                .using ::looper # !!!
1500                .byte somebody
1501            .ends
1502            .scope looper3
1503                .using ::looper2
1504            .ends
1505            .scope looper2
1506                .using ::looper3 # !!!
1507                .byte somebody2
1508            .ends
1509        )ffDXD",
1510        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1511        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1512            { 0, 1, 2, 3, 4,
1513                6, 2, 7, 4,
1514                9, 2, 7, 10,
1515                6, 8, 11, 4,
1516                1, 12, 13, 4,
1517                14, 12, 13, 15,
1518                1, 16, 17, 4,
1519                1, 19, 20, 22,
1520                // using
1521                1, 2, 3, 4, 25,
1522                1, 2, 3, 4, 26,
1523                1, 2, 3, 4, 25,
1524                1, 2, 3, 4, 26,
1525                1, 2, 3, 4, 25,
1526                6, 8, 7, 4, 26,
1527                6, 8, 7, 10, 25,
1528                1, 2, 3, 4, 27,
1529                1, 2, 3, 4, 27, 30,
1530                1, 2, 3, 4, 0, 0,
1531                // recursive using
1532                26, 31, 26, 31, 26, 31,
1533                25, 30, 26, 31, 0, 0
1534            } } },
1535        {
1536            { ".", 97, 0, 0, true, false, false, 0, 0 },
1537            { "ala::sym1", 6, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1538            { "ala::sym3", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1539            { "ala::x1::sym1", 9, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1540            { "ala::x1::sym4", 10, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1541            { "ala::x1::sym8", 25, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1542            { "ala::x1::sym9", 30, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1543            { "ala::x2::sym2", 8, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1544            { "ala::x2::sym3", 11, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1545            { "ala::x2::sym8", 26, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1546            { "ala::x2::sym9", 31, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1547            { "beta::sym2", 12, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1548            { "beta::sym3", 13, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1549            { "beta::x1::sym1", 14, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1550            { "beta::x1::sym4", 15, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1551            { "beta::x1::sym8", 27, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1552            { "beta::x2::sym2", 16, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1553            { "beta::x2::sym3", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1554            { "beta::y2::sym2", 19, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1555            { "beta::y2::sym3", 20, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1556            { "beta::y2::sym4", 22, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1557            { "looper2::somebody2", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1558            { "looper::somebody", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1559            { "sym1", 1, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1560            { "sym2", 2, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1561            { "sym3", 3, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1562            { "sym4", 4, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1563            { "sym8", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1564            { "sym9", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 }
1565        }, true, "", ""
1566    },
1567    /* 60 - scope finding */
1568    {   R"ffDXD(.rawcode
1569        .byte 0
1570        obj = 1
1571        .scope ala
1572            obj = 2
1573            .scope beta
1574                obj = 3
1575                obj4 = 28
1576                .scope ala
1577                    obj = 4
1578                .ends
1579                .scope ceta
1580                    obj = 5
1581                    obj4 = 26
1582                .ends
1583            .ends
1584            .scope ceta
1585                obj = 6
1586                obj2 = 23
1587                .scope beta
1588                    obj = 7
1589                    obj4 = 27
1590                .ends
1591                .scope ceta
1592                    obj = 8
1593                    obj2 = 24
1594                .ends
1595                .scope buru
1596                    obj = 9
1597                .ends
1598            .ends
1599            .scope linux
1600                obj = 10
1601                .scope wifi
1602                    obj = 11
1603                    obj1 = 22
1604                    obj5 = 30
1605                .ends
1606                .scope ala
1607                    obj3 = 25
1608                    obj = 12
1609                .ends
1610            .ends
1611        .ends
1612        .byte obj, ala::obj, ala::beta::obj, ala::beta::ala::obj, ala::beta::ceta::obj
1613        .byte ala::ceta::obj, ala::ceta::beta::obj, ala::ceta::ceta::obj
1614        .byte ala::ceta::buru::obj, ala::linux::obj, ala::linux::wifi::obj
1615        .byte ala::linux::ala::obj
1616        # inside scopes
1617        .scope ala
1618            .scope beta
1619                # linux::beta::obj created because not scope found by first scope name
1620                .byte ala::obj, beta::obj, ceta::obj, ceta::beta::obj, linux::ala::obj
1621                .byte ::ala::obj, ::obj
1622            .ends
1623            .scope ceta
1624                # linux::beta::obj created because not scope found by first scope name
1625                # from current scope
1626                .byte ala::obj, beta::obj, ceta::obj, ceta::beta::obj, ceta::ceta::obj
1627            .ends
1628            .scope new
1629                .byte ala::obj, beta::obj, ceta::obj, ceta::beta::obj, ceta::ceta::obj
1630            .ends
1631            .scope
1632                .byte ala::obj, beta::obj, ceta::obj, ceta::beta::obj, ceta::ceta::obj
1633                .byte ::ala::obj, linux::wifi::obj
1634                .scope ala
1635                    obj = 66
1636                    .byte obj
1637                .ends
1638            .ends
1639            .scope
1640                .scope ala
1641                    .byte obj
1642                .ends
1643            .ends
1644        .ends
1645        # with using
1646        .using ala::linux::wifi
1647        .byte obj1
1648        .scope new
1649            .using ala::ceta
1650            .byte obj2
1651            .using ala::ceta::ceta
1652            .byte obj2
1653            .scope
1654                .using ala::ceta::ceta
1655                .using ala::ceta
1656                .byte obj2
1657            .ends
1658            .scope
1659                .using ala::ceta::beta
1660                .using ala::beta::ceta
1661                .using ala::linux::ala
1662                .byte obj3, obj2, obj4, obj5
1663            .ends
1664        .ends
1665        .scope ala
1666            .using beta
1667            .byte obj4
1668            .scope ceta
1669                .using beta
1670                .byte obj4
1671                .unusing
1672                .byte obj4
1673            .ends
1674        .ends
1675        .unusing
1676        .using ::ala::beta::ceta
1677        .using ::ala::ceta::beta
1678        .using ::ala::beta::ceta
1679        .byte obj4
1680        )ffDXD",
1681        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1682        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1683            { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
1684              4, 3, 5, 0, 12, 2, 1, 2, 7, 8, 0, 0,
1685              2, 3, 6, 7, 8, 2, 3, 6, 7, 8, 2, 11, 66, 2,
1686              // using
1687              22, 23, 24, 23, 25, 24, 26, 30,
1688              28, 27, 28, 26
1689            } } },
1690        {
1691            { ".", 51, 0, 0, true, false, false, 0, 0 },
1692            { "ala::beta::ala::obj", 4, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1693            { "ala::beta::ceta::beta::obj", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1694            { "ala::beta::ceta::obj", 5, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1695            { "ala::beta::ceta::obj4", 26, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1696            { "ala::beta::obj", 3, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1697            { "ala::beta::obj4", 28, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1698            { "ala::ceta::beta::obj", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1699            { "ala::ceta::beta::obj4", 27, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1700            { "ala::ceta::buru::obj", 9, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1701            { "ala::ceta::ceta::beta::obj", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1702            { "ala::ceta::ceta::ceta::obj", 0, ASMSECT_ABS, 0, false, false, false, 0, 0 },
1703            { "ala::ceta::ceta::obj", 8, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1704            { "ala::ceta::ceta::obj2", 24, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1705            { "ala::ceta::obj", 6, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1706            { "ala::ceta::obj2", 23, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1707            { "ala::linux::ala::obj", 12, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1708            { "ala::linux::ala::obj3", 25, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1709            { "ala::linux::obj", 10, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1710            { "ala::linux::wifi::obj", 11, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1711            { "ala::linux::wifi::obj1", 22, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1712            { "ala::linux::wifi::obj5", 30, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1713            { "ala::obj", 2, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1714            { "obj", 1, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1715        }, true, "", ""
1716    },
1717    /* 61 - creating symbols, labels */
1718    {   R"ffDXD(.rawcode
1719        .byte 0
1720        sym1 = 25
1721        .set sym2, 27
1722        .equ sym3, 28
1723        .equiv sym4, 29
1724        .eqv sym5, 31
1725        label1:
1726        .scope creta
1727            .byte sym1, sym2, sym3, sym4, sym5, sym6
1728            sym1 = 15
1729            .set sym2, 17
1730            .equ sym3, 18
1731            .equiv sym4, 19
1732            .eqv sym5, 21
1733            sym6 = 16
1734            label1:
1735            .scope ula
1736                .byte sym1, sym2, sym3, sym4, sym5, sym6, sym7
1737                sym1 = 5
1738                .set sym2, 7
1739                .equ sym3, 8
1740                .equiv sym4, 9
1741                .eqv sym5, 11
1742                sym6 = 6
1743                sym7 = 106
1744                label1:
1745            .ends
1746        .ends
1747        .byte creta::sym2, creta::ula::sym7
1748        creta::ula::label2:
1749        .scope creta
1750            .scope ula
1751                .byte label2-label1
1752            .ends
1753        .ends
1754        )ffDXD",
1755        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1756        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1757            { 0, 25, 27, 28, 29, 31, 16, 15, 17, 18, 19, 21, 16, 106, 17, 106, 2 } } },
1758        {
1759            { ".", 17, 0, 0, true, false, false, 0, 0 },
1760            { "creta::label1", 7, 0, 0, true, true, false, 0, 0 },
1761            { "creta::sym1", 15, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1762            { "creta::sym2", 17, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1763            { "creta::sym3", 18, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1764            { "creta::sym4", 19, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1765            { "creta::sym5", 21, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1766            { "creta::sym6", 16, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1767            { "creta::ula::label1", 14, 0, 0, true, true, false, 0, 0 },
1768            { "creta::ula::label2", 16, 0, 0, true, true, false, 0, 0 },
1769            { "creta::ula::sym1", 5, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1770            { "creta::ula::sym2", 7, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1771            { "creta::ula::sym3", 8, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1772            { "creta::ula::sym4", 9, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1773            { "creta::ula::sym5", 11, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1774            { "creta::ula::sym6", 6, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1775            { "creta::ula::sym7", 106, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1776            { "label1", 1, 0, 0, true, true, false, 0, 0 },
1777            { "sym1", 25, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1778            { "sym2", 27, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1779            { "sym3", 28, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1780            { "sym4", 29, ASMSECT_ABS, 0, true, true, false, 0, 0 },
1781            { "sym5", 31, ASMSECT_ABS, 0, true, true, false, 0, 0 }
1782        }, true, "", ""
1783    },
1784    /* 62 - local labels and counter */
1785    {   R"ffDXD(.rawcode
1786            start: .int 3,5,6
1787label1: vx0 = start
1788        vx2 = label1+6
1789        vx3 = label2+8
1790        .int 1,2,3,4
1791label2: .int 3,6,7
1792        vx4 = 2f
1793.scope ala
17942:      .int 11
1795.ends
1796        vx5 = 2b
1797        vx6 = 2f
1798        vx7 = 3f
1799.scope ela
18002:      .int 12
1801.ends
1802.scope cola
18033:
1804.ends
1805        vx8 = 3b
1806        # program counter
1807.scope aaa
1808        .int .-start
1809.ends
1810.scope bbb
1811        . = 60
1812.ends
1813        )ffDXD",
1814        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1815        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
1816            { 3, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
1817              3, 0, 0 ,0, 4, 0, 0, 0, 3, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0,
1818              11, 0, 0, 0, 12, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } },
1819        {
1820            { ".", 60, 0, 0, true, false, false, 0, 0 },
1821            { "2b", 44, 0, 0, true, false, false, 0, 0 },
1822            { "2f", 44, 0, 0, false, false, false, 0, 0 },
1823            { "3b", 48, 0, 0, true, false, false, 0, 0 },
1824            { "3f", 48, 0, 0, false, false, false, 0, 0 },
1825            { "label1", 12, 0, 0, true, true, false, 0, 0 },
1826            { "label2", 28, 0, 0, true, true, false, 0, 0 },
1827            { "start", 0, 0, 0, true, true, false, 0, 0 },
1828            { "vx0", 0, 0, 0, true, false, false, 0, 0 },
1829            { "vx2", 18, 0, 0, true, false, false, 0, 0 },
1830            { "vx3", 36, 0, 0, true, false, false, 0, 0 },
1831            { "vx4", 40, 0, 0, true, false, false, 0, 0 },
1832            { "vx5", 40, 0, 0, true, false, false, 0, 0 },
1833            { "vx6", 44, 0, 0, true, false, false, 0, 0 },
1834            { "vx7", 48, 0, 0, true, false, false, 0, 0 },
1835            { "vx8", 48, 0, 0, true, false, false, 0, 0 },
1836        }, true, "", ""
1837    },
1838    /* 63 - get_version (AMD) */
1839    {   R"ffDXD(            .amd
1840            .kernel a
1841            .driver_version 200206
1842            .get_driver_version alaver
1843.scope Vx
1844            .get_driver_version alaver
1845.ends
1846.scope tx
1847            totver = 65
1848            blaver = 112
1849            .get_driver_version totver
1850.ends
1851            .get_driver_version tx::blaver
1852)ffDXD",
1853        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { "a" },
1854        {
1855            { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
1856            { ".text", 0, AsmSectionType::CODE,
1857                {  } }
1858        },
1859        {
1860            { ".", 0U, 1, 0U, true, false, false, 0, 0 },
1861            { "Vx::alaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1862            { "alaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1863            { "tx::blaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1864            { "tx::totver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1865        },
1866        true, "", ""
1867    },
1868    /* 64 - get_version (AMDCL2) */
1869    {   R"ffDXD(            .amdcl2
1870            .kernel a
1871            .driver_version 200206
1872            .get_driver_version alaver
1873.scope Vx
1874            .get_driver_version alaver
1875.ends
1876.scope tx
1877            totver = 65
1878            blaver = 112
1879            .get_driver_version totver
1880.ends
1881            .get_driver_version tx::blaver
1882)ffDXD",
1883        BinaryFormat::AMDCL2, GPUDeviceType::CAPE_VERDE, false, { "a" },
1884        {
1885            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA, { } },
1886            { ".text", 0, AsmSectionType::CODE,
1887                {  } }
1888        },
1889        {
1890            { ".", 0U, 1, 0U, true, false, false, 0, 0 },
1891            { "Vx::alaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1892            { "alaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1893            { "tx::blaver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 },
1894            { "tx::totver", 200206U, ASMSECT_ABS, 0, true, false, false, 0, 0 }
1895        },
1896        true, "", ""
1897    },
1898    /* 65 - register ranges */
1899    {   R"ffDXD(
1900        .scope ala
1901            sym1 = 123
1902            sym1 = %v[12:15]
1903            .scope bela
1904                sym2 = ::x*21
1905                sym2 = %v[120:125]
1906                sym3 = %sym2[1:3]
1907            .ends
1908            sym4 = %v[120:125]
1909            sym4 = 12
1910        .ends
1911        .scope black
1912            .set sym5, %v[120:125]
1913            .equiv sym6, %v[120:125]
1914        .ends
1915        sym8 = %v[ala::sym4:ala::sym4+4]
1916        sym9 = %::black::sym5[1:2]
1917        x=43)ffDXD",
1918        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
1919        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA } },
1920        {
1921            { ".", 0, 0, 0, true, false, false, 0, 0 },
1922            { "ala::bela::sym2", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
1923                true, false, false, 0, 0, true },
1924            { "ala::bela::sym3", (256+121) | ((256+124ULL)<<32), ASMSECT_ABS, 0,
1925                true, false, false, 0, 0, true },
1926            { "ala::sym1", (256+12) | ((256+16ULL)<<32), ASMSECT_ABS, 0,
1927                true, false, false, 0, 0, true },
1928            { "ala::sym4", 12, ASMSECT_ABS, 0, true, false, 0, 0 },
1929            { "black::sym5", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
1930                true, false, false, 0, 0, true },
1931            { "black::sym6", (256+120) | ((256+126ULL)<<32), ASMSECT_ABS, 0,
1932                true, true, false, 0, 0, true },
1933            { "sym8", (256+12) | ((256+17ULL)<<32), ASMSECT_ABS, 0,
1934                true, false, false, 0, 0, true },
1935            { "sym9", (256+121) | ((256+123ULL)<<32), ASMSECT_ABS, 0,
1936                true, false, false, 0, 0, true },
1937            { "x", 43, ASMSECT_ABS, 0, true, false, 0, 0 }
1938        }, true, "", ""
1939    },
1940    /* 66 - scope errors */
1941    {   R"ffDXD(.rawcode
1942            ala::bx::. = 7
1943            .byte 1
1944            .int tlx::blx::.
1945            .using 
1946        )ffDXD",
1947        BinaryFormat::RAWCODE, GPUDeviceType::CAPE_VERDE, false, { },
1948        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE, { 1 } } },
1949        {
1950            { ".", 1, 0, 0, true, false, false, 0, 0 }
1951        }, false, "test.s:2:13: Error: Symbol '.' can be only in global scope\n"
1952        "test.s:4:18: Error: Symbol '.' can be only in global scope\n"
1953        "test.s:4:18: Error: Expression have unresolved symbol 'tlx::blx::.'\n"
1954        "test.s:5:21: Error: Expected scope path\n", ""
1955    },
1956    /* 67 - get_* */
1957    {   R"ffDXD(.amdcl2
1958            .gpu Mullins
1959            .get_gpu GPUX
1960            .get_arch ARCHY
1961            .get_64bit _64bitZZ
1962            .get_format FORMATWWW
1963)ffDXD",
1964        BinaryFormat::AMDCL2, GPUDeviceType::MULLINS, false, { },
1965        {
1966            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA, { } }
1967        },
1968        {
1969            { ".", 0U, 0, 0U, true, false, false, 0, 0 },
1970            { "ARCHY", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1971            { "FORMATWWW", 3U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1972            { "GPUX", 12U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1973            { "_64bitZZ", 0U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1974        }, true, "", ""
1975    },
1976    /* 68 - get_* */
1977    {   R"ffDXD(.amdcl2
1978            .gpu Mullins
1979            .64bit
1980            .get_gpu GPUX
1981            .get_arch ARCHY
1982            .get_64bit _64bitZZ
1983            .get_format FORMATWWW
1984)ffDXD",
1985        BinaryFormat::AMDCL2, GPUDeviceType::MULLINS, true, { },
1986        {
1987            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA, { } }
1988        },
1989        {
1990            { ".", 0U, 0, 0U, true, false, false, 0, 0 },
1991            { "ARCHY", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1992            { "FORMATWWW", 3U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1993            { "GPUX", 12U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1994            { "_64bitZZ", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
1995        }, true, "", ""
1996    },
1997    /* 69 - get_version */
1998    {   R"ffDXD(.amdcl2
1999            .get_version CLRX_VERSION
2000)ffDXD",
2001        BinaryFormat::AMDCL2, GPUDeviceType::CAPE_VERDE, false, { },
2002        {
2003            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA, { } }
2004        },
2005        {
2006            { ".", 0U, 0, 0U, true, false, false, 0, 0 },
2007            { "CLRX_VERSION", CLRX_MAJOR_VERSION*10000U + CLRX_MINOR_VERSION*100U +
2008                    CLRX_MICRO_VERSION, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2009        }, true, "", ""
2010    },
2011    /* 70 - '.for' repetition */
2012    {
2013        R"ffDXD(
2014            .for  x = 1  ,  x<  16,  x+x
2015                .int x
2016            .endr
2017)ffDXD",
2018        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2019        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2020            {
2021                0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
2022                0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
2023            } } },
2024        {
2025            { ".", 16U, 0, 0U, true, false, false, 0, 0 },
2026            { "x", 16U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2027        }, true, "", ""
2028    },
2029    /* 71 - '.for' repetition (error if x is onceDefined) */
2030    {
2031        R"ffDXD(
2032            .equiv x, 0
2033            .for  x = 1  ,  x<  16,  x+x
2034                .int x
2035            .endr
2036)ffDXD",
2037        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2038        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2039            {
2040                0x00, 0x00, 0x00, 0x00
2041            } } },
2042        {
2043            { ".", 4U, 0, 0U, true, false, false, 0, 0 },
2044            { "x", 0U, ASMSECT_ABS, 0U, true, true, false, 0, 0 }
2045        }, false, "test.s:3:19: Error: Symbol 'x' is already defined\n"
2046            "test.s:5:13: Error: No '.rept' before '.endr'\n", ""
2047    },
2048    /* 72 - '.for' repetition (error due to undefined symbols) */
2049    {
2050        R"ffDXD(
2051            .for  x = 1  ,  x<  16,  x+x+vv
2052                .int x
2053            .endr
2054)ffDXD",
2055        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2056        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2057            {
2058                0x01, 0x00, 0x00, 0x00
2059            } } },
2060        {
2061            { ".", 4U, 0, 0U, true, false, false, 0, 0 },
2062            { "vv", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
2063            { "x", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2064        }, false, "test.s:2:36: Error: Expression have unresolved symbol 'vv'\n", ""
2065    },
2066    /* 73 - '.for' repetition (error due to undefined symbols) */
2067    {
2068        R"ffDXD(
2069            .for  x = 1  ,  x<  16+vv ,  x+x
2070                .int x
2071            .endr
2072)ffDXD",
2073        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2074        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2075            {
2076                0x01, 0x00, 0x00, 0x00
2077            } } },
2078        {
2079            { ".", 4U, 0, 0U, true, false, false, 0, 0 },
2080            { "vv", 0U, ASMSECT_ABS, 0U, false, false, false, 0, 0 },
2081            { "x", 2U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2082        }, false, "test.s:2:27: Error: Expression have unresolved symbol 'vv'\n", ""
2083    },
2084    /* 74 - '.for' repetition - with expr symbol */
2085    {   R"ffDXD(
2086        .eqv c,11+d
2087        d=7
2088        .for x =  1,x<16+c,x+x
2089            .int x
2090        .endr
2091        .int c
2092)ffDXD",
2093        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2094        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2095            {
2096                0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
2097                0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
2098                0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
2099                0x12, 0x00, 0x00, 0x00
2100            } } },
2101        {
2102            { ".", 28U, 0, 0U, true, false, false, 0, 0 },
2103            { "c", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
2104            { "d", 7U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2105            { "x", 64U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2106        }, true, "", ""
2107    },
2108    /* 75 - '.while' repetition */
2109    {
2110        R"ffDXD(
2111            x=1
2112            .while  x  <  16
2113                .int x
2114                x=x+x
2115            .endr
2116)ffDXD",
2117        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2118        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2119            {
2120                0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
2121                0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
2122            } } },
2123        {
2124            { ".", 16U, 0, 0U, true, false, false, 0, 0 },
2125            { "x", 16U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2126        }, true, "", ""
2127    },
2128    /* 76 - '.for' repetition (error due to division by zero) */
2129    {
2130        R"ffDXD(
2131            .for  x = 1  ,  x<  16,  x+x+(x/0)
2132                .int x
2133            .endr
2134)ffDXD",
2135        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2136        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2137            {
2138                0x01, 0x00, 0x00, 0x00
2139            } } },
2140        {
2141            { ".", 4U, 0, 0U, true, false, false, 0, 0 },
2142            { "x", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2143        }, false, "test.s:2:44: Error: Division by zero\n", ""
2144    },
2145    /* 77 - '.for' repetition (error due to division by zero) */
2146    {
2147        R"ffDXD(
2148            .for  x = 1  ,  x<  16+(x/0),  x+x
2149                .int x
2150            .endr
2151)ffDXD",
2152        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2153        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2154            {
2155                0x01, 0x00, 0x00, 0x00
2156            } } },
2157        {
2158            { ".", 4U, 0, 0U, true, false, false, 0, 0 },
2159            { "x", 2U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2160        }, false, "test.s:2:38: Error: Division by zero\n", ""
2161    },
2162    /* 78 - '.for' - error: conditional is not absolute */
2163    {
2164        R"ffDXD(.gallium
2165            .for  x = 1  ,  x + 16+.,  x+x
2166                .int x
2167            .endr
2168)ffDXD",
2169        BinaryFormat::GALLIUM, GPUDeviceType::CAPE_VERDE, false, { },
2170        { { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
2171            {
2172                0x01, 0x00, 0x00, 0x00
2173            } } },
2174        {
2175            { ".", 4U, 0, 0U, true, false, false, 0, 0 },
2176            { "x", 2U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2177        }, false,
2178        "test.s:2:27: Error: Value of conditional expression is not absolute\n", ""
2179    },
2180    {   /* 79 - '.for' and nested '.while' */
2181        R"ffDXD(
2182    .for x =  1,x<16,x+x
2183        y = 1
2184        .while y<7
2185            .byte x,y
2186            y=y+1
2187        .endr
2188    .endr
2189)ffDXD",
2190        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { },
2191        { { nullptr, ASMKERN_GLOBAL, AsmSectionType::DATA,
2192            {
2193                0x01, 0x01, 0x01, 0x02, 0x01, 0x03, 0x01, 0x04,
2194                0x01, 0x05, 0x01, 0x06, 0x02, 0x01, 0x02, 0x02,
2195                0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06,
2196                0x04, 0x01, 0x04, 0x02, 0x04, 0x03, 0x04, 0x04,
2197                0x04, 0x05, 0x04, 0x06, 0x08, 0x01, 0x08, 0x02,
2198                0x08, 0x03, 0x08, 0x04, 0x08, 0x05, 0x08, 0x06
2199            } } },
2200        {
2201            { ".", 48U, 0, 0U, true, false, false, 0, 0 },
2202            { "x", 16U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2203            { "y", 7U, ASMSECT_ABS, 0U, true, false, false, 0, 0 }
2204        }, true, "", ""
2205    },
2206    // ROCm section diffs
2207    {   // 80 - ROCm section differences
2208        R"ffDXD(.rocm
2209.gpu Iceland
2210.arch_minor 0
2211.arch_stepping 0
2212.eflags 2
2213.newbinfmt
2214.target "amdgcn-amd-amdhsa-amdgizcl-gfx800"
2215.md_version 1, 0
2216.globaldata
2217gdata1:
2218.global gdata1
2219.int 1,2,3,4,6
2220gdata2:
2221.int somesym
2222.int vectorAdd-gdata2+2
2223.byte (vectorAdd+0x100)*4==gdata2+gdata2+gdata2+(0x650+0x100)*4+gdata2
2224someval1=somesym+10000
2225someval2=someval1*2
2226.eqv someval3, somesym1*4+c
2227c=1
2228someval4=someval3+1000000
2229.kernel vectorAdd
2230    .config
2231        .dims x
2232        .use_private_segment_buffer
2233        .use_dispatch_ptr
2234        .use_kernarg_segment_ptr
2235        .private_elem_size 4
2236        .use_ptr64
2237        .md_language "OpenCL", 1, 2
2238        .arg n, "uint", 4, 4, value, u32
2239        .arg a, "float*", 8, 8, globalbuf, f32, global, default const
2240        .arg b, "float*", 8, 8, globalbuf, f32, global, default const
2241        .arg c, "float*", 8, 8, globalbuf, f32, global, default
2242        .arg , "", 8, 8, gox, i64
2243        .arg , "", 8, 8, goy, i64
2244        .arg , "", 8, 8, goz, i64
2245.text
2246vectorAdd:
2247.skip 256
2248        s_mov_b32   s1, .-gdata2
2249somesym=vectorAdd-gdata1
2250somesym1=vectorAdd-gdata1
2251        s_branch vectorAdd + (vectorAdd-gdata2)
2252        s_branch vectorAdd + ((vectorAdd-gdata2)&0xffffe0)
2253        .int (vectorAdd+0x100)*4==gdata2+gdata2+gdata2+(0x650+0x100)*4+gdata2
2254        s_endpgm
2255c=somesym1
2256someval5=someval3+3000000
2257c=2
2258someval6=someval3+2000000
2259
2260somesym1=1
2261aa1=aa2
2262aa0=aa1
2263aa1=3
2264
2265aa2=6
2266)ffDXD",
2267        BinaryFormat::ROCM, GPUDeviceType::ICELAND, false,
2268        { "vectorAdd" },
2269        {   // sections
2270            { ".text", ASMKERN_GLOBAL, AsmSectionType::CODE,
2271                {
2272                    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
2273                    0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
2274                    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2275                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2276                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2277                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2278                    0x40, 0x00, 0x0c, 0x00, 0x90, 0x00, 0x00, 0x00,
2279                    0x0b, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
2280                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2281                    0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2282                    0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x01, 0x00,
2283                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2284                    0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x06,
2285                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2286                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2287                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2288                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2289                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2290                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2291                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2292                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2293                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2294                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2295                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2296                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2297                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2298                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2299                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2300                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2301                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2302                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2303                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2304                    0xff, 0x00, 0x81, 0xbe, 0x50, 0x07, 0x00, 0x00,
2305                    0x51, 0x01, 0x82, 0xbf, 0x4c, 0x01, 0x82, 0xbf,
2306                    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x81, 0xbf
2307                } },
2308            { ".rodata", ASMKERN_GLOBAL, AsmSectionType::DATA,
2309                {
2310                    0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
2311                    0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
2312                    0x06, 0x00, 0x00, 0x00, 0x64, 0x06, 0x00, 0x00,
2313                    0x52, 0x06, 0x00, 0x00, 0xff
2314                } },
2315            { nullptr, 0, AsmSectionType::CONFIG, { } },
2316        },
2317        {
2318            { ".", 280U, 0, 0U, true, false, false, 0, 0 },
2319            { "aa0", 6U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2320            { "aa1", 3U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2321            { "aa2", 6U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2322            { "c", 2U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2323            { "gdata1", 0U, 1, 0U, true, true, false, 16, 0 },
2324            { "gdata2", 20U, 1, 0U, true, true, false, 0, 0 },
2325            { "somesym", 1636U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2326            { "somesym1", 1U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2327            { "someval1", 11636U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2328            { "someval2", 23272U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2329            { "someval3", 0U, ASMSECT_ABS, 0U, false, true, true, 0, 0 },
2330            { "someval4", 1006545U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2331            { "someval5", 3008180U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2332            { "someval6", 2006546U, ASMSECT_ABS, 0U, true, false, false, 0, 0 },
2333            { "vectorAdd", 0U, 0, 0U, true, true, false, 0, 0 }
2334        }, true, "", ""
2335    },
2336    {   // 81 - use enums
2337        R"ffDXD(.enum sym1,sym2,sym6,xxx
2338        .enum >1?100:0 ,  ala,joan,beta
2339       
2340        .scope Error
2341            .enum OK
2342            .enum BADFD
2343            .enum BADIP
2344        .ends
2345        .scope Result
2346            .enum NONE
2347            .enum INCOMPLETE
2348            .enum FULL
2349        .ends
2350)ffDXD",
2351        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { }, { },
2352        {
2353            { ".", 0, 0, 0, true, false, false, 0, 0 },
2354            { "Error::BADFD", 1, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2355            { "Error::BADIP", 2, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2356            { "Error::OK", 0, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2357            { "Result::FULL", 2, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2358            { "Result::INCOMPLETE", 1, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2359            { "Result::NONE", 0, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2360            { "ala", 100, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2361            { "beta", 102, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2362            { "joan", 101, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2363            { "sym1", 0, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2364            { "sym2", 1, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2365            { "sym6", 2, ASMSECT_ABS, 0, true, true, false, 0, 0 },
2366            { "xxx", 3, ASMSECT_ABS, 0, true, true, false, 0, 0 }
2367        }, true, "", ""
2368    },
2369    {   // 82 - use enums - errors
2370        R"ffDXD(mydef = 1
2371        .enum mydef,mydef2
2372        .enum >xxx, doOne, doSecond
2373)ffDXD",
2374        BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, false, { }, { },
2375        {
2376            { ".", 0, 0, 0, true, false, false, 0, 0 },
2377            { "mydef", 1, ASMSECT_ABS, 0, true, false, false, 0, 0 },
2378            { "mydef2", 0, ASMSECT_ABS, 0, true, true, false, 0, 0 }
2379        }, false,
2380        "test.s:2:15: Error: Symbol 'mydef' is already defined\n"
2381        "test.s:3:16: Error: Expression have unresolved symbol 'xxx'\n",
2382        ""
2383    },
2384    { nullptr }
2385};
Note: See TracBrowser for help on using the repository browser.