1 // RUN
: llvm-mc
-triple aarch64-none-linux-gnu
-show-encoding
-mattr
=+fp16fml
< %s | FileCheck
%s
--check-prefix
=CHECK
2 // RUN
: llvm-mc
-triple aarch64-none-linux-gnu
-show-encoding
-mattr
=-fullfp16
,+fp16fml
< %s | FileCheck
%s
--check-prefix
=CHECK
3 // RUN
: not llvm-mc
-triple aarch64-none-linux-gnu
-show-encoding
-mattr
=+v8.2
a < %s
2>&1 | FileCheck
%s
--check-prefix
=CHECK-NOFP16FML
4 // RUN
: not llvm-mc
-triple aarch64-none-linux-gnu
-show-encoding
-mattr
=+v8.2
a,+fullfp16
< %s
2>&1 | FileCheck
%s
--check-prefix
=CHECK-NOFP16FML
5 // RUN
: not llvm-mc
-triple aarch64-none-linux-gnu
-show-encoding
-mattr
=+v8.2
a,+fp16fml
,-fullfp16
< %s
2>&1 | FileCheck
%s
--check-prefix
=CHECK-NOFP16FML
6 // RUN
: not llvm-mc
-triple aarch64-none-linux-gnu
-show-encoding
-mattr
=+v8.2
a,-neon
,+fp16fml
< %s
2>&1 | FileCheck
%s
--check-prefix
=CHECK-NO-NEON
7 // RUN
: not llvm-mc
-triple aarch64-none-linux-gnu
-show-encoding
-mattr
=+v8.2
a,-neon
< %s
2>&1 | FileCheck
%s
--check-prefix
=CHECK-NO-FP16FML-NOR-NEON
9 //------------------------------------------------------------------------------
10 // ARMV8.2
-A Floating Point Multiplication
11 //------------------------------------------------------------------------------
13 FMLAL V0.2S
, V1.2H
, V2.2H
14 FMLSL V0.2S
, V1.2H
, V2.2H
15 FMLAL V0.4S
, V1.4H
, V2.4H
16 FMLSL V0.4S
, V1.4H
, V2.4H
17 FMLAL2 V0.2S
, V1.2H
, V2.2H
18 FMLSL2 V0.2S
, V1.2H
, V2.2H
19 FMLAL2 V0.4S
, V1.4H
, V2.4H
20 FMLSL2 V0.4S
, V1.4H
, V2.4H
22 //CHECK
: fmlal v0.2s
, v1.2h
, v2.2h
// encoding
: [0x20,0xec,0x22,0x0e]
23 //CHECK
: fmlsl v0.2s
, v1.2h
, v2.2h
// encoding
: [0x20,0xec,0xa2,0x0e]
24 //CHECK
: fmlal v0.4s
, v1.4h
, v2.4h
// encoding
: [0x20,0xec,0x22,0x4e]
25 //CHECK
: fmlsl v0.4s
, v1.4h
, v2.4h
// encoding
: [0x20,0xec,0xa2,0x4e]
26 //CHECK
: fmlal2 v0.2s
, v1.2h
, v2.2h
// encoding
: [0x20,0xcc,0x22,0x2e]
27 //CHECK
: fmlsl2 v0.2s
, v1.2h
, v2.2h
// encoding
: [0x20,0xcc,0xa2,0x2e]
28 //CHECK
: fmlal2 v0.4s
, v1.4h
, v2.4h
// encoding
: [0x20,0xcc,0x22,0x6e]
29 //CHECK
: fmlsl2 v0.4s
, v1.4h
, v2.4h
// encoding
: [0x20,0xcc,0xa2,0x6e]
31 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
32 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
33 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
34 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
35 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
36 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
37 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
38 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
40 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
41 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
42 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
43 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
44 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
45 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
46 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
47 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
49 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
50 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
51 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
52 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
53 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
54 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
55 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
56 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
58 # Checks with the maximum index value 7:
59 fmlal V0.2s
, v1.2h
, v2.h
[7]
60 fmlsl V0.2s
, v1.2h
, v2.h
[7]
61 fmlal V0.4s
, v1.4h
, v2.h
[7]
62 fmlsl V0.4s
, v1.4h
, v2.h
[7]
63 fmlal2 V0.2s
, v1.2h
, v2.h
[7]
64 fmlsl2 V0.2s
, v1.2h
, v2.h
[7]
65 fmlal2 V0.4s
, v1.4h
, v2.h
[7]
66 fmlsl2 V0.4s
, v1.4h
, v2.h
[7]
68 # Some more checks with a different index bit pattern to catch
69 # incorrect permutations of the index (decimal 7 is 0b111):
70 fmlal V0.2s
, v1.2h
, v2.h
[5]
71 fmlsl V0.2s
, v1.2h
, v2.h
[5]
72 fmlal V0.4s
, v1.4h
, v2.h
[5]
73 fmlsl V0.4s
, v1.4h
, v2.h
[5]
74 fmlal2 V0.2s
, v1.2h
, v2.h
[5]
75 fmlsl2 V0.2s
, v1.2h
, v2.h
[5]
76 fmlal2 V0.4s
, v1.4h
, v2.h
[5]
77 fmlsl2 V0.4s
, v1.4h
, v2.h
[5]
79 //CHECK
: fmlal v0.2s
, v1.2h
, v2.h
[7] // encoding
: [0x20,0x08,0xb2,0x0f]
80 //CHECK
: fmlsl v0.2s
, v1.2h
, v2.h
[7] // encoding
: [0x20,0x48,0xb2,0x0f]
81 //CHECK
: fmlal v0.4s
, v1.4h
, v2.h
[7] // encoding
: [0x20,0x08,0xb2,0x4f]
82 //CHECK
: fmlsl v0.4s
, v1.4h
, v2.h
[7] // encoding
: [0x20,0x48,0xb2,0x4f]
83 //CHECK
: fmlal2 v0.2s
, v1.2h
, v2.h
[7] // encoding
: [0x20,0x88,0xb2,0x2f]
84 //CHECK
: fmlsl2 v0.2s
, v1.2h
, v2.h
[7] // encoding
: [0x20,0xc8,0xb2,0x2f]
85 //CHECK
: fmlal2 v0.4s
, v1.4h
, v2.h
[7] // encoding
: [0x20,0x88,0xb2,0x6f]
86 //CHECK
: fmlsl2 v0.4s
, v1.4h
, v2.h
[7] // encoding
: [0x20,0xc8,0xb2,0x6f]
88 //CHECK
: fmlal v0.2s
, v1.2h
, v2.h
[5] // encoding
: [0x20,0x08,0x92,0x0f]
89 //CHECK
: fmlsl v0.2s
, v1.2h
, v2.h
[5] // encoding
: [0x20,0x48,0x92,0x0f]
90 //CHECK
: fmlal v0.4s
, v1.4h
, v2.h
[5] // encoding
: [0x20,0x08,0x92,0x4f]
91 //CHECK
: fmlsl v0.4s
, v1.4h
, v2.h
[5] // encoding
: [0x20,0x48,0x92,0x4f]
92 //CHECK
: fmlal2 v0.2s
, v1.2h
, v2.h
[5] // encoding
: [0x20,0x88,0x92,0x2f]
93 //CHECK
: fmlsl2 v0.2s
, v1.2h
, v2.h
[5] // encoding
: [0x20,0xc8,0x92,0x2f]
94 //CHECK
: fmlal2 v0.4s
, v1.4h
, v2.h
[5] // encoding
: [0x20,0x88,0x92,0x6f]
95 //CHECK
: fmlsl2 v0.4s
, v1.4h
, v2.h
[5] // encoding
: [0x20,0xc8,0x92,0x6f]
97 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
98 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
99 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
100 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
101 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
102 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
103 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
104 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
105 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
106 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
107 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
108 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
109 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
110 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
111 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
112 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
114 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
115 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
116 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
117 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
118 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
119 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
120 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
121 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
122 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
123 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
124 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
125 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
126 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
127 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
128 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
129 //CHECK-NO-NEON
: error
: instruction requires
: neon
{{$
}}
131 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
132 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
133 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
134 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
135 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
136 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
137 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
138 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
139 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
140 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
141 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
142 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
143 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
144 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
145 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
146 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}