static std::unique_ptr<M68kOperand> createImm(const MCExpr *Expr, SMLoc Start,
SMLoc End);
+ // Imm for TRAP instruction
+ bool isTrapImm() const;
+ // Imm for BKPT instruction
+ bool isBkptImm() const;
+
// MoveMask
bool isMoveMask() const;
void addMoveMaskOperands(MCInst &Inst, unsigned N) const;
return Op;
}
+bool M68kOperand::isTrapImm() const {
+ int64_t Value;
+ if (!isImm() || !Expr->evaluateAsAbsolute(Value))
+ return false;
+
+ return isUInt<4>(Value);
+}
+
+bool M68kOperand::isBkptImm() const {
+ int64_t Value;
+ if (!isImm() || !Expr->evaluateAsAbsolute(Value))
+ return false;
+
+ return isUInt<3>(Value);
+}
+
// MoveMask
bool M68kOperand::isMoveMask() const {
if (!isMemOp())
(ADDX8dd MxDRD8:$op, (MOV8di 0))>;
def : Pat<(sub MxXRD32:$op, (i32 (MxSetCC_C MxCONDcs, CCR))),
(ADDX32dd MxDRD32:$op, (MOV32ri 0))>;
+
+//===------------===//
+// Trap / Breakpoint
+//===------------===//
+
+let RenderMethod = "addImmOperands", ParserMethod = "parseImm" in {
+ def MxTrapImm : AsmOperandClass {
+ let Name = "MxTrapImm";
+ let PredicateMethod = "isTrapImm";
+ }
+
+ def MxBkptImm : AsmOperandClass {
+ let Name = "MxBkptImm";
+ let PredicateMethod = "isBkptImm";
+ }
+}
+
+let ParserMatchClass = MxTrapImm in
+def MxTrapimm : MxOp<i8, MxSize8, "i">;
+
+let ParserMatchClass = MxBkptImm in
+def MxBkptimm : MxOp<i8, MxSize8, "i">;
+
+def TRAP : MxInst<(outs), (ins MxTrapimm:$vect), "trap\t$vect", []> {
+ let Inst = (descend 0b0100, 0b1110, 0b0100, (operand "$vect", 4));
+}
+
+def TRAPV : MxInst<(outs), (ins), "trapv", []> {
+ let Inst = (descend 0b0100, 0b1110, 0b0111, 0b0110);
+}
+
+def BKPT : MxInst<(outs), (ins MxBkptimm:$vect), "bkpt\t$vect", []> {
+ let Inst = (descend 0b0100, 0b1000, 0b0100, 0b1 , (operand "$vect", 3));
+}
+
+def ILLEGAL : MxInst<(outs), (ins), "illegal", []> {
+ let Inst = (descend 0b0100, 0b1010, 0b1111, 0b1100);
+}
--- /dev/null
+; RUN: llvm-mc -triple=m68k -show-encoding %s | FileCheck %s
+
+; CHECK: trap #13
+; CHECK-SAME: encoding: [0x4e,0x4d]
+trap #13
+; CHECK: bkpt #7
+; CHECK-SAME: encoding: [0x48,0x4f]
+bkpt #7
+; CHECK: trapv
+; CHECK-SAME: encoding: [0x4e,0x76]
+trapv
+; CHECK: illegal
+; CHECK-SAME: encoding: [0x4a,0xfc]
+illegal