Index: lib/Target/AArch64/AArch64InstrFormats.td =================================================================== --- lib/Target/AArch64/AArch64InstrFormats.td +++ lib/Target/AArch64/AArch64InstrFormats.td @@ -4082,6 +4082,26 @@ let Inst{1-0} = ll; } +//--- +// UDF : Permanently UNDEFINED instructions. Format: Opc = 0x0000, 16 bit imm. +//-- +def uimm16 : Operand, ImmLeaf{ + let ParserMatchClass = Imm0_65535Operand; + let PrintMethod = "printImm"; +} + +let hasSideEffects = 1, isTrap = 1, mayLoad = 0, mayStore = 0 in { +class UDFType opc, string asm> + : I<(outs), (ins uimm16:$imm), + asm, "\t$imm", "", []>, + Sched<[]> { + bits<16> imm; + let Inst{31-16} = opc; + let Inst{15-0} = imm; +} +} let Predicates = [HasFPARMv8] in { //--- Index: lib/Target/AArch64/AArch64InstrInfo.td =================================================================== --- lib/Target/AArch64/AArch64InstrInfo.td +++ lib/Target/AArch64/AArch64InstrInfo.td @@ -1594,6 +1594,8 @@ def : InstAlias<"dcps2", (DCPS2 0)>; def : InstAlias<"dcps3", (DCPS3 0)>; +def UDF : UDFType<0, "udf">; + //===----------------------------------------------------------------------===// // Load instructions. //===----------------------------------------------------------------------===// Index: test/MC/AArch64/udf-erros.s =================================================================== --- /dev/null +++ test/MC/AArch64/udf-erros.s @@ -0,0 +1,10 @@ +# RUN: not llvm-mc -assemble -show-encoding -triple=aarch64- %s 2>&1 | FileCheck %s + +udf 65536 +# CHECK:{{.*}} immediate must be an integer in range [0, 65535]. + +udf -1 +# CHECK:{{.*}} immediate must be an integer in range [0, 65535]. + +udf -768 +# CHECK:{{.*}} immediate must be an integer in range [0, 65535]. Index: test/MC/AArch64/udf.s =================================================================== --- /dev/null +++ test/MC/AArch64/udf.s @@ -0,0 +1,9 @@ +# RUN: llvm-mc -assemble -show-encoding -triple=aarch64- %s | FileCheck %s +.text +udf 0 +udf 258 +udf 65535 +# CHECK: .text +# CHECK-NEXT: udf #0 // encoding: [0x00,0x00,0x00,0x00] +# CHECK-NEXT: udf #258 // encoding: [0x02,0x01,0x00,0x00] +# CHECK-NEXT: udf #65535 // encoding: [0xff,0xff,0x00,0x00] Index: test/MC/Disassembler/AArch64/udf.txt =================================================================== --- /dev/null +++ test/MC/Disassembler/AArch64/udf.txt @@ -0,0 +1,19 @@ +# RUN: llvm-mc -arch aarch64 -disassemble -o - %s | FileCheck %s +# RUN: llvm-mc -arch aarch64 -disassemble -o - %s | \ +# RUN: llvm-mc -assemble -filetype=obj -arch aarch64 -o - | \ +# RUN: llvm-objdump -r -d --triple=arm64- - | \ +# RUN: FileCheck %s -check-prefix=OBJ +[0x00,0x00,0x00,0x00] +[0x02,0x01,0x00,0x00] +[0xff,0xff,0x00,0x00] + +# CHECK: .text +# CHECK-NEXT: udf #0 +# CHECK-NEXT: udf #258 +# CHECK-NEXT: udf #65535 + +# OBJ: Disassembly of section .text: +# OBJ-NEXT: $x.0: +# OBJ-NEXT: 0: 00 00 00 00 udf #0 +# OBJ-NEXT: 4: 02 01 00 00 udf #258 +# OBJ-NEXT: 8: ff ff 00 00 udf #65535