source: CLRX/CLRadeonExtender/trunk/amdasm/AsmInternals.h @ 2593

Last change on this file since 2593 was 2593, checked in by matszpk, 4 years ago

CLRadeonExtender: Asm: Move parsring of dimensions to AsmParseUtils?.

File size: 24.2 KB
Line 
1/*
2 *  CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3 *  Copyright (C) 2014-2016 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#ifndef __CLRX_ASMINTERNALS_H__
21#define __CLRX_ASMINTERNALS_H__
22
23#include <CLRX/Config.h>
24#include <cstdint>
25#include <string>
26#include <utility>
27#include <CLRX/utils/Utilities.h>
28#include <CLRX/amdasm/Assembler.h>
29#include "GCNInternals.h"
30
31namespace CLRX
32{
33
34static inline void skipCharAndSpacesToEnd(const char*& string, const char* end)
35{
36    ++string;
37    while (string!=end && *string == ' ') string++;
38}
39
40static inline void skipSpacesToEnd(const char*& string, const char* end)
41{ while (string!=end && *string == ' ') string++; }
42
43// extract sybol name or argument name or other identifier
44static inline CString extractSymName(const char*& string, const char* end,
45           bool localLabelSymName)
46{
47    const char* startString = string;
48    if (string != end)
49    {
50        if(isAlpha(*string) || *string == '_' || *string == '.' || *string == '$')
51            for (string++; string != end && (isAlnum(*string) || *string == '_' ||
52                 *string == '.' || *string == '$') ; string++);
53        else if (localLabelSymName && isDigit(*string)) // local label
54        {
55            for (string++; string!=end && isDigit(*string); string++);
56            // check whether is local forward or backward label
57            string = (string != end && (*string == 'f' || *string == 'b')) ?
58                    string+1 : startString;
59            // if not part of binary number or illegal bin number
60            if (startString != string && (string!=end && (isAlnum(*string))))
61                string = startString;
62        }
63    }
64    return CString(startString, string);
65}
66
67static inline CString extractLabelName(const char*& string, const char* end)
68{
69    if (string != end && isDigit(*string))
70    {
71        const char* startString = string;
72        while (string != end && isDigit(*string)) string++;
73        return CString(startString, string);
74    }
75    return extractSymName(string, end, false);
76}
77
78void skipSpacesAndLabels(const char*& linePtr, const char* end);
79
80class Assembler;
81
82enum class IfIntComp
83{
84    EQUAL = 0,
85    NOT_EQUAL,
86    LESS,
87    LESS_EQUAL,
88    GREATER,
89    GREATER_EQUAL
90};
91
92struct CLRX_INTERNAL AsmParseUtils
93{
94    static bool checkGarbagesAtEnd(Assembler& asmr, const char* linePtr);
95    /* parsing helpers */
96    /* get absolute value arg resolved at this time.
97       if empty expression value is not set */
98    static bool getAbsoluteValueArg(Assembler& asmr, uint64_t& value, const char*& linePtr,
99                    bool requiredExpr = false);
100   
101    static bool getAnyValueArg(Assembler& asmr, uint64_t& value, cxuint& sectionId,
102                    const char*& linePtr);
103   
104    static bool getJumpValueArg(Assembler& asmr, uint64_t& value,
105            std::unique_ptr<AsmExpression>& outTargetExpr, const char*& linePtr);
106    // get name (not symbol name)
107    static bool getNameArg(Assembler& asmr, CString& outStr, const char*& linePtr,
108               const char* objName, bool requiredArg = true,
109               bool skipCommaAtError = false);
110   
111    // get name (not symbol name)
112    static bool getNameArg(Assembler& asmr, size_t maxOutStrSize, char* outStr,
113               const char*& linePtr, const char* objName, bool requiredArg = true,
114               bool ignoreLongerName = false, bool skipCommaAtError = false);
115   
116    // get name (not symbol name), skipping spaces at error by default
117    static bool getNameArgS(Assembler& asmr, CString& outStr, const char*& linePtr,
118               const char* objName, bool requiredArg = true)
119    { return getNameArg(asmr, outStr, linePtr, objName, requiredArg, true); }
120   
121    // get name (not symbol name), skipping spaces at error by default
122    static bool getNameArgS(Assembler& asmr, size_t maxOutStrSize, char* outStr,
123               const char*& linePtr, const char* objName, bool requiredArg = true,
124               bool ignoreLongerName = false)
125    {
126        return getNameArg(asmr, maxOutStrSize, outStr, linePtr, objName,
127                    requiredArg, ignoreLongerName, true);
128    }
129   
130    /* IMPORTANT NOTE: table must be sorted by name!!!
131     * the longest name in table must shorter than 72 */
132    static bool getEnumeration(Assembler& asmr, const char*& linePtr, const char* objName,
133          size_t tableSize, const std::pair<const char*, cxuint>* table, cxuint& value,
134          const char* prefix = nullptr);
135   
136    // skip comma
137    static bool skipComma(Assembler& asmr, bool& haveComma, const char*& linePtr);
138    // skip required comma, (returns false if not found comma)
139    static bool skipRequiredComma(Assembler& asmr, const char*& linePtr);
140   
141    // skip comma for multiple argument pseudo-ops
142    static bool skipCommaForMultipleArgs(Assembler& asmr, const char*& linePtr);
143   
144    static bool parseDimensions(Assembler& asmr, const char*& linePtr, cxuint& dimMask);
145};
146
147struct CLRX_INTERNAL AsmPseudoOps: AsmParseUtils
148{
149    /*
150     * pseudo-ops logic
151     */
152    // set bitnesss
153    static void setBitness(Assembler& asmr, const char* linePtr, bool _64Bit);
154   
155    static bool parseFormat(Assembler& asmr, const char* linePtr, BinaryFormat& format);
156    // set output format
157    static void setOutFormat(Assembler& asmr, const char* linePtr);
158    // set GPU architecture type
159    static void setGPUDevice(Assembler& asmr, const char* linePtr);
160    // set GPU architecture
161    static void setGPUArchitecture(Assembler& asmr, const char* linePtr);
162   
163    // change kernel
164    static void goToKernel(Assembler& asmr, const char* pseudoOpPlace,
165                   const char* linePtr);
166    // change section
167    static void goToSection(Assembler& asmr, const char* pseudoOpPlace,
168                   const char* linePtr, bool isPseudoOp = false);
169   
170    static void goToMain(Assembler& asmr, const char* pseudoOpPlace,
171                   const char* linePtr);
172   
173    /// include file
174    static void includeFile(Assembler& asmr, const char* pseudoOpPlace,
175                            const char* linePtr);
176    // include binary file
177    static void includeBinFile(Assembler& asmr, const char* pseudoOpPlace,
178                       const char* linePtr);
179   
180    // fail
181    static void doFail(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
182    // .error
183    static void doError(Assembler& asmr, const char* pseudoOpPlace,
184                           const char* linePtr);
185    // .warning
186    static void doWarning(Assembler& asmr, const char* pseudoOpPlace,
187                     const char* linePtr);
188   
189    // .byte, .short, .int, .word, .long, .quad
190    template<typename T>
191    static void putIntegers(Assembler& asmr, const char* pseudoOpPlace,
192                    const char* linePtr);
193   
194    // .half, .float, .double
195    template<typename UIntType>
196    static void putFloats(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
197   
198    /// .string, ascii
199    static void putStrings(Assembler& asmr, const char* pseudoOpPlace,
200                   const char* linePtr, bool addZero = false);
201    // .string16, .string32, .string64
202    template<typename T>
203    static void putStringsToInts(Assembler& asmr, const char* pseudoOpPlace,
204                   const char* linePtr);
205   
206    /// .octa
207    static void putUInt128s(Assembler& asmr, const char* pseudoOpPlace,
208                        const char* linePtr);
209   
210    /// .set, .equ, .eqv, .equiv
211    static void setSymbol(Assembler& asmr, const char* linePtr, bool reassign = true,
212                bool baseExpr = false);
213   
214    // .global, .local, .extern
215    static void setSymbolBind(Assembler& asmr, const char* linePtr, cxbyte elfInfo);
216   
217    static void setSymbolSize(Assembler& asmr, const char* linePtr);
218   
219    static void ignoreExtern(Assembler& asmr, const char* linePtr);
220   
221    static void doFill(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
222               bool _64bit = false);
223    static void doSkip(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
224   
225    static void doAlign(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
226                    bool powerOf2 = false);
227   
228    template<typename Word>
229    static void doAlignWord(Assembler& asmr, const char* pseudoOpPlace,
230                            const char* linePtr);
231   
232    static void doOrganize(Assembler& asmr, const char* linePtr);
233   
234    static void doPrint(Assembler& asmr, const char* linePtr);
235   
236    static void doIfInt(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
237                IfIntComp compType, bool elseIfClause);
238   
239    static void doIfDef(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
240                bool negation, bool elseIfClause);
241   
242    static void doIfBlank(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
243                bool negation, bool elseIfClause);
244   
245    static void doIf64Bit(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
246                bool negation, bool elseIfClause);
247    static void doIfArch(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
248                bool negation, bool elseIfClause);
249    static void doIfGpu(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
250                bool negation, bool elseIfClause);
251    static void doIfFmt(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
252                bool negation, bool elseIfClause);
253    /// .ifc
254    static void doIfCmpStr(Assembler& asmr, const char* pseudoOpPlace,
255               const char* linePtr, bool negation, bool elseIfClause);
256    /// ifeqs, ifnes
257    static void doIfStrEqual(Assembler& asmr, const char* pseudoOpPlace,
258                     const char* linePtr, bool negation, bool elseIfClause);
259    // else
260    static void doElse(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
261    // endif
262    static void endIf(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
263    /// start repetition content
264    static void doRepeat(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
265    /// end repetition content
266    static void endRepeat(Assembler& asmr, const char* pseudoOpPlace,
267                          const char* linePtr);
268    /// start macro definition
269    static void doMacro(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
270    /// ends macro definition
271    static void endMacro(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
272    // immediately exit from macro
273    static void exitMacro(Assembler& asmr, const char* pseudoOpPlace,
274                      const char* linePtr);
275    // purge macro
276    static void purgeMacro(Assembler& asmr, const char* linePtr);
277    // do IRP
278    static void doIRP(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
279                      bool perChar = false);
280   
281    static void undefSymbol(Assembler& asmr, const char* linePtr);
282   
283    static void doDefRegVar(Assembler& asmr, const char* pseudoOpPlace,
284                    const char* linePtr);
285   
286    static void setAbsoluteOffset(Assembler& asmr, const char* linePtr);
287   
288    static void ignoreString(Assembler& asmr, const char* linePtr);
289   
290    static bool checkPseudoOpName(const CString& string);
291};
292
293class AsmGalliumHandler;
294
295enum GalliumConfigValueTarget
296{
297    GALLIUMCVAL_SGPRSNUM,
298    GALLIUMCVAL_VGPRSNUM,
299    GALLIUMCVAL_PGMRSRC1,
300    GALLIUMCVAL_PGMRSRC2,
301    GALLIUMCVAL_IEEEMODE,
302    GALLIUMCVAL_FLOATMODE,
303    GALLIUMCVAL_LOCALSIZE,
304    GALLIUMCVAL_SCRATCHBUFFER,
305    GALLIUMCVAL_PRIORITY,
306    GALLIUMCVAL_USERDATANUM,
307    GALLIUMCVAL_TGSIZE,
308    GALLIUMCVAL_DEBUGMODE,
309    GALLIUMCVAL_DX10CLAMP,
310    GALLIUMCVAL_PRIVMODE,
311    GALLIUMCVAL_EXCEPTIONS
312};
313
314struct CLRX_INTERNAL AsmGalliumPseudoOps: AsmPseudoOps
315{
316    static bool checkPseudoOpName(const CString& string);
317   
318    /* user configuration pseudo-ops */
319    static void doConfig(AsmGalliumHandler& handler, const char* pseudoOpPlace,
320                      const char* linePtr);
321   
322    static void setConfigValue(AsmGalliumHandler& handler, const char* pseudoOpPlace,
323                      const char* linePtr, GalliumConfigValueTarget target);
324   
325    static void setConfigBoolValue(AsmGalliumHandler& handler, const char* pseudoOpPlace,
326                      const char* linePtr, GalliumConfigValueTarget target);
327   
328    static void setDimensions(AsmGalliumHandler& handler, const char* pseudoOpPlace,
329                      const char* linePtr);
330   
331    static void doGlobalData(AsmGalliumHandler& handler, const char* pseudoOpPlace,
332                      const char* linePtr);
333    // open argument list
334    static void doArgs(AsmGalliumHandler& handler, const char* pseudoOpPlace,
335                      const char* linePtr);
336    // add argument info
337    static void doArg(AsmGalliumHandler& handler, const char* pseudoOpPlace,
338                      const char* linePtr);
339    /// open progInfo
340    static void doProgInfo(AsmGalliumHandler& handler, const char* pseudoOpPlace,
341                      const char* linePtr);
342    /// add progInfo entry
343    static void doEntry(AsmGalliumHandler& handler, const char* pseudoOpPlace,
344                      const char* linePtr);
345   
346    static void doKCode(AsmGalliumHandler& handler, const char* pseudoOpPlace,
347                      const char* linePtr);
348    static void doKCodeEnd(AsmGalliumHandler& handler, const char* pseudoOpPlace,
349                      const char* linePtr);
350    static void updateKCodeSel(AsmGalliumHandler& handler,
351          const std::vector<cxuint>& oldset);
352};
353
354enum AmdConfigValueTarget
355{
356    AMDCVAL_SGPRSNUM,
357    AMDCVAL_VGPRSNUM,
358    AMDCVAL_PGMRSRC2,
359    AMDCVAL_IEEEMODE,
360    AMDCVAL_FLOATMODE,
361    AMDCVAL_HWLOCAL,
362    AMDCVAL_HWREGION,
363    AMDCVAL_PRIVATEID,
364    AMDCVAL_SCRATCHBUFFER,
365    AMDCVAL_UAVPRIVATE,
366    AMDCVAL_UAVID,
367    AMDCVAL_CBID,
368    AMDCVAL_PRINTFID,
369    AMDCVAL_EARLYEXIT,
370    AMDCVAL_CONDOUT,
371    AMDCVAL_USECONSTDATA,
372    AMDCVAL_USEPRINTF,
373    AMDCVAL_TGSIZE,
374    AMDCVAL_EXCEPTIONS
375};
376
377struct CLRX_INTERNAL AsmAmdPseudoOps: AsmPseudoOps
378{
379    static bool checkPseudoOpName(const CString& string);
380   
381    static void doGlobalData(AsmAmdHandler& handler, const char* pseudoOpPlace,
382                      const char* linePtr);
383   
384    static void setCompileOptions(AsmAmdHandler& handler, const char* linePtr);
385    static void setDriverInfo(AsmAmdHandler& handler, const char* linePtr);
386    static void setDriverVersion(AsmAmdHandler& handler, const char* linePtr);
387   
388    static void getDriverVersion(AsmAmdHandler& handler, const char* linePtr);
389   
390    static void addCALNote(AsmAmdHandler& handler, const char* pseudoOpPlace,
391                      const char* linePtr, uint32_t calNoteId);
392    static void addCustomCALNote(AsmAmdHandler& handler, const char* pseudoOpPlace,
393                      const char* linePtr);
394   
395    static void addMetadata(AsmAmdHandler& handler, const char* pseudoOpPlace,
396                      const char* linePtr);
397   
398    static void addHeader(AsmAmdHandler& handler, const char* pseudoOpPlace,
399                      const char* linePtr);
400   
401    static void doConfig(AsmAmdHandler& handler, const char* pseudoOpPlace,
402                      const char* linePtr);
403    /// add any entry with two 32-bit integers
404    static void doEntry(AsmAmdHandler& handler, const char* pseudoOpPlace,
405              const char* linePtr, uint32_t requiredCalNoteIdMask, const char* entryName);
406    /// add any entry with four 32-bit integers
407    static void doUavEntry(AsmAmdHandler& handler, const char* pseudoOpPlace,
408                      const char* linePtr);
409    /* dual pseudo-ops (for configured kernels and non-config kernels) */
410    static void doCBId(AsmAmdHandler& handler, const char* pseudoOpPlace,
411                      const char* linePtr);
412    static void doCondOut(AsmAmdHandler& handler, const char* pseudoOpPlace,
413                      const char* linePtr);
414    static void doEarlyExit(AsmAmdHandler& handler, const char* pseudoOpPlace,
415                      const char* linePtr);
416    static void doSampler(AsmAmdHandler& handler, const char* pseudoOpPlace,
417                      const char* linePtr);
418   
419    /* user configuration pseudo-ops */
420    static void setDimensions(AsmAmdHandler& handler, const char* pseudoOpPlace,
421                      const char* linePtr);
422   
423    static bool parseArg(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
424         const std::unordered_set<CString>& argNamesSet, AmdKernelArgInput& arg, bool cl20);
425    static void doArg(AsmAmdHandler& handler, const char* pseudoOpPlace,
426                      const char* linePtr);
427   
428    static void setConfigValue(AsmAmdHandler& handler, const char* pseudoOpPlace,
429                      const char* linePtr, AmdConfigValueTarget target);
430   
431    static bool parseCWS(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
432                     uint64_t* out);
433    static void setCWS(AsmAmdHandler& handler, const char* pseudoOpPlace,
434                      const char* linePtr);
435    static void setConfigBoolValue(AsmAmdHandler& handler, const char* pseudoOpPlace,
436                      const char* linePtr, AmdConfigValueTarget target);
437   
438    static void addUserData(AsmAmdHandler& handler, const char* pseudoOpPlace,
439                      const char* linePtr);
440};
441
442enum AmdCL2ConfigValueTarget
443{
444    AMDCL2CVAL_SGPRSNUM,
445    AMDCL2CVAL_VGPRSNUM,
446    AMDCL2CVAL_PGMRSRC1,
447    AMDCL2CVAL_PGMRSRC2,
448    AMDCL2CVAL_IEEEMODE,
449    AMDCL2CVAL_FLOATMODE,
450    AMDCL2CVAL_LOCALSIZE,
451    AMDCL2CVAL_SCRATCHBUFFER,
452    AMDCL2CVAL_PRIORITY,
453    AMDCL2CVAL_TGSIZE,
454    AMDCL2CVAL_DEBUGMODE,
455    AMDCL2CVAL_DX10CLAMP,
456    AMDCL2CVAL_PRIVMODE,
457    AMDCL2CVAL_EXCEPTIONS,
458    AMDCL2CVAL_USESETUP,
459    AMDCL2CVAL_USEARGS,
460    AMDCL2CVAL_USEENQUEUE,
461    AMDCL2CVAL_USEGENERIC
462};
463
464struct CLRX_INTERNAL AsmAmdCL2PseudoOps: AsmPseudoOps
465{
466    static bool checkPseudoOpName(const CString& string);
467   
468    static void setArchMinor(AsmAmdCL2Handler& handler, const char* linePtr);
469    static void setArchStepping(AsmAmdCL2Handler& handler, const char* linePtr);
470   
471    static void setAclVersion(AsmAmdCL2Handler& handler, const char* linePtr);
472    static void setCompileOptions(AsmAmdCL2Handler& handler, const char* linePtr);
473   
474    static void setDriverVersion(AsmAmdCL2Handler& handler, const char* linePtr);
475   
476    static void getDriverVersion(AsmAmdCL2Handler& handler, const char* linePtr);
477   
478    static void doInner(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
479                      const char* linePtr);
480   
481    static void doGlobalData(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
482                      const char* linePtr);
483    static void doRwData(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
484                      const char* linePtr);
485    static void doBssData(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
486                      const char* linePtr);
487    static void doSamplerInit(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
488                      const char* linePtr);
489    static void doSamplerReloc(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
490                      const char* linePtr);
491   
492    static void doSampler(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
493                      const char* linePtr);
494   
495    static void setConfigValue(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
496           const char* linePtr, AmdCL2ConfigValueTarget target);
497    static void setConfigBoolValue(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
498           const char* linePtr, AmdCL2ConfigValueTarget target);
499   
500    static void setDimensions(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
501                      const char* linePtr);
502   
503    static void setCWS(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
504                      const char* linePtr);
505    static void doArg(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
506                      const char* linePtr);
507   
508    static void doSetupArgs(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
509                       const char* linePtr);
510   
511    static void addMetadata(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
512                      const char* linePtr);
513    static void addISAMetadata(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
514                      const char* linePtr);
515    static void addKernelSetup(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
516                      const char* linePtr);
517    static void addKernelStub(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
518                      const char* linePtr);
519    static void doConfig(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
520                      const char* linePtr);
521};
522
523enum ROCmConfigValueTarget
524{
525    ROCMCVAL_SGPRSNUM,
526    ROCMCVAL_VGPRSNUM,
527    ROCMCVAL_PRIVMODE,
528    ROCMCVAL_DEBUGMODE,
529    ROCMCVAL_DX10CLAMP,
530    ROCMCVAL_IEEEMODE,
531    ROCMCVAL_TGSIZE,
532    ROCMCVAL_FLOATMODE,
533    ROCMCVAL_PRIORITY,
534    ROCMCVAL_EXCEPTIONS,
535    ROCMCVAL_LOCALSIZE,
536    ROCMCVAL_USERDATANUM,
537    ROCMCVAL_PGMRSRC1,
538    ROCMCVAL_PGMRSRC2,
539    ROCMCVAL_SCRATCHBUFFER,
540    ROCMCVAL_KERNEL_CODE_ENTRY_OFFSET,
541    ROCMCVAL_KERNEL_CODE_PREFETCH_OFFSET,
542    ROCMCVAL_KERNEL_CODE_PREFETCH_SIZE,
543    ROCMCVAL_MAX_SCRATCH_BACKING_MEMORY,
544    ROCMCVAL_USE_PRIVATE_SEGMENT_BUFFER,
545    ROCMCVAL_USE_DISPATCH_PTR,
546    ROCMCVAL_USE_QUEUE_PTR,
547    ROCMCVAL_USE_KERNARG_SEGMENT_PTR,
548    ROCMCVAL_USE_DISPATCH_ID,
549    ROCMCVAL_USE_FLAT_SCRATCH_INIT,
550    ROCMCVAL_USE_PRIVATE_SEGMENT_SIZE,
551    ROCMCVAL_USE_ORDERED_APPEND_GDS,
552    ROCMCVAL_PRIVATE_ELEM_SIZE,
553    ROCMCVAL_USE_PTR64,
554    ROCMCVAL_USE_DYNAMIC_CALL_STACK,
555    ROCMCVAL_USE_DEBUG_ENABLED,
556    ROCMCVAL_USE_XNACK_ENABLED,
557    ROCMCVAL_WORKITEM_PRIVATE_SEGMENT_SIZE,
558    ROCMCVAL_WORKGROUP_GROUP_SEGMENT_SIZE,
559    ROCMCVAL_GDS_SEGMENT_SIZE,
560    ROCMCVAL_KERNARG_SEGMENT_SIZE,
561    ROCMCVAL_WORKGROUP_FBARRIER_COUNT,
562    ROCMCVAL_WAVEFRONT_SGPR_COUNT,
563    ROCMCVAL_WORKITEM_VGPR_COUNT,
564    ROCMCVAL_RESERVED_VGPR_FIRST,
565    ROCMCVAL_RESERVED_VGPR_COUNT,
566    ROCMCVAL_RESERVED_SGPR_FIRST,
567    ROCMCVAL_RESERVED_SGPR_COUNT,
568    ROCMCVAL_DEBUG_WAVEFRONT_PRIVATE_SEGMENT_OFFSET_SGPR,
569    ROCMCVAL_DEBUG_PRIVATE_SEGMENT_BUFFER_SGPR,
570    ROCMCVAL_KERNARG_SEGMENT_ALIGN,
571    ROCMCVAL_GROUP_SEGMENT_ALIGN,
572    ROCMCVAL_PRIVATE_SEGMENT_ALIGN,
573    ROCMCVAL_WAVEFRONT_SIZE,
574    ROCMCVAL_CALL_CONVENTION,
575    ROCMCVAL_RUNTIME_LOADER_KERNEL_SYMBOL
576};
577
578struct CLRX_INTERNAL AsmROCmPseudoOps: AsmPseudoOps
579{
580    static bool checkPseudoOpName(const CString& string);
581   
582    /* user configuration pseudo-ops */
583    static void doConfig(AsmROCmHandler& handler, const char* pseudoOpPlace,
584                      const char* linePtr);
585   
586    static void doControlDirective(AsmROCmHandler& handler, const char* pseudoOpPlace,
587                      const char* linePtr);
588   
589    static void setConfigValue(AsmROCmHandler& handler, const char* pseudoOpPlace,
590                      const char* linePtr, ROCmConfigValueTarget target);
591   
592    static void setConfigBoolValue(AsmROCmHandler& handler, const char* pseudoOpPlace,
593                      const char* linePtr, ROCmConfigValueTarget target);
594   
595    static void setDimensions(AsmROCmHandler& handler, const char* pseudoOpPlace,
596                      const char* linePtr);
597   
598    static void doKCode(AsmROCmHandler& handler, const char* pseudoOpPlace,
599                      const char* linePtr);
600    static void doKCodeEnd(AsmROCmHandler& handler, const char* pseudoOpPlace,
601                      const char* linePtr);
602    static void updateKCodeSel(AsmROCmHandler& handler,
603                      const std::vector<cxuint>& oldset);
604};
605
606extern CLRX_INTERNAL cxbyte cstrtobyte(const char*& str, const char* end);
607
608extern const cxbyte tokenCharTable[96] CLRX_INTERNAL;
609
610};
611
612#endif
Note: See TracBrowser for help on using the repository browser.