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,+fp16fml
,-neon
< %s
2>&1 | FileCheck
%s
--check-prefix
=CHECK-NO-FP16FML-NOR-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-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
41 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
42 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
43 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
44 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
45 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
46 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
47 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
49 # Checks with the maximum index value 7:
50 fmlal V0.2s
, v1.2h
, v2.h
[7]
51 fmlsl V0.2s
, v1.2h
, v2.h
[7]
52 fmlal V0.4s
, v1.4h
, v2.h
[7]
53 fmlsl V0.4s
, v1.4h
, v2.h
[7]
54 fmlal2 V0.2s
, v1.2h
, v2.h
[7]
55 fmlsl2 V0.2s
, v1.2h
, v2.h
[7]
56 fmlal2 V0.4s
, v1.4h
, v2.h
[7]
57 fmlsl2 V0.4s
, v1.4h
, v2.h
[7]
59 # Some more checks with a different index bit pattern to catch
60 # incorrect permutations of the index (decimal 7 is 0b111):
61 fmlal V0.2s
, v1.2h
, v2.h
[5]
62 fmlsl V0.2s
, v1.2h
, v2.h
[5]
63 fmlal V0.4s
, v1.4h
, v2.h
[5]
64 fmlsl V0.4s
, v1.4h
, v2.h
[5]
65 fmlal2 V0.2s
, v1.2h
, v2.h
[5]
66 fmlsl2 V0.2s
, v1.2h
, v2.h
[5]
67 fmlal2 V0.4s
, v1.4h
, v2.h
[5]
68 fmlsl2 V0.4s
, v1.4h
, v2.h
[5]
70 //CHECK
: fmlal v0.2s
, v1.2h
, v2.h
[7] // encoding
: [0x20,0x08,0xb2,0x0f]
71 //CHECK
: fmlsl v0.2s
, v1.2h
, v2.h
[7] // encoding
: [0x20,0x48,0xb2,0x0f]
72 //CHECK
: fmlal v0.4s
, v1.4h
, v2.h
[7] // encoding
: [0x20,0x08,0xb2,0x4f]
73 //CHECK
: fmlsl v0.4s
, v1.4h
, v2.h
[7] // encoding
: [0x20,0x48,0xb2,0x4f]
74 //CHECK
: fmlal2 v0.2s
, v1.2h
, v2.h
[7] // encoding
: [0x20,0x88,0xb2,0x2f]
75 //CHECK
: fmlsl2 v0.2s
, v1.2h
, v2.h
[7] // encoding
: [0x20,0xc8,0xb2,0x2f]
76 //CHECK
: fmlal2 v0.4s
, v1.4h
, v2.h
[7] // encoding
: [0x20,0x88,0xb2,0x6f]
77 //CHECK
: fmlsl2 v0.4s
, v1.4h
, v2.h
[7] // encoding
: [0x20,0xc8,0xb2,0x6f]
79 //CHECK
: fmlal v0.2s
, v1.2h
, v2.h
[5] // encoding
: [0x20,0x08,0x92,0x0f]
80 //CHECK
: fmlsl v0.2s
, v1.2h
, v2.h
[5] // encoding
: [0x20,0x48,0x92,0x0f]
81 //CHECK
: fmlal v0.4s
, v1.4h
, v2.h
[5] // encoding
: [0x20,0x08,0x92,0x4f]
82 //CHECK
: fmlsl v0.4s
, v1.4h
, v2.h
[5] // encoding
: [0x20,0x48,0x92,0x4f]
83 //CHECK
: fmlal2 v0.2s
, v1.2h
, v2.h
[5] // encoding
: [0x20,0x88,0x92,0x2f]
84 //CHECK
: fmlsl2 v0.2s
, v1.2h
, v2.h
[5] // encoding
: [0x20,0xc8,0x92,0x2f]
85 //CHECK
: fmlal2 v0.4s
, v1.4h
, v2.h
[5] // encoding
: [0x20,0x88,0x92,0x6f]
86 //CHECK
: fmlsl2 v0.4s
, v1.4h
, v2.h
[5] // encoding
: [0x20,0xc8,0x92,0x6f]
88 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
89 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
90 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
91 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
92 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
93 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
94 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
95 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
96 //CHECK-NOFP16FML
: error
: instruction requires
: fp16fml
{{$
}}
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
{{$
}}
105 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
106 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
107 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
108 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
109 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
110 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
111 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
112 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
113 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
114 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
115 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
116 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
117 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
118 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
119 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}
120 //CHECK-NO-FP16FML-NOR-NEON
: error
: instruction requires
: fp16fml neon
{{$
}}