// RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=+vfp2,+mve,+8msecext -show-encoding < %s 2>%t \
// RUN: | FileCheck --check-prefix=CHECK %s
// RUN: FileCheck --check-prefix=ERROR < %t %s
// RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=-vfp2,+mve,+8msecext -show-encoding < %s 2>%t \
// RUN: | FileCheck --check-prefix=CHECK-NOVFP %s
// RUN: FileCheck --check-prefix=ERROR-NOVFP < %t %s
// RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=+vfp2,-mve,+8msecext -show-encoding < %s 2>%t \
// RUN: | FileCheck --check-prefix=CHECK-NOMVE %s
// RUN: FileCheck --check-prefix=ERROR-NOMVE < %t %s
// RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=+vfp2,+mve,-8msecext -show-encoding < %s 2>%t \
// RUN: | FileCheck --check-prefix=CHECK-NOSEC %s
// RUN: FileCheck --check-prefix=ERROR-NOSEC < %t %s
// RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=-vfp2,-mve,-8msecext -show-encoding < %s 2>%t
// RUN: FileCheck --check-prefix=ERROR-NONE < %t %s
// RUN: not llvm-mc -triple=thumbv8m.main-none-eabi -mattr=+vfp2,+8msecext -show-encoding < %s 2>%t
// RUN: FileCheck --check-prefix=ERROR-V8M < %t %s
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vstr fpscr, [r0] @ encoding: [0x80,0xed,0x80,0x2f]
// CHECK-NOMVE: vstr fpscr, [r0] @ encoding: [0x80,0xed,0x80,0x2f]
// CHECK-NOVFP: vstr fpscr, [r0] @ encoding: [0x80,0xed,0x80,0x2f]
// CHECK: vstr fpscr, [r0] @ encoding: [0x80,0xed,0x80,0x2f]
vstr fpscr, [r0]
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vstr fpscr_nzcvqc, [r9, // CHECK-NOMVE: vstr fpscr_nzcvqc, [r9, // CHECK-NOVFP: vstr fpscr_nzcvqc, [r9, // CHECK: vstr fpscr_nzcvqc, [r9, vstr fpscr_nzcvqc, [r9,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vstr fpscr_nzcvqc, [r9, // CHECK-NOMVE: vstr fpscr_nzcvqc, [r9, // CHECK-NOVFP: vstr fpscr_nzcvqc, [r9, // CHECK: vstr fpscr_nzcvqc, [r9, vstr fpscr_nzcvqc, [r9,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vstr fpscr_nzcvqc, [r9], // CHECK-NOMVE: vstr fpscr_nzcvqc, [r9], // CHECK-NOVFP: vstr fpscr_nzcvqc, [r9], // CHECK: vstr fpscr_nzcvqc, [r9], vstr fpscr_nzcvqc, [r9],
// CHECK-NOSEC: it hi @ encoding: [0x88,0xbf]
// CHECK-NOMVE: it hi @ encoding: [0x88,0xbf]
// CHECK-NOVFP: it hi @ encoding: [0x88,0xbf]
// CHECK: it hi @ encoding: [0x88,0xbf]
it hi
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vstrhi fpscr, [r0] @ encoding: [0x80,0xed,0x80,0x2f]
// CHECK-NOMVE: vstrhi fpscr, [r0] @ encoding: [0x80,0xed,0x80,0x2f]
// CHECK-NOVFP: vstrhi fpscr, [r0] @ encoding: [0x80,0xed,0x80,0x2f]
// CHECK: vstrhi fpscr, [r0] @ encoding: [0x80,0xed,0x80,0x2f]
vstrhi fpscr, [r0]
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vldr fpscr, [r0] @ encoding: [0x90,0xed,0x80,0x2f]
// CHECK-NOMVE: vldr fpscr, [r0] @ encoding: [0x90,0xed,0x80,0x2f]
// CHECK-NOVFP: vldr fpscr, [r0] @ encoding: [0x90,0xed,0x80,0x2f]
// CHECK: vldr fpscr, [r0] @ encoding: [0x90,0xed,0x80,0x2f]
vldr fpscr, [r0]
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vldr fpscr_nzcvqc, [r9, // CHECK-NOMVE: vldr fpscr_nzcvqc, [r9, // CHECK-NOVFP: vldr fpscr_nzcvqc, [r9, // CHECK: vldr fpscr_nzcvqc, [r9, vldr fpscr_nzcvqc, [r9,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vldr fpscr_nzcvqc, [r9, // CHECK-NOMVE: vldr fpscr_nzcvqc, [r9, // CHECK-NOVFP: vldr fpscr_nzcvqc, [r9, // CHECK: vldr fpscr_nzcvqc, [r9, vldr fpscr_nzcvqc, [r9,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vldr fpscr_nzcvqc, [r9], // CHECK-NOMVE: vldr fpscr_nzcvqc, [r9], // CHECK-NOVFP: vldr fpscr_nzcvqc, [r9], // CHECK: vldr fpscr_nzcvqc, [r9], vldr fpscr_nzcvqc, [r9],
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vldr fpscr_nzcvqc, [sp], // CHECK-NOMVE: vldr fpscr_nzcvqc, [sp], // CHECK-NOVFP: vldr fpscr_nzcvqc, [sp], // CHECK: vldr fpscr_nzcvqc, [sp], vldr fpscr_nzcvqc, [sp],
// CHECK-NOSEC: it hi @ encoding: [0x88,0xbf]
// CHECK-NOMVE: it hi @ encoding: [0x88,0xbf]
// CHECK-NOVFP: it hi @ encoding: [0x88,0xbf]
// CHECK: it hi @ encoding: [0x88,0xbf]
it hi
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: fp registers
// CHECK-NOSEC: vldrhi fpscr, [r0] @ encoding: [0x90,0xed,0x80,0x2f]
// CHECK-NOMVE: vldrhi fpscr, [r0] @ encoding: [0x90,0xed,0x80,0x2f]
// CHECK-NOVFP: vldrhi fpscr, [r0] @ encoding: [0x90,0xed,0x80,0x2f]
// CHECK: vldrhi fpscr, [r0] @ encoding: [0x90,0xed,0x80,0x2f]
vldrhi fpscr, [r0]
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxts, [r12, // CHECK-NOVFP: vstr fpcxts, [r12, // CHECK: vstr fpcxts, [r12, vstr fpcxts, [r12,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxts, [r12, // CHECK-NOVFP: vstr fpcxts, [r12, // CHECK: vstr fpcxts, [r12, vstr fpcxts, [r12,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxts, [r12], // CHECK-NOVFP: vstr fpcxts, [r12], // CHECK: vstr fpcxts, [r12], vstr fpcxts, [r12],
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxts, [sp], // CHECK-NOVFP: vstr fpcxts, [sp], // CHECK: vstr fpcxts, [sp], vstr fpcxts, [sp],
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxts, [r12, // CHECK-NOVFP: vldr fpcxts, [r12, // CHECK: vldr fpcxts, [r12, vldr fpcxts, [r12,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxts, [r12, // CHECK-NOVFP: vldr fpcxts, [r12, // CHECK: vldr fpcxts, [r12, vldr fpcxts, [r12,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxts, [r12], // CHECK-NOVFP: vldr fpcxts, [r12], // CHECK: vldr fpcxts, [r12], vldr fpcxts, [r12],
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxts, [sp], // CHECK-NOVFP: vldr fpcxts, [sp], // CHECK: vldr fpcxts, [sp], vldr fpcxts, [sp],
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxtns, [r0] @ encoding: [0xc0,0xed,0x80,0xcf]
// CHECK-NOVFP: vstr fpcxtns, [r0] @ encoding: [0xc0,0xed,0x80,0xcf]
// CHECK: vstr fpcxtns, [r0] @ encoding: [0xc0,0xed,0x80,0xcf]
vstr fpcxtns, [r0]
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxtns, [r9, // CHECK-NOVFP: vstr fpcxtns, [r9, // CHECK: vstr fpcxtns, [r9, vstr fpcxtns, [r9,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxtns, [r6, // CHECK-NOVFP: vstr fpcxtns, [r6, // CHECK: vstr fpcxtns, [r6, vstr fpcxtns, [r6,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxtns, [lr, // CHECK-NOVFP: vstr fpcxtns, [lr, // CHECK: vstr fpcxtns, [lr, vstr fpcxtns, [lr,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxtns, [r12, // CHECK-NOVFP: vstr fpcxtns, [r12, // CHECK: vstr fpcxtns, [r12, vstr fpcxtns, [r12,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vstr fpcxtns, [sp], // CHECK-NOVFP: vstr fpcxtns, [sp], // CHECK: vstr fpcxtns, [sp], vstr fpcxtns, [sp],
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxtns, [r0] @ encoding: [0xd0,0xed,0x80,0xcf]
// CHECK-NOVFP: vldr fpcxtns, [r0] @ encoding: [0xd0,0xed,0x80,0xcf]
// CHECK: vldr fpcxtns, [r0] @ encoding: [0xd0,0xed,0x80,0xcf]
vldr fpcxtns, [r0]
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxtns, [r9, // CHECK-NOVFP: vldr fpcxtns, [r9, // CHECK: vldr fpcxtns, [r9, vldr fpcxtns, [r9,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxtns, [r6, // CHECK-NOVFP: vldr fpcxtns, [r6, // CHECK: vldr fpcxtns, [r6, vldr fpcxtns, [r6,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxtns, [lr, // CHECK-NOVFP: vldr fpcxtns, [lr, // CHECK: vldr fpcxtns, [lr, vldr fpcxtns, [lr,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxtns, [r12, // CHECK-NOVFP: vldr fpcxtns, [r12, // CHECK: vldr fpcxtns, [r12, vldr fpcxtns, [r12,
// ERROR-V8M: instruction requires: armv8.1m.main
// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
// CHECK-NOMVE: vldr fpcxtns, [sp], // CHECK-NOVFP: vldr fpcxtns, [sp], // CHECK: vldr fpcxtns, [sp], vldr fpcxtns, [sp],
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vstr vpr, [r6, // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vstr vpr, [r6, // CHECK: vstr vpr, [r6, vstr vpr, [r6,
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vstr p0, [lr, // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vstr p0, [lr, // CHECK: vstr p0, [lr, vstr p0, [lr,
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vstr vpr, [r6, // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vstr vpr, [r6, // CHECK: vstr vpr, [r6, vstr vpr, [r6,
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vstr p0, [lr, // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vstr p0, [lr, // CHECK: vstr p0, [lr, vstr p0, [lr,
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vstr vpr, [r6], // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vstr vpr, [r6], // CHECK: vstr vpr, [r6], vstr vpr, [r6],
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vstr p0, [lr], // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vstr p0, [lr], // CHECK: vstr p0, [lr], vstr p0, [lr],
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vstr p0, [sp], // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vstr p0, [sp], // CHECK: vstr p0, [sp], vstr p0, [sp],
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vldr vpr, [r6, // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vldr vpr, [r6, // CHECK: vldr vpr, [r6, vldr vpr, [r6,
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vldr p0, [lr, // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vldr p0, [lr, // CHECK: vldr p0, [lr, vldr p0, [lr,
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vldr vpr, [r6, // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vldr vpr, [r6, // CHECK: vldr vpr, [r6, vldr vpr, [r6,
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vldr p0, [lr, // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vldr p0, [lr, // CHECK: vldr p0, [lr, vldr p0, [lr,
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vldr vpr, [r6], // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vldr vpr, [r6], // CHECK: vldr vpr, [r6], vldr vpr, [r6],
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vldr p0, [lr], // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vldr p0, [lr], // CHECK: vldr p0, [lr], vldr p0, [lr],
// ERROR-V8M: instruction requires: mve armv8.1m.main
// ERROR-NONE: instruction requires: mve
// CHECK-NOSEC: vldr p0, [sp], // ERROR-NOMVE: instruction requires: mve
// CHECK-NOVFP: vldr p0, [sp], // CHECK: vldr p0, [sp], vldr p0, [sp],
// ERROR-NOSEC: invalid instruction
// ERROR-NOMVE: invalid operand for instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr fpcxtns, [pc,
// ERROR-NOSEC: invalid instruction
// ERROR-NOMVE: invalid operand for instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vstr fpcxtns, [r0,
// ERROR-NOSEC: invalid instruction
// ERROR-NOMVE: invalid operand for instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr fpcxtns, [r2,
// ERROR-NOSEC: invalid instruction
// ERROR-NOMVE: invalid operand for instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr fpcxtns, [pc],
// ERROR-NOSEC: invalid operand for instruction
// ERROR-NOMVE: invalid operand for instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vstr vpr, [r0,
// ERROR-NOSEC: invalid operand for instruction
// ERROR-NOMVE: invalid instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr p0, [r2,
// ERROR-NOSEC: invalid operand for instruction
// ERROR-NOMVE: invalid instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr p0, [r2,
// ERROR-NOSEC: invalid operand for instruction
// ERROR-NOMVE: invalid instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr p0, [pc],
// ERROR-NOSEC: invalid operand for instruction
// ERROR-NOMVE: invalid instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr fpscr, [pc,
// ERROR-NOSEC: invalid operand for instruction
// ERROR-NOMVE: invalid operand for instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr fpscr_nzcvqc, [r8],
// ERROR-NOSEC: invalid operand for instruction
// ERROR-NOMVE: invalid operand for instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr fpscr_nzcvqc, [r8],
// ERROR-NOSEC: invalid operand for instruction
// ERROR-NOMVE: invalid operand for instruction
// ERROR-NOVFP: invalid operand for instruction
// ERROR: invalid operand for instruction
vldr fpscr_nzcvqc, [pc],