1// RUN: llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=+8msecext,+mve -show-encoding < %s \
2// RUN: | FileCheck --check-prefix=CHECK %s
3// RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=-8msecext,+mve -show-encoding < %s 2>%t \
4// RUN: | FileCheck --check-prefix=CHECK-NOSEC %s
5// RUN:   FileCheck --check-prefix=ERROR-NOSEC < %t %s
6// RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=+8msecext,-mve,+vfp2 -show-encoding < %s 2> %t \
7// RUN: | FileCheck --check-prefix=CHECK-NOMVE %s
8// RUN: FileCheck --check-prefix=ERROR-NOMVE < %t %s
9// RUN: llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=+8msecext,+mve,-vfp2 -show-encoding < %s \
10// RUN: | FileCheck --check-prefix=CHECK-NOVFP %s
11// RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=-8msecext,-mve,-vfp2 -show-encoding < %s 2> %t
12// RUN: FileCheck --check-prefix=ERROR-NONE < %t %s
13// RUN: not llvm-mc -triple=thumbv8m.main-none-eabi -mattr=+8msecext,+vfp2 -show-encoding < %s 2> %t
14// RUN: FileCheck --check-prefix=ERROR-V8M < %t %s
15
16// ERROR-V8M: instruction requires: armv8.1m.main
17// ERROR-NONE: instruction requires: fp registers
18// CHECK-NOVFP: vmsr fpscr_nzcvqc, r0              @ encoding: [0xe2,0xee,0x10,0x0a]
19// CHECK-NOMVE: vmsr fpscr_nzcvqc, r0              @ encoding: [0xe2,0xee,0x10,0x0a]
20// CHECK-NOSEC: vmsr fpscr_nzcvqc, r0              @ encoding: [0xe2,0xee,0x10,0x0a]
21// CHECK: vmsr fpscr_nzcvqc, r0              @ encoding: [0xe2,0xee,0x10,0x0a]
22vmsr fpscr_nzcvqc, r0
23
24// ERROR-V8M: instruction requires: armv8.1m.main
25// ERROR-NONE: instruction requires: fp registers
26// CHECK-NOVFP: vmrs r10, fpscr_nzcvqc              @ encoding: [0xf2,0xee,0x10,0xaa]
27// CHECK-NOMVE: vmrs r10, fpscr_nzcvqc              @ encoding: [0xf2,0xee,0x10,0xaa]
28// CHECK-NOSEC: vmrs r10, fpscr_nzcvqc              @ encoding: [0xf2,0xee,0x10,0xaa]
29// CHECK: vmrs r10, fpscr_nzcvqc              @ encoding: [0xf2,0xee,0x10,0xaa]
30vmrs r10, fpscr_nzcvqc
31
32// ERROR-V8M: instruction requires: armv8.1m.main
33// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
34// CHECK-NOVFP: vmrs r0, fpcxtns              @ encoding: [0xfe,0xee,0x10,0x0a]
35// CHECK-NOMVE: vmrs r0, fpcxtns              @ encoding: [0xfe,0xee,0x10,0x0a]
36// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
37// CHECK: vmrs r0, fpcxtns              @ encoding: [0xfe,0xee,0x10,0x0a]
38vmrs r0, fpcxtns
39
40// ERROR-V8M: instruction requires: armv8.1m.main
41// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
42// CHECK-NOVFP: vmsr fpcxtns, r10              @ encoding: [0xee,0xee,0x10,0xaa]
43// CHECK-NOMVE: vmsr fpcxtns, r10              @ encoding: [0xee,0xee,0x10,0xaa]
44// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
45// CHECK: vmsr fpcxtns, r10              @ encoding: [0xee,0xee,0x10,0xaa]
46vmsr fpcxtns, r10
47
48// ERROR-V8M: instruction requires: armv8.1m.main
49// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
50// CHECK-NOVFP: vmsr fpcxts, r5              @ encoding: [0xef,0xee,0x10,0x5a]
51// CHECK-NOMVE: vmsr fpcxts, r5              @ encoding: [0xef,0xee,0x10,0x5a]
52// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
53// CHECK: vmsr fpcxts, r5              @ encoding: [0xef,0xee,0x10,0x5a]
54vmsr fpcxts, r5
55
56// ERROR-V8M: instruction requires: armv8.1m.main
57// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
58// CHECK-NOVFP: vmrs  r3, fpcxtns              @ encoding: [0xfe,0xee,0x10,0x3a]
59// CHECK-NOMVE: vmrs  r3, fpcxtns              @ encoding: [0xfe,0xee,0x10,0x3a]
60// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
61// CHECK: vmrs  r3, fpcxtns              @ encoding: [0xfe,0xee,0x10,0x3a]
62vmrs r3, fpcxtns
63
64// ERROR-V8M: instruction requires: armv8.1m.main
65// ERROR-NONE: instruction requires: ARMv8-M Security Extensions
66// CHECK-NOVFP: vmrs  r0, fpcxts              @ encoding: [0xff,0xee,0x10,0x0a]
67// CHECK-NOMVE: vmrs  r0, fpcxts              @ encoding: [0xff,0xee,0x10,0x0a]
68// ERROR-NOSEC: instruction requires: ARMv8-M Security Extensions
69// CHECK: vmrs  r0, fpcxts              @ encoding: [0xff,0xee,0x10,0x0a]
70vmrs r0, fpcxts
71
72// ERROR-V8M: instruction requires: mve armv8.1m.main
73// ERROR-NONE: instruction requires: mve
74// ERROR-NOMVE: instruction requires: mve
75// CHECK-NOSEC: vmrs r0, vpr              @ encoding: [0xfc,0xee,0x10,0x0a]
76// CHECK: vmrs r0, vpr              @ encoding: [0xfc,0xee,0x10,0x0a]
77vmrs r0, vpr
78
79// ERROR-V8M: instruction requires: mve armv8.1m.main
80// ERROR-NONE: instruction requires: mve
81// ERROR-NOMVE: instruction requires: mve
82// CHECK-NOSEC: vmrs r4, p0              @ encoding: [0xfd,0xee,0x10,0x4a]
83// CHECK: vmrs r4, p0              @ encoding: [0xfd,0xee,0x10,0x4a]
84vmrs r4, p0
85
86// ERROR-V8M: instruction requires: mve armv8.1m.main
87// ERROR-NONE: instruction requires: mve
88// ERROR-NOMVE: instruction requires: mve
89// CHECK-NOSEC: vmsr vpr, r0              @ encoding: [0xec,0xee,0x10,0x0a]
90// CHECK: vmsr vpr, r0              @ encoding: [0xec,0xee,0x10,0x0a]
91vmsr vpr, r0
92
93// ERROR-V8M: instruction requires: mve armv8.1m.main
94// ERROR-NONE: instruction requires: mve
95// ERROR-NOMVE: instruction requires: mve
96// CHECK-NOSEC: vmsr p0, r4              @ encoding: [0xed,0xee,0x10,0x4a]
97// CHECK: vmsr p0, r4              @ encoding: [0xed,0xee,0x10,0x4a]
98vmsr p0, r4
99