mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-23 22:23:00 +00:00
Allow multiclass def names to contain "#NAME"" where TableGen replaces
#NAME# with the name of the defm instantiating the multiclass. This is
useful for AVX instruction naming where a "V" prefix is standard
throughout the ISA. For example:
multiclass SSE_AVX_Inst<...> {
def SS : Instr<...>;
def SD : Instr<...>;
def PS : Instr<...>;
def PD : Instr<...>;
def V#NAME#SS : Instr<...>;
def V#NAME#SD : Instr<...>;
def V#NAME#PS : Instr<...>;
def V#NAME#PD : Instr<...>;
}
defm ADD : SSE_AVX_Inst<...>;
Results in
ADDSS
ADDSD
ADDPS
ADDPD
VADDSS
VADDSD
VADDPS
VADDPD
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70979 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -98,7 +98,7 @@ tgtok::TokKind TGLexer::LexToken() {
|
||||
switch (CurChar) {
|
||||
default:
|
||||
// Handle letters: [a-zA-Z_]
|
||||
if (isalpha(CurChar) || CurChar == '_')
|
||||
if (isalpha(CurChar) || CurChar == '_' || CurChar == '#')
|
||||
return LexIdentifier();
|
||||
|
||||
// Unknown character, emit an error.
|
||||
@@ -220,8 +220,20 @@ tgtok::TokKind TGLexer::LexIdentifier() {
|
||||
const char *IdentStart = TokStart;
|
||||
|
||||
// Match the rest of the identifier regex: [0-9a-zA-Z_]*
|
||||
while (isalpha(*CurPtr) || isdigit(*CurPtr) || *CurPtr == '_')
|
||||
++CurPtr;
|
||||
while (isalpha(*CurPtr) || isdigit(*CurPtr) || *CurPtr == '_'
|
||||
|| *CurPtr == '#') {
|
||||
// If this contains a '#', make sure it's value
|
||||
if (*CurPtr == '#') {
|
||||
if (strncmp(CurPtr, "#NAME#", 6) != 0) {
|
||||
return tgtok::Error;
|
||||
}
|
||||
CurPtr += 6;
|
||||
}
|
||||
else {
|
||||
++CurPtr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Check to see if this identifier is a keyword.
|
||||
unsigned Len = CurPtr-IdentStart;
|
||||
|
||||
Reference in New Issue
Block a user