[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