xref: /llvm-project/llvm/test/MC/ARM/cde-fp-vec.s (revision 295cdd5c3dbd14406bf9cce01e3dfd787fb1ddda)
1// RUN: not llvm-mc -triple=thumbv8m.main -mattr=+fp-armv8 -mattr=+cdecp0 -mattr=+cdecp1 -show-encoding < %s 2>%t | FileCheck %s
2// RUN: FileCheck <%t --check-prefixes=ERROR,ERROR-FP %s
3// RUN: not llvm-mc -triple=thumbv8m.main -mattr=+fp-armv8d16sp -mattr=+cdecp0 -mattr=+cdecp1 -show-encoding < %s 2>%t | FileCheck %s
4// RUN: FileCheck <%t --check-prefixes=ERROR,ERROR-FP %s
5// RUN: not llvm-mc -triple=thumbv8.1m.main -mattr=+mve -mattr=+cdecp0 -mattr=+cdecp1 -show-encoding < %s 2>%t | FileCheck --check-prefixes=CHECK,CHECK-MVE %s
6// RUN: FileCheck <%t --check-prefixes=ERROR,ERROR-MVE %s
7
8// CHECK-LABEL: test_predication:
9test_predication:
10ittt eq
11// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: instructions in IT block must be predicable
12vcx1a   p1, s7, #2047
13// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: instructions in IT block must be predicable
14vcx2    p0, d0, d15, #0
15// ERROR-FP: [[@LINE+2]]:{{[0-9]+}}: error: instruction requires: mve
16// ERROR-MVE: [[@LINE+1]]:{{[0-9]+}}: error: instructions in IT block must be predicable
17vcx3    p0, q0, q7, q0, #12
18nop
19nop
20nop
21
22// CHECK-LABEL: test_vcx1:
23test_vcx1:
24// CHECK-NEXT: vcx1 p0, s11, #1234 @ encoding: [0x69,0xec,0x92,0x50]
25vcx1    p0, s11, #1234
26// CHECK-NEXT: vcx1a p1, s7, #2047 @ encoding: [0x6f,0xfc,0xbf,0x31]
27vcx1a   p1, s7, #2047
28// CHECK-NEXT: vcx1 p0, d0, #0 @ encoding: [0x20,0xed,0x00,0x00]
29vcx1    p0, d0, #0
30// CHECK-NEXT: vcx1a p1, d3, #2047 @ encoding: [0x2f,0xfd,0xbf,0x31]
31vcx1a   p1, d3, #2047
32// CHECK-MVE-NEXT: vcx1 p0, q1, #1234 @ encoding: [0x29,0xec,0xd2,0x20]
33// ERROR-FP: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction, any one of the following would fix this:
34vcx1    p0, q1, #1234
35// CHECK-MVE-NEXT: vcx1a p1, q5, #4095 @ encoding: [0x2f,0xfd,0xff,0xa1]
36// ERROR-FP: [[@LINE+1]]:{{[0-9]+}}: error: instruction requires: mve
37vcx1a   p1, q5, #4095
38
39// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
40vcx1a   p1, s7, s7, #2047
41// ERROR-FP: [[@LINE+4]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,2047]
42// ERROR-MVE: [[@LINE+3]]:{{[0-9]+}}: error: invalid instruction, any one of the following would fix this
43// ERROR-MVE: [[@LINE+2]]:{{[0-9]+}}: note: operand must be a register in range [q0, q7]
44// ERROR-MVE: [[@LINE+1]]:{{[0-9]+}}: note: operand must be an immediate in the range [0,2047]
45vcx1    p0, d0, #2048
46// ERROR-FP: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,2047]
47vcx1a   p1, s0, #2048
48// ERROR-FP: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
49vcx1    p0, q0, #4096
50// ERROR-FP: [[@LINE+2]]:{{[0-9]+}}: error: coprocessor must be in the range [p0, p7]
51// ERROR-MVE: [[@LINE+1]]:{{[0-9]+}}: error: invalid operand for instruction
52vcx1    p8, d0, #1234
53// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
54vcx1    p0, d16, #1234
55// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
56vcx1    p0, s32, #1234
57// ERROR-FP: [[@LINE+7]]:{{[0-9]+}}: error: invalid instruction, any one of the following would fix this:
58// ERROR-FP: [[@LINE+6]]:{{[0-9]+}}: note: operand must be a register in range [s0, s31]
59// ERROR-FP: [[@LINE+5]]:{{[0-9]+}}: note: operand must be a register in range [d0, d15]
60// ERROR-MVE: [[@LINE+4]]:{{[0-9]+}}: error: invalid instruction, any one of the following would fix this:
61// ERROR-MVE: [[@LINE+3]]:{{[0-9]+}}: note: operand must be a register in range [q0, q7]
62// ERROR-MVE: [[@LINE+2]]:{{[0-9]+}}: note: operand must be a register in range [s0, s31]
63// ERROR-MVE: [[@LINE+1]]:{{[0-9]+}}: note: operand must be a register in range [d0, d15]
64vcx1    p0, q8, #1234
65// ERROR: [[@LINE+3]]:{{[0-9]+}}: error: invalid instruction, any one of the following would fix this:
66// ERROR: [[@LINE+2]]:{{[0-9]+}}: note: operand must be a register in range [s0, s31]
67// ERROR: [[@LINE+1]]:{{[0-9]+}}: note: operand must be a register in range [d0, d15]
68vcx1    p0, r0, #1234
69// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
70vcx1    p0, d0, d0, #0
71// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
72vcx1a   p0, d0, d2, #0
73
74// CHECK-LABEL: test_vcx2:
75test_vcx2:
76// CHECK-NEXT: vcx2 p0, s0, s31, #12 @ encoding: [0x33,0xec,0x2f,0x00]
77vcx2    p0, s0, s31,  #12
78// CHECK-NEXT: vcx2a p0, s1, s1, #63 @ encoding: [0x7f,0xfc,0xb0,0x00]
79vcx2a   p0, s1, s1, #63
80// CHECK-NEXT: vcx2 p0, d0, d15, #0 @ encoding: [0x30,0xed,0x0f,0x00]
81vcx2    p0, d0, d15, #0
82// CHECK-NEXT: vcx2a p0, d1, d11, #63 @ encoding: [0x3f,0xfd,0x9b,0x10]
83vcx2a   p0, d1, d11, #63
84// CHECK-MVE: vcx2 p1, q0, q6, #123 @ encoding: [0x3e,0xed,0xdc,0x01]
85vcx2    p1, q0, q6, #123
86// CHECK-MVE: vcx2a p1, q3, q7, #127 @ encoding: [0x3f,0xfd,0xde,0x61]
87vcx2a   p1, q3, q7, #127
88
89// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,63]
90vcx2    p0, d0, d1, #64
91// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,63]
92vcx2a   p0, s3, s1, #64
93// ERROR-MVE: [[@LINE+2]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,127]
94// ERROR-FP: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
95vcx2a   p0, q1, q5, #128
96// ERROR-FP: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a register in range [d0, d15]
97vcx2    p1, d0, q2, #0
98// ERROR-FP: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a register in range [s0, s31]
99vcx2a   p1, q2, s3, #0
100// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
101vcx2    p1, d0, d0, d2, #0
102// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
103vcx2a   p1, q2, q3, q1, #0
104
105// CHECK-LABEL: test_vcx3:
106test_vcx3:
107// CHECK-NEXT: vcx3 p0, s0, s31, s0, #1 @ encoding: [0x8f,0xec,0x90,0x00]
108vcx3    p0, s0, s31, s0, #1
109// CHECK-NEXT: vcx3a p1, s1, s17, s11, #7 @ encoding: [0xf8,0xfc,0xb5,0x01]
110vcx3a   p1, s1, s17, s11, #7
111// CHECK-NEXT: vcx3 p0, d0, d15, d7, #0 @ encoding: [0x8f,0xed,0x07,0x00]
112vcx3    p0, d0, d15, d7, #0
113// CHECK-NEXT: vcx3a p1, d1, d11, d11, #7 @ encoding: [0xbb,0xfd,0x1b,0x11]
114vcx3a   p1, d1, d11, d11, #7
115// CHECK-MVE-NEXT: vcx3 p0, q0, q2, q0, #12 @ encoding: [0xa4,0xed,0x40,0x00]
116vcx3    p0, q0, q2, q0, #12
117// CHECK-MVE-NEXT: vcx3a p1, q3, q7, q6, #15 @ encoding: [0xbe,0xfd,0x5c,0x61]
118vcx3a   p1, q3, q7, q6, #15
119
120// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,7]
121vcx3a   p1, d1, d11, d12, #8
122// ERROR-MVE: [[@LINE+2]]:{{[0-9]+}}: error: operand must be an immediate in the range [0,15]
123// ERROR-FP: error: invalid instruction
124vcx3a   p1, q1, q2, q3, #16
125// ERROR-MVE: [[@LINE+2]]:{{[0-9]+}}: error: operand must be a register in range [d0, d15]
126// ERROR-FP: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a register in range [d0, d15]
127vcx3    p0, d0, q0, d7, #1
128// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: operand must be a register in range [s0, s31]
129vcx3a   p1, s0, s1, d3, #2
130// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
131vcx3a   p0, s0, d0, q0, #2
132// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
133vcx3    p0, s0, s0, s31, s0, #1
134// ERROR: [[@LINE+1]]:{{[0-9]+}}: error: invalid instruction
135vcx3a   p1, d1, d3, d22, d22, #7
136