1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
2
3// --------------------------------------------------------------------------//
4// Invalid predicate suffix
5fmov z0.h, p0/z, #0.0
6// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
7// CHECK-NEXT: fmov z0.h, p0/z, #0.0
8// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
9
10fmov z0.s, p0/z, #0.0
11// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
12// CHECK-NEXT: fmov z0.s, p0/z, #0.0
13// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
14
15fmov z0.d, p0/z, #0.0
16// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
17// CHECK-NEXT: fmov z0.d, p0/z, #0.0
18// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
19
20
21// --------------------------------------------------------------------------//
22// Invalid immediates
23
24fmov z0.h, #-0.05859375   // r = -4, n = 15
25// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
26// CHECK-NEXT: fmov z0.h, #-0.05859375   // r = -4, n = 15
27// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
28
29fmov z0.s, #-0.05859375   // r = -4, n = 15
30// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
31// CHECK-NEXT: fmov z0.s, #-0.05859375   // r = -4, n = 15
32// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
33
34fmov z0.d, #-0.05859375   // r = -4, n = 15
35// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
36// CHECK-NEXT: fmov z0.d, #-0.05859375   // r = -4, n = 15
37// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
38
39fmov z0.h, #-64.00000000   // r = 5, n = 32
40// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
41// CHECK-NEXT: fmov z0.h, #-64.00000000   // r = 5, n = 32
42// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
43
44fmov z0.s, #-64.00000000   // r = 5, n = 32
45// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
46// CHECK-NEXT: fmov z0.s, #-64.00000000   // r = 5, n = 32
47// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
48
49fmov z0.d, #-64.00000000   // r = 5, n = 32
50// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
51// CHECK-NEXT: fmov z0.d, #-64.00000000   // r = 5, n = 32
52// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
53
54fmov z0.h, #0.05859375   // r = -4, n = 15
55// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
56// CHECK-NEXT: fmov z0.h, #0.05859375   // r = -4, n = 15
57// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
58
59fmov z0.s, #0.05859375   // r = -4, n = 15
60// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
61// CHECK-NEXT: fmov z0.s, #0.05859375   // r = -4, n = 15
62// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
63
64fmov z0.d, #0.05859375   // r = -4, n = 15
65// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
66// CHECK-NEXT: fmov z0.d, #0.05859375   // r = -4, n = 15
67// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
68
69fmov z0.h, #64.00000000   // r = 5, n = 32
70// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
71// CHECK-NEXT: fmov z0.h, #64.00000000   // r = 5, n = 32
72// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
73
74fmov z0.s, #64.00000000   // r = 5, n = 32
75// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
76// CHECK-NEXT: fmov z0.s, #64.00000000   // r = 5, n = 32
77// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
78
79fmov z0.d, #64.00000000   // r = 5, n = 32
80// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
81// CHECK-NEXT: fmov z0.d, #64.00000000   // r = 5, n = 32
82// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
83
84fmov z0.h, p0/m, #-0.05859375    // r = -4, n = 15
85// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
86// CHECK-NEXT: fmov z0.h, p0/m, #-0.05859375    // r = -4, n = 15
87// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
88
89fmov z0.s, p0/m, #-0.05859375    // r = -4, n = 15
90// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
91// CHECK-NEXT: fmov z0.s, p0/m, #-0.05859375    // r = -4, n = 15
92// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
93
94fmov z0.d, p0/m, #-0.05859375    // r = -4, n = 15
95// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
96// CHECK-NEXT: fmov z0.d, p0/m, #-0.05859375    // r = -4, n = 15
97// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
98
99fmov z0.h, p0/m, #-64.00000000    // r = 5, n = 32
100// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
101// CHECK-NEXT: fmov z0.h, p0/m, #-64.00000000    // r = 5, n = 32
102// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
103
104fmov z0.s, p0/m, #-64.00000000    // r = 5, n = 32
105// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
106// CHECK-NEXT: fmov z0.s, p0/m, #-64.00000000    // r = 5, n = 32
107// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
108
109fmov z0.d, p0/m, #-64.00000000    // r = 5, n = 32
110// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
111// CHECK-NEXT: fmov z0.d, p0/m, #-64.00000000    // r = 5, n = 32
112// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
113
114fmov z0.h, p0/m, #0.05859375    // r = -4, n = 15
115// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
116// CHECK-NEXT: fmov z0.h, p0/m, #0.05859375    // r = -4, n = 15
117// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
118
119fmov z0.s, p0/m, #0.05859375    // r = -4, n = 15
120// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
121// CHECK-NEXT: fmov z0.s, p0/m, #0.05859375    // r = -4, n = 15
122// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
123
124fmov z0.d, p0/m, #0.05859375    // r = -4, n = 15
125// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
126// CHECK-NEXT: fmov z0.d, p0/m, #0.05859375    // r = -4, n = 15
127// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
128
129fmov z0.h, p0/m, #64.00000000    // r = 5, n = 32
130// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
131// CHECK-NEXT: fmov z0.h, p0/m, #64.00000000    // r = 5, n = 32
132// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
133
134fmov z0.s, p0/m, #64.00000000    // r = 5, n = 32
135// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
136// CHECK-NEXT: fmov z0.s, p0/m, #64.00000000    // r = 5, n = 32
137// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
138
139fmov z0.d, p0/m, #64.00000000    // r = 5, n = 32
140// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected compatible register or floating-point constant
141// CHECK-NEXT: fmov z0.d, p0/m, #64.00000000    // r = 5, n = 32
142// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
143
144
145// --------------------------------------------------------------------------//
146// Negative tests for instructions that are incompatible with movprfx
147
148movprfx z0.d, p0/z, z7.d
149fmov z0.d, #31.00000000
150// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
151// CHECK-NEXT: fmov z0.d, #31.00000000
152// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
153
154movprfx z0, z7
155fmov z0.d, #31.00000000
156// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
157// CHECK-NEXT: fmov z0.d, #31.00000000
158// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
159