[PATCH] D94317: [SystemZ][z/OS] RFC : Implementation for adding in HLASM Parsing support
Anirudh Prasad via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 8 09:30:27 PST 2021
anirudhp created this revision.
Herald added a subscriber: hiraditya.
anirudhp requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
- Opening a differential for an RFC posted here
- Not for any review or to be merged in - Just to gather opinions.
- The purpose of this patch is to garner opinions about adding HLASM parsing support for the 1st parameter of the inline asm block
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D94317
Files:
llvm/lib/MC/MCParser/AsmParser.cpp
Index: llvm/lib/MC/MCParser/AsmParser.cpp
===================================================================
--- llvm/lib/MC/MCParser/AsmParser.cpp
+++ llvm/lib/MC/MCParser/AsmParser.cpp
@@ -183,6 +183,9 @@
// Is alt macro mode enabled.
bool AltMacroMode = false;
+protected:
+ virtual bool parseStatement(ParseStatementInfo &Info, MCAsmParserSemaCallback *SI);
+
public:
AsmParser(SourceMgr &SM, MCContext &Ctx, MCStreamer &Out,
const MCAsmInfo &MAI, unsigned CB);
@@ -266,8 +269,6 @@
/// }
private:
- bool parseStatement(ParseStatementInfo &Info,
- MCAsmParserSemaCallback *SI);
bool parseCurlyBlockScope(SmallVectorImpl<AsmRewrite>& AsmStrRewrites);
bool parseCppHashLineFilenameComment(SMLoc L, bool SaveLocInfo = true);
@@ -690,6 +691,44 @@
void initializeCVDefRangeTypeMap();
};
+class HLASMAsmParser : public AsmParser {
+private:
+ MCAsmLexer &Lexer;
+ const MCAsmInfo &MAI;
+ MCStreamer &Out;
+
+ enum HLASM_INSN_KIND {
+ DC,
+ COPY,
+ //...
+ };
+
+ // Initialize the hlasm assembler instruction map
+ void initializeHLASMInstructionKindMap() {
+ return;
+ }
+
+ bool parseAsHLASMLabel();
+ bool parseAsMachineInstruction();
+ bool parseAsHLASMInstruction();
+
+public:
+ HLASMAsmParser(SourceMgr &SM, MCContext &Ctx, MCStreamer &Out,
+ const MCAsmInfo &MAI, unsigned CB = 0) : AsmParser(SM, Ctx, Out, MAI, 0 /*CB*/), Lexer(getLexer()), MAI(MAI),
+ Out(Out) {
+ Lexer.setSkipSpace(false);
+ initializeHLASMInstructionKindMap();
+ }
+
+ ~HLASMAsmParser() {
+ Lexer.setSkipSpace(true);
+ }
+
+ bool parseStatement(ParseStatementInfo &Info, MCAsmParserSemaCallback *SI) override {
+ return false;
+ }
+};
+
} // end anonymous namespace
namespace llvm {
@@ -6228,5 +6267,8 @@
MCAsmParser *llvm::createMCAsmParser(SourceMgr &SM, MCContext &C,
MCStreamer &Out, const MCAsmInfo &MAI,
unsigned CB) {
+ if (C.getObjectFileInfo()->getTargetTriple().isOSzOS() && MAI.getAssemblerDialect())
+ return new HLASMAsmParser(SM, C, Out, MAI, CB);
+
return new AsmParser(SM, C, Out, MAI, CB);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D94317.315423.patch
Type: text/x-patch
Size: 2225 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210108/2798c377/attachment.bin>
More information about the llvm-commits
mailing list