diff --git a/llvm/lib/Target/SBF/AsmParser/SBFAsmParser.cpp b/llvm/lib/Target/SBF/AsmParser/SBFAsmParser.cpp index 6166da9171bec8..fcc56073520aab 100644 --- a/llvm/lib/Target/SBF/AsmParser/SBFAsmParser.cpp +++ b/llvm/lib/Target/SBF/AsmParser/SBFAsmParser.cpp @@ -33,12 +33,6 @@ class SBFAsmParser : public MCTargetAsmParser { SMLoc getLoc() const { return getParser().getTok().getLoc(); } - bool isNewSyntax() { - return getParser().getAssemblerDialect() == 0; - } - - bool PreMatchCheck(OperandVector &Operands); - bool MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, OperandVector &Operands, MCStreamer &Out, uint64_t &ErrorInfo, @@ -52,25 +46,14 @@ class SBFAsmParser : public MCTargetAsmParser { bool ParseInstruction(ParseInstructionInfo &Info, StringRef Name, SMLoc NameLoc, OperandVector &Operands) override; - bool parseOldInstruction(ParseInstructionInfo &Info, StringRef Name, - SMLoc NameLoc, OperandVector &Operands); - bool ParseDirective(AsmToken DirectiveID) override; - // "=" is used as assignment operator for assembly statement, so can't be used - // for symbol assignment (old syntax only). - bool equalIsAsmAssignment() override { return isNewSyntax(); } - // "*" is used for dereferencing memory that it will be the start of - // statement (old syntax only). - bool starIsStartOfStatement() override { return !isNewSyntax(); } - #define GET_ASSEMBLER_HEADER #include "SBFGenAsmMatcher.inc" bool parseOperand(OperandVector &Operands, StringRef Mnemonic); OperandMatchResultTy parseImmediate(OperandVector &Operands); OperandMatchResultTy parseRegister(OperandVector &Operands); - OperandMatchResultTy parseOperandAsOperator(OperandVector &Operands); OperandMatchResultTy parseMemOperand(OperandVector &Operands); public: @@ -280,32 +263,6 @@ struct SBFOperand : public MCParsedAsmOperand { #define GET_MATCHER_IMPLEMENTATION #include "SBFGenAsmMatcher.inc" -bool SBFAsmParser::PreMatchCheck(OperandVector &Operands) { - - // These checks not needed for the new syntax. - if (isNewSyntax()) - return false; - - if (Operands.size() == 4) { - // check "reg1 = -reg2" and "reg1 = be16/be32/be64/le16/le32/le64 reg2", - // reg1 must be the same as reg2 - SBFOperand &Op0 = (SBFOperand &)*Operands[0]; - SBFOperand &Op1 = (SBFOperand &)*Operands[1]; - SBFOperand &Op2 = (SBFOperand &)*Operands[2]; - SBFOperand &Op3 = (SBFOperand &)*Operands[3]; - if (Op0.isReg() && Op1.isToken() && Op2.isToken() && Op3.isReg() - && Op1.getToken() == "=" - && (Op2.getToken() == "-" || Op2.getToken() == "be16" - || Op2.getToken() == "be32" || Op2.getToken() == "be64" - || Op2.getToken() == "le16" || Op2.getToken() == "le32" - || Op2.getToken() == "le64") - && Op0.getReg() != Op3.getReg()) - return true; - } - - return false; -} - bool SBFAsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, OperandVector &Operands, MCStreamer &Out, uint64_t &ErrorInfo, @@ -313,12 +270,7 @@ bool SBFAsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, MCInst Inst; SMLoc ErrorLoc; - if (PreMatchCheck(Operands)) - return Error(IDLoc, "additional inst constraint not met"); - - unsigned Dialect = getParser().getAssemblerDialect(); - switch (MatchInstructionImpl(Operands, Inst, ErrorInfo, MatchingInlineAsm, - Dialect)) { + switch (MatchInstructionImpl(Operands, Inst, ErrorInfo, MatchingInlineAsm)) { default: break; case Match_Success: @@ -372,75 +324,6 @@ OperandMatchResultTy SBFAsmParser::tryParseRegister(MCRegister &Reg, return MatchOperand_NoMatch; } -OperandMatchResultTy -SBFAsmParser::parseOperandAsOperator(OperandVector &Operands) { - if (isNewSyntax()) - llvm_unreachable("parseOperandAsOperator called for new syntax"); - - SMLoc S = getLoc(); - - if (getLexer().getKind() == AsmToken::Identifier) { - StringRef Name = getLexer().getTok().getIdentifier(); - - if (SBFOperand::isValidIdInMiddle(Name)) { - getLexer().Lex(); - Operands.push_back(SBFOperand::createToken(Name, S)); - return MatchOperand_Success; - } - - return MatchOperand_NoMatch; - } - - switch (getLexer().getKind()) { - case AsmToken::Minus: - case AsmToken::Plus: { - if (getLexer().peekTok().is(AsmToken::Integer)) - return MatchOperand_NoMatch; - [[fallthrough]]; - } - - case AsmToken::Equal: - case AsmToken::Greater: - case AsmToken::Less: - case AsmToken::Pipe: - case AsmToken::Star: - case AsmToken::LParen: - case AsmToken::RParen: - case AsmToken::LBrac: - case AsmToken::RBrac: - case AsmToken::Slash: - case AsmToken::Amp: - case AsmToken::Percent: - case AsmToken::Caret: { - StringRef Name = getLexer().getTok().getString(); - getLexer().Lex(); - Operands.push_back(SBFOperand::createToken(Name, S)); - - return MatchOperand_Success; - } - - case AsmToken::EqualEqual: - case AsmToken::ExclaimEqual: - case AsmToken::GreaterEqual: - case AsmToken::GreaterGreater: - case AsmToken::LessEqual: - case AsmToken::LessLess: { - Operands.push_back(SBFOperand::createToken( - getLexer().getTok().getString().substr(0, 1), S)); - Operands.push_back(SBFOperand::createToken( - getLexer().getTok().getString().substr(1, 1), S)); - getLexer().Lex(); - - return MatchOperand_Success; - } - - default: - break; - } - - return MatchOperand_NoMatch; -} - OperandMatchResultTy SBFAsmParser::parseRegister(OperandVector &Operands) { SMLoc S = getLoc(); SMLoc E = SMLoc::getFromPointer(S.getPointer() - 1); @@ -519,9 +402,6 @@ OperandMatchResultTy SBFAsmParser::parseMemOperand(OperandVector &Operands) { /// information, adding to Operands. If operand was parsed, returns false, else /// true. bool SBFAsmParser::parseOperand(OperandVector &Operands, StringRef Mnemonic) { - if (!isNewSyntax()) - llvm_unreachable("parseOperand called for old syntax"); - // Attempt to parse token as a register. if (parseRegister(Operands) == MatchOperand_Success) return false; @@ -544,10 +424,6 @@ bool SBFAsmParser::parseOperand(OperandVector &Operands, StringRef Mnemonic) { /// Parse an SBF instruction. bool SBFAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name, SMLoc NameLoc, OperandVector &Operands) { - if (!isNewSyntax()) { - return parseOldInstruction(Info, Name, NameLoc, Operands); - } - // First operand is token for instruction mnemonic. Operands.push_back(SBFOperand::createToken(Name, NameLoc)); @@ -581,71 +457,7 @@ bool SBFAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name, return false; } -/// Parse an SBF instruction which is in SBF verifier format (old syntax). -bool SBFAsmParser::parseOldInstruction(ParseInstructionInfo &Info, - StringRef Name, SMLoc NameLoc, - OperandVector &Operands) { - if (isNewSyntax()) - llvm_unreachable("parseOldInstruction called for new syntax"); - - // The first operand could be either register or actually an operator. - unsigned RegNo = MatchRegisterName(Name); - - if (RegNo != 0) { - SMLoc E = SMLoc::getFromPointer(NameLoc.getPointer() - 1); - Operands.push_back(SBFOperand::createReg(RegNo, NameLoc, E)); - } else if (SBFOperand::isValidIdAtStart (Name)) - Operands.push_back(SBFOperand::createToken(Name, NameLoc)); - else - return Error(NameLoc, "invalid register/token name"); - - while (!getLexer().is(AsmToken::EndOfStatement)) { - // Attempt to parse token as operator - if (parseOperandAsOperator(Operands) == MatchOperand_Success) - continue; - - // Attempt to parse token as register - if (parseRegister(Operands) == MatchOperand_Success) - continue; - - // Attempt to parse token as an immediate - if (parseImmediate(Operands) != MatchOperand_Success) { - SMLoc Loc = getLexer().getLoc(); - return Error(Loc, "unexpected token"); - } - } - - if (getLexer().isNot(AsmToken::EndOfStatement)) { - SMLoc Loc = getLexer().getLoc(); - - getParser().eatToEndOfStatement(); - - return Error(Loc, "unexpected token"); - } - - // Consume the EndOfStatement. - getParser().Lex(); - return false; -} - -bool SBFAsmParser::ParseDirective(AsmToken DirectiveID) { - // This returns false if this function recognizes the directive - // regardless of whether it is successfully handles or reports an - // error. Otherwise it returns true to give the generic parser a - // chance at recognizing it. - StringRef IDVal = DirectiveID.getString(); - - if (IDVal == ".syntax_old") { - getParser().setAssemblerDialect(1); - return false; - } - if (IDVal == ".syntax_new") { - getParser().setAssemblerDialect(0); - return false; - } - - return true; -} +bool SBFAsmParser::ParseDirective(AsmToken DirectiveID) { return true; } extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeSBFAsmParser() { RegisterMCAsmParser XX(getTheSBFXTarget()); diff --git a/llvm/lib/Target/SBF/CMakeLists.txt b/llvm/lib/Target/SBF/CMakeLists.txt index d4f2818f473f79..40f071e00e737d 100644 --- a/llvm/lib/Target/SBF/CMakeLists.txt +++ b/llvm/lib/Target/SBF/CMakeLists.txt @@ -4,7 +4,6 @@ set(LLVM_TARGET_DEFINITIONS SBF.td) tablegen(LLVM SBFGenAsmMatcher.inc -gen-asm-matcher) tablegen(LLVM SBFGenAsmWriter.inc -gen-asm-writer) -tablegen(LLVM SBFGenAsmWriter1.inc -gen-asm-writer -asmwriternum=1) tablegen(LLVM SBFGenCallingConv.inc -gen-callingconv) tablegen(LLVM SBFGenDAGISel.inc -gen-dag-isel) tablegen(LLVM SBFGenDisassemblerTables.inc -gen-disassembler) diff --git a/llvm/lib/Target/SBF/MCTargetDesc/SBFInstPrinter.cpp b/llvm/lib/Target/SBF/MCTargetDesc/SBFInstPrinter.cpp index c2dac7911231bb..d3d9ec4cd55fc0 100644 --- a/llvm/lib/Target/SBF/MCTargetDesc/SBFInstPrinter.cpp +++ b/llvm/lib/Target/SBF/MCTargetDesc/SBFInstPrinter.cpp @@ -25,7 +25,6 @@ using namespace llvm; // Include the auto-generated portion of the assembly writer. #include "SBFGenAsmWriter.inc" -#include "SBFGenAsmWriter1.inc" void SBFInstPrinter::printInst(const MCInst *MI, uint64_t Address, StringRef Annot, const MCSubtargetInfo &STI, diff --git a/llvm/lib/Target/SBF/MCTargetDesc/SBFInstPrinter.h b/llvm/lib/Target/SBF/MCTargetDesc/SBFInstPrinter.h index 8ba00f3e676995..b056d89392b112 100644 --- a/llvm/lib/Target/SBF/MCTargetDesc/SBFInstPrinter.h +++ b/llvm/lib/Target/SBF/MCTargetDesc/SBFInstPrinter.h @@ -36,26 +36,6 @@ class SBFInstPrinter : public MCInstPrinter { void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O); static const char *getRegisterName(MCRegister Reg); }; -class MachineInstr; - -class SBFLegacyInstPrinter : public SBFInstPrinter { -public: - SBFLegacyInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, - const MCRegisterInfo &MRI) - : SBFInstPrinter(MAI, MII, MRI) {} - - void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, - const MCSubtargetInfo &STI, raw_ostream &O) override { - printInstruction(MI, Address, O); - printAnnotation(O, Annot); - } - - // Autogenerated by tblgen. - std::pair getMnemonic(const MCInst *MI) override; - void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O); - static const char *getRegisterName(MCRegister Reg); -}; - } #endif diff --git a/llvm/lib/Target/SBF/MCTargetDesc/SBFMCAsmInfo.cpp b/llvm/lib/Target/SBF/MCTargetDesc/SBFMCAsmInfo.cpp index 9c80fc301fc0dc..5bf43703ef46da 100644 --- a/llvm/lib/Target/SBF/MCTargetDesc/SBFMCAsmInfo.cpp +++ b/llvm/lib/Target/SBF/MCTargetDesc/SBFMCAsmInfo.cpp @@ -17,12 +17,8 @@ using namespace llvm; -cl::opt SBFAsmWriterVariant( - "sbf-output-asm-variant", cl::Hidden, cl::init(0), - cl::desc("Choose output assembly variant (0 = sbf[default], 1 = legacy)")); - SBFMCAsmInfo::SBFMCAsmInfo(const Triple &TT, const MCTargetOptions &Options) { - AssemblerDialect = SBFAsmWriterVariant; + assert(AssemblerDialect == 0); PrivateGlobalPrefix = ".L"; WeakRefDirective = "\t.weak\t"; diff --git a/llvm/lib/Target/SBF/MCTargetDesc/SBFMCTargetDesc.cpp b/llvm/lib/Target/SBF/MCTargetDesc/SBFMCTargetDesc.cpp index 3b02cad05554d2..e4ef9701152749 100644 --- a/llvm/lib/Target/SBF/MCTargetDesc/SBFMCTargetDesc.cpp +++ b/llvm/lib/Target/SBF/MCTargetDesc/SBFMCTargetDesc.cpp @@ -80,8 +80,6 @@ static MCInstPrinter *createSBFMCInstPrinter(const Triple &T, const MCRegisterInfo &MRI) { if (SyntaxVariant == 0) return new SBFInstPrinter(MAI, MII, MRI); - if (SyntaxVariant == 1) - return new SBFLegacyInstPrinter(MAI, MII, MRI); return nullptr; } diff --git a/llvm/lib/Target/SBF/SBF.td b/llvm/lib/Target/SBF/SBF.td index ca4d689609e607..30520e99cad7d3 100644 --- a/llvm/lib/Target/SBF/SBF.td +++ b/llvm/lib/Target/SBF/SBF.td @@ -58,19 +58,11 @@ def SBFAsmWriter : AsmWriter { bit isMCAsmWriter = 1; } -def LegacyAsmWriter : AsmWriter { - let AsmWriterClassName = "LegacyInstPrinter"; - int Variant = 1; - int isMCAsmWriter = 1; -} - //===----------------------------------------------------------------------===// // Assembly parser //===----------------------------------------------------------------------===// -def SBFAsmParser : AsmParser { - bit HasMnemonicFirst = 0; -} +def SBFAsmParser : AsmParser; def SBFAsmParserVariant : AsmParserVariant { int Variant = 0; @@ -78,20 +70,13 @@ def SBFAsmParserVariant : AsmParserVariant { string BreakCharacters = "."; } -def LegacyAsmParserVariant : AsmParserVariant { - int Variant = 1; - string Name = "legacy"; - string BreakCharacters = "."; - string TokenizingCharacters = "#()[]=:.<>!+*/"; -} - //===----------------------------------------------------------------------===// // Target Declaration //===----------------------------------------------------------------------===// def SBF : Target { let InstructionSet = SBFInstrInfo; - let AssemblyWriters = [SBFAsmWriter, LegacyAsmWriter]; + let AssemblyWriters = [SBFAsmWriter]; let AssemblyParsers = [SBFAsmParser]; - let AssemblyParserVariants = [SBFAsmParserVariant, LegacyAsmParserVariant]; + let AssemblyParserVariants = [SBFAsmParserVariant]; } diff --git a/llvm/lib/Target/SBF/SBFAsmPrinter.cpp b/llvm/lib/Target/SBF/SBFAsmPrinter.cpp index 5f0dfd5346dd49..55a33e741029b5 100644 --- a/llvm/lib/Target/SBF/SBFAsmPrinter.cpp +++ b/llvm/lib/Target/SBF/SBFAsmPrinter.cpp @@ -34,7 +34,6 @@ using namespace llvm; #define DEBUG_TYPE "asm-printer" -extern cl::opt SBFAsmWriterVariant; static cl::opt SBFEnableBTFEmission( "sbf-enable-btf-emission", cl::Hidden, cl::init(false), cl::desc("Enable BTF debuginfo sections to be emitted")); @@ -138,15 +137,11 @@ bool SBFAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, if (ExtraCode) return true; // Unknown modifier. - if (SBFAsmWriterVariant == 1) - O << "("; O << SBFInstPrinter::getRegisterName(BaseMO.getReg()); if (Offset < 0) O << " - " << -Offset; else O << " + " << Offset; - if (SBFAsmWriterVariant == 1) - O << ")"; return false; } diff --git a/llvm/lib/Target/SBF/SBFInstrInfo.td b/llvm/lib/Target/SBF/SBFInstrInfo.td index dccadd934a9097..41a66c375408a9 100644 --- a/llvm/lib/Target/SBF/SBFInstrInfo.td +++ b/llvm/lib/Target/SBF/SBFInstrInfo.td @@ -155,12 +155,11 @@ class TYPE_LD_ST mode, bits<2> size, } // jump instructions -class JMP_RR +class JMP_RR : TYPE_ALU_JMP { bits<4> dst; bits<4> src; @@ -172,12 +171,11 @@ class JMP_RR let SBFClass = SBF_JMP; } -class JMP_RI +class JMP_RI : TYPE_ALU_JMP { bits<4> dst; bits<16> BrDst; @@ -189,12 +187,11 @@ class JMP_RI let SBFClass = SBF_JMP; } -class JMP_RR_32 +class JMP_RR_32 : TYPE_ALU_JMP { bits<4> dst; bits<4> src; @@ -206,12 +203,11 @@ class JMP_RR_32 let SBFClass = SBF_JMP32; } -class JMP_RI_32 +class JMP_RI_32 : TYPE_ALU_JMP { bits<4> dst; bits<16> BrDst; @@ -223,26 +219,25 @@ class JMP_RI_32 let SBFClass = SBF_JMP32; } -multiclass J { - def _rr : JMP_RR; - def _ri : JMP_RI; - def _rr_32 : JMP_RR_32; - def _ri_32 : JMP_RI_32; +multiclass J { + def _rr : JMP_RR; + def _ri : JMP_RI; + def _rr_32 : JMP_RR_32; + def _ri_32 : JMP_RI_32; } let isBranch = 1, isTerminator = 1, hasDelaySlot=0 in { // cmp+goto instructions -defm JEQ : J; -defm JUGT : J", SBF_CC_GTU, SBF_CC_GTU_32>; -defm JUGE : J=", SBF_CC_GEU, SBF_CC_GEU_32>; -defm JNE : J", SBF_CC_GT, SBF_CC_GT_32>; -defm JSGE : J=", SBF_CC_GE, SBF_CC_GE_32>; -defm JULT : J; -defm JULE : J; -defm JSLE : J; +defm JUGT : J; +defm JUGE : J; +defm JNE : J; +defm JSGT : J; +defm JSGE : J; +defm JULT : J; +defm JULE : J; +defm JSLT : J; +defm JSLE : J; } // ALU instructions @@ -268,51 +263,46 @@ class ALU_RR { +multiclass ALU { def _rr : ALU_RR; def _ri : ALU_RI; def _rr_32 : ALU_RR; def _ri_32 : ALU_RI; } let Constraints = "$dst = $src2" in { let isAsCheapAsAMove = 1 in { - defm ADD : ALU>=", srl>; - defm XOR : ALU>=", sra>; + defm ADD : ALU; + defm SUB : ALU; + defm OR : ALU; + defm AND : ALU; + defm SLL : ALU; + defm SRL : ALU; + defm XOR : ALU; + defm SRA : ALU; } - defm MUL : ALU; + defm MUL : ALU; + defm DIV : ALU; let Predicates = [SBFSubtargetSolana] in { - defm SDIV : ALU; + defm SDIV : ALU; } } @@ -327,19 +317,18 @@ class NEG_RR; def NEG_32: NEG_RR; } -class LD_IMM64 Pseudo, string Mnemonic, string OpcodeStr> +class LD_IMM64 Pseudo, string Mnemonic> : TYPE_LD_ST { bits<4> dst; @@ -353,26 +342,26 @@ class LD_IMM64 Pseudo, string Mnemonic, string OpcodeStr> } let isReMaterializable = 1, isAsCheapAsAMove = 1 in { -def LD_imm64 : LD_IMM64<0, "lddw", "=">; +def LD_imm64 : LD_IMM64<0, "lddw">; def MOV_rr : ALU_RR; def MOV_ri : ALU_RI; def MOV_rr_32 : ALU_RR; def MOV_ri_32 : ALU_RI; } @@ -411,13 +400,11 @@ def LD_pseudo } // STORE instructions -class STORE Pattern> +class STORE Pattern> : TYPE_LD_ST { bits<4> src; bits<20> addr; @@ -428,25 +415,22 @@ class STORE - : STORE; +class STOREi64 + : STORE; let Predicates = [SBFNoALU32] in { - def STW : STOREi64; - def STH : STOREi64; - def STB : STOREi64; + def STW : STOREi64; + def STH : STOREi64; + def STB : STOREi64; } -def STD : STOREi64; +def STD : STOREi64; // LOAD instructions -class LOAD Pattern> +class LOAD Pattern> : TYPE_LD_ST { bits<4> dst; bits<20> addr; @@ -457,9 +441,8 @@ class LOAD - : LOAD; +class LOADi64 + : LOAD; let isCodeGenOnly = 1 in { def CORE_MEM : TYPE_LD_ST; - def LDH : LOADi64; - def LDB : LOADi64; + def LDW : LOADi64; + def LDH : LOADi64; + def LDB : LOADi64; } -def LDD : LOADi64; +def LDD : LOADi64; -class BRANCH Pattern> +class BRANCH Pattern> : TYPE_ALU_JMP { bits<16> BrDst; @@ -529,7 +510,7 @@ class CALLX // Jump always let isBranch = 1, isTerminator = 1, hasDelaySlot=0, isBarrier = 1 in { - def JMP : BRANCH; + def JMP : BRANCH; } // Jump and link @@ -644,13 +625,11 @@ let Predicates = [SBFNoALU32] in { } // Atomic XADD for SBFNoALU32 -class XADD +class XADD : TYPE_LD_ST { bits<4> dst; bits<20> addr; @@ -664,17 +643,16 @@ class XADD; + def XADDW : XADD; } } // Atomic add, and, or, xor -class ATOMIC_NOFETCH +class ATOMIC_NOFETCH : TYPE_LD_ST { bits<4> dst; bits<20> addr; @@ -686,12 +664,11 @@ class ATOMIC_NOFETCH let SBFClass = SBF_STX; } -class ATOMIC32_NOFETCH +class ATOMIC32_NOFETCH : TYPE_LD_ST { bits<4> dst; bits<20> addr; @@ -705,26 +682,25 @@ class ATOMIC32_NOFETCH let Constraints = "$dst = $val" in { let Predicates = [SBFHasALU32], DecoderNamespace = "SBFALU32" in { - def XADDW32 : ATOMIC32_NOFETCH; - def XANDW32 : ATOMIC32_NOFETCH; - def XORW32 : ATOMIC32_NOFETCH; - def XXORW32 : ATOMIC32_NOFETCH; + def XADDW32 : ATOMIC32_NOFETCH; + def XANDW32 : ATOMIC32_NOFETCH; + def XORW32 : ATOMIC32_NOFETCH; + def XXORW32 : ATOMIC32_NOFETCH; } - def XADDD : ATOMIC_NOFETCH; - def XANDD : ATOMIC_NOFETCH; - def XORD : ATOMIC_NOFETCH; - def XXORD : ATOMIC_NOFETCH; + def XADDD : ATOMIC_NOFETCH; + def XANDD : ATOMIC_NOFETCH; + def XORD : ATOMIC_NOFETCH; + def XXORD : ATOMIC_NOFETCH; } // Atomic Fetch-and- operations -class XFALU64 +class XFALU64 : TYPE_LD_ST { bits<4> dst; bits<20> addr; @@ -737,13 +713,12 @@ class XFALU64 +class XFALU32 : TYPE_LD_ST { bits<4> dst; bits<20> addr; @@ -758,16 +733,16 @@ class XFALU32; - def XFANDW32 : XFALU32; - def XFORW32 : XFALU32; - def XFXORW32 : XFALU32; + def XFADDW32 : XFALU32; + def XFANDW32 : XFALU32; + def XFORW32 : XFALU32; + def XFXORW32 : XFALU32; } - def XFADDD : XFALU64; - def XFANDD : XFALU64; - def XFORD : XFALU64; - def XFXORD : XFALU64; + def XFADDD : XFALU64; + def XFANDD : XFALU64; + def XFORD : XFALU64; + def XFXORD : XFALU64; } // atomic_load_sub can be represented as a neg followed @@ -786,12 +761,11 @@ let Predicates = [SBFSubtargetSolana], usesCustomInserter = 1, isCodeGenOnly = 1 } // Atomic Exchange -class XCHG +class XCHG : TYPE_LD_ST { bits<4> dst; bits<20> addr; @@ -804,12 +778,11 @@ class XCHG let SBFClass = SBF_STX; } -class XCHG32 +class XCHG32 : TYPE_LD_ST { bits<4> dst; bits<20> addr; @@ -824,19 +797,18 @@ class XCHG32 let Constraints = "$dst = $val" in { let Predicates = [SBFHasALU32], DecoderNamespace = "SBFALU32" in { - def XCHGW32 : XCHG32; + def XCHGW32 : XCHG32; } - def XCHGD : XCHG; + def XCHGD : XCHG; } // Compare-And-Exchange -class CMPXCHG +class CMPXCHG : TYPE_LD_ST { bits<4> new; bits<20> addr; @@ -849,12 +821,11 @@ class CMPXCHG let SBFClass = SBF_STX; } -class CMPXCHG32 +class CMPXCHG32 : TYPE_LD_ST { bits<4> new; bits<20> addr; @@ -869,11 +840,11 @@ class CMPXCHG32 let Predicates = [SBFHasALU32], Defs = [W0], Uses = [W0], DecoderNamespace = "SBFALU32" in { - def CMPXCHGW32 : CMPXCHG32; + def CMPXCHGW32 : CMPXCHG32; } let Defs = [R0], Uses = [R0] in { - def CMPXCHGD : CMPXCHG; + def CMPXCHGD : CMPXCHG; } // bswap16, bswap32, bswap64 @@ -881,8 +852,7 @@ class BSWAP SizeOp, string OpcodeStr, SBFSrcType SrcType, list Pat : TYPE_ALU_JMP { bits<4> dst; @@ -907,13 +877,11 @@ let Constraints = "$dst = $src" in { let Defs = [R0, R1, R2, R3, R4, R5], Uses = [R6], hasSideEffects = 1, hasExtraDefRegAllocReq = 1, hasExtraSrcRegAllocReq = 1, mayLoad = 1 in { -class LOAD_ABS +class LOAD_ABS : TYPE_LD_ST { bits<32> imm; @@ -921,13 +889,11 @@ class LOAD_ABS +class LOAD_IND : TYPE_LD_ST { bits<4> val; @@ -936,18 +902,18 @@ class LOAD_IND; -def LD_ABS_H : LOAD_ABS; -def LD_ABS_W : LOAD_ABS; +def LD_ABS_B : LOAD_ABS; +def LD_ABS_H : LOAD_ABS; +def LD_ABS_W : LOAD_ABS; -def LD_IND_B : LOAD_IND; -def LD_IND_H : LOAD_IND; -def LD_IND_W : LOAD_IND; +def LD_IND_B : LOAD_IND; +def LD_IND_H : LOAD_IND; +def LD_IND_W : LOAD_IND; let isCodeGenOnly = 1 in { def MOV_32_64 : ALU_RR; + "mov32 $dst, $src", []>; } def : Pat<(i64 (sext GPR32:$src)), @@ -963,13 +929,11 @@ def : Pat<(i32 (trunc GPR:$src)), def : Pat<(i64 (anyext GPR32:$src)), (INSERT_SUBREG (i64 (IMPLICIT_DEF)), GPR32:$src, sub_32)>; -class STORE32 Pattern> +class STORE32 Pattern> : TYPE_LD_ST { bits<4> src; bits<20> addr; @@ -980,23 +944,20 @@ class STORE32 - : STORE32; +class STOREi32 + : STORE32; let Predicates = [SBFHasALU32], DecoderNamespace = "SBFALU32" in { - def STW32 : STOREi32; - def STH32 : STOREi32; - def STB32 : STOREi32; + def STW32 : STOREi32; + def STH32 : STOREi32; + def STB32 : STOREi32; } -class LOAD32 Pattern> +class LOAD32 Pattern> : TYPE_LD_ST { bits<4> dst; bits<20> addr; @@ -1007,14 +968,13 @@ class LOAD32 - : LOAD32; +class LOADi32 + : LOAD32; let Predicates = [SBFHasALU32], DecoderNamespace = "SBFALU32" in { - def LDW32 : LOADi32; - def LDH32 : LOADi32; - def LDB32 : LOADi32; + def LDW32 : LOADi32; + def LDH32 : LOADi32; + def LDB32 : LOADi32; } let Predicates = [SBFHasALU32] in { diff --git a/llvm/test/CodeGen/SBF/inline_asm.ll b/llvm/test/CodeGen/SBF/inline_asm.ll deleted file mode 100644 index 7a82c58a325997..00000000000000 --- a/llvm/test/CodeGen/SBF/inline_asm.ll +++ /dev/null @@ -1,53 +0,0 @@ -; RUN: llc < %s -march=sbf -verify-machineinstrs --sbf-output-asm-variant=1 | FileCheck %s - -; Source code: -; int g[2]; -; -; int test(void *ctx) { -; int a = 4, b; -; unsigned long long c = 333333333333ULL; -; asm volatile("r0 = *(u16 *)skb[%0]" : : "i"(2)); -; asm volatile("r0 = *(u16 *)skb[%0]" : : "r"(a)); -; asm volatile("%0 = %1" : "=r"(b) : "i"(4)); -; asm volatile("%0 = %1 ll" : "=r"(b) : "i"(c)); -; asm volatile("%0 = *(u16 *) %1" : "=r"(b) : "m"(a)); -; asm volatile("%0 = *(u32 *) %1" : "=r"(b) : "m"(g[1])); -; return b; -; } -; - -@g = common global [2 x i32] zeroinitializer, align 4 - -; Function Attrs: nounwind -define i32 @test(i8* nocapture readnone %ctx) local_unnamed_addr #0 { -entry: - %a = alloca i32, align 4 - %0 = bitcast i32* %a to i8* - call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %0) #2 - store i32 4, i32* %a, align 4 - tail call void asm sideeffect ".syntax_old r0 = *(u16 *)skb[$0]", "i"(i32 2) #2 -; CHECK: r0 = *(u16 *)skb[2] - tail call void asm sideeffect ".syntax_old r0 = *(u16 *)skb[$0]", "r"(i32 4) #2 -; CHECK: r0 = *(u16 *)skb[r1] - %1 = tail call i32 asm sideeffect ".syntax_old $0 = $1", "=r,i"(i32 4) #2 -; CHECK: r1 = 4 - %2 = tail call i32 asm sideeffect ".syntax_old $0 = $1 ll", "=r,i"(i64 333333333333) #2 -; CHECK: r1 = 333333333333 ll - %3 = call i32 asm sideeffect ".syntax_old $0 = *(u16 *) $1", "=r,*m"(i32* elementtype(i32) nonnull %a) #2 -; CHECK: r1 = *(u16 *)(r10 - 4) - %4 = call i32 asm sideeffect ".syntax_old $0 = *(u32 *) $1", "=r,*m"(i32* elementtype(i32) getelementptr inbounds ([2 x i32], [2 x i32]* @g, i64 0, i64 1)) #2 -; CHECK: r1 = g ll -; CHECK: r0 = *(u32 *)(r1 + 4) - call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %0) #2 - ret i32 %4 -} - -; Function Attrs: argmemonly nounwind -declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1 - -; Function Attrs: argmemonly nounwind -declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1 - -attributes #0 = { nounwind } -attributes #1 = { argmemonly nounwind } -attributes #2 = { nounwind } diff --git a/llvm/test/CodeGen/SBF/inlineasm-wreg.ll b/llvm/test/CodeGen/SBF/inlineasm-wreg.ll index 09782f47dcb1d4..6a3840a68f3d48 100644 --- a/llvm/test/CodeGen/SBF/inlineasm-wreg.ll +++ b/llvm/test/CodeGen/SBF/inlineasm-wreg.ll @@ -1,17 +1,17 @@ -; RUN: llc < %s -march=sbf -mattr=+alu32 --sbf-output-asm-variant=1 -verify-machineinstrs | FileCheck %s +; RUN: llc < %s -march=sbf -mattr=+alu32 -verify-machineinstrs | FileCheck %s ; Test that %w works as input constraint ; CHECK-LABEL: test_inlineasm_w_input_constraint define dso_local i32 @test_inlineasm_w_input_constraint() { - tail call void asm sideeffect ".syntax_old w0 = $0", "w"(i32 42) -; CHECK: w0 = w1 + tail call void asm sideeffect "mov32 w0, $0", "w"(i32 42) +; CHECK: mov32 w0, w1 ret i32 42 } ; Test that %w works as output constraint ; CHECK-LABEL: test_inlineasm_w_output_constraint define dso_local i32 @test_inlineasm_w_output_constraint() { - %1 = tail call i32 asm sideeffect ".syntax_old $0 = $1", "=w,i"(i32 42) -; CHECK: w0 = 42 + %1 = tail call i32 asm sideeffect "mov32 $0, $1", "=w,i"(i32 42) +; CHECK: mov32 w0, 42 ret i32 %1 } diff --git a/llvm/test/MC/Disassembler/SBF/sbf-alu.txt b/llvm/test/MC/Disassembler/SBF/sbf-alu.txt index b70c389be29a8f..148512dda57272 100644 --- a/llvm/test/MC/Disassembler/SBF/sbf-alu.txt +++ b/llvm/test/MC/Disassembler/SBF/sbf-alu.txt @@ -1,329 +1,253 @@ # RUN: llvm-mc --disassemble %s -triple=sbf-solana-solana \ # RUN: | FileCheck %s --check-prefix=CHECK-NEW -# RUN: llvm-mc --disassemble %s -triple=sbf-solana-solana \ -# RUN: --output-asm-variant=1 | FileCheck %s --check-prefix=CHECK-OLD # TODO: Test immediate field ranges and some hex immediates. # CHECK-NEW: add64 r0, r9 -# CHECK-OLD: r0 += r9 0x0f,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: add64 r3, r2 -# CHECK-OLD: r3 += r2 0x0f,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: add64 r3, 123 -# CHECK-OLD: r3 += 123 0x07,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: add64 r5, -123 -# CHECK-OLD: r5 += -123 0x07,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: add32 w6, w2 -# CHECK-OLD: w6 += w2 0x0c,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: add32 w5, -123 -# CHECK-OLD: w5 += -123 0x04,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: sub64 r0, r9 -# CHECK-OLD: r0 -= r9 0x1f,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: sub64 r3, r2 -# CHECK-OLD: r3 -= r2 0x1f,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: sub64 r3, 123 -# CHECK-OLD: r3 -= 123 0x17,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: sub64 r5, -123 -# CHECK-OLD: r5 -= -123 0x17,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: sub32 w6, w2 -# CHECK-OLD: w6 -= w2 0x1c,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: sub32 w5, -123 -# CHECK-OLD: w5 -= -123 0x14,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: mul64 r0, r9 -# CHECK-OLD: r0 *= r9 0x2f,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: mul64 r3, r2 -# CHECK-OLD: r3 *= r2 0x2f,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: mul64 r3, 123 -# CHECK-OLD: r3 *= 123 0x27,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: mul64 r5, -123 -# CHECK-OLD: r5 *= -123 0x27,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: mul32 w6, w2 -# CHECK-OLD: w6 *= w2 0x2c,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: mul32 w5, -123 -# CHECK-OLD: w5 *= -123 0x24,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: div64 r0, r9 -# CHECK-OLD: r0 /= r9 0x3f,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: div64 r3, r2 -# CHECK-OLD: r3 /= r2 0x3f,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: div64 r3, 123 -# CHECK-OLD: r3 /= 123 0x37,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: div64 r5, -123 -# CHECK-OLD: r5 /= -123 0x37,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: div32 w6, w2 -# CHECK-OLD: w6 /= w2 0x3c,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: div32 w5, -123 -# CHECK-OLD: w5 /= -123 0x34,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: sdiv64 r0, r9 -# CHECK-OLD: r0 s/= r9 0xef,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: sdiv64 r3, r2 -# CHECK-OLD: r3 s/= r2 0xef,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: sdiv64 r3, 123 -# CHECK-OLD: r3 s/= 123 0xe7,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: sdiv64 r5, -123 -# CHECK-OLD: r5 s/= -123 0xe7,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: sdiv32 w6, w2 -# CHECK-OLD: w6 s/= w2 0xec,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: sdiv32 w5, -123 -# CHECK-OLD: w5 s/= -123 0xe4,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: or64 r0, r9 -# CHECK-OLD: r0 |= r9 0x4f,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: or64 r3, r2 -# CHECK-OLD: r3 |= r2 0x4f,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: or64 r3, 123 -# CHECK-OLD: r3 |= 123 0x47,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: or64 r5, -123 -# CHECK-OLD: r5 |= -123 0x47,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: or32 w6, w2 -# CHECK-OLD: w6 |= w2 0x4c,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: or32 w5, -123 -# CHECK-OLD: w5 |= -123 0x44,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: and64 r0, r9 -# CHECK-OLD: r0 &= r9 0x5f,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: and64 r3, r2 -# CHECK-OLD: r3 &= r2 0x5f,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: and64 r3, 123 -# CHECK-OLD: r3 &= 123 0x57,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: and64 r5, -123 -# CHECK-OLD: r5 &= -123 0x57,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: and32 w6, w2 -# CHECK-OLD: w6 &= w2 0x5c,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: and32 w5, -123 -# CHECK-OLD: w5 &= -123 0x54,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: xor64 r0, r9 -# CHECK-OLD: r0 ^= r9 0xaf,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: xor64 r3, r2 -# CHECK-OLD: r3 ^= r2 0xaf,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: xor64 r3, 123 -# CHECK-OLD: r3 ^= 123 0xa7,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: xor64 r5, -123 -# CHECK-OLD: r5 ^= -123 0xa7,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: xor32 w6, w2 -# CHECK-OLD: w6 ^= w2 0xac,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: xor32 w5, -123 -# CHECK-OLD: w5 ^= -123 0xa4,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: lsh64 r0, r9 -# CHECK-OLD: r0 <<= r9 0x6f,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: lsh64 r3, r2 -# CHECK-OLD: r3 <<= r2 0x6f,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: lsh64 r3, 123 -# CHECK-OLD: r3 <<= 123 0x67,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: lsh64 r5, -123 -# CHECK-OLD: r5 <<= -123 0x67,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: lsh32 w6, w2 -# CHECK-OLD: w6 <<= w2 0x6c,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: lsh32 w5, -123 -# CHECK-OLD: w5 <<= -123 0x64,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: rsh64 r0, r9 -# CHECK-OLD: r0 >>= r9 0x7f,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: rsh64 r3, r2 -# CHECK-OLD: r3 >>= r2 0x7f,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: rsh64 r3, 123 -# CHECK-OLD: r3 >>= 123 0x77,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: rsh64 r5, -123 -# CHECK-OLD: r5 >>= -123 0x77,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: rsh32 w6, w2 -# CHECK-OLD: w6 >>= w2 0x7c,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: rsh32 w5, -123 -# CHECK-OLD: w5 >>= -123 0x74,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: arsh64 r0, r9 -# CHECK-OLD: r0 s>>= r9 0xcf,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: arsh64 r3, r2 -# CHECK-OLD: r3 s>>= r2 0xcf,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: arsh64 r3, 123 -# CHECK-OLD: r3 s>>= 123 0xc7,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: arsh64 r5, -123 -# CHECK-OLD: r5 s>>= -123 0xc7,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: arsh32 w6, w2 -# CHECK-OLD: w6 s>>= w2 0xcc,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: arsh32 w5, -123 -# CHECK-OLD: w5 s>>= -123 0xc4,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: neg64 r9 -# CHECK-OLD: r9 = -r9 0x87,0x09,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: neg32 w6 -# CHECK-OLD: w6 = -w6 0x84,0x06,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: mov64 r0, r9 -# CHECK-OLD: r0 = r9 0xbf,0x90,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: mov64 r3, r2 -# CHECK-OLD: r3 = r2 0xbf,0x23,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: mov64 r3, 123 -# CHECK-OLD: r3 = 123 0xb7,0x03,0x00,0x00,0x7b,0x00,0x00,0x00 # CHECK-NEW: mov64 r5, -123 -# CHECK-OLD: r5 = -123 0xb7,0x05,0x00,0x00,0x85,0xff,0xff,0xff # CHECK-NEW: mov32 w6, w2 -# CHECK-OLD: w6 = w2 0xbc,0x26,0x00,0x00,0x00,0x00,0x00,0x00 # CHECK-NEW: mov32 w5, -123 -# CHECK-OLD: w5 = -123 0xb4,0x05,0x00,0x00,0x85,0xff,0xff,0xff @@ -334,12 +258,6 @@ # CHECK-NEW: be16 r0 # CHECK-NEW: be32 r1 # CHECK-NEW: be64 r2 -# CHECK-OLD: r3 = le16 r3 -# CHECK-OLD: r4 = le32 r4 -# CHECK-OLD: r5 = le64 r5 -# CHECK-OLD: r0 = be16 r0 -# CHECK-OLD: r1 = be32 r1 -# CHECK-OLD: r2 = be64 r2 0xd4,0x03,0x00,0x00,0x10,0x00,0x00,0x00 0xd4,0x04,0x00,0x00,0x20,0x00,0x00,0x00 0xd4,0x05,0x00,0x00,0x40,0x00,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/SBF/sbf-jmp.txt b/llvm/test/MC/Disassembler/SBF/sbf-jmp.txt index 95ebdc74a85804..c3852b1ddef075 100644 --- a/llvm/test/MC/Disassembler/SBF/sbf-jmp.txt +++ b/llvm/test/MC/Disassembler/SBF/sbf-jmp.txt @@ -1,7 +1,5 @@ # RUN: llvm-mc --disassemble %s -triple=sbf-solana-solana \ # RUN: | FileCheck %s --check-prefix=CHECK-NEW -# RUN: llvm-mc --disassemble %s -triple=sbf-solana-solana \ -# RUN: --output-asm-variant=1 | FileCheck %s --check-prefix=CHECK-OLD # TODO: Test immediate field ranges. @@ -24,16 +22,6 @@ # CHECK-NEW: jsge r0, r9, +1 # CHECK-NEW: jslt r0, r9, +1 # CHECK-NEW: jsle r0, r9, +1 -# CHECK-OLD: if r0 == r9 goto +1 -# CHECK-OLD: if r0 != r9 goto +1 -# CHECK-OLD: if r0 > r9 goto +1 -# CHECK-OLD: if r0 >= r9 goto +1 -# CHECK-OLD: if r0 < r9 goto +1 -# CHECK-OLD: if r0 <= r9 goto +1 -# CHECK-OLD: if r0 s> r9 goto +1 -# CHECK-OLD: if r0 s>= r9 goto +1 -# CHECK-OLD: if r0 s< r9 goto +1 -# CHECK-OLD: if r0 s<= r9 goto +1 0x1d,0x90,0x01,0x00,0x00,0x00,0x00,0x00 0x5d,0x90,0x01,0x00,0x00,0x00,0x00,0x00 0x2d,0x90,0x01,0x00,0x00,0x00,0x00,0x00 @@ -55,16 +43,6 @@ # CHECK-NEW: jsge r3, r2, +1 # CHECK-NEW: jslt r3, r2, +1 # CHECK-NEW: jsle r3, r2, +1 -# CHECK-OLD: if r3 == r2 goto +1 -# CHECK-OLD: if r3 != r2 goto +1 -# CHECK-OLD: if r3 > r2 goto +1 -# CHECK-OLD: if r3 >= r2 goto +1 -# CHECK-OLD: if r3 < r2 goto +1 -# CHECK-OLD: if r3 <= r2 goto +1 -# CHECK-OLD: if r3 s> r2 goto +1 -# CHECK-OLD: if r3 s>= r2 goto +1 -# CHECK-OLD: if r3 s< r2 goto +1 -# CHECK-OLD: if r3 s<= r2 goto +1 0x1d,0x23,0x01,0x00,0x00,0x00,0x00,0x00 0x5d,0x23,0x01,0x00,0x00,0x00,0x00,0x00 0x2d,0x23,0x01,0x00,0x00,0x00,0x00,0x00 @@ -86,16 +64,6 @@ # CHECK-NEW: jsge r3, 123, +8 # CHECK-NEW: jslt r3, 123, +8 # CHECK-NEW: jsle r3, 123, +8 -# CHECK-OLD: if r3 == 123 goto +8 -# CHECK-OLD: if r3 != 123 goto +8 -# CHECK-OLD: if r3 > 123 goto +8 -# CHECK-OLD: if r3 >= 123 goto +8 -# CHECK-OLD: if r3 < 123 goto +8 -# CHECK-OLD: if r3 <= 123 goto +8 -# CHECK-OLD: if r3 s> 123 goto +8 -# CHECK-OLD: if r3 s>= 123 goto +8 -# CHECK-OLD: if r3 s< 123 goto +8 -# CHECK-OLD: if r3 s<= 123 goto +8 0x15,0x03,0x08,0x00,0x7b,0x00,0x00,0x00 0x55,0x03,0x08,0x00,0x7b,0x00,0x00,0x00 0x25,0x03,0x08,0x00,0x7b,0x00,0x00,0x00 @@ -117,16 +85,6 @@ # CHECK-NEW: jsge r5, -123, +8 # CHECK-NEW: jslt r5, -123, +8 # CHECK-NEW: jsle r5, -123, +8 -# CHECK-OLD: if r5 == -123 goto +8 -# CHECK-OLD: if r5 != -123 goto +8 -# CHECK-OLD: if r5 > -123 goto +8 -# CHECK-OLD: if r5 >= -123 goto +8 -# CHECK-OLD: if r5 < -123 goto +8 -# CHECK-OLD: if r5 <= -123 goto +8 -# CHECK-OLD: if r5 s> -123 goto +8 -# CHECK-OLD: if r5 s>= -123 goto +8 -# CHECK-OLD: if r5 s< -123 goto +8 -# CHECK-OLD: if r5 s<= -123 goto +8 0x15,0x05,0x08,0x00,0x85,0xff,0xff,0xff 0x55,0x05,0x08,0x00,0x85,0xff,0xff,0xff 0x25,0x05,0x08,0x00,0x85,0xff,0xff,0xff @@ -148,16 +106,6 @@ # CHECK-NEW: jsge w6, w2, +8 # CHECK-NEW: jslt w6, w2, +8 # CHECK-NEW: jsle w6, w2, +8 -# CHECK-OLD: if w6 == w2 goto +8 -# CHECK-OLD: if w6 != w2 goto +8 -# CHECK-OLD: if w6 > w2 goto +8 -# CHECK-OLD: if w6 >= w2 goto +8 -# CHECK-OLD: if w6 < w2 goto +8 -# CHECK-OLD: if w6 <= w2 goto +8 -# CHECK-OLD: if w6 s> w2 goto +8 -# CHECK-OLD: if w6 s>= w2 goto +8 -# CHECK-OLD: if w6 s< w2 goto +8 -# CHECK-OLD: if w6 s<= w2 goto +8 0x1e,0x26,0x08,0x00,0x00,0x00,0x00,0x00 0x5e,0x26,0x08,0x00,0x00,0x00,0x00,0x00 0x2e,0x26,0x08,0x00,0x00,0x00,0x00,0x00 @@ -179,12 +127,6 @@ # CHECK-NEW: jsge w5, -123, +8 # CHECK-NEW: jslt w5, -123, +8 # CHECK-NEW: jsle w5, -123, +8 -# CHECK-OLD: if w5 == -123 goto +8 -# CHECK-OLD: if w5 != -123 goto +8 -# CHECK-OLD: if w5 s> -123 goto +8 -# CHECK-OLD: if w5 s>= -123 goto +8 -# CHECK-OLD: if w5 s< -123 goto +8 -# CHECK-OLD: if w5 s<= -123 goto +8 0x16,0x05,0x08,0x00,0x85,0xff,0xff,0xff 0x56,0x05,0x08,0x00,0x85,0xff,0xff,0xff 0x26,0x05,0x08,0x00,0x85,0xff,0xff,0xff @@ -198,13 +140,10 @@ # CHECK-NEW: call 8 -# CHECK-OLD: call 8 0x85,0x00,0x00,0x00,0x08,0x00,0x00,0x00 # CHECK-NEW: callx r4 -# CHECK-OLD: callx r4 0x8d,0x00,0x00,0x00,0x04,0x00,0x00,0x00 # CHECK-NEW: exit -# CHECK-OLD: exit 0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/SBF/sbf-ldst.txt b/llvm/test/MC/Disassembler/SBF/sbf-ldst.txt index 3257416ce00613..ddf58181190761 100644 --- a/llvm/test/MC/Disassembler/SBF/sbf-ldst.txt +++ b/llvm/test/MC/Disassembler/SBF/sbf-ldst.txt @@ -1,20 +1,13 @@ # RUN: llvm-mc --disassemble %s -triple=sbf-solana-solana \ # RUN: | FileCheck %s --check-prefix=CHECK-NEW -# RUN: llvm-mc --disassemble %s -triple=sbf-solana-solana \ -# RUN: --output-asm-variant=1 | FileCheck %s --check-prefix=CHECK-OLD # RUN: llvm-mc --disassemble %s -triple=sbf-solana-solana -mattr=+alu32 \ # RUN: | FileCheck %s --check-prefix=CHECK32-NEW -# RUN: llvm-mc --disassemble %s -triple=sbf-solana-solana -mattr=+alu32 \ -# RUN: --output-asm-variant=1 | FileCheck %s --check-prefix=CHECK32-OLD # TODO: Test immediate field ranges and some hex immediates. # CHECK-NEW: lddw r7, 32768 # CHECK-NEW: lddw r0, 9151314442816847872 # CHECK-NEW: lddw r1, -1 -# CHECK-OLD: r7 = 32768 ll -# CHECK-OLD: r0 = 9151314442816847872 ll -# CHECK-OLD: r1 = -1 ll 0x18,0x07,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f 0x18,0x01,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff @@ -26,11 +19,6 @@ # CHECK-NEW: ldxh r8, [r2 + 32] # CHECK-NEW: ldxw r4, [r3 + 64] # CHECK-NEW: ldxdw r0, [r4 + 128] -# CHECK-OLD: r6 = *(u8 *)(r1 + 17) -# CHECK-OLD: r1 = *(u8 *)(r10 - 3) -# CHECK-OLD: r8 = *(u16 *)(r2 + 32) -# CHECK-OLD: r4 = *(u32 *)(r3 + 64) -# CHECK-OLD: r0 = *(u64 *)(r4 + 128) 0x71,0x16,0x11,0x00,0x00,0x00,0x00,0x00 0x71,0xa1,0xfd,0xff,0x00,0x00,0x00,0x00 0x69,0x28,0x20,0x00,0x00,0x00,0x00,0x00 @@ -43,10 +31,6 @@ # CHECK32-NEW: ldxb w1, [r10 - 3] # CHECK32-NEW: ldxh w8, [r2 + 32] # CHECK32-NEW: ldxw w4, [r3 + 64] -# CHECK32-OLD: w6 = *(u8 *)(r1 + 17) -# CHECK32-OLD: w1 = *(u8 *)(r10 - 3) -# CHECK32-OLD: w8 = *(u16 *)(r2 + 32) -# CHECK32-OLD: w4 = *(u32 *)(r3 + 64) 0x71,0x16,0x11,0x00,0x00,0x00,0x00,0x00 0x71,0xa1,0xfd,0xff,0x00,0x00,0x00,0x00 0x69,0x28,0x20,0x00,0x00,0x00,0x00,0x00 @@ -59,11 +43,6 @@ # CHECK-NEW: stxh [r2 + 32], r8 # CHECK-NEW: stxw [r3 + 64], r4 # CHECK-NEW: stxdw [r4 + 128], r0 -# CHECK-OLD: *(u8 *)(r1 + 17) = r6 -# CHECK-OLD: *(u8 *)(r10 - 3) = r1 -# CHECK-OLD: *(u16 *)(r2 + 32) = r8 -# CHECK-OLD: *(u32 *)(r3 + 64) = r4 -# CHECK-OLD: *(u64 *)(r4 + 128) = r0 0x73,0x61,0x11,0x00,0x00,0x00,0x00,0x00 0x73,0x1a,0xfd,0xff,0x00,0x00,0x00,0x00 0x6b,0x82,0x20,0x00,0x00,0x00,0x00,0x00 @@ -76,10 +55,6 @@ # CHECK32-NEW: stxb [r10 - 3], w1 # CHECK32-NEW: stxh [r2 + 32], w8 # CHECK32-NEW: stxw [r3 + 64], w4 -# CHECK32-OLD: *(u8 *)(r1 + 17) = w6 -# CHECK32-OLD: *(u8 *)(r10 - 3) = w1 -# CHECK32-OLD: *(u16 *)(r2 + 32) = w8 -# CHECK32-OLD: *(u32 *)(r3 + 64) = w4 0x73,0x61,0x11,0x00,0x00,0x00,0x00,0x00 0x73,0x1a,0xfd,0xff,0x00,0x00,0x00,0x00 0x6b,0x82,0x20,0x00,0x00,0x00,0x00,0x00 @@ -88,7 +63,6 @@ # XADDW (NoALU32). # CHECK-NEW: stxxaddw [r8 + 4], r2 -# CHECK-OLD: lock *(u32 *)(r8 + 4) += r2 0xc3,0x28,0x04,0x00,0x00,0x00,0x00,0x00 @@ -98,10 +72,6 @@ # CHECK-NEW: stxxanddw [r8 - 32], r1 # CHECK-NEW: stxxordw [r8 - 64], r2 # CHECK-NEW: stxxxordw [r8 - 128], r3 -# CHECK-OLD: lock *(u64 *)(r8 - 16) += r0 -# CHECK-OLD: lock *(u64 *)(r8 - 32) &= r1 -# CHECK-OLD: lock *(u64 *)(r8 - 64) |= r2 -# CHECK-OLD: lock *(u64 *)(r8 - 128) ^= r3 0xdb,0x08,0xf0,0xff,0x00,0x00,0x00,0x00 0xdb,0x18,0xe0,0xff,0x50,0x00,0x00,0x00 0xdb,0x28,0xc0,0xff,0x40,0x00,0x00,0x00 @@ -114,10 +84,6 @@ # CHECK32-NEW: stxxandw [r8 - 32], w5 # CHECK32-NEW: stxxorw [r8 - 64], w6 # CHECK32-NEW: stxxxorw [r8 - 128], w7 -# CHECK32-OLD: lock *(u32 *)(r8 - 16) += w4 -# CHECK32-OLD: lock *(u32 *)(r8 - 32) &= w5 -# CHECK32-OLD: lock *(u32 *)(r8 - 64) |= w6 -# CHECK32-OLD: lock *(u32 *)(r8 - 128) ^= w7 0xc3,0x48,0xf0,0xff,0x00,0x00,0x00,0x00 0xc3,0x58,0xe0,0xff,0x50,0x00,0x00,0x00 0xc3,0x68,0xc0,0xff,0x40,0x00,0x00,0x00 @@ -130,10 +96,6 @@ # CHECK-NEW: stxxfanddw [r8 - 32], r1 # CHECK-NEW: stxxfordw [r8 - 64], r2 # CHECK-NEW: stxxfxordw [r8 - 128], r3 -# CHECK-OLD: r0 = atomic_fetch_add((u64 *)(r8 - 16), r0) -# CHECK-OLD: r1 = atomic_fetch_and((u64 *)(r8 - 32), r1) -# CHECK-OLD: r2 = atomic_fetch_or((u64 *)(r8 - 64), r2) -# CHECK-OLD: r3 = atomic_fetch_xor((u64 *)(r8 - 128), r3) 0xdb,0x08,0xf0,0xff,0x01,0x00,0x00,0x00 0xdb,0x18,0xe0,0xff,0x51,0x00,0x00,0x00 0xdb,0x28,0xc0,0xff,0x41,0x00,0x00,0x00 @@ -146,10 +108,6 @@ # CHECK32-NEW: stxxfandw [r8 - 32], w1 # CHECK32-NEW: stxxforw [r8 - 64], w2 # CHECK32-NEW: stxxfxorw [r8 - 128], w3 -# CHECK32-OLD: w0 = atomic_fetch_add((u32 *)(r8 - 16), w0) -# CHECK32-OLD: w1 = atomic_fetch_and((u32 *)(r8 - 32), w1) -# CHECK32-OLD: w2 = atomic_fetch_or((u32 *)(r8 - 64), w2) -# CHECK32-OLD: w3 = atomic_fetch_xor((u32 *)(r8 - 128), w3) 0xc3,0x08,0xf0,0xff,0x01,0x00,0x00,0x00 0xc3,0x18,0xe0,0xff,0x51,0x00,0x00,0x00 0xc3,0x28,0xc0,0xff,0x41,0x00,0x00,0x00 @@ -159,9 +117,7 @@ # XCHGD, XCHGW32 # CHECK-NEW: stxxchgdw [r8 - 16], r7 -# CHECK-OLD: r7 = xchg_64(r8 - 16, r7) # CHECK32-NEW: stxxchgw [r8 - 16], w0 -# CHECK32-OLD: w0 = xchg32_32(r8 - 16, w0) 0xdb,0x78,0xf0,0xff,0xe1,0x00,0x00,0x00 0xc3,0x08,0xf0,0xff,0xe1,0x00,0x00,0x00 @@ -169,9 +125,7 @@ # CMPXCHGD, CMPXCHGW32 # CHECK-NEW: stxcmpxchgdw [r8 - 16], r5 -# CHECK-OLD: r0 = cmpxchg_64(r8 - 16, r0, r5) # CHECK32-NEW: stxcmpxchgw [r8 - 16], w5 -# CHECK32-OLD: w0 = cmpxchg32_32(r8 - 16, w0, w5) 0xdb,0x58,0xf0,0xff,0xf1,0x00,0x00,0x00 0xc3,0x58,0xf0,0xff,0xf1,0x00,0x00,0x00 @@ -184,12 +138,6 @@ # CHECK-NEW: ldindb r5 # CHECK-NEW: ldindh r9 # CHECK-NEW: ldindw r7 -# CHECK-OLD: r0 = *(u8 *)skb[64] -# CHECK-OLD: r0 = *(u16 *)skb[128] -# CHECK-OLD: r0 = *(u32 *)skb[0] -# CHECK-OLD: r0 = *(u8 *)skb[r5] -# CHECK-OLD: r0 = *(u16 *)skb[r9] -# CHECK-OLD: r0 = *(u32 *)skb[r7] 0x30,0x00,0x00,0x00,0x40,0x00,0x00,0x00 0x28,0x00,0x00,0x00,0x80,0x00,0x00,0x00 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/llvm/test/MC/SBF/insn-unit-32.s b/llvm/test/MC/SBF/insn-unit-32.s index 12b7555c053d3d..198b4dcae79558 100644 --- a/llvm/test/MC/SBF/insn-unit-32.s +++ b/llvm/test/MC/SBF/insn-unit-32.s @@ -1,105 +1,103 @@ # RUN: llvm-mc -triple sbf --mcpu=sbfv2 -filetype=obj -o %t %s -# RUN: llvm-objdump --output-asm-variant=1 -d -r %t | FileCheck %s -# RUN: llvm-objdump --output-asm-variant=1 --mattr=+alu32 -d -r %t | FileCheck %s - -.syntax_old +# RUN: llvm-objdump -d -r %t | FileCheck %s +# RUN: llvm-objdump --mattr=+alu32 -d -r %t | FileCheck %s // ======== BPF_ALU Class ======== - w1 = -w1 // BPF_NEG - w0 += w1 // BPF_ADD | BPF_X - w1 -= w2 // BPF_SUB | BPF_X - w2 *= w3 // BPF_MUL | BPF_X - w3 /= w4 // BPF_DIV | BPF_X -// CHECK: 84 01 00 00 00 00 00 00 w1 = -w1 -// CHECK: 0c 10 00 00 00 00 00 00 w0 += w1 -// CHECK: 1c 21 00 00 00 00 00 00 w1 -= w2 -// CHECK: 2c 32 00 00 00 00 00 00 w2 *= w3 -// CHECK: 3c 43 00 00 00 00 00 00 w3 /= w4 + neg32 w1 // BPF_NEG + add32 w0, w1 // BPF_ADD | BPF_X + sub32 w1, w2 // BPF_SUB | BPF_X + mul32 w2, w3 // BPF_MUL | BPF_X + div32 w3, w4 // BPF_DIV | BPF_X +// CHECK: 84 01 00 00 00 00 00 00 neg32 w1 +// CHECK: 0c 10 00 00 00 00 00 00 add32 w0, w1 +// CHECK: 1c 21 00 00 00 00 00 00 sub32 w1, w2 +// CHECK: 2c 32 00 00 00 00 00 00 mul32 w2, w3 +// CHECK: 3c 43 00 00 00 00 00 00 div32 w3, w4 - w4 |= w5 // BPF_OR | BPF_X - w5 &= w6 // BPF_AND | BPF_X - w6 <<= w7 // BPF_LSH | BPF_X - w7 >>= w8 // BPF_RSH | BPF_X - w8 ^= w9 // BPF_XOR | BPF_X - w9 = w10 // BPF_MOV | BPF_X - w10 s>>= w0 // BPF_ARSH | BPF_X -// CHECK: 4c 54 00 00 00 00 00 00 w4 |= w5 -// CHECK: 5c 65 00 00 00 00 00 00 w5 &= w6 -// CHECK: 6c 76 00 00 00 00 00 00 w6 <<= w7 -// CHECK: 7c 87 00 00 00 00 00 00 w7 >>= w8 -// CHECK: ac 98 00 00 00 00 00 00 w8 ^= w9 -// CHECK: bc a9 00 00 00 00 00 00 w9 = w10 -// CHECK: cc 0a 00 00 00 00 00 00 w10 s>>= w0 + or32 w4, w5 // BPF_OR | BPF_X + and32 w5, w6 // BPF_AND | BPF_X + lsh32 w6, w7 // BPF_LSH | BPF_X + rsh32 w7, w8 // BPF_RSH | BPF_X + xor32 w8, w9 // BPF_XOR | BPF_X + mov32 w9, w10 // BPF_MOV | BPF_X + arsh32 w10, w0 // BPF_ARSH | BPF_X +// CHECK: 4c 54 00 00 00 00 00 00 or32 w4, w5 +// CHECK: 5c 65 00 00 00 00 00 00 and32 w5, w6 +// CHECK: 6c 76 00 00 00 00 00 00 lsh32 w6, w7 +// CHECK: 7c 87 00 00 00 00 00 00 rsh32 w7, w8 +// CHECK: ac 98 00 00 00 00 00 00 xor32 w8, w9 +// CHECK: bc a9 00 00 00 00 00 00 mov32 w9, w10 +// CHECK: cc 0a 00 00 00 00 00 00 arsh32 w10, w0 - w0 += 1 // BPF_ADD | BPF_K - w1 -= 0x1 // BPF_SUB | BPF_K - w2 *= -4 // BPF_MUL | BPF_K - w3 /= 5 // BPF_DIV | BPF_K -// CHECK: 04 00 00 00 01 00 00 00 w0 += 0x1 -// CHECK: 14 01 00 00 01 00 00 00 w1 -= 0x1 -// CHECK: 24 02 00 00 fc ff ff ff w2 *= -0x4 -// CHECK: 34 03 00 00 05 00 00 00 w3 /= 0x5 + add32 w0, 1 // BPF_ADD | BPF_K + sub32 w1, 0x1 // BPF_SUB | BPF_K + mul32 w2, -4 // BPF_MUL | BPF_K + div32 w3, 5 // BPF_DIV | BPF_K +// CHECK: 04 00 00 00 01 00 00 00 add32 w0, 0x1 +// CHECK: 14 01 00 00 01 00 00 00 sub32 w1, 0x1 +// CHECK: 24 02 00 00 fc ff ff ff mul32 w2, -0x4 +// CHECK: 34 03 00 00 05 00 00 00 div32 w3, 0x5 - w4 |= 0xff // BPF_OR | BPF_K - w5 &= 0xFF // BPF_AND | BPF_K - w6 <<= 63 // BPF_LSH | BPF_K - w7 >>= 32 // BPF_RSH | BPF_K - w8 ^= 0 // BPF_XOR | BPF_K - w9 = 1 // BPF_MOV | BPF_K - w9 = 0xffffffff // BPF_MOV | BPF_K - w10 s>>= 64 // BPF_ARSH | BPF_K -// CHECK: 44 04 00 00 ff 00 00 00 w4 |= 0xff -// CHECK: 54 05 00 00 ff 00 00 00 w5 &= 0xff -// CHECK: 64 06 00 00 3f 00 00 00 w6 <<= 0x3f -// CHECK: 74 07 00 00 20 00 00 00 w7 >>= 0x20 -// CHECK: a4 08 00 00 00 00 00 00 w8 ^= 0x0 -// CHECK: b4 09 00 00 01 00 00 00 w9 = 0x1 -// CHECK: b4 09 00 00 ff ff ff ff w9 = -0x1 -// CHECK: c4 0a 00 00 40 00 00 00 w10 s>>= 0x40 + or32 w4, 0xff // BPF_OR | BPF_K + and32 w5, 0xFF // BPF_AND | BPF_K + lsh32 w6, 63 // BPF_LSH | BPF_K + rsh32 w7, 32 // BPF_RSH | BPF_K + xor32 w8, 0 // BPF_XOR | BPF_K + mov32 w9, 1 // BPF_MOV | BPF_K + mov32 w9, 0xffffffff // BPF_MOV | BPF_K + arsh32 w10, 64 // BPF_ARSH | BPF_K +// CHECK: 44 04 00 00 ff 00 00 00 or32 w4, 0xff +// CHECK: 54 05 00 00 ff 00 00 00 and32 w5, 0xff +// CHECK: 64 06 00 00 3f 00 00 00 lsh32 w6, 0x3f +// CHECK: 74 07 00 00 20 00 00 00 rsh32 w7, 0x20 +// CHECK: a4 08 00 00 00 00 00 00 xor32 w8, 0x0 +// CHECK: b4 09 00 00 01 00 00 00 mov32 w9, 0x1 +// CHECK: b4 09 00 00 ff ff ff ff mov32 w9, -0x1 +// CHECK: c4 0a 00 00 40 00 00 00 arsh32 w10, 0x40 - if w0 == w1 goto Llabel0 // BPF_JEQ | BPF_X - if w3 != w4 goto Llabel0 // BPF_JNE | BPF_X -// CHECK: 1e 10 0b 00 00 00 00 00 if w0 == w1 goto +0xb -// CHECK: 5e 43 0a 00 00 00 00 00 if w3 != w4 goto +0xa + jeq w0, w1, Llabel0 // BPF_JEQ | BPF_X + jne w3, w4, Llabel0 // BPF_JNE | BPF_X +// CHECK: 1e 10 0b 00 00 00 00 00 jeq w0, w1, +0xb +// CHECK: 5e 43 0a 00 00 00 00 00 jne w3, w4, +0xa - if w1 > w2 goto Llabel0 // BPF_JGT | BPF_X - if w2 >= w3 goto Llabel0 // BPF_JGE | BPF_X - if w4 s> w5 goto Llabel0 // BPF_JSGT | BPF_X - if w5 s>= w6 goto Llabel0 // BPF_JSGE | BPF_X -// CHECK: 2e 21 09 00 00 00 00 00 if w1 > w2 goto +0x9 -// CHECK: 3e 32 08 00 00 00 00 00 if w2 >= w3 goto +0x8 -// CHECK: 6e 54 07 00 00 00 00 00 if w4 s> w5 goto +0x7 -// CHECK: 7e 65 06 00 00 00 00 00 if w5 s>= w6 goto +0x6 + jgt w1, w2, Llabel0 // BPF_JGT | BPF_X + jge w2, w3, Llabel0 // BPF_JGE | BPF_X + jsgt w4, w5, Llabel0 // BPF_JSGT | BPF_X + jsge w5, w6, Llabel0 // BPF_JSGE | BPF_X +// CHECK: 2e 21 09 00 00 00 00 00 jgt w1, w2, +0x9 +// CHECK: 3e 32 08 00 00 00 00 00 jge w2, w3, +0x8 +// CHECK: 6e 54 07 00 00 00 00 00 jsgt w4, w5, +0x7 +// CHECK: 7e 65 06 00 00 00 00 00 jsge w5, w6, +0x6 - if w6 < w7 goto Llabel0 // BPF_JLT | BPF_X - if w7 <= w8 goto Llabel0 // BPF_JLE | BPF_X - if w8 s< w9 goto Llabel0 // BPF_JSLT | BPF_X - if w9 s<= w10 goto Llabel0 // BPF_JSLE | BPF_X -// CHECK: ae 76 05 00 00 00 00 00 if w6 < w7 goto +0x5 -// CHECK: be 87 04 00 00 00 00 00 if w7 <= w8 goto +0x4 -// CHECK: ce 98 03 00 00 00 00 00 if w8 s< w9 goto +0x3 -// CHECK: de a9 02 00 00 00 00 00 if w9 s<= w10 goto +0x2 + jlt w6, w7, Llabel0 // BPF_JLT | BPF_X + jle w7, w8, Llabel0 // BPF_JLE | BPF_X + jslt w8, w9, Llabel0 // BPF_JSLT | BPF_X + jsle w9, w10, Llabel0 // BPF_JSLE | BPF_X +// CHECK: ae 76 05 00 00 00 00 00 jlt w6, w7, +0x5 +// CHECK: be 87 04 00 00 00 00 00 jle w7, w8, +0x4 +// CHECK: ce 98 03 00 00 00 00 00 jslt w8, w9, +0x3 +// CHECK: de a9 02 00 00 00 00 00 jsle w9, w10, +0x2 - if w0 == 0 goto Llabel0 // BPF_JEQ | BPF_K - if w3 != -1 goto Llabel0 // BPF_JNE | BPF_K -// CHECK: 16 00 01 00 00 00 00 00 if w0 == 0x0 goto +0x1 -// CHECK: 56 03 00 00 ff ff ff ff if w3 != -0x1 goto +0x0 + jeq w0, 0, Llabel0 // BPF_JEQ | BPF_K + jne w3, -1, Llabel0 // BPF_JNE | BPF_K +// CHECK: 16 00 01 00 00 00 00 00 jeq w0, 0x0, +0x1 +// CHECK: 56 03 00 00 ff ff ff ff jne w3, -0x1, +0x0 Llabel0 : - if w1 > 64 goto Llabel0 // BPF_JGT | BPF_K - if w2 >= 0xffffffff goto Llabel0 // BPF_JGE | BPF_K - if w4 s> 0xffffffff goto Llabel0 // BPF_JSGT | BPF_K - if w5 s>= 0x7fffffff goto Llabel0 // BPF_JSGE | BPF_K -// CHECK: 26 01 ff ff 40 00 00 00 if w1 > 0x40 goto -0x1 -// CHECK: 36 02 fe ff ff ff ff ff if w2 >= -0x1 goto -0x2 -// CHECK: 66 04 fd ff ff ff ff ff if w4 s> -0x1 goto -0x3 -// CHECK: 76 05 fc ff ff ff ff 7f if w5 s>= 0x7fffffff goto -0x4 + jgt w1, 64, Llabel0 // BPF_JGT | BPF_K + jge w2, 0xffffffff, Llabel0 // BPF_JGE | BPF_K + jsgt w4, 0xffffffff, Llabel0 // BPF_JSGT | BPF_K + jsge w5, 0x7fffffff, Llabel0 // BPF_JSGE | BPF_K +// CHECK: 26 01 ff ff 40 00 00 00 jgt w1, 0x40, -0x1 +// CHECK: 36 02 fe ff ff ff ff ff jge w2, -0x1, -0x2 +// CHECK: 66 04 fd ff ff ff ff ff jsgt w4, -0x1, -0x3 +// CHECK: 76 05 fc ff ff ff ff 7f jsge w5, 0x7fffffff, -0x4 - if w6 < 0xff goto Llabel0 // BPF_JLT | BPF_K - if w7 <= 0xffff goto Llabel0 // BPF_JLE | BPF_K - if w8 s< 0 goto Llabel0 // BPF_JSLT | BPF_K - if w9 s<= -1 goto Llabel0 // BPF_JSLE | BPF_K -// CHECK: a6 06 fb ff ff 00 00 00 if w6 < 0xff goto -0x5 -// CHECK: b6 07 fa ff ff ff 00 00 if w7 <= 0xffff goto -0x6 -// CHECK: c6 08 f9 ff 00 00 00 00 if w8 s< 0x0 goto -0x7 -// CHECK: d6 09 f8 ff ff ff ff ff if w9 s<= -0x1 goto -0x8 + jlt w6, 0xff, Llabel0 // BPF_JLT | BPF_K + jle w7, 0xffff, Llabel0 // BPF_JLE | BPF_K + jslt w8, 0, Llabel0 // BPF_JSLT | BPF_K + jsle w9, -1, Llabel0 // BPF_JSLE | BPF_K +// CHECK: a6 06 fb ff ff 00 00 00 jlt w6, 0xff, -0x5 +// CHECK: b6 07 fa ff ff ff 00 00 jle w7, 0xffff, -0x6 +// CHECK: c6 08 f9 ff 00 00 00 00 jslt w8, 0x0, -0x7 +// CHECK: d6 09 f8 ff ff ff ff ff jsle w9, -0x1, -0x8 diff --git a/llvm/test/MC/SBF/insn-unit.s b/llvm/test/MC/SBF/insn-unit.s index 96b9b6004be1a7..3d85a9c9394e44 100644 --- a/llvm/test/MC/SBF/insn-unit.s +++ b/llvm/test/MC/SBF/insn-unit.s @@ -1,180 +1,159 @@ # RUN: llvm-mc -triple sbf --mcpu=sbfv2 -filetype=obj -o %t %s -# RUN: llvm-objdump --output-asm-variant=1 -d -r %t | FileCheck --check-prefixes CHECK,CHECK-64 %s -# RUN: llvm-objdump --output-asm-variant=1 --mattr=+alu32 -d -r %t | FileCheck --check-prefixes CHECK,CHECK-32 %s - -.syntax_old +# RUN: llvm-objdump -d -r %t | FileCheck --check-prefixes CHECK,CHECK-64 %s +# RUN: llvm-objdump --mattr=+alu32 -d -r %t | FileCheck --check-prefixes CHECK,CHECK-32 %s // ======== BPF_LD Class ======== // Some extra whitespaces are deliberately added to test the parser. - r0 = * (u8 *)skb[0] // BPF_LD | BPF_ABS | BPF_B - r0 = *(u16 *)skb[2] // BPF_LD | BPF_ABS | BPF_H - r0 = * (u32*)skb[4] // BPF_LD | BPF_ABS | BPF_W -// CHECK: 30 00 00 00 00 00 00 00 r0 = *(u8 *)skb[0x0] -// CHECK: 28 00 00 00 02 00 00 00 r0 = *(u16 *)skb[0x2] -// CHECK: 20 00 00 00 04 00 00 00 r0 = *(u32 *)skb[0x4] - - r0 = * (u8 *)skb[r0] // BPF_LD | BPF_IND | BPF_B - r0 = * (u16 *)skb[r1] // BPF_LD | BPF_IND | BPF_H - r0 = *(u32 *)skb[r2] // BPF_LD | BPF_IND | BPF_W -// CHECK: 50 00 00 00 00 00 00 00 r0 = *(u8 *)skb[r0] -// CHECK: 48 10 00 00 00 00 00 00 r0 = *(u16 *)skb[r1] -// CHECK: 40 20 00 00 00 00 00 00 r0 = *(u32 *)skb[r2] - - r9 = 0xffffffff ll // BPF_LD | BPF_DW | BPF_IMM - r9 = 8589934591 ll // BPF_LD | BPF_DW | BPF_IMM - r9 = 0x1ffffffff ll // BPF_LD | BPF_DW | BPF_IMM - r9 = dummy_map ll // BPF_LD | BPF_DW | BPF_IMM -// CHECK: 18 09 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 r9 = 0xffffffff ll -// CHECK: 18 09 00 00 ff ff ff ff 00 00 00 00 01 00 00 00 r9 = 0x1ffffffff ll -// CHECK: 18 09 00 00 ff ff ff ff 00 00 00 00 01 00 00 00 r9 = 0x1ffffffff ll -// CHECK: 18 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 r9 = 0x0 ll -// CHECK: 0000000000000060: R_SBF_64_64 dummy_map + + lddw r9, 0xffffffff // BPF_LD | BPF_DW | BPF_IMM + lddw r9, 8589934591 // BPF_LD | BPF_DW | BPF_IMM + lddw r9, 0x1ffffffff // BPF_LD | BPF_DW | BPF_IMM + lddw r9, dummy_map // BPF_LD | BPF_DW | BPF_IMM +// CHECK: 18 09 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 lddw r9, 0xffffffff +// CHECK: 18 09 00 00 ff ff ff ff 00 00 00 00 01 00 00 00 lddw r9, 0x1ffffffff +// CHECK: 18 09 00 00 ff ff ff ff 00 00 00 00 01 00 00 00 lddw r9, 0x1ffffffff +// CHECK: 18 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 lddw r9, 0x0 +// CHECK: 0000000000000030: R_SBF_64_64 dummy_map // ======== BPF_LDX Class ======== - r5 = *(u8 *)(r0 + 0) // BPF_LDX | BPF_B - r6 = *(u16 *)(r1 + 8) // BPF_LDX | BPF_H - r7 = *(u32 *)(r2 + 16) // BPF_LDX | BPF_W - r8 = *(u64 *)(r3 - 30) // BPF_LDX | BPF_DW -// CHECK-64: 71 05 00 00 00 00 00 00 r5 = *(u8 *)(r0 + 0x0) -// CHECK-64: 69 16 08 00 00 00 00 00 r6 = *(u16 *)(r1 + 0x8) -// CHECK-64: 61 27 10 00 00 00 00 00 r7 = *(u32 *)(r2 + 0x10) -// CHECK-32: 71 05 00 00 00 00 00 00 w5 = *(u8 *)(r0 + 0x0) -// CHECK-32: 69 16 08 00 00 00 00 00 w6 = *(u16 *)(r1 + 0x8) -// CHECK-32: 61 27 10 00 00 00 00 00 w7 = *(u32 *)(r2 + 0x10) -// CHECK: 79 38 e2 ff 00 00 00 00 r8 = *(u64 *)(r3 - 0x1e) + ldxb r5, [r0 + 0] // BPF_LDX | BPF_B + ldxh r6, [r1 + 8] // BPF_LDX | BPF_H + ldxw r7, [r2 + 16] // BPF_LDX | BPF_W + ldxdw r8, [r3 - 30] // BPF_LDX | BPF_DW +// CHECK-64: 71 05 00 00 00 00 00 00 ldxb r5, [r0 + 0x0] +// CHECK-64: 69 16 08 00 00 00 00 00 ldxh r6, [r1 + 0x8] +// CHECK-64: 61 27 10 00 00 00 00 00 ldxw r7, [r2 + 0x10] +// CHECK-32: 71 05 00 00 00 00 00 00 ldxb w5, [r0 + 0x0] +// CHECK-32: 69 16 08 00 00 00 00 00 ldxh w6, [r1 + 0x8] +// CHECK-32: 61 27 10 00 00 00 00 00 ldxw w7, [r2 + 0x10] +// CHECK: 79 38 e2 ff 00 00 00 00 ldxdw r8, [r3 - 0x1e] // ======== BPF_STX Class ======== - *(u8 *)(r0 + 0) = r7 // BPF_STX | BPF_B - *(u16 *)(r1 + 8) = r8 // BPF_STX | BPF_H - *(u32 *)(r2 + 16) = r9 // BPF_STX | BPF_W - *(u64 *)(r3 - 30) = r10 // BPF_STX | BPF_DW -// CHECK-64: 73 70 00 00 00 00 00 00 *(u8 *)(r0 + 0x0) = r7 -// CHECK-64: 6b 81 08 00 00 00 00 00 *(u16 *)(r1 + 0x8) = r8 -// CHECK-64: 63 92 10 00 00 00 00 00 *(u32 *)(r2 + 0x10) = r9 -// CHECK-32: 73 70 00 00 00 00 00 00 *(u8 *)(r0 + 0x0) = w7 -// CHECK-32: 6b 81 08 00 00 00 00 00 *(u16 *)(r1 + 0x8) = w8 -// CHECK-32: 63 92 10 00 00 00 00 00 *(u32 *)(r2 + 0x10) = w9 -// CHECK: 7b a3 e2 ff 00 00 00 00 *(u64 *)(r3 - 0x1e) = r10 - - lock *(u32 *)(r2 + 16) += r9 // BPF_STX | BPF_W | BPF_XADD - lock *(u64 *)(r3 - 30) += r10 // BPF_STX | BPF_DW | BPF_XADD -// CHECK-64: c3 92 10 00 00 00 00 00 lock *(u32 *)(r2 + 0x10) += r9 -// CHECK-32: c3 92 10 00 00 00 00 00 lock *(u32 *)(r2 + 0x10) += w9 -// CHECK: db a3 e2 ff 00 00 00 00 lock *(u64 *)(r3 - 0x1e) += r10 + stxb [r0 + 0], r7 // BPF_STX | BPF_B + stxh [r1 + 8], r8 // BPF_STX | BPF_H + stxw [r2 + 16], r9 // BPF_STX | BPF_W + stxdw [r3 - 30], r10 // BPF_STX | BPF_DW +// CHECK-64: 73 70 00 00 00 00 00 00 stxb [r0 + 0x0], r7 +// CHECK-64: 6b 81 08 00 00 00 00 00 stxh [r1 + 0x8], r8 +// CHECK-64: 63 92 10 00 00 00 00 00 stxw [r2 + 0x10], r9 +// CHECK-32: 73 70 00 00 00 00 00 00 stxb [r0 + 0x0], w7 +// CHECK-32: 6b 81 08 00 00 00 00 00 stxh [r1 + 0x8], w8 +// CHECK-32: 63 92 10 00 00 00 00 00 stxw [r2 + 0x10], w9 +// CHECK: 7b a3 e2 ff 00 00 00 00 stxdw [r3 - 0x1e], r10 // ======== BPF_JMP Class ======== - goto Llabel0 // BPF_JA + ja Llabel0 // BPF_JA call 1 // BPF_CALL exit // BPF_EXIT -// CHECK: 05 00 1a 00 00 00 00 00 goto +0x1a +// CHECK: 05 00 1a 00 00 00 00 00 ja +0x1a // CHECK: 85 00 00 00 01 00 00 00 call 0x1 // CHECK: 95 00 00 00 00 00 00 00 exit - if r0 == r1 goto Llabel0 // BPF_JEQ | BPF_X - if r3 != r4 goto Llabel0 // BPF_JNE | BPF_X -// CHECK: 1d 10 17 00 00 00 00 00 if r0 == r1 goto +0x17 -// CHECK: 5d 43 16 00 00 00 00 00 if r3 != r4 goto +0x16 - - if r1 > r2 goto Llabel0 // BPF_JGT | BPF_X - if r2 >= r3 goto Llabel0 // BPF_JGE | BPF_X - if r4 s> r5 goto Llabel0 // BPF_JSGT | BPF_X - if r5 s>= r6 goto Llabel0 // BPF_JSGE | BPF_X -// CHECK: 2d 21 15 00 00 00 00 00 if r1 > r2 goto +0x15 -// CHECK: 3d 32 14 00 00 00 00 00 if r2 >= r3 goto +0x14 -// CHECK: 6d 54 13 00 00 00 00 00 if r4 s> r5 goto +0x13 -// CHECK: 7d 65 12 00 00 00 00 00 if r5 s>= r6 goto +0x12 - - if r6 < r7 goto Llabel0 // BPF_JLT | BPF_X - if r7 <= r8 goto Llabel0 // BPF_JLE | BPF_X - if r8 s< r9 goto Llabel0 // BPF_JSLT | BPF_X - if r9 s<= r10 goto Llabel0 // BPF_JSLE | BPF_X -// CHECK: ad 76 11 00 00 00 00 00 if r6 < r7 goto +0x11 -// CHECK: bd 87 10 00 00 00 00 00 if r7 <= r8 goto +0x10 -// CHECK: cd 98 0f 00 00 00 00 00 if r8 s< r9 goto +0xf -// CHECK: dd a9 0e 00 00 00 00 00 if r9 s<= r10 goto +0xe - - if r0 == 0 goto Llabel0 // BPF_JEQ | BPF_K - if r3 != -1 goto Llabel0 // BPF_JNE | BPF_K -// CHECK: 15 00 0d 00 00 00 00 00 if r0 == 0x0 goto +0xd -// CHECK: 55 03 0c 00 ff ff ff ff if r3 != -0x1 goto +0xc - - if r1 > 64 goto Llabel0 // BPF_JGT | BPF_K - if r2 >= 0xffffffff goto Llabel0 // BPF_JGE | BPF_K - if r4 s> 0xffffffff goto Llabel0 // BPF_JSGT | BPF_K - if r5 s>= 0x7fffffff goto Llabel0 // BPF_JSGE | BPF_K -// CHECK: 25 01 0b 00 40 00 00 00 if r1 > 0x40 goto +0xb -// CHECK: 35 02 0a 00 ff ff ff ff if r2 >= -0x1 goto +0xa -// CHECK: 65 04 09 00 ff ff ff ff if r4 s> -0x1 goto +0x9 -// CHECK: 75 05 08 00 ff ff ff 7f if r5 s>= 0x7fffffff goto +0x8 - - if r6 < 0xff goto Llabel0 // BPF_JLT | BPF_K - if r7 <= 0xffff goto Llabel0 // BPF_JLE | BPF_K - if r8 s< 0 goto Llabel0 // BPF_JSLT | BPF_K - if r9 s<= -1 goto Llabel0 // BPF_JSLE | BPF_K -// CHECK: a5 06 07 00 ff 00 00 00 if r6 < 0xff goto +0x7 -// CHECK: b5 07 06 00 ff ff 00 00 if r7 <= 0xffff goto +0x6 -// CHECK: c5 08 05 00 00 00 00 00 if r8 s< 0x0 goto +0x5 -// CHECK: d5 09 04 00 ff ff ff ff if r9 s<= -0x1 goto +0x4 + jeq r0, r1, Llabel0 // BPF_JEQ | BPF_X + jne r3, r4, Llabel0 // BPF_JNE | BPF_X +// CHECK: 1d 10 17 00 00 00 00 00 jeq r0, r1, +0x17 +// CHECK: 5d 43 16 00 00 00 00 00 jne r3, r4, +0x16 + + jgt r1, r2, Llabel0 // BPF_JGT | BPF_X + jge r2, r3, Llabel0 // BPF_JGE | BPF_X + jsgt r4, r5, Llabel0 // BPF_JSGT | BPF_X + jsge r5, r6, Llabel0 // BPF_JSGE | BPF_X +// CHECK: 2d 21 15 00 00 00 00 00 jgt r1, r2, +0x15 +// CHECK: 3d 32 14 00 00 00 00 00 jge r2, r3, +0x14 +// CHECK: 6d 54 13 00 00 00 00 00 jsgt r4, r5, +0x13 +// CHECK: 7d 65 12 00 00 00 00 00 jsge r5, r6, +0x12 + + jlt r6, r7, Llabel0 // BPF_JLT | BPF_X + jle r7, r8, Llabel0 // BPF_JLE | BPF_X + jslt r8, r9, Llabel0 // BPF_JSLT | BPF_X + jsle r9, r10, Llabel0 // BPF_JSLE | BPF_X +// CHECK: ad 76 11 00 00 00 00 00 jlt r6, r7, +0x11 +// CHECK: bd 87 10 00 00 00 00 00 jle r7, r8, +0x10 +// CHECK: cd 98 0f 00 00 00 00 00 jslt r8, r9, +0xf +// CHECK: dd a9 0e 00 00 00 00 00 jsle r9, r10, +0xe + + jeq r0, 0, Llabel0 // BPF_JEQ | BPF_K + jne r3, -1, Llabel0 // BPF_JNE | BPF_K +// CHECK: 15 00 0d 00 00 00 00 00 jeq r0, 0x0, +0xd +// CHECK: 55 03 0c 00 ff ff ff ff jne r3, -0x1, +0xc + + jgt r1, 64, Llabel0 // BPF_JGT | BPF_K + jge r2, 0xffffffff, Llabel0 // BPF_JGE | BPF_K + jsgt r4, 0xffffffff, Llabel0 // BPF_JSGT | BPF_K + jsge r5, 0x7fffffff, Llabel0 // BPF_JSGE | BPF_K +// CHECK: 25 01 0b 00 40 00 00 00 jgt r1, 0x40, +0xb +// CHECK: 35 02 0a 00 ff ff ff ff jge r2, -0x1, +0xa +// CHECK: 65 04 09 00 ff ff ff ff jsgt r4, -0x1, +0x9 +// CHECK: 75 05 08 00 ff ff ff 7f jsge r5, 0x7fffffff, +0x8 + + jlt r6, 0xff, Llabel0 // BPF_JLT | BPF_K + jle r7, 0xffff, Llabel0 // BPF_JLE | BPF_K + jslt r8, 0, Llabel0 // BPF_JSLT | BPF_K + jsle r9, -1, Llabel0 // BPF_JSLE | BPF_K +// CHECK: a5 06 07 00 ff 00 00 00 jlt r6, 0xff, +0x7 +// CHECK: b5 07 06 00 ff ff 00 00 jle r7, 0xffff, +0x6 +// CHECK: c5 08 05 00 00 00 00 00 jslt r8, 0x0, +0x5 +// CHECK: d5 09 04 00 ff ff ff ff jsle r9, -0x1, +0x4 // ======== BPF_ALU64 Class ======== - r0 += r1 // BPF_ADD | BPF_X - r1 -= r2 // BPF_SUB | BPF_X - r2 *= r3 // BPF_MUL | BPF_X - r3 /= r4 // BPF_DIV | BPF_X -// CHECK: 0f 10 00 00 00 00 00 00 r0 += r1 -// CHECK: 1f 21 00 00 00 00 00 00 r1 -= r2 -// CHECK: 2f 32 00 00 00 00 00 00 r2 *= r3 -// CHECK: 3f 43 00 00 00 00 00 00 r3 /= r4 + add64 r0, r1 // BPF_ADD | BPF_X + sub64 r1, r2 // BPF_SUB | BPF_X + mul64 r2, r3 // BPF_MUL | BPF_X + div64 r3, r4 // BPF_DIV | BPF_X +// CHECK: 0f 10 00 00 00 00 00 00 add64 r0, r1 +// CHECK: 1f 21 00 00 00 00 00 00 sub64 r1, r2 +// CHECK: 2f 32 00 00 00 00 00 00 mul64 r2, r3 +// CHECK: 3f 43 00 00 00 00 00 00 div64 r3, r4 Llabel0 : - r2 = -r2 // BPF_NEG - r4 |= r5 // BPF_OR | BPF_X - r5 &= r6 // BPF_AND | BPF_X - r6 <<= r7 // BPF_LSH | BPF_X - r7 >>= r8 // BPF_RSH | BPF_X - r8 ^= r9 // BPF_XOR | BPF_X - r9 = r10 // BPF_MOV | BPF_X - r10 s>>= r0 // BPF_ARSH | BPF_X + neg64 r2 // BPF_NEG + or64 r4, r5 // BPF_OR | BPF_X + and64 r5, r6 // BPF_AND | BPF_X + lsh64 r6, r7 // BPF_LSH | BPF_X + rsh64 r7, r8 // BPF_RSH | BPF_X + xor64 r8, r9 // BPF_XOR | BPF_X + mov64 r9, r10 // BPF_MOV | BPF_X + arsh64 r10, r0 // BPF_ARSH | BPF_X // CHECK: : -// CHECK: 87 02 00 00 00 00 00 00 r2 = -r2 -// CHECK: 4f 54 00 00 00 00 00 00 r4 |= r5 -// CHECK: 5f 65 00 00 00 00 00 00 r5 &= r6 -// CHECK: 6f 76 00 00 00 00 00 00 r6 <<= r7 -// CHECK: 7f 87 00 00 00 00 00 00 r7 >>= r8 -// CHECK: af 98 00 00 00 00 00 00 r8 ^= r9 -// CHECK: bf a9 00 00 00 00 00 00 r9 = r10 -// CHECK: cf 0a 00 00 00 00 00 00 r10 s>>= r0 - - r1 = be16 r1 // BPF_END | BPF_TO_BE - r2 = be32 r2 // BPF_END | BPF_TO_BE - r3 = be64 r3 // BPF_END | BPF_TO_BE -// CHECK: dc 01 00 00 10 00 00 00 r1 = be16 r1 -// CHECK: dc 02 00 00 20 00 00 00 r2 = be32 r2 -// CHECK: dc 03 00 00 40 00 00 00 r3 = be64 r3 - - r0 += 1 // BPF_ADD | BPF_K - r1 -= 0x1 // BPF_SUB | BPF_K - r2 *= -4 // BPF_MUL | BPF_K - r3 /= 5 // BPF_DIV | BPF_K -// CHECK: 07 00 00 00 01 00 00 00 r0 += 0x1 -// CHECK: 17 01 00 00 01 00 00 00 r1 -= 0x1 -// CHECK: 27 02 00 00 fc ff ff ff r2 *= -0x4 -// CHECK: 37 03 00 00 05 00 00 00 r3 /= 0x5 - - r4 |= 0xff // BPF_OR | BPF_K - r5 &= 0xFF // BPF_AND | BPF_K - r6 <<= 63 // BPF_LSH | BPF_K - r7 >>= 32 // BPF_RSH | BPF_K - r8 ^= 0 // BPF_XOR | BPF_K - r9 = 1 // BPF_MOV | BPF_K - r9 = 0xffffffff // BPF_MOV | BPF_K - r10 s>>= 64 // BPF_ARSH | BPF_K -// CHECK: 47 04 00 00 ff 00 00 00 r4 |= 0xff -// CHECK: 57 05 00 00 ff 00 00 00 r5 &= 0xff -// CHECK: 67 06 00 00 3f 00 00 00 r6 <<= 0x3f -// CHECK: 77 07 00 00 20 00 00 00 r7 >>= 0x20 -// CHECK: a7 08 00 00 00 00 00 00 r8 ^= 0x0 -// CHECK: b7 09 00 00 01 00 00 00 r9 = 0x1 -// CHECK: b7 09 00 00 ff ff ff ff r9 = -0x1 -// CHECK: c7 0a 00 00 40 00 00 00 r10 s>>= 0x40 +// CHECK: 87 02 00 00 00 00 00 00 neg64 r2 +// CHECK: 4f 54 00 00 00 00 00 00 or64 r4, r5 +// CHECK: 5f 65 00 00 00 00 00 00 and64 r5, r6 +// CHECK: 6f 76 00 00 00 00 00 00 lsh64 r6, r7 +// CHECK: 7f 87 00 00 00 00 00 00 rsh64 r7, r8 +// CHECK: af 98 00 00 00 00 00 00 xor64 r8, r9 +// CHECK: bf a9 00 00 00 00 00 00 mov64 r9, r10 +// CHECK: cf 0a 00 00 00 00 00 00 arsh64 r10, r0 + + be16 r1 // BPF_END | BPF_TO_BE + be32 r2 // BPF_END | BPF_TO_BE + be64 r3 // BPF_END | BPF_TO_BE +// CHECK: dc 01 00 00 10 00 00 00 be16 r1 +// CHECK: dc 02 00 00 20 00 00 00 be32 r2 +// CHECK: dc 03 00 00 40 00 00 00 be64 r3 + + add64 r0, 1 // BPF_ADD | BPF_K + sub64 r1, 0x1 // BPF_SUB | BPF_K + mul64 r2, -4 // BPF_MUL | BPF_K + div64 r3, 5 // BPF_DIV | BPF_K +// CHECK: 07 00 00 00 01 00 00 00 add64 r0, 0x1 +// CHECK: 17 01 00 00 01 00 00 00 sub64 r1, 0x1 +// CHECK: 27 02 00 00 fc ff ff ff mul64 r2, -0x4 +// CHECK: 37 03 00 00 05 00 00 00 div64 r3, 0x5 + + or64 r4, 0xff // BPF_OR | BPF_K + and64 r5, 0xFF // BPF_AND | BPF_K + lsh64 r6, 63 // BPF_LSH | BPF_K + rsh64 r7, 32 // BPF_RSH | BPF_K + xor64 r8, 0 // BPF_XOR | BPF_K + mov64 r9, 1 // BPF_MOV | BPF_K + mov64 r9, 0xffffffff // BPF_MOV | BPF_K + arsh64 r10, 64 // BPF_ARSH | BPF_K +// CHECK: 47 04 00 00 ff 00 00 00 or64 r4, 0xff +// CHECK: 57 05 00 00 ff 00 00 00 and64 r5, 0xff +// CHECK: 67 06 00 00 3f 00 00 00 lsh64 r6, 0x3f +// CHECK: 77 07 00 00 20 00 00 00 rsh64 r7, 0x20 +// CHECK: a7 08 00 00 00 00 00 00 xor64 r8, 0x0 +// CHECK: b7 09 00 00 01 00 00 00 mov64 r9, 0x1 +// CHECK: b7 09 00 00 ff ff ff ff mov64 r9, -0x1 +// CHECK: c7 0a 00 00 40 00 00 00 arsh64 r10, 0x40 diff --git a/llvm/test/MC/SBF/load-store-32.s b/llvm/test/MC/SBF/load-store-32.s index 4f42574a55601b..2f2176c60c184e 100644 --- a/llvm/test/MC/SBF/load-store-32.s +++ b/llvm/test/MC/SBF/load-store-32.s @@ -1,30 +1,28 @@ # RUN: llvm-mc -triple sbf --mcpu=sbfv2 -filetype=obj -o %t %s -# RUN: llvm-objdump --output-asm-variant=1 --mattr=+alu32 -d -r %t | FileCheck --check-prefix=CHECK-32 %s -# RUN: llvm-objdump --output-asm-variant=1 -d -r %t | FileCheck %s - -.syntax_old +# RUN: llvm-objdump --mattr=+alu32 -d -r %t | FileCheck --check-prefix=CHECK-32 %s +# RUN: llvm-objdump -d -r %t | FileCheck %s // ======== BPF_LDX Class ======== - w5 = *(u8 *)(r0 + 0) // BPF_LDX | BPF_B - w6 = *(u16 *)(r1 + 8) // BPF_LDX | BPF_H - w7 = *(u32 *)(r2 + 16) // BPF_LDX | BPF_W -// CHECK-32: 71 05 00 00 00 00 00 00 w5 = *(u8 *)(r0 + 0x0) -// CHECK-32: 69 16 08 00 00 00 00 00 w6 = *(u16 *)(r1 + 0x8) -// CHECK-32: 61 27 10 00 00 00 00 00 w7 = *(u32 *)(r2 + 0x10) -// CHECK: 71 05 00 00 00 00 00 00 r5 = *(u8 *)(r0 + 0x0) -// CHECK: 69 16 08 00 00 00 00 00 r6 = *(u16 *)(r1 + 0x8) -// CHECK: 61 27 10 00 00 00 00 00 r7 = *(u32 *)(r2 + 0x10) + ldxb w5, [r0 + 0] // BPF_LDX | BPF_B + ldxh w6, [r1 + 8] // BPF_LDX | BPF_H + ldxw w7, [r2 + 16] // BPF_LDX | BPF_W +// CHECK-32: 71 05 00 00 00 00 00 00 ldxb w5, [r0 + 0x0] +// CHECK-32: 69 16 08 00 00 00 00 00 ldxh w6, [r1 + 0x8] +// CHECK-32: 61 27 10 00 00 00 00 00 ldxw w7, [r2 + 0x10] +// CHECK: 71 05 00 00 00 00 00 00 ldxb r5, [r0 + 0x0] +// CHECK: 69 16 08 00 00 00 00 00 ldxh r6, [r1 + 0x8] +// CHECK: 61 27 10 00 00 00 00 00 ldxw r7, [r2 + 0x10] // ======== BPF_STX Class ======== - *(u8 *)(r0 + 0) = w7 // BPF_STX | BPF_B - *(u16 *)(r1 + 8) = w8 // BPF_STX | BPF_H - *(u32 *)(r2 + 16) = w9 // BPF_STX | BPF_W - lock *(u32 *)(r2 + 16) += w9 // BPF_STX | BPF_W | BPF_XADD -// CHECK-32: 73 70 00 00 00 00 00 00 *(u8 *)(r0 + 0x0) = w7 -// CHECK-32: 6b 81 08 00 00 00 00 00 *(u16 *)(r1 + 0x8) = w8 -// CHECK-32: 63 92 10 00 00 00 00 00 *(u32 *)(r2 + 0x10) = w9 -// CHECK-32: c3 92 10 00 00 00 00 00 lock *(u32 *)(r2 + 0x10) += w9 -// CHECK: 73 70 00 00 00 00 00 00 *(u8 *)(r0 + 0x0) = r7 -// CHECK: 6b 81 08 00 00 00 00 00 *(u16 *)(r1 + 0x8) = r8 -// CHECK: 63 92 10 00 00 00 00 00 *(u32 *)(r2 + 0x10) = r9 -// CHECK: c3 92 10 00 00 00 00 00 lock *(u32 *)(r2 + 0x10) += r9 + stxb [r0 + 0], w7 // BPF_STX | BPF_B + stxh [r1 + 8], w8 // BPF_STX | BPF_H + stxw [r2 + 16], w9 // BPF_STX | BPF_W + stxxaddw [r2 + 16], w9 // BPF_STX | BPF_W | BPF_XADD +// CHECK-32: 73 70 00 00 00 00 00 00 stxb [r0 + 0x0], w7 +// CHECK-32: 6b 81 08 00 00 00 00 00 stxh [r1 + 0x8], w8 +// CHECK-32: 63 92 10 00 00 00 00 00 stxw [r2 + 0x10], w9 +// CHECK-32: c3 92 10 00 00 00 00 00 stxxaddw [r2 + 0x10], w9 +// CHECK: 73 70 00 00 00 00 00 00 stxb [r0 + 0x0], r7 +// CHECK: 6b 81 08 00 00 00 00 00 stxh [r1 + 0x8], r8 +// CHECK: 63 92 10 00 00 00 00 00 stxw [r2 + 0x10], r9 +// CHECK: c3 92 10 00 00 00 00 00 stxxaddw [r2 + 0x10], r9 diff --git a/llvm/test/MC/SBF/sbf-alu.s b/llvm/test/MC/SBF/sbf-alu.s index f73ae33e5976ca..919e323a22e5b1 100644 --- a/llvm/test/MC/SBF/sbf-alu.s +++ b/llvm/test/MC/SBF/sbf-alu.s @@ -3,328 +3,265 @@ # RUN: llvm-mc %s -triple=sbf-solana-solana --mcpu=sbfv2 -filetype=obj \ # RUN: | llvm-objdump -d -r - \ # RUN: | FileCheck --check-prefix=CHECK-OBJ-NEW %s -# RUN: llvm-mc %s -triple=sbf-solana-solana --mcpu=sbfv2 -filetype=obj \ -# RUN: | llvm-objdump --output-asm-variant=1 -d -r - \ -# RUN: | FileCheck --check-prefix=CHECK-OBJ-OLD %s # TODO: Test immediate field ranges and some hex immediates. # CHECK-OBJ-NEW: add64 r0, r9 -# CHECK-OBJ-OLD: r0 += r9 # CHECK-ASM-NEW: encoding: [0x0f,0x90,0x00,0x00,0x00,0x00,0x00,0x00] add64 r0, r9 # CHECK-OBJ-NEW: add64 r3, r2 -# CHECK-OBJ-OLD: r3 += r2 # CHECK-ASM-NEW: encoding: [0x0f,0x23,0x00,0x00,0x00,0x00,0x00,0x00] add64 r3, r2 # CHECK-OBJ-NEW: add64 r3, 0x7b -# CHECK-OBJ-OLD: r3 += 0x7b # CHECK-ASM-NEW: encoding: [0x07,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] add64 r3, 123 # CHECK-OBJ-NEW: add64 r5, -0x7b -# CHECK-OBJ-OLD: r5 += -0x7b # CHECK-ASM-NEW: encoding: [0x07,0x05,0x00,0x00,0x85,0xff,0xff,0xff] add64 r5, -123 # CHECK-OBJ-NEW: add32 w6, w2 -# CHECK-OBJ-OLD: w6 += w2 # CHECK-ASM-NEW: encoding: [0x0c,0x26,0x00,0x00,0x00,0x00,0x00,0x00] add32 w6, w2 # CHECK-OBJ-NEW: add32 w5, -0x7b -# CHECK-OBJ-OLD: w5 += -0x7b # CHECK-ASM-NEW: encoding: [0x04,0x05,0x00,0x00,0x85,0xff,0xff,0xff] add32 w5, -123 # CHECK-OBJ-NEW: sub64 r0, r9 -# CHECK-OBJ-OLD: r0 -= r9 # CHECK-ASM-NEW: encoding: [0x1f,0x90,0x00,0x00,0x00,0x00,0x00,0x00] sub64 r0, r9 # CHECK-OBJ-NEW: sub64 r3, r2 -# CHECK-OBJ-OLD: r3 -= r2 # CHECK-ASM-NEW: encoding: [0x1f,0x23,0x00,0x00,0x00,0x00,0x00,0x00] sub64 r3, r2 # CHECK-OBJ-NEW: sub64 r3, 0x7b -# CHECK-OBJ-OLD: r3 -= 0x7b # CHECK-ASM-NEW: encoding: [0x17,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] sub64 r3, 123 # CHECK-OBJ-NEW: sub64 r5, -0x7b -# CHECK-OBJ-OLD: r5 -= -0x7b # CHECK-ASM-NEW: encoding: [0x17,0x05,0x00,0x00,0x85,0xff,0xff,0xff] sub64 r5, -123 # CHECK-OBJ-NEW: sub32 w6, w2 -# CHECK-OBJ-OLD: w6 -= w2 # CHECK-ASM-NEW: encoding: [0x1c,0x26,0x00,0x00,0x00,0x00,0x00,0x00] sub32 w6, w2 # CHECK-OBJ-NEW: sub32 w5, -0x7b -# CHECK-OBJ-OLD: w5 -= -0x7b # CHECK-ASM-NEW: encoding: [0x14,0x05,0x00,0x00,0x85,0xff,0xff,0xff] sub32 w5, -123 # CHECK-OBJ-NEW: mul64 r0, r9 -# CHECK-OBJ-OLD: r0 *= r9 # CHECK-ASM-NEW: encoding: [0x2f,0x90,0x00,0x00,0x00,0x00,0x00,0x00] mul64 r0, r9 # CHECK-OBJ-NEW: mul64 r3, r2 -# CHECK-OBJ-OLD: r3 *= r2 # CHECK-ASM-NEW: encoding: [0x2f,0x23,0x00,0x00,0x00,0x00,0x00,0x00] mul64 r3, r2 # CHECK-OBJ-NEW: mul64 r3, 0x7b -# CHECK-OBJ-OLD: r3 *= 0x7b # CHECK-ASM-NEW: encoding: [0x27,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] mul64 r3, 123 # CHECK-OBJ-NEW: mul64 r5, -0x7b -# CHECK-OBJ-OLD: r5 *= -0x7b # CHECK-ASM-NEW: encoding: [0x27,0x05,0x00,0x00,0x85,0xff,0xff,0xff] mul64 r5, -123 # CHECK-OBJ-NEW: mul32 w6, w2 -# CHECK-OBJ-OLD: w6 *= w2 # CHECK-ASM-NEW: encoding: [0x2c,0x26,0x00,0x00,0x00,0x00,0x00,0x00] mul32 w6, w2 # CHECK-OBJ-NEW: mul32 w5, -0x7b -# CHECK-OBJ-OLD: w5 *= -0x7b # CHECK-ASM-NEW: encoding: [0x24,0x05,0x00,0x00,0x85,0xff,0xff,0xff] mul32 w5, -123 # CHECK-OBJ-NEW: div64 r0, r9 -# CHECK-OBJ-OLD: r0 /= r9 # CHECK-ASM-NEW: encoding: [0x3f,0x90,0x00,0x00,0x00,0x00,0x00,0x00] div64 r0, r9 # CHECK-OBJ-NEW: div64 r3, r2 -# CHECK-OBJ-OLD: r3 /= r2 # CHECK-ASM-NEW: encoding: [0x3f,0x23,0x00,0x00,0x00,0x00,0x00,0x00] div64 r3, r2 # CHECK-OBJ-NEW: div64 r3, 0x7b -# CHECK-OBJ-OLD: r3 /= 0x7b # CHECK-ASM-NEW: encoding: [0x37,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] div64 r3, 123 # CHECK-OBJ-NEW: div64 r5, -0x7b -# CHECK-OBJ-OLD: r5 /= -0x7b # CHECK-ASM-NEW: encoding: [0x37,0x05,0x00,0x00,0x85,0xff,0xff,0xff] div64 r5, -123 # CHECK-OBJ-NEW: div32 w6, w2 -# CHECK-OBJ-OLD: w6 /= w2 # CHECK-ASM-NEW: encoding: [0x3c,0x26,0x00,0x00,0x00,0x00,0x00,0x00] div32 w6, w2 # CHECK-OBJ-NEW: div32 w5, -0x7b -# CHECK-OBJ-OLD: w5 /= -0x7b # CHECK-ASM-NEW: encoding: [0x34,0x05,0x00,0x00,0x85,0xff,0xff,0xff] div32 w5, -123 # CHECK-OBJ-NEW: sdiv64 r0, r9 -# CHECK-OBJ-OLD: r0 s/= r9 # CHECK-ASM-NEW: encoding: [0xef,0x90,0x00,0x00,0x00,0x00,0x00,0x00] sdiv64 r0, r9 # CHECK-OBJ-NEW: sdiv64 r3, r2 -# CHECK-OBJ-OLD: r3 s/= r2 # CHECK-ASM-NEW: encoding: [0xef,0x23,0x00,0x00,0x00,0x00,0x00,0x00] sdiv64 r3, r2 # CHECK-OBJ-NEW: sdiv64 r3, 0x7b -# CHECK-OBJ-OLD: r3 s/= 0x7b # CHECK-ASM-NEW: encoding: [0xe7,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] sdiv64 r3, 123 # CHECK-OBJ-NEW: sdiv64 r5, -0x7b -# CHECK-OBJ-OLD: r5 s/= -0x7b # CHECK-ASM-NEW: encoding: [0xe7,0x05,0x00,0x00,0x85,0xff,0xff,0xff] sdiv64 r5, -123 # CHECK-OBJ-NEW: sdiv32 w6, w2 -# CHECK-OBJ-OLD: w6 s/= w2 # CHECK-ASM-NEW: encoding: [0xec,0x26,0x00,0x00,0x00,0x00,0x00,0x00] sdiv32 w6, w2 # CHECK-OBJ-NEW: sdiv32 w5, -0x7b -# CHECK-OBJ-OLD: w5 s/= -0x7b # CHECK-ASM-NEW: encoding: [0xe4,0x05,0x00,0x00,0x85,0xff,0xff,0xff] sdiv32 w5, -123 # CHECK-OBJ-NEW: or64 r0, r9 -# CHECK-OBJ-OLD: r0 |= r9 # CHECK-ASM-NEW: encoding: [0x4f,0x90,0x00,0x00,0x00,0x00,0x00,0x00] or64 r0, r9 # CHECK-OBJ-NEW: or64 r3, r2 -# CHECK-OBJ-OLD: r3 |= r2 # CHECK-ASM-NEW: encoding: [0x4f,0x23,0x00,0x00,0x00,0x00,0x00,0x00] or64 r3, r2 # CHECK-OBJ-NEW: or64 r3, 0x7b -# CHECK-OBJ-OLD: r3 |= 0x7b # CHECK-ASM-NEW: encoding: [0x47,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] or64 r3, 123 # CHECK-OBJ-NEW: or64 r5, -0x7b -# CHECK-OBJ-OLD: r5 |= -0x7b # CHECK-ASM-NEW: encoding: [0x47,0x05,0x00,0x00,0x85,0xff,0xff,0xff] or64 r5, -123 # CHECK-OBJ-NEW: or32 w6, w2 -# CHECK-OBJ-OLD: w6 |= w2 # CHECK-ASM-NEW: encoding: [0x4c,0x26,0x00,0x00,0x00,0x00,0x00,0x00] or32 w6, w2 # CHECK-OBJ-NEW: or32 w5, -0x7b -# CHECK-OBJ-OLD: w5 |= -0x7b # CHECK-ASM-NEW: encoding: [0x44,0x05,0x00,0x00,0x85,0xff,0xff,0xff] or32 w5, -123 # CHECK-OBJ-NEW: and64 r0, r9 -# CHECK-OBJ-OLD: r0 &= r9 # CHECK-ASM-NEW: encoding: [0x5f,0x90,0x00,0x00,0x00,0x00,0x00,0x00] and64 r0, r9 # CHECK-OBJ-NEW: and64 r3, r2 -# CHECK-OBJ-OLD: r3 &= r2 # CHECK-ASM-NEW: encoding: [0x5f,0x23,0x00,0x00,0x00,0x00,0x00,0x00] and64 r3, r2 # CHECK-OBJ-NEW: and64 r3, 0x7b -# CHECK-OBJ-OLD: r3 &= 0x7b # CHECK-ASM-NEW: encoding: [0x57,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] and64 r3, 123 # CHECK-OBJ-NEW: and64 r5, -0x7b -# CHECK-OBJ-OLD: r5 &= -0x7b # CHECK-ASM-NEW: encoding: [0x57,0x05,0x00,0x00,0x85,0xff,0xff,0xff] and64 r5, -123 # CHECK-OBJ-NEW: and32 w6, w2 -# CHECK-OBJ-OLD: w6 &= w2 # CHECK-ASM-NEW: encoding: [0x5c,0x26,0x00,0x00,0x00,0x00,0x00,0x00] and32 w6, w2 # CHECK-OBJ-NEW: and32 w5, -0x7b -# CHECK-OBJ-OLD: w5 &= -0x7b # CHECK-ASM-NEW: encoding: [0x54,0x05,0x00,0x00,0x85,0xff,0xff,0xff] and32 w5, -123 # CHECK-OBJ-NEW: xor64 r0, r9 -# CHECK-OBJ-OLD: r0 ^= r9 # CHECK-ASM-NEW: encoding: [0xaf,0x90,0x00,0x00,0x00,0x00,0x00,0x00] xor64 r0, r9 # CHECK-OBJ-NEW: xor64 r3, r2 -# CHECK-OBJ-OLD: r3 ^= r2 # CHECK-ASM-NEW: encoding: [0xaf,0x23,0x00,0x00,0x00,0x00,0x00,0x00] xor64 r3, r2 # CHECK-OBJ-NEW: xor64 r3, 0x7b -# CHECK-OBJ-OLD: r3 ^= 0x7b # CHECK-ASM-NEW: encoding: [0xa7,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] xor64 r3, 123 # CHECK-OBJ-NEW: xor64 r5, -0x7b -# CHECK-OBJ-OLD: r5 ^= -0x7b # CHECK-ASM-NEW: encoding: [0xa7,0x05,0x00,0x00,0x85,0xff,0xff,0xff] xor64 r5, -123 # CHECK-OBJ-NEW: xor32 w6, w2 -# CHECK-OBJ-OLD: w6 ^= w2 # CHECK-ASM-NEW: encoding: [0xac,0x26,0x00,0x00,0x00,0x00,0x00,0x00] xor32 w6, w2 # CHECK-OBJ-NEW: xor32 w5, -0x7b -# CHECK-OBJ-OLD: w5 ^= -0x7b # CHECK-ASM-NEW: encoding: [0xa4,0x05,0x00,0x00,0x85,0xff,0xff,0xff] xor32 w5, -123 # CHECK-OBJ-NEW: lsh64 r0, r9 -# CHECK-OBJ-OLD: r0 <<= r9 # CHECK-ASM-NEW: encoding: [0x6f,0x90,0x00,0x00,0x00,0x00,0x00,0x00] lsh64 r0, r9 # CHECK-OBJ-NEW: lsh64 r3, r2 -# CHECK-OBJ-OLD: r3 <<= r2 # CHECK-ASM-NEW: encoding: [0x6f,0x23,0x00,0x00,0x00,0x00,0x00,0x00] lsh64 r3, r2 # CHECK-OBJ-NEW: lsh64 r3, 0x7b -# CHECK-OBJ-OLD: r3 <<= 0x7b # CHECK-ASM-NEW: encoding: [0x67,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] lsh64 r3, 123 # CHECK-OBJ-NEW: lsh64 r5, -0x7b -# CHECK-OBJ-OLD: r5 <<= -0x7b # CHECK-ASM-NEW: encoding: [0x67,0x05,0x00,0x00,0x85,0xff,0xff,0xff] lsh64 r5, -123 # CHECK-OBJ-NEW: lsh32 w6, w2 -# CHECK-OBJ-OLD: w6 <<= w2 # CHECK-ASM-NEW: encoding: [0x6c,0x26,0x00,0x00,0x00,0x00,0x00,0x00] lsh32 w6, w2 # CHECK-OBJ-NEW: lsh32 w5, -0x7b -# CHECK-OBJ-OLD: w5 <<= -0x7b # CHECK-ASM-NEW: encoding: [0x64,0x05,0x00,0x00,0x85,0xff,0xff,0xff] lsh32 w5, -123 # CHECK-OBJ-NEW: rsh64 r0, r9 -# CHECK-OBJ-OLD: r0 >>= r9 # CHECK-ASM-NEW: encoding: [0x7f,0x90,0x00,0x00,0x00,0x00,0x00,0x00] rsh64 r0, r9 # CHECK-OBJ-NEW: rsh64 r3, r2 -# CHECK-OBJ-OLD: r3 >>= r2 # CHECK-ASM-NEW: encoding: [0x7f,0x23,0x00,0x00,0x00,0x00,0x00,0x00] rsh64 r3, r2 # CHECK-OBJ-NEW: rsh64 r3, 0x7b -# CHECK-OBJ-OLD: r3 >>= 0x7b # CHECK-ASM-NEW: encoding: [0x77,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] rsh64 r3, 123 # CHECK-OBJ-NEW: rsh64 r5, -0x7b -# CHECK-OBJ-OLD: r5 >>= -0x7b # CHECK-ASM-NEW: encoding: [0x77,0x05,0x00,0x00,0x85,0xff,0xff,0xff] rsh64 r5, -123 # CHECK-OBJ-NEW: rsh32 w6, w2 -# CHECK-OBJ-OLD: w6 >>= w2 # CHECK-ASM-NEW: encoding: [0x7c,0x26,0x00,0x00,0x00,0x00,0x00,0x00] rsh32 w6, w2 # CHECK-OBJ-NEW: rsh32 w5, -0x7b -# CHECK-OBJ-OLD: w5 >>= -0x7b # CHECK-ASM-NEW: encoding: [0x74,0x05,0x00,0x00,0x85,0xff,0xff,0xff] rsh32 w5, -123 @@ -332,76 +269,62 @@ rsh32 w5, -123 # CHECK-OBJ-NEW: arsh64 r0, r9 -# CHECK-OBJ-OLD: r0 s>>= r9 # CHECK-ASM-NEW: encoding: [0xcf,0x90,0x00,0x00,0x00,0x00,0x00,0x00] arsh64 r0, r9 # CHECK-OBJ-NEW: arsh64 r3, r2 -# CHECK-OBJ-OLD: r3 s>>= r2 # CHECK-ASM-NEW: encoding: [0xcf,0x23,0x00,0x00,0x00,0x00,0x00,0x00] arsh64 r3, r2 # CHECK-OBJ-NEW: arsh64 r3, 0x7b -# CHECK-OBJ-OLD: r3 s>>= 0x7b # CHECK-ASM-NEW: encoding: [0xc7,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] arsh64 r3, 123 # CHECK-OBJ-NEW: arsh64 r5, -0x7b -# CHECK-OBJ-OLD: r5 s>>= -0x7b # CHECK-ASM-NEW: encoding: [0xc7,0x05,0x00,0x00,0x85,0xff,0xff,0xff] arsh64 r5, -123 # CHECK-OBJ-NEW: arsh32 w6, w2 -# CHECK-OBJ-OLD: w6 s>>= w2 # CHECK-ASM-NEW: encoding: [0xcc,0x26,0x00,0x00,0x00,0x00,0x00,0x00] arsh32 w6, w2 # CHECK-OBJ-NEW: arsh32 w5, -0x7b -# CHECK-OBJ-OLD: w5 s>>= -0x7b # CHECK-ASM-NEW: encoding: [0xc4,0x05,0x00,0x00,0x85,0xff,0xff,0xff] arsh32 w5, -123 # CHECK-OBJ-NEW: neg64 r9 -# CHECK-OBJ-OLD: r9 = -r9 # CHECK-ASM-NEW: encoding: [0x87,0x09,0x00,0x00,0x00,0x00,0x00,0x00] neg64 r9 # CHECK-OBJ-NEW: neg32 w6 -# CHECK-OBJ-OLD: w6 = -w6 # CHECK-ASM-NEW: encoding: [0x84,0x06,0x00,0x00,0x00,0x00,0x00,0x00] neg32 w6 # CHECK-OBJ-NEW: mov64 r0, r9 -# CHECK-OBJ-OLD: r0 = r9 # CHECK-ASM-NEW: encoding: [0xbf,0x90,0x00,0x00,0x00,0x00,0x00,0x00] mov64 r0, r9 # CHECK-OBJ-NEW: mov64 r3, r2 -# CHECK-OBJ-OLD: r3 = r2 # CHECK-ASM-NEW: encoding: [0xbf,0x23,0x00,0x00,0x00,0x00,0x00,0x00] mov64 r3, r2 # CHECK-OBJ-NEW: mov64 r3, 0x7b -# CHECK-OBJ-OLD: r3 = 0x7b # CHECK-ASM-NEW: encoding: [0xb7,0x03,0x00,0x00,0x7b,0x00,0x00,0x00] mov64 r3, 123 # CHECK-OBJ-NEW: mov64 r5, -0x7b -# CHECK-OBJ-OLD: r5 = -0x7b # CHECK-ASM-NEW: encoding: [0xb7,0x05,0x00,0x00,0x85,0xff,0xff,0xff] mov64 r5, -123 # CHECK-OBJ-NEW: mov32 w6, w2 -# CHECK-OBJ-OLD: w6 = w2 # CHECK-ASM-NEW: encoding: [0xbc,0x26,0x00,0x00,0x00,0x00,0x00,0x00] mov32 w6, w2 # CHECK-OBJ-NEW: mov32 w5, -0x7b -# CHECK-OBJ-OLD: w5 = -0x7b # CHECK-ASM-NEW: encoding: [0xb4,0x05,0x00,0x00,0x85,0xff,0xff,0xff] mov32 w5, -123 @@ -413,12 +336,6 @@ mov32 w5, -123 # CHECK-OBJ-NEW: be16 r0 # CHECK-OBJ-NEW: be32 r1 # CHECK-OBJ-NEW: be64 r2 -# CHECK-OBJ-OLD: r3 = le16 r3 -# CHECK-OBJ-OLD: r4 = le32 r4 -# CHECK-OBJ-OLD: r5 = le64 r5 -# CHECK-OBJ-OLD: r0 = be16 r0 -# CHECK-OBJ-OLD: r1 = be32 r1 -# CHECK-OBJ-OLD: r2 = be64 r2 # CHECK-ASM-NEW: encoding: [0xd4,0x03,0x00,0x00,0x10,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0xd4,0x04,0x00,0x00,0x20,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0xd4,0x05,0x00,0x00,0x40,0x00,0x00,0x00] diff --git a/llvm/test/MC/SBF/sbf-jmp.s b/llvm/test/MC/SBF/sbf-jmp.s index fe95ea806515ad..257df3239de87d 100644 --- a/llvm/test/MC/SBF/sbf-jmp.s +++ b/llvm/test/MC/SBF/sbf-jmp.s @@ -3,9 +3,6 @@ # RUN: llvm-mc %s -triple=sbf-solana-solana --mcpu=sbfv2 -filetype=obj \ # RUN: | llvm-objdump -d -r - \ # RUN: | FileCheck --check-prefix=CHECK-OBJ-NEW %s -# RUN: llvm-mc %s -triple=sbf-solana-solana --mcpu=sbfv2 -filetype=obj \ -# RUN: | llvm-objdump --output-asm-variant=1 -d -r - \ -# RUN: | FileCheck --check-prefix=CHECK-OBJ-OLD %s @@ -15,9 +12,6 @@ mylabelback: # CHECK-OBJ-NEW: ja +0x8 # CHECK-OBJ-NEW: ja -0x2 # CHECK-OBJ-NEW: ja +0x0 -# CHECK-OBJ-OLD: goto +0x8 -# CHECK-OBJ-OLD: goto -0x2 -# CHECK-OBJ-OLD: goto +0x0 # CHECK-ASM-NEW: encoding: [0x05,0x00,0x08,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x05'A',A,0x00,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: # fixup A - offset: 0, value: mylabelback, kind: FK_PCRel_2 @@ -39,16 +33,6 @@ mylabelfwd: # CHECK-OBJ-NEW: jsge r0, r9, +0x1 # CHECK-OBJ-NEW: jslt r0, r9, +0x1 # CHECK-OBJ-NEW: jsle r0, r9, +0x1 -# CHECK-OBJ-OLD: if r0 == r9 goto +0x1 -# CHECK-OBJ-OLD: if r0 != r9 goto +0x1 -# CHECK-OBJ-OLD: if r0 > r9 goto +0x1 -# CHECK-OBJ-OLD: if r0 >= r9 goto +0x1 -# CHECK-OBJ-OLD: if r0 < r9 goto +0x1 -# CHECK-OBJ-OLD: if r0 <= r9 goto +0x1 -# CHECK-OBJ-OLD: if r0 s> r9 goto +0x1 -# CHECK-OBJ-OLD: if r0 s>= r9 goto +0x1 -# CHECK-OBJ-OLD: if r0 s< r9 goto +0x1 -# CHECK-OBJ-OLD: if r0 s<= r9 goto +0x1 # CHECK-ASM-NEW: encoding: [0x1d,0x90,0x01,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x5d,0x90,0x01,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x2d,0x90,0x01,0x00,0x00,0x00,0x00,0x00] @@ -80,16 +64,6 @@ jsle r0, r9, +1 # CHECK-OBJ-NEW: jsge r3, r2, +0x1 # CHECK-OBJ-NEW: jslt r3, r2, +0x1 # CHECK-OBJ-NEW: jsle r3, r2, +0x1 -# CHECK-OBJ-OLD: if r3 == r2 goto +0x1 -# CHECK-OBJ-OLD: if r3 != r2 goto +0x1 -# CHECK-OBJ-OLD: if r3 > r2 goto +0x1 -# CHECK-OBJ-OLD: if r3 >= r2 goto +0x1 -# CHECK-OBJ-OLD: if r3 < r2 goto +0x1 -# CHECK-OBJ-OLD: if r3 <= r2 goto +0x1 -# CHECK-OBJ-OLD: if r3 s> r2 goto +0x1 -# CHECK-OBJ-OLD: if r3 s>= r2 goto +0x1 -# CHECK-OBJ-OLD: if r3 s< r2 goto +0x1 -# CHECK-OBJ-OLD: if r3 s<= r2 goto +0x1 # CHECK-ASM-NEW: encoding: [0x1d,0x23,0x01,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x5d,0x23,0x01,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x2d,0x23,0x01,0x00,0x00,0x00,0x00,0x00] @@ -121,16 +95,6 @@ jsle r3, r2, +1 # CHECK-OBJ-NEW: jsge r3, 0x7b, +0x8 # CHECK-OBJ-NEW: jslt r3, 0x7b, +0x8 # CHECK-OBJ-NEW: jsle r3, 0x7b, +0x8 -# CHECK-OBJ-OLD: if r3 == 0x7b goto +0x8 -# CHECK-OBJ-OLD: if r3 != 0x7b goto +0x8 -# CHECK-OBJ-OLD: if r3 > 0x7b goto +0x8 -# CHECK-OBJ-OLD: if r3 >= 0x7b goto +0x8 -# CHECK-OBJ-OLD: if r3 < 0x7b goto +0x8 -# CHECK-OBJ-OLD: if r3 <= 0x7b goto +0x8 -# CHECK-OBJ-OLD: if r3 s> 0x7b goto +0x8 -# CHECK-OBJ-OLD: if r3 s>= 0x7b goto +0x8 -# CHECK-OBJ-OLD: if r3 s< 0x7b goto +0x8 -# CHECK-OBJ-OLD: if r3 s<= 0x7b goto +0x8 # CHECK-ASM-NEW: encoding: [0x15,0x03,0x08,0x00,0x7b,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x55,0x03,0x08,0x00,0x7b,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x25,0x03,0x08,0x00,0x7b,0x00,0x00,0x00] @@ -162,16 +126,6 @@ jsle r3, 123, +8 # CHECK-OBJ-NEW: jsge r5, -0x7b, +0x8 # CHECK-OBJ-NEW: jslt r5, -0x7b, +0x8 # CHECK-OBJ-NEW: jsle r5, -0x7b, +0x8 -# CHECK-OBJ-OLD: if r5 == -0x7b goto +0x8 -# CHECK-OBJ-OLD: if r5 != -0x7b goto +0x8 -# CHECK-OBJ-OLD: if r5 > -0x7b goto +0x8 -# CHECK-OBJ-OLD: if r5 >= -0x7b goto +0x8 -# CHECK-OBJ-OLD: if r5 < -0x7b goto +0x8 -# CHECK-OBJ-OLD: if r5 <= -0x7b goto +0x8 -# CHECK-OBJ-OLD: if r5 s> -0x7b goto +0x8 -# CHECK-OBJ-OLD: if r5 s>= -0x7b goto +0x8 -# CHECK-OBJ-OLD: if r5 s< -0x7b goto +0x8 -# CHECK-OBJ-OLD: if r5 s<= -0x7b goto +0x8 # CHECK-ASM-NEW: encoding: [0x15,0x05,0x08,0x00,0x85,0xff,0xff,0xff] # CHECK-ASM-NEW: encoding: [0x55,0x05,0x08,0x00,0x85,0xff,0xff,0xff] # CHECK-ASM-NEW: encoding: [0x25,0x05,0x08,0x00,0x85,0xff,0xff,0xff] @@ -203,16 +157,6 @@ jsle r5, -123, +8 # CHECK-OBJ-NEW: jsge w6, w2, +0x8 # CHECK-OBJ-NEW: jslt w6, w2, +0x8 # CHECK-OBJ-NEW: jsle w6, w2, +0x8 -# CHECK-OBJ-OLD: if w6 == w2 goto +0x8 -# CHECK-OBJ-OLD: if w6 != w2 goto +0x8 -# CHECK-OBJ-OLD: if w6 > w2 goto +0x8 -# CHECK-OBJ-OLD: if w6 >= w2 goto +0x8 -# CHECK-OBJ-OLD: if w6 < w2 goto +0x8 -# CHECK-OBJ-OLD: if w6 <= w2 goto +0x8 -# CHECK-OBJ-OLD: if w6 s> w2 goto +0x8 -# CHECK-OBJ-OLD: if w6 s>= w2 goto +0x8 -# CHECK-OBJ-OLD: if w6 s< w2 goto +0x8 -# CHECK-OBJ-OLD: if w6 s<= w2 goto +0x8 # CHECK-ASM-NEW: encoding: [0x1e,0x26,0x08,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x5e,0x26,0x08,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x2e,0x26,0x08,0x00,0x00,0x00,0x00,0x00] @@ -244,12 +188,6 @@ jsle w6, w2, +8 # CHECK-OBJ-NEW: jsge w5, -0x7b, +0x8 # CHECK-OBJ-NEW: jslt w5, -0x7b, +0x8 # CHECK-OBJ-NEW: jsle w5, -0x7b, +0x8 -# CHECK-OBJ-OLD: if w5 == -0x7b goto +0x8 -# CHECK-OBJ-OLD: if w5 != -0x7b goto +0x8 -# CHECK-OBJ-OLD: if w5 s> -0x7b goto +0x8 -# CHECK-OBJ-OLD: if w5 s>= -0x7b goto +0x8 -# CHECK-OBJ-OLD: if w5 s< -0x7b goto +0x8 -# CHECK-OBJ-OLD: if w5 s<= -0x7b goto +0x8 # CHECK-ASM-NEW: encoding: [0x16,0x05,0x08,0x00,0x85,0xff,0xff,0xff] # CHECK-ASM-NEW: encoding: [0x56,0x05,0x08,0x00,0x85,0xff,0xff,0xff] # CHECK-ASM-NEW: encoding: [0x26,0x05,0x08,0x00,0x85,0xff,0xff,0xff] @@ -273,16 +211,13 @@ jsle w5, -123, +8 # CHECK-OBJ-NEW: call 0x8 -# CHECK-OBJ-OLD: call 0x8 # CHECK-ASM-NEW: encoding: [0x85,0x00,0x00,0x00,0x08,0x00,0x00,0x00] call 8 # CHECK-OBJ-NEW: callx r4 -# CHECK-OBJ-OLD: callx r4 # CHECK-ASM-NEW: encoding: [0x8d,0x00,0x00,0x00,0x04,0x00,0x00,0x00] callx r4 # CHECK-OBJ-NEW: exit -# CHECK-OBJ-OLD: exit # CHECK-ASM-NEW: encoding: [0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00] exit diff --git a/llvm/test/MC/SBF/sbf-ldst.s b/llvm/test/MC/SBF/sbf-ldst.s index 92fb8f39320fbd..227f8235d51a30 100644 --- a/llvm/test/MC/SBF/sbf-ldst.s +++ b/llvm/test/MC/SBF/sbf-ldst.s @@ -3,17 +3,11 @@ # RUN: llvm-mc %s -triple=sbf-solana-solana --mcpu=sbfv2 -filetype=obj \ # RUN: | llvm-objdump -d -r - \ # RUN: | FileCheck --check-prefix=CHECK-OBJ-NEW %s -# RUN: llvm-mc %s -triple=sbf-solana-solana --mcpu=sbfv2 -filetype=obj \ -# RUN: | llvm-objdump --output-asm-variant=1 -d -r - \ -# RUN: | FileCheck --check-prefix=CHECK-OBJ-OLD %s # RUN: llvm-mc %s -triple=sbf-solana-solana --mcpu=sbfv2 --show-encoding \ # RUN: | FileCheck %s --check-prefix=CHECK32-ASM-NEW # RUN: llvm-mc %s -triple=sbf-solana-solana --mcpu=sbfv2 -filetype=obj \ # RUN: | llvm-objdump --mattr=+alu32 -d -r - \ # RUN: | FileCheck --check-prefix=CHECK32-OBJ-NEW %s -# RUN: llvm-mc %s -triple=sbf-solana-solana --mcpu=sbfv2 -filetype=obj \ -# RUN: | llvm-objdump --mattr=+alu32 --output-asm-variant=1 -d -r - \ -# RUN: | FileCheck --check-prefix=CHECK32-OBJ-OLD %s # TODO: Test immediate field ranges and some hex immediates. @@ -23,11 +17,6 @@ # CHECK-OBJ-NEW: lddw r1, -0x1 # CHECK-OBJ-NEW: lddw r3, 0 # CHECK-OBJ-NEW: 0000000000000030: R_SBF_64_64 the_symbol -# CHECK-OBJ-OLD: r7 = 0x8000 ll -# CHECK-OBJ-OLD: r0 = 0x7f00000000000000 ll -# CHECK-OBJ-OLD: r1 = -0x1 ll -# CHECK-OBJ-OLD: r3 = 0x0 ll -# CHECK-OBJ-OLD: 0000000000000030: R_SBF_64_64 the_symbol # CHECK-ASM-NEW: encoding: [0x18,0x07,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f] # CHECK-ASM-NEW: encoding: [0x18,0x01,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff] @@ -45,11 +34,6 @@ lddw r3, the_symbol # CHECK-OBJ-NEW: ldxh r8, [r2 + 0x20] # CHECK-OBJ-NEW: ldxw r4, [r3 + 0x40] # CHECK-OBJ-NEW: ldxdw r0, [r4 + 0x80] -# CHECK-OBJ-OLD: r6 = *(u8 *)(r1 + 0x11) -# CHECK-OBJ-OLD: r1 = *(u8 *)(r10 - 0x3) -# CHECK-OBJ-OLD: r8 = *(u16 *)(r2 + 0x20) -# CHECK-OBJ-OLD: r4 = *(u32 *)(r3 + 0x40) -# CHECK-OBJ-OLD: r0 = *(u64 *)(r4 + 0x80) # CHECK-ASM-NEW: encoding: [0x71,0x16,0x11,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x71,0xa1,0xfd,0xff,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x69,0x28,0x20,0x00,0x00,0x00,0x00,0x00] @@ -67,10 +51,6 @@ ldxdw r0, [r4 + 128] # CHECK32-OBJ-NEW: ldxb w1, [r10 - 0x3] # CHECK32-OBJ-NEW: ldxh w8, [r2 + 0x20] # CHECK32-OBJ-NEW: ldxw w4, [r3 + 0x40] -# CHECK32-OBJ-OLD: w6 = *(u8 *)(r1 + 0x11) -# CHECK32-OBJ-OLD: w1 = *(u8 *)(r10 - 0x3) -# CHECK32-OBJ-OLD: w8 = *(u16 *)(r2 + 0x20) -# CHECK32-OBJ-OLD: w4 = *(u32 *)(r3 + 0x40) # CHECK32-ASM-NEW: encoding: [0x71,0x16,0x11,0x00,0x00,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0x71,0xa1,0xfd,0xff,0x00,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0x69,0x28,0x20,0x00,0x00,0x00,0x00,0x00] @@ -87,11 +67,6 @@ ldxw w4, [r3 + 64] # CHECK-OBJ-NEW: stxh [r2 + 0x20], r8 # CHECK-OBJ-NEW: stxw [r3 + 0x40], r4 # CHECK-OBJ-NEW: stxdw [r4 + 0x80], r0 -# CHECK-OBJ-OLD: *(u8 *)(r1 + 0x11) = r6 -# CHECK-OBJ-OLD: *(u8 *)(r10 - 0x3) = r1 -# CHECK-OBJ-OLD: *(u16 *)(r2 + 0x20) = r8 -# CHECK-OBJ-OLD: *(u32 *)(r3 + 0x40) = r4 -# CHECK-OBJ-OLD: *(u64 *)(r4 + 0x80) = r0 # CHECK-ASM-NEW: encoding: [0x73,0x61,0x11,0x00,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x73,0x1a,0xfd,0xff,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x6b,0x82,0x20,0x00,0x00,0x00,0x00,0x00] @@ -109,10 +84,6 @@ stxdw [r4 + 128], r0 # CHECK32-OBJ-NEW: stxb [r10 - 0x3], w1 # CHECK32-OBJ-NEW: stxh [r2 + 0x20], w8 # CHECK32-OBJ-NEW: stxw [r3 + 0x40], w4 -# CHECK32-OBJ-OLD: *(u8 *)(r1 + 0x11) = w6 -# CHECK32-OBJ-OLD: *(u8 *)(r10 - 0x3) = w1 -# CHECK32-OBJ-OLD: *(u16 *)(r2 + 0x20) = w8 -# CHECK32-OBJ-OLD: *(u32 *)(r3 + 0x40) = w4 # CHECK32-ASM-NEW: encoding: [0x73,0x61,0x11,0x00,0x00,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0x73,0x1a,0xfd,0xff,0x00,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0x6b,0x82,0x20,0x00,0x00,0x00,0x00,0x00] @@ -125,7 +96,6 @@ stxw [r3 + 64], w4 # XADDW (NoALU32). # CHECK-OBJ-NEW: stxxaddw [r8 + 0x4], r2 -# CHECK-OBJ-OLD: lock *(u32 *)(r8 + 0x4) += r2 # CHECK-ASM-NEW: encoding: [0xc3,0x28,0x04,0x00,0x00,0x00,0x00,0x00] stxxaddw [r8 + 4], r2 @@ -136,10 +106,6 @@ stxxaddw [r8 + 4], r2 # CHECK-OBJ-NEW: stxxanddw [r8 - 0x20], r1 # CHECK-OBJ-NEW: stxxordw [r8 - 0x40], r2 # CHECK-OBJ-NEW: stxxxordw [r8 - 0x80], r3 -# CHECK-OBJ-OLD: lock *(u64 *)(r8 - 0x10) += r0 -# CHECK-OBJ-OLD: lock *(u64 *)(r8 - 0x20) &= r1 -# CHECK-OBJ-OLD: lock *(u64 *)(r8 - 0x40) |= r2 -# CHECK-OBJ-OLD: lock *(u64 *)(r8 - 0x80) ^= r3 # CHECK-ASM-NEW: encoding: [0xdb,0x08,0xf0,0xff,0x00,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0xdb,0x18,0xe0,0xff,0x50,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0xdb,0x28,0xc0,0xff,0x40,0x00,0x00,0x00] @@ -156,10 +122,6 @@ stxxxordw [r8 - 128], r3 # CHECK32-OBJ-NEW: stxxandw [r8 - 0x20], w5 # CHECK32-OBJ-NEW: stxxorw [r8 - 0x40], w6 # CHECK32-OBJ-NEW: stxxxorw [r8 - 0x80], w7 -# CHECK32-OBJ-OLD: lock *(u32 *)(r8 - 0x10) += w4 -# CHECK32-OBJ-OLD: lock *(u32 *)(r8 - 0x20) &= w5 -# CHECK32-OBJ-OLD: lock *(u32 *)(r8 - 0x40) |= w6 -# CHECK32-OBJ-OLD: lock *(u32 *)(r8 - 0x80) ^= w7 # CHECK32-ASM-NEW: encoding: [0xc3,0x48,0xf0,0xff,0x00,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0xc3,0x58,0xe0,0xff,0x50,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0xc3,0x68,0xc0,0xff,0x40,0x00,0x00,0x00] @@ -176,10 +138,6 @@ stxxxorw [r8 - 128], w7 # CHECK-OBJ-NEW: stxxfanddw [r8 - 0x20], r1 # CHECK-OBJ-NEW: stxxfordw [r8 - 0x40], r2 # CHECK-OBJ-NEW: stxxfxordw [r8 - 0x80], r3 -# CHECK-OBJ-OLD: r0 = atomic_fetch_add((u64 *)(r8 - 0x10), r0) -# CHECK-OBJ-OLD: r1 = atomic_fetch_and((u64 *)(r8 - 0x20), r1) -# CHECK-OBJ-OLD: r2 = atomic_fetch_or((u64 *)(r8 - 0x40), r2) -# CHECK-OBJ-OLD: r3 = atomic_fetch_xor((u64 *)(r8 - 0x80), r3) # CHECK-ASM-NEW: encoding: [0xdb,0x08,0xf0,0xff,0x01,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0xdb,0x18,0xe0,0xff,0x51,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0xdb,0x28,0xc0,0xff,0x41,0x00,0x00,0x00] @@ -196,10 +154,6 @@ stxxfxordw [r8 - 128], r3 # CHECK32-OBJ-NEW: stxxfandw [r8 - 0x20], w1 # CHECK32-OBJ-NEW: stxxforw [r8 - 0x40], w2 # CHECK32-OBJ-NEW: stxxfxorw [r8 - 0x80], w3 -# CHECK32-OBJ-OLD: w0 = atomic_fetch_add((u32 *)(r8 - 0x10), w0) -# CHECK32-OBJ-OLD: w1 = atomic_fetch_and((u32 *)(r8 - 0x20), w1) -# CHECK32-OBJ-OLD: w2 = atomic_fetch_or((u32 *)(r8 - 0x40), w2) -# CHECK32-OBJ-OLD: w3 = atomic_fetch_xor((u32 *)(r8 - 0x80), w3) # CHECK32-ASM-NEW: encoding: [0xc3,0x08,0xf0,0xff,0x01,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0xc3,0x18,0xe0,0xff,0x51,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0xc3,0x28,0xc0,0xff,0x41,0x00,0x00,0x00] @@ -213,9 +167,7 @@ stxxfxorw [r8 - 128], w3 # XCHGD, XCHGW32 # CHECK-OBJ-NEW: stxxchgdw [r8 - 0x10], r7 -# CHECK-OBJ-OLD: r7 = xchg_64(r8 - 0x10, r7) # CHECK32-OBJ-NEW: stxxchgw [r8 - 0x10], w0 -# CHECK32-OBJ-OLD: w0 = xchg32_32(r8 - 0x10, w0) # CHECK-ASM-NEW: encoding: [0xdb,0x78,0xf0,0xff,0xe1,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0xc3,0x08,0xf0,0xff,0xe1,0x00,0x00,0x00] stxxchgdw [r8 - 16], r7 @@ -225,9 +177,7 @@ stxxchgw [r8 - 16], w0 # CMPXCHGD, CMPXCHGW32 # CHECK-OBJ-NEW: stxcmpxchgdw [r8 - 0x10], r5 -# CHECK-OBJ-OLD: r0 = cmpxchg_64(r8 - 0x10, r0, r5) # CHECK32-OBJ-NEW: stxcmpxchgw [r8 - 0x10], w5 -# CHECK32-OBJ-OLD: w0 = cmpxchg32_32(r8 - 0x10, w0, w5) # CHECK-ASM-NEW: encoding: [0xdb,0x58,0xf0,0xff,0xf1,0x00,0x00,0x00] # CHECK32-ASM-NEW: encoding: [0xc3,0x58,0xf0,0xff,0xf1,0x00,0x00,0x00] stxcmpxchgdw [r8 - 16], r5 @@ -242,12 +192,6 @@ stxcmpxchgw [r8 - 16], w5 # CHECK-OBJ-NEW: ldindb r5 # CHECK-OBJ-NEW: ldindh r9 # CHECK-OBJ-NEW: ldindw r7 -# CHECK-OBJ-OLD: r0 = *(u8 *)skb[0x40] -# CHECK-OBJ-OLD: r0 = *(u16 *)skb[0x80] -# CHECK-OBJ-OLD: r0 = *(u32 *)skb[0x0] -# CHECK-OBJ-OLD: r0 = *(u8 *)skb[r5] -# CHECK-OBJ-OLD: r0 = *(u16 *)skb[r9] -# CHECK-OBJ-OLD: r0 = *(u32 *)skb[r7] # CHECK-ASM-NEW: encoding: [0x30,0x00,0x00,0x00,0x40,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x28,0x00,0x00,0x00,0x80,0x00,0x00,0x00] # CHECK-ASM-NEW: encoding: [0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00] diff --git a/llvm/test/MC/SBF/sbf-sdiv.s b/llvm/test/MC/SBF/sbf-sdiv.s index 524417554e3cda..81c002d0712e88 100644 --- a/llvm/test/MC/SBF/sbf-sdiv.s +++ b/llvm/test/MC/SBF/sbf-sdiv.s @@ -1,17 +1,15 @@ # RUN: llvm-mc -triple sbf --mcpu=sbfv2 -filetype=obj -o %t %s -# RUN: llvm-objdump --output-asm-variant=1 -d -r %t | FileCheck %s +# RUN: llvm-objdump -d -r %t | FileCheck %s -.syntax_old +sdiv32 w1, w2 // BPF_SDIV | BPF_X +// CHECK: ec 21 00 00 00 00 00 00 sdiv32 w1, w2 -w1 s/= w2 // BPF_SDIV | BPF_X -// CHECK: ec 21 00 00 00 00 00 00 w1 s/= w2 +sdiv32 w3, 6 // BPF_SDIV | BPF_K +// CHECK: e4 03 00 00 06 00 00 00 sdiv32 w3, 0x6 -w3 s/= 6 // BPF_SDIV | BPF_K -// CHECK: e4 03 00 00 06 00 00 00 w3 s/= 0x6 +sdiv64 r4, r5 // BPF_SDIV | BPF_X +// CHECK: ef 54 00 00 00 00 00 00 sdiv64 r4, r5 -r4 s/= r5 // BPF_SDIV | BPF_X -// CHECK: ef 54 00 00 00 00 00 00 r4 s/= r5 - -r5 s/= 6 // BPF_SDIV | BPF_K -// CHECK: e7 05 00 00 06 00 00 00 r5 s/= 0x6 +sdiv64 r5, 6 // BPF_SDIV | BPF_K +// CHECK: e7 05 00 00 06 00 00 00 sdiv64 r5, 0x6 diff --git a/llvm/tools/llvm-objdump/ObjdumpOpts.td b/llvm/tools/llvm-objdump/ObjdumpOpts.td index ad4ce3c12cc963..c1dec5ced89d31 100644 --- a/llvm/tools/llvm-objdump/ObjdumpOpts.td +++ b/llvm/tools/llvm-objdump/ObjdumpOpts.td @@ -248,10 +248,6 @@ def debug_vars_indent_EQ : Joined<["--"], "debug-vars-indent=">, HelpText<"Distance to indent the source-level variable display, " "relative to the start of the disassembly">; -def output_asm_variant_EQ : Joined<["--"], "output-asm-variant=">, - MetaVarName<"uint">, - HelpText<"Select output assembly syntax variant">; - def x86_asm_syntax_att : Flag<["--"], "x86-asm-syntax=att">, HelpText<"Emit AT&T-style disassembly">; diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index f04f97990713a6..aac53658c146b2 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -232,8 +232,6 @@ bool objdump::UnwindInfo; static bool Wide; std::string objdump::Prefix; uint32_t objdump::PrefixStrip; -static uint64_t OutputAsmVariant; -static bool HasOutputAsmVariantFlag; DebugVarsFormat objdump::DbgVariables = DVDisabled; @@ -919,8 +917,6 @@ DisassemblerTarget::DisassemblerTarget(const Target *TheTarget, ObjectFile &Obj, InstrAnalysis.reset(TheTarget->createMCInstrAnalysis(InstrInfo.get())); int AsmPrinterVariant = AsmInfo->getAssemblerDialect(); - if (HasOutputAsmVariantFlag) - AsmPrinterVariant = OutputAsmVariant; InstPrinter.reset(TheTarget->createMCInstPrinter(Triple(TripleName), AsmPrinterVariant, *AsmInfo, *InstrInfo, *RegisterInfo)); @@ -3421,8 +3417,6 @@ static void parseObjdumpOptions(const llvm::opt::InputArgList &InputArgs) { } parseIntArg(InputArgs, OBJDUMP_debug_vars_indent_EQ, DbgIndent); - parseIntArg(InputArgs, OBJDUMP_output_asm_variant_EQ, OutputAsmVariant); - HasOutputAsmVariantFlag = InputArgs.hasArg(OBJDUMP_output_asm_variant_EQ); parseMachOOptions(InputArgs); diff --git a/llvm/utils/TableGen/CodeGenInstruction.cpp b/llvm/utils/TableGen/CodeGenInstruction.cpp index 17a42ab97d29d2..39dc810eea2754 100644 --- a/llvm/utils/TableGen/CodeGenInstruction.cpp +++ b/llvm/utils/TableGen/CodeGenInstruction.cpp @@ -553,14 +553,6 @@ FlattenAsmStringVariants(StringRef Cur, unsigned Variant) { ++VariantsStart; // Skip the '{'. - char VariantSeparator = '|'; - // Check for a separator override "{?x?" where x is the new separator. - if ((Cur.size() - VariantsStart > 3) && - Cur[VariantsStart] == '?' && Cur[VariantsStart+2] == '?') { - VariantSeparator = Cur[VariantsStart+1]; - VariantsStart += 3; - } - // Scan to the end of the variants string. size_t VariantsEnd = VariantsStart; unsigned NestedBraces = 1; @@ -575,8 +567,8 @@ FlattenAsmStringVariants(StringRef Cur, unsigned Variant) { // Select the Nth variant (or empty). StringRef Selection = Cur.slice(VariantsStart, VariantsEnd); for (unsigned i = 0; i != Variant; ++i) - Selection = Selection.split(VariantSeparator).second; - Res += Selection.split(VariantSeparator).first; + Selection = Selection.split('|').second; + Res += Selection.split('|').first; assert(VariantsEnd != Cur.size() && "Unterminated variants in assembly string!"); Cur = Cur.substr(VariantsEnd + 1);