diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp | 211 | ||||
-rw-r--r-- | llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp | 60 | ||||
-rw-r--r-- | llvm/lib/Target/Mips/MipsTargetStreamer.h | 14 |
3 files changed, 22 insertions, 263 deletions
diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index eb68c52745e..ca2032b11c6 100644 --- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -82,10 +82,6 @@ class MipsAsmParser : public MCTargetAsmParser { MCSubtargetInfo &STI; MCAsmParser &Parser; MipsAssemblerOptions Options; - MCSymbol *CurrentFn; // Pointer to the function being parsed. It may be a - // nullptr, which indicates that no function is currently - // selected. This usually happens after an '.end func' - // directive. #define GET_ASSEMBLER_HEADER #include "MipsGenAsmMatcher.inc" @@ -289,8 +285,6 @@ public: if (!isABI_O32() && !useOddSPReg() != 0) report_fatal_error("-mno-odd-spreg requires the O32 ABI"); - - CurrentFn = nullptr; } MCAsmParser &getParser() const { return Parser; } @@ -3061,151 +3055,22 @@ bool MipsAsmParser::ParseDirective(AsmToken DirectiveID) { parseDataDirective(8, DirectiveID.getLoc()); return false; } - if (IDVal == ".ent") { - StringRef SymbolName; - if (Parser.parseIdentifier(SymbolName)) { - reportParseError("expected identifier after .ent"); - return false; - } - - // There's an undocumented extension that allows an integer to - // follow the name of the procedure which AFAICS is ignored by GAS. - // Example: .ent foo,2 - if (getLexer().isNot(AsmToken::EndOfStatement)) { - if (getLexer().isNot(AsmToken::Comma)) { - // Even though we accept this undocumented extension for compatibility - // reasons, the additional integer argument does not actually change - // the behaviour of the '.ent' directive, so we would like to discourage - // its use. We do this by not referring to the extended version in - // error messages which are not directly related to its use. - reportParseError("unexpected token, expected end of statement"); - return false; - } - Parser.Lex(); // Eat the comma. - const MCExpr *DummyNumber; - int64_t DummyNumberVal; - // If the user was explicitly trying to use the extended version, - // we still give helpful extension-related error messages. - if (Parser.parseExpression(DummyNumber)) { - reportParseError("expected number after comma"); - return false; - } - if (!DummyNumber->EvaluateAsAbsolute(DummyNumberVal)) { - reportParseError("expected an absolute expression after comma"); - return false; - } - } - - // If this is not the end of the statement, report an error. - if (getLexer().isNot(AsmToken::EndOfStatement)) { - reportParseError("unexpected token, expected end of statement"); - return false; - } - - MCSymbol *Sym = getContext().GetOrCreateSymbol(SymbolName); - - getTargetStreamer().emitDirectiveEnt(*Sym); - CurrentFn = Sym; + if (IDVal == ".ent") { + // Ignore this directive for now. + Parser.Lex(); return false; } if (IDVal == ".end") { - StringRef SymbolName; - - if (Parser.parseIdentifier(SymbolName)) { - reportParseError("expected identifier after .end"); - return false; - } - - if (getLexer().isNot(AsmToken::EndOfStatement)) { - reportParseError("unexpected token, expected end of statement"); - return false; - } - - if (CurrentFn == nullptr) { - reportParseError(".end used without .ent"); - return false; - } - - if ((SymbolName != CurrentFn->getName())) { - reportParseError(".end symbol does not match .ent symbol"); - return false; - } - - getTargetStreamer().emitDirectiveEnd(SymbolName); - CurrentFn = nullptr; + // Ignore this directive for now. + Parser.Lex(); return false; } if (IDVal == ".frame") { - // .frame $stack_reg, frame_size_in_bytes, $return_reg - SmallVector<std::unique_ptr<MCParsedAsmOperand>, 1> TmpReg; - OperandMatchResultTy ResTy = ParseAnyRegister(TmpReg); - if (ResTy == MatchOperand_NoMatch || ResTy == MatchOperand_ParseFail) { - reportParseError("expected stack register"); - return false; - } - - MipsOperand &StackRegOpnd = static_cast<MipsOperand &>(*TmpReg[0]); - if (!StackRegOpnd.isGPRAsmReg()) { - reportParseError(StackRegOpnd.getStartLoc(), - "expected general purpose register"); - return false; - } - unsigned StackReg = StackRegOpnd.getGPR32Reg(); - - if (Parser.getTok().is(AsmToken::Comma)) - Parser.Lex(); - else { - reportParseError("unexpected token, expected comma"); - return false; - } - - // Parse the frame size. - const MCExpr *FrameSize; - int64_t FrameSizeVal; - - if (Parser.parseExpression(FrameSize)) { - reportParseError("expected frame size value"); - return false; - } - - if (!FrameSize->EvaluateAsAbsolute(FrameSizeVal)) { - reportParseError("frame size not an absolute expression"); - return false; - } - - if (Parser.getTok().is(AsmToken::Comma)) - Parser.Lex(); - else { - reportParseError("unexpected token, expected comma"); - return false; - } - - // Parse the return register. - TmpReg.clear(); - ResTy = ParseAnyRegister(TmpReg); - if (ResTy == MatchOperand_NoMatch || ResTy == MatchOperand_ParseFail) { - reportParseError("expected return register"); - return false; - } - - MipsOperand &ReturnRegOpnd = static_cast<MipsOperand &>(*TmpReg[0]); - if (!ReturnRegOpnd.isGPRAsmReg()) { - reportParseError(ReturnRegOpnd.getStartLoc(), - "expected general purpose register"); - return false; - } - - // If this is not the end of the statement, report an error. - if (getLexer().isNot(AsmToken::EndOfStatement)) { - reportParseError("unexpected token, expected end of statement"); - return false; - } - - getTargetStreamer().emitFrame(StackReg, FrameSizeVal, - ReturnRegOpnd.getGPR32Reg()); + // Ignore this directive for now. + Parser.eatToEndOfStatement(); return false; } @@ -3213,61 +3078,15 @@ bool MipsAsmParser::ParseDirective(AsmToken DirectiveID) { return parseDirectiveSet(); } - if (IDVal == ".mask" || IDVal == ".fmask") { - // .mask bitmask, frame_offset - // bitmask: One bit for each register used. - // frame_offset: Offset from Canonical Frame Address ($sp on entry) where - // first register is expected to be saved. - // Examples: - // .mask 0x80000000, -4 - // .fmask 0x80000000, -4 - // - - // Parse the bitmask - const MCExpr *BitMask; - int64_t BitMaskVal; - - if (Parser.parseExpression(BitMask)) { - reportParseError("expected bitmask value"); - return false; - } - - if (!BitMask->EvaluateAsAbsolute(BitMaskVal)) { - reportParseError("bitmask not an absolute expression"); - return false; - } - - if (Parser.getTok().is(AsmToken::Comma)) - Parser.Lex(); - else { - reportParseError("unexpected token, expected comma"); - return false; - } - - // Parse the frame_offset - const MCExpr *FrameOffset; - int64_t FrameOffsetVal; - - if (Parser.parseExpression(FrameOffset)) { - reportParseError("expected frame offset value"); - return false; - } - - if (!FrameOffset->EvaluateAsAbsolute(FrameOffsetVal)) { - reportParseError("frame offset not an absolute expression"); - return false; - } - - // If this is not the end of the statement, report an error. - if (getLexer().isNot(AsmToken::EndOfStatement)) { - reportParseError("unexpected token, expected end of statement"); - return false; - } + if (IDVal == ".fmask") { + // Ignore this directive for now. + Parser.eatToEndOfStatement(); + return false; + } - if (IDVal == ".mask") - getTargetStreamer().emitMask(BitMaskVal, FrameOffsetVal); - else - getTargetStreamer().emitFMask(BitMaskVal, FrameOffsetVal); + if (IDVal == ".mask") { + // Ignore this directive for now. + Parser.eatToEndOfStatement(); return false; } diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp index 23e0d90dc0b..7a8230fdebf 100644 --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp +++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp @@ -29,9 +29,7 @@ using namespace llvm; MipsTargetStreamer::MipsTargetStreamer(MCStreamer &S) - : MCTargetStreamer(S), canHaveModuleDirective(true) { - GPRInfoSet = FPRInfoSet = FrameInfoSet = false; -} + : MCTargetStreamer(S), canHaveModuleDirective(true) {} void MipsTargetStreamer::emitDirectiveSetMicroMips() {} void MipsTargetStreamer::emitDirectiveSetNoMicroMips() {} void MipsTargetStreamer::emitDirectiveSetMips16() {} @@ -494,45 +492,11 @@ void MipsTargetELFStreamer::emitDirectiveSetNoAt() { } void MipsTargetELFStreamer::emitDirectiveEnd(StringRef Name) { - MCAssembler &MCA = getStreamer().getAssembler(); - MCContext &Context = MCA.getContext(); - MCStreamer &OS = getStreamer(); - - const MCSectionELF *Sec = Context.getELFSection(".pdr", ELF::SHT_PROGBITS, - ELF::SHF_ALLOC | ELF::SHT_REL, - SectionKind::getMetadata()); - - const MCSymbolRefExpr *ExprRef = - MCSymbolRefExpr::Create(Name, MCSymbolRefExpr::VK_None, Context); - - MCSectionData &SecData = MCA.getOrCreateSectionData(*Sec); - SecData.setAlignment(4); - - OS.PushSection(); - - OS.SwitchSection(Sec); - - OS.EmitValueImpl(ExprRef, 4); - - OS.EmitIntValue(GPRInfoSet ? GPRBitMask : 0, 4); // reg_mask - OS.EmitIntValue(GPRInfoSet ? GPROffset : 0, 4); // reg_offset - - OS.EmitIntValue(FPRInfoSet ? FPRBitMask : 0, 4); // fpreg_mask - OS.EmitIntValue(FPRInfoSet ? FPROffset : 0, 4); // fpreg_offset - - OS.EmitIntValue(FrameInfoSet ? FrameOffset : 0, 4); // frame_offset - OS.EmitIntValue(FrameInfoSet ? FrameReg : 0, 4); // frame_reg - OS.EmitIntValue(FrameInfoSet ? ReturnReg : 0, 4); // return_reg - - // The .end directive marks the end of a procedure. Invalidate - // the information gathered up until this point. - GPRInfoSet = FPRInfoSet = FrameInfoSet = false; - - OS.PopSection(); + // FIXME: implement. } void MipsTargetELFStreamer::emitDirectiveEnt(const MCSymbol &Symbol) { - GPRInfoSet = FPRInfoSet = FrameInfoSet = false; + // FIXME: implement. } void MipsTargetELFStreamer::emitDirectiveAbiCalls() { @@ -578,28 +542,18 @@ void MipsTargetELFStreamer::emitDirectiveOptionPic2() { } void MipsTargetELFStreamer::emitFrame(unsigned StackReg, unsigned StackSize, - unsigned ReturnReg_) { - MCContext &Context = getStreamer().getAssembler().getContext(); - const MCRegisterInfo *RegInfo = Context.getRegisterInfo(); - - FrameInfoSet = true; - FrameReg = RegInfo->getEncodingValue(StackReg); - FrameOffset = StackSize; - ReturnReg = RegInfo->getEncodingValue(ReturnReg_); + unsigned ReturnReg) { + // FIXME: implement. } void MipsTargetELFStreamer::emitMask(unsigned CPUBitmask, int CPUTopSavedRegOff) { - GPRInfoSet = true; - GPRBitMask = CPUBitmask; - GPROffset = CPUTopSavedRegOff; + // FIXME: implement. } void MipsTargetELFStreamer::emitFMask(unsigned FPUBitmask, int FPUTopSavedRegOff) { - FPRInfoSet = true; - FPRBitMask = FPUBitmask; - FPROffset = FPUTopSavedRegOff; + // FIXME: implement. } void MipsTargetELFStreamer::emitDirectiveSetMips1() { diff --git a/llvm/lib/Target/Mips/MipsTargetStreamer.h b/llvm/lib/Target/Mips/MipsTargetStreamer.h index fbea033eee9..8253c622563 100644 --- a/llvm/lib/Target/Mips/MipsTargetStreamer.h +++ b/llvm/lib/Target/Mips/MipsTargetStreamer.h @@ -11,7 +11,6 @@ #define MIPSTARGETSTREAMER_H #include "llvm/MC/MCELFStreamer.h" -#include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCStreamer.h" #include "MCTargetDesc/MipsABIFlagsSection.h" @@ -98,19 +97,6 @@ public: protected: MipsABIFlagsSection ABIFlagsSection; - bool GPRInfoSet; - unsigned GPRBitMask; - int GPROffset; - - bool FPRInfoSet; - unsigned FPRBitMask; - int FPROffset; - - bool FrameInfoSet; - int FrameOffset; - unsigned FrameReg; - unsigned ReturnReg; - private: bool canHaveModuleDirective; }; |