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

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

CLRadeonExtender: AsmROCm: Update.

File size: 24.1 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
145struct CLRX_INTERNAL AsmPseudoOps: AsmParseUtils
146{
147    /*
148     * pseudo-ops logic
149     */
150    // set bitnesss
151    static void setBitness(Assembler& asmr, const char* linePtr, bool _64Bit);
152   
153    static bool parseFormat(Assembler& asmr, const char* linePtr, BinaryFormat& format);
154    // set output format
155    static void setOutFormat(Assembler& asmr, const char* linePtr);
156    // set GPU architecture type
157    static void setGPUDevice(Assembler& asmr, const char* linePtr);
158    // set GPU architecture
159    static void setGPUArchitecture(Assembler& asmr, const char* linePtr);
160   
161    // change kernel
162    static void goToKernel(Assembler& asmr, const char* pseudoOpPlace,
163                   const char* linePtr);
164    // change section
165    static void goToSection(Assembler& asmr, const char* pseudoOpPlace,
166                   const char* linePtr, bool isPseudoOp = false);
167   
168    static void goToMain(Assembler& asmr, const char* pseudoOpPlace,
169                   const char* linePtr);
170   
171    /// include file
172    static void includeFile(Assembler& asmr, const char* pseudoOpPlace,
173                            const char* linePtr);
174    // include binary file
175    static void includeBinFile(Assembler& asmr, const char* pseudoOpPlace,
176                       const char* linePtr);
177   
178    // fail
179    static void doFail(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
180    // .error
181    static void doError(Assembler& asmr, const char* pseudoOpPlace,
182                           const char* linePtr);
183    // .warning
184    static void doWarning(Assembler& asmr, const char* pseudoOpPlace,
185                     const char* linePtr);
186   
187    // .byte, .short, .int, .word, .long, .quad
188    template<typename T>
189    static void putIntegers(Assembler& asmr, const char* pseudoOpPlace,
190                    const char* linePtr);
191   
192    // .half, .float, .double
193    template<typename UIntType>
194    static void putFloats(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
195   
196    /// .string, ascii
197    static void putStrings(Assembler& asmr, const char* pseudoOpPlace,
198                   const char* linePtr, bool addZero = false);
199    // .string16, .string32, .string64
200    template<typename T>
201    static void putStringsToInts(Assembler& asmr, const char* pseudoOpPlace,
202                   const char* linePtr);
203   
204    /// .octa
205    static void putUInt128s(Assembler& asmr, const char* pseudoOpPlace,
206                        const char* linePtr);
207   
208    /// .set, .equ, .eqv, .equiv
209    static void setSymbol(Assembler& asmr, const char* linePtr, bool reassign = true,
210                bool baseExpr = false);
211   
212    // .global, .local, .extern
213    static void setSymbolBind(Assembler& asmr, const char* linePtr, cxbyte elfInfo);
214   
215    static void setSymbolSize(Assembler& asmr, const char* linePtr);
216   
217    static void ignoreExtern(Assembler& asmr, const char* linePtr);
218   
219    static void doFill(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
220               bool _64bit = false);
221    static void doSkip(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
222   
223    static void doAlign(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
224                    bool powerOf2 = false);
225   
226    template<typename Word>
227    static void doAlignWord(Assembler& asmr, const char* pseudoOpPlace,
228                            const char* linePtr);
229   
230    static void doOrganize(Assembler& asmr, const char* linePtr);
231   
232    static void doPrint(Assembler& asmr, const char* linePtr);
233   
234    static void doIfInt(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
235                IfIntComp compType, bool elseIfClause);
236   
237    static void doIfDef(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
238                bool negation, bool elseIfClause);
239   
240    static void doIfBlank(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
241                bool negation, bool elseIfClause);
242   
243    static void doIf64Bit(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
244                bool negation, bool elseIfClause);
245    static void doIfArch(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
246                bool negation, bool elseIfClause);
247    static void doIfGpu(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
248                bool negation, bool elseIfClause);
249    static void doIfFmt(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
250                bool negation, bool elseIfClause);
251    /// .ifc
252    static void doIfCmpStr(Assembler& asmr, const char* pseudoOpPlace,
253               const char* linePtr, bool negation, bool elseIfClause);
254    /// ifeqs, ifnes
255    static void doIfStrEqual(Assembler& asmr, const char* pseudoOpPlace,
256                     const char* linePtr, bool negation, bool elseIfClause);
257    // else
258    static void doElse(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
259    // endif
260    static void endIf(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
261    /// start repetition content
262    static void doRepeat(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
263    /// end repetition content
264    static void endRepeat(Assembler& asmr, const char* pseudoOpPlace,
265                          const char* linePtr);
266    /// start macro definition
267    static void doMacro(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
268    /// ends macro definition
269    static void endMacro(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr);
270    // immediately exit from macro
271    static void exitMacro(Assembler& asmr, const char* pseudoOpPlace,
272                      const char* linePtr);
273    // purge macro
274    static void purgeMacro(Assembler& asmr, const char* linePtr);
275    // do IRP
276    static void doIRP(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
277                      bool perChar = false);
278   
279    static void undefSymbol(Assembler& asmr, const char* linePtr);
280   
281    static void doDefRegVar(Assembler& asmr, const char* pseudoOpPlace,
282                    const char* linePtr);
283   
284    static void setAbsoluteOffset(Assembler& asmr, const char* linePtr);
285   
286    static void ignoreString(Assembler& asmr, const char* linePtr);
287   
288    static bool checkPseudoOpName(const CString& string);
289};
290
291class AsmGalliumHandler;
292
293enum GalliumConfigValueTarget
294{
295    GALLIUMCVAL_SGPRSNUM,
296    GALLIUMCVAL_VGPRSNUM,
297    GALLIUMCVAL_PGMRSRC1,
298    GALLIUMCVAL_PGMRSRC2,
299    GALLIUMCVAL_IEEEMODE,
300    GALLIUMCVAL_FLOATMODE,
301    GALLIUMCVAL_LOCALSIZE,
302    GALLIUMCVAL_SCRATCHBUFFER,
303    GALLIUMCVAL_PRIORITY,
304    GALLIUMCVAL_USERDATANUM,
305    GALLIUMCVAL_TGSIZE,
306    GALLIUMCVAL_DEBUGMODE,
307    GALLIUMCVAL_DX10CLAMP,
308    GALLIUMCVAL_PRIVMODE,
309    GALLIUMCVAL_EXCEPTIONS
310};
311
312struct CLRX_INTERNAL AsmGalliumPseudoOps: AsmPseudoOps
313{
314    static bool checkPseudoOpName(const CString& string);
315   
316    /* user configuration pseudo-ops */
317    static void doConfig(AsmGalliumHandler& handler, const char* pseudoOpPlace,
318                      const char* linePtr);
319   
320    static void setConfigValue(AsmGalliumHandler& handler, const char* pseudoOpPlace,
321                      const char* linePtr, GalliumConfigValueTarget target);
322   
323    static void setConfigBoolValue(AsmGalliumHandler& handler, const char* pseudoOpPlace,
324                      const char* linePtr, GalliumConfigValueTarget target);
325   
326    static void setDimensions(AsmGalliumHandler& handler, const char* pseudoOpPlace,
327                      const char* linePtr);
328   
329    static void doGlobalData(AsmGalliumHandler& handler, const char* pseudoOpPlace,
330                      const char* linePtr);
331    // open argument list
332    static void doArgs(AsmGalliumHandler& handler, const char* pseudoOpPlace,
333                      const char* linePtr);
334    // add argument info
335    static void doArg(AsmGalliumHandler& handler, const char* pseudoOpPlace,
336                      const char* linePtr);
337    /// open progInfo
338    static void doProgInfo(AsmGalliumHandler& handler, const char* pseudoOpPlace,
339                      const char* linePtr);
340    /// add progInfo entry
341    static void doEntry(AsmGalliumHandler& handler, const char* pseudoOpPlace,
342                      const char* linePtr);
343   
344    static void doKCode(AsmGalliumHandler& handler, const char* pseudoOpPlace,
345                      const char* linePtr);
346    static void doKCodeEnd(AsmGalliumHandler& handler, const char* pseudoOpPlace,
347                      const char* linePtr);
348    static void updateKCodeSel(AsmGalliumHandler& handler,
349          const std::vector<cxuint>& oldset);
350};
351
352enum AmdConfigValueTarget
353{
354    AMDCVAL_SGPRSNUM,
355    AMDCVAL_VGPRSNUM,
356    AMDCVAL_PGMRSRC2,
357    AMDCVAL_IEEEMODE,
358    AMDCVAL_FLOATMODE,
359    AMDCVAL_HWLOCAL,
360    AMDCVAL_HWREGION,
361    AMDCVAL_PRIVATEID,
362    AMDCVAL_SCRATCHBUFFER,
363    AMDCVAL_UAVPRIVATE,
364    AMDCVAL_UAVID,
365    AMDCVAL_CBID,
366    AMDCVAL_PRINTFID,
367    AMDCVAL_EARLYEXIT,
368    AMDCVAL_CONDOUT,
369    AMDCVAL_USECONSTDATA,
370    AMDCVAL_USEPRINTF,
371    AMDCVAL_TGSIZE,
372    AMDCVAL_EXCEPTIONS
373};
374
375struct CLRX_INTERNAL AsmAmdPseudoOps: AsmPseudoOps
376{
377    static bool checkPseudoOpName(const CString& string);
378   
379    static void doGlobalData(AsmAmdHandler& handler, const char* pseudoOpPlace,
380                      const char* linePtr);
381   
382    static void setCompileOptions(AsmAmdHandler& handler, const char* linePtr);
383    static void setDriverInfo(AsmAmdHandler& handler, const char* linePtr);
384    static void setDriverVersion(AsmAmdHandler& handler, const char* linePtr);
385   
386    static void getDriverVersion(AsmAmdHandler& handler, const char* linePtr);
387   
388    static void addCALNote(AsmAmdHandler& handler, const char* pseudoOpPlace,
389                      const char* linePtr, uint32_t calNoteId);
390    static void addCustomCALNote(AsmAmdHandler& handler, const char* pseudoOpPlace,
391                      const char* linePtr);
392   
393    static void addMetadata(AsmAmdHandler& handler, const char* pseudoOpPlace,
394                      const char* linePtr);
395   
396    static void addHeader(AsmAmdHandler& handler, const char* pseudoOpPlace,
397                      const char* linePtr);
398   
399    static void doConfig(AsmAmdHandler& handler, const char* pseudoOpPlace,
400                      const char* linePtr);
401    /// add any entry with two 32-bit integers
402    static void doEntry(AsmAmdHandler& handler, const char* pseudoOpPlace,
403              const char* linePtr, uint32_t requiredCalNoteIdMask, const char* entryName);
404    /// add any entry with four 32-bit integers
405    static void doUavEntry(AsmAmdHandler& handler, const char* pseudoOpPlace,
406                      const char* linePtr);
407    /* dual pseudo-ops (for configured kernels and non-config kernels) */
408    static void doCBId(AsmAmdHandler& handler, const char* pseudoOpPlace,
409                      const char* linePtr);
410    static void doCondOut(AsmAmdHandler& handler, const char* pseudoOpPlace,
411                      const char* linePtr);
412    static void doEarlyExit(AsmAmdHandler& handler, const char* pseudoOpPlace,
413                      const char* linePtr);
414    static void doSampler(AsmAmdHandler& handler, const char* pseudoOpPlace,
415                      const char* linePtr);
416   
417    /* user configuration pseudo-ops */
418    static void setDimensions(AsmAmdHandler& handler, const char* pseudoOpPlace,
419                      const char* linePtr);
420   
421    static bool parseArg(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
422         const std::unordered_set<CString>& argNamesSet, AmdKernelArgInput& arg, bool cl20);
423    static void doArg(AsmAmdHandler& handler, const char* pseudoOpPlace,
424                      const char* linePtr);
425   
426    static void setConfigValue(AsmAmdHandler& handler, const char* pseudoOpPlace,
427                      const char* linePtr, AmdConfigValueTarget target);
428   
429    static bool parseCWS(Assembler& asmr, const char* pseudoOpPlace, const char* linePtr,
430                     uint64_t* out);
431    static void setCWS(AsmAmdHandler& handler, const char* pseudoOpPlace,
432                      const char* linePtr);
433    static void setConfigBoolValue(AsmAmdHandler& handler, const char* pseudoOpPlace,
434                      const char* linePtr, AmdConfigValueTarget target);
435   
436    static void addUserData(AsmAmdHandler& handler, const char* pseudoOpPlace,
437                      const char* linePtr);
438};
439
440enum AmdCL2ConfigValueTarget
441{
442    AMDCL2CVAL_SGPRSNUM,
443    AMDCL2CVAL_VGPRSNUM,
444    AMDCL2CVAL_PGMRSRC1,
445    AMDCL2CVAL_PGMRSRC2,
446    AMDCL2CVAL_IEEEMODE,
447    AMDCL2CVAL_FLOATMODE,
448    AMDCL2CVAL_LOCALSIZE,
449    AMDCL2CVAL_SCRATCHBUFFER,
450    AMDCL2CVAL_PRIORITY,
451    AMDCL2CVAL_TGSIZE,
452    AMDCL2CVAL_DEBUGMODE,
453    AMDCL2CVAL_DX10CLAMP,
454    AMDCL2CVAL_PRIVMODE,
455    AMDCL2CVAL_EXCEPTIONS,
456    AMDCL2CVAL_USESETUP,
457    AMDCL2CVAL_USEARGS,
458    AMDCL2CVAL_USEENQUEUE,
459    AMDCL2CVAL_USEGENERIC
460};
461
462struct CLRX_INTERNAL AsmAmdCL2PseudoOps: AsmPseudoOps
463{
464    static bool checkPseudoOpName(const CString& string);
465   
466    static void setArchMinor(AsmAmdCL2Handler& handler, const char* linePtr);
467    static void setArchStepping(AsmAmdCL2Handler& handler, const char* linePtr);
468   
469    static void setAclVersion(AsmAmdCL2Handler& handler, const char* linePtr);
470    static void setCompileOptions(AsmAmdCL2Handler& handler, const char* linePtr);
471   
472    static void setDriverVersion(AsmAmdCL2Handler& handler, const char* linePtr);
473   
474    static void getDriverVersion(AsmAmdCL2Handler& handler, const char* linePtr);
475   
476    static void doInner(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
477                      const char* linePtr);
478   
479    static void doGlobalData(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
480                      const char* linePtr);
481    static void doRwData(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
482                      const char* linePtr);
483    static void doBssData(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
484                      const char* linePtr);
485    static void doSamplerInit(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
486                      const char* linePtr);
487    static void doSamplerReloc(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
488                      const char* linePtr);
489   
490    static void doSampler(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
491                      const char* linePtr);
492   
493    static void setConfigValue(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
494           const char* linePtr, AmdCL2ConfigValueTarget target);
495    static void setConfigBoolValue(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
496           const char* linePtr, AmdCL2ConfigValueTarget target);
497   
498    static void setDimensions(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
499                      const char* linePtr);
500   
501    static void setCWS(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
502                      const char* linePtr);
503    static void doArg(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
504                      const char* linePtr);
505   
506    static void doSetupArgs(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
507                       const char* linePtr);
508   
509    static void addMetadata(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
510                      const char* linePtr);
511    static void addISAMetadata(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
512                      const char* linePtr);
513    static void addKernelSetup(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
514                      const char* linePtr);
515    static void addKernelStub(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
516                      const char* linePtr);
517    static void doConfig(AsmAmdCL2Handler& handler, const char* pseudoOpPlace,
518                      const char* linePtr);
519};
520
521enum ROCmConfigValueTarget
522{
523    ROCMCVAL_SGPRSNUM,
524    ROCMCVAL_VGPRSNUM,
525    ROCMCVAL_PRIVMODE,
526    ROCMCVAL_DEBUGMODE,
527    ROCMCVAL_DX10CLAMP,
528    ROCMCVAL_IEEEMODE,
529    ROCMCVAL_TGSIZE,
530    ROCMCVAL_FLOATMODE,
531    ROCMCVAL_PRIORITY,
532    ROCMCVAL_EXCEPTIONS,
533    ROCMCVAL_LOCALSIZE,
534    ROCMCVAL_USERDATANUM,
535    ROCMCVAL_PGMRSRC1,
536    ROCMCVAL_PGMRSRC2,
537    ROCMCVAL_SCRATCHBUFFER,
538    ROCMCVAL_KERNEL_CODE_ENTRY_OFFSET,
539    ROCMCVAL_KERNEL_CODE_PREFETCH_OFFSET,
540    ROCMCVAL_KERNEL_CODE_PREFETCH_SIZE,
541    ROCMCVAL_MAX_SCRATCH_BACKING_MEMORY,
542    ROCMCVAL_USE_PRIVATE_SEGMENT_BUFFER,
543    ROCMCVAL_USE_DISPATCH_PTR,
544    ROCMCVAL_USE_QUEUE_PTR,
545    ROCMCVAL_USE_KERNARG_SEGMENT_PTR,
546    ROCMCVAL_USE_DISPATCH_ID,
547    ROCMCVAL_USE_FLAT_SCRATCH_INIT,
548    ROCMCVAL_USE_PRIVATE_SEGMENT_SIZE,
549    ROCMCVAL_USE_ORDERED_APPEND_GDS,
550    ROCMCVAL_PRIVATE_ELEM_SIZE,
551    ROCMCVAL_USE_PTR64,
552    ROCMCVAL_USE_DYNAMIC_CALL_STACK,
553    ROCMCVAL_USE_DEBUG_ENABLED,
554    ROCMCVAL_USE_XNACK_ENABLED,
555    ROCMCVAL_WORKITEM_PRIVATE_SEGMENT_SIZE,
556    ROCMCVAL_WORKGROUP_GROUP_SEGMENT_SIZE,
557    ROCMCVAL_GDS_SEGMENT_SIZE,
558    ROCMCVAL_KERNARG_SEGMENT_SIZE,
559    ROCMCVAL_WORKGROUP_FBARRIER_COUNT,
560    ROCMCVAL_WAVEFRONT_SGPR_COUNT,
561    ROCMCVAL_WORKITEM_VGPR_COUNT,
562    ROCMCVAL_RESERVED_VGPR_FIRST,
563    ROCMCVAL_RESERVED_VGPR_COUNT,
564    ROCMCVAL_RESERVED_SGPR_FIRST,
565    ROCMCVAL_RESERVED_SGPR_COUNT,
566    ROCMCVAL_DEBUG_WAVEFRONT_PRIVATE_SEGMENT_OFFSET_SGPR,
567    ROCMCVAL_DEBUG_PRIVATE_SEGMENT_BUFFER_SGPR,
568    ROCMCVAL_KERNARG_SEGMENT_ALIGN,
569    ROCMCVAL_GROUP_SEGMENT_ALIGN,
570    ROCMCVAL_PRIVATE_SEGMENT_ALIGN,
571    ROCMCVAL_WAVEFRONT_SIZE,
572    ROCMCVAL_CALL_CONVENTION,
573    ROCMCVAL_RUNTIME_LOADER_KERNEL_SYMBOL
574};
575
576struct CLRX_INTERNAL AsmROCmPseudoOps: AsmPseudoOps
577{
578    static bool checkPseudoOpName(const CString& string);
579   
580    /* user configuration pseudo-ops */
581    static void doConfig(AsmROCmHandler& handler, const char* pseudoOpPlace,
582                      const char* linePtr);
583   
584    static void doControlDirective(AsmROCmHandler& handler, const char* pseudoOpPlace,
585                      const char* linePtr);
586   
587    static void setConfigValue(AsmROCmHandler& handler, const char* pseudoOpPlace,
588                      const char* linePtr, ROCmConfigValueTarget target);
589   
590    static void setConfigBoolValue(AsmROCmHandler& handler, const char* pseudoOpPlace,
591                      const char* linePtr, ROCmConfigValueTarget target);
592   
593    static void setDimensions(AsmROCmHandler& handler, const char* pseudoOpPlace,
594                      const char* linePtr);
595   
596    static void doKCode(AsmROCmHandler& handler, const char* pseudoOpPlace,
597                      const char* linePtr);
598    static void doKCodeEnd(AsmROCmHandler& handler, const char* pseudoOpPlace,
599                      const char* linePtr);
600    static void updateKCodeSel(AsmROCmHandler& handler,
601                      const std::vector<cxuint>& oldset);
602};
603
604extern CLRX_INTERNAL cxbyte cstrtobyte(const char*& str, const char* end);
605
606extern const cxbyte tokenCharTable[96] CLRX_INTERNAL;
607
608};
609
610#endif
Note: See TracBrowser for help on using the repository browser.