]> gcc.gnu.org Git - gcc.git/blame - gcc/config/aarch64/aarch64-simd-builtins.def
gcc/
[gcc.git] / gcc / config / aarch64 / aarch64-simd-builtins.def
CommitLineData
342be7f7
JG
1
2/* In the list below, the BUILTIN_<ITERATOR> macros should
3 correspond to the iterator used to construct the instruction's
4 patterns in aarch64-simd.md. A helpful idiom to follow when
5 adding new builtins is to add a line for each pattern in the md
6 file. Thus, ADDP, which has one pattern defined for the VD_BHSI
7 iterator, and one for DImode, has two entries below. */
8
9 BUILTIN_VD_RE (CREATE, create)
10 BUILTIN_VQ_S (GETLANE, get_lane_signed)
11 BUILTIN_VDQ (GETLANE, get_lane_unsigned)
12 BUILTIN_VDQF (GETLANE, get_lane)
13 VAR1 (GETLANE, get_lane, di)
14 BUILTIN_VDC (COMBINE, combine)
15 BUILTIN_VB (BINOP, pmul)
16 BUILTIN_VDQF (UNOP, sqrt)
17 BUILTIN_VD_BHSI (BINOP, addp)
18 VAR1 (UNOP, addp, di)
19
20 BUILTIN_VD_RE (REINTERP, reinterpretdi)
21 BUILTIN_VDC (REINTERP, reinterpretv8qi)
22 BUILTIN_VDC (REINTERP, reinterpretv4hi)
23 BUILTIN_VDC (REINTERP, reinterpretv2si)
24 BUILTIN_VDC (REINTERP, reinterpretv2sf)
25 BUILTIN_VQ (REINTERP, reinterpretv16qi)
26 BUILTIN_VQ (REINTERP, reinterpretv8hi)
27 BUILTIN_VQ (REINTERP, reinterpretv4si)
28 BUILTIN_VQ (REINTERP, reinterpretv4sf)
29 BUILTIN_VQ (REINTERP, reinterpretv2di)
30 BUILTIN_VQ (REINTERP, reinterpretv2df)
31
32 BUILTIN_VDQ_I (BINOP, dup_lane)
33 BUILTIN_SDQ_I (BINOP, dup_lane)
34 /* Implemented by aarch64_<sur>q<r>shl<mode>. */
35 BUILTIN_VSDQ_I (BINOP, sqshl)
36 BUILTIN_VSDQ_I (BINOP, uqshl)
37 BUILTIN_VSDQ_I (BINOP, sqrshl)
38 BUILTIN_VSDQ_I (BINOP, uqrshl)
39 /* Implemented by aarch64_<su_optab><optab><mode>. */
40 BUILTIN_VSDQ_I (BINOP, sqadd)
41 BUILTIN_VSDQ_I (BINOP, uqadd)
42 BUILTIN_VSDQ_I (BINOP, sqsub)
43 BUILTIN_VSDQ_I (BINOP, uqsub)
44 /* Implemented by aarch64_<sur>qadd<mode>. */
45 BUILTIN_VSDQ_I (BINOP, suqadd)
46 BUILTIN_VSDQ_I (BINOP, usqadd)
47
48 /* Implemented by aarch64_get_dreg<VSTRUCT:mode><VDC:mode>. */
49 BUILTIN_VDC (GETLANE, get_dregoi)
50 BUILTIN_VDC (GETLANE, get_dregci)
51 BUILTIN_VDC (GETLANE, get_dregxi)
52 /* Implemented by aarch64_get_qreg<VSTRUCT:mode><VQ:mode>. */
53 BUILTIN_VQ (GETLANE, get_qregoi)
54 BUILTIN_VQ (GETLANE, get_qregci)
55 BUILTIN_VQ (GETLANE, get_qregxi)
56 /* Implemented by aarch64_set_qreg<VSTRUCT:mode><VQ:mode>. */
57 BUILTIN_VQ (SETLANE, set_qregoi)
58 BUILTIN_VQ (SETLANE, set_qregci)
59 BUILTIN_VQ (SETLANE, set_qregxi)
60 /* Implemented by aarch64_ld<VSTRUCT:nregs><VDC:mode>. */
61 BUILTIN_VDC (LOADSTRUCT, ld2)
62 BUILTIN_VDC (LOADSTRUCT, ld3)
63 BUILTIN_VDC (LOADSTRUCT, ld4)
64 /* Implemented by aarch64_ld<VSTRUCT:nregs><VQ:mode>. */
65 BUILTIN_VQ (LOADSTRUCT, ld2)
66 BUILTIN_VQ (LOADSTRUCT, ld3)
67 BUILTIN_VQ (LOADSTRUCT, ld4)
68 /* Implemented by aarch64_st<VSTRUCT:nregs><VDC:mode>. */
69 BUILTIN_VDC (STORESTRUCT, st2)
70 BUILTIN_VDC (STORESTRUCT, st3)
71 BUILTIN_VDC (STORESTRUCT, st4)
72 /* Implemented by aarch64_st<VSTRUCT:nregs><VQ:mode>. */
73 BUILTIN_VQ (STORESTRUCT, st2)
74 BUILTIN_VQ (STORESTRUCT, st3)
75 BUILTIN_VQ (STORESTRUCT, st4)
76
77 BUILTIN_VQW (BINOP, saddl2)
78 BUILTIN_VQW (BINOP, uaddl2)
79 BUILTIN_VQW (BINOP, ssubl2)
80 BUILTIN_VQW (BINOP, usubl2)
81 BUILTIN_VQW (BINOP, saddw2)
82 BUILTIN_VQW (BINOP, uaddw2)
83 BUILTIN_VQW (BINOP, ssubw2)
84 BUILTIN_VQW (BINOP, usubw2)
85 /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>. */
86 BUILTIN_VDW (BINOP, saddl)
87 BUILTIN_VDW (BINOP, uaddl)
88 BUILTIN_VDW (BINOP, ssubl)
89 BUILTIN_VDW (BINOP, usubl)
90 /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>. */
91 BUILTIN_VDW (BINOP, saddw)
92 BUILTIN_VDW (BINOP, uaddw)
93 BUILTIN_VDW (BINOP, ssubw)
94 BUILTIN_VDW (BINOP, usubw)
95 /* Implemented by aarch64_<sur>h<addsub><mode>. */
96 BUILTIN_VQ_S (BINOP, shadd)
97 BUILTIN_VQ_S (BINOP, uhadd)
98 BUILTIN_VQ_S (BINOP, srhadd)
99 BUILTIN_VQ_S (BINOP, urhadd)
100 /* Implemented by aarch64_<sur><addsub>hn<mode>. */
101 BUILTIN_VQN (BINOP, addhn)
102 BUILTIN_VQN (BINOP, raddhn)
103 /* Implemented by aarch64_<sur><addsub>hn2<mode>. */
104 BUILTIN_VQN (TERNOP, addhn2)
105 BUILTIN_VQN (TERNOP, raddhn2)
106
107 BUILTIN_VSQN_HSDI (UNOP, sqmovun)
108 /* Implemented by aarch64_<sur>qmovn<mode>. */
109 BUILTIN_VSQN_HSDI (UNOP, sqmovn)
110 BUILTIN_VSQN_HSDI (UNOP, uqmovn)
111 /* Implemented by aarch64_s<optab><mode>. */
112 BUILTIN_VSDQ_I_BHSI (UNOP, sqabs)
113 BUILTIN_VSDQ_I_BHSI (UNOP, sqneg)
114
115 BUILTIN_VSD_HSI (QUADOP, sqdmlal_lane)
116 BUILTIN_VSD_HSI (QUADOP, sqdmlsl_lane)
117 BUILTIN_VSD_HSI (QUADOP, sqdmlal_laneq)
118 BUILTIN_VSD_HSI (QUADOP, sqdmlsl_laneq)
119 BUILTIN_VQ_HSI (TERNOP, sqdmlal2)
120 BUILTIN_VQ_HSI (TERNOP, sqdmlsl2)
121 BUILTIN_VQ_HSI (QUADOP, sqdmlal2_lane)
122 BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_lane)
123 BUILTIN_VQ_HSI (QUADOP, sqdmlal2_laneq)
124 BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_laneq)
125 BUILTIN_VQ_HSI (TERNOP, sqdmlal2_n)
126 BUILTIN_VQ_HSI (TERNOP, sqdmlsl2_n)
127 /* Implemented by aarch64_sqdml<SBINQOPS:as>l<mode>. */
128 BUILTIN_VSD_HSI (TERNOP, sqdmlal)
129 BUILTIN_VSD_HSI (TERNOP, sqdmlsl)
130 /* Implemented by aarch64_sqdml<SBINQOPS:as>l_n<mode>. */
131 BUILTIN_VD_HSI (TERNOP, sqdmlal_n)
132 BUILTIN_VD_HSI (TERNOP, sqdmlsl_n)
133
134 BUILTIN_VSD_HSI (BINOP, sqdmull)
135 BUILTIN_VSD_HSI (TERNOP, sqdmull_lane)
136 BUILTIN_VD_HSI (TERNOP, sqdmull_laneq)
137 BUILTIN_VD_HSI (BINOP, sqdmull_n)
138 BUILTIN_VQ_HSI (BINOP, sqdmull2)
139 BUILTIN_VQ_HSI (TERNOP, sqdmull2_lane)
140 BUILTIN_VQ_HSI (TERNOP, sqdmull2_laneq)
141 BUILTIN_VQ_HSI (BINOP, sqdmull2_n)
142 /* Implemented by aarch64_sq<r>dmulh<mode>. */
143 BUILTIN_VSDQ_HSI (BINOP, sqdmulh)
144 BUILTIN_VSDQ_HSI (BINOP, sqrdmulh)
145 /* Implemented by aarch64_sq<r>dmulh_lane<mode>. */
146 BUILTIN_VSDQ_HSI (TERNOP, sqdmulh_lane)
147 BUILTIN_VSDQ_HSI (TERNOP, sqrdmulh_lane)
148
149 BUILTIN_VSDQ_I_DI (BINOP, sshl_n)
150 BUILTIN_VSDQ_I_DI (BINOP, ushl_n)
151 /* Implemented by aarch64_<sur>shl<mode>. */
152 BUILTIN_VSDQ_I_DI (BINOP, sshl)
153 BUILTIN_VSDQ_I_DI (BINOP, ushl)
154 BUILTIN_VSDQ_I_DI (BINOP, srshl)
155 BUILTIN_VSDQ_I_DI (BINOP, urshl)
156
157 BUILTIN_VSDQ_I_DI (SHIFTIMM, sshr_n)
158 BUILTIN_VSDQ_I_DI (SHIFTIMM, ushr_n)
159 /* Implemented by aarch64_<sur>shr_n<mode>. */
160 BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n)
161 BUILTIN_VSDQ_I_DI (SHIFTIMM, urshr_n)
162 /* Implemented by aarch64_<sur>sra_n<mode>. */
163 BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n)
164 BUILTIN_VSDQ_I_DI (SHIFTACC, usra_n)
165 BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n)
166 BUILTIN_VSDQ_I_DI (SHIFTACC, ursra_n)
167 /* Implemented by aarch64_<sur>shll_n<mode>. */
168 BUILTIN_VDW (SHIFTIMM, sshll_n)
169 BUILTIN_VDW (SHIFTIMM, ushll_n)
170 /* Implemented by aarch64_<sur>shll2_n<mode>. */
171 BUILTIN_VQW (SHIFTIMM, sshll2_n)
172 BUILTIN_VQW (SHIFTIMM, ushll2_n)
173 /* Implemented by aarch64_<sur>q<r>shr<u>n_n<mode>. */
174 BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrun_n)
175 BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrun_n)
176 BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrn_n)
177 BUILTIN_VSQN_HSDI (SHIFTIMM, uqshrn_n)
178 BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrn_n)
179 BUILTIN_VSQN_HSDI (SHIFTIMM, uqrshrn_n)
180 /* Implemented by aarch64_<sur>s<lr>i_n<mode>. */
181 BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n)
182 BUILTIN_VSDQ_I_DI (SHIFTINSERT, usri_n)
183 BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n)
184 BUILTIN_VSDQ_I_DI (SHIFTINSERT, usli_n)
185 /* Implemented by aarch64_<sur>qshl<u>_n<mode>. */
186 BUILTIN_VSDQ_I (SHIFTIMM, sqshlu_n)
187 BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n)
188 BUILTIN_VSDQ_I (SHIFTIMM, uqshl_n)
189
190 /* Implemented by aarch64_cm<cmp><mode>. */
191 BUILTIN_VSDQ_I_DI (BINOP, cmeq)
192 BUILTIN_VSDQ_I_DI (BINOP, cmge)
193 BUILTIN_VSDQ_I_DI (BINOP, cmgt)
194 BUILTIN_VSDQ_I_DI (BINOP, cmle)
195 BUILTIN_VSDQ_I_DI (BINOP, cmlt)
196 /* Implemented by aarch64_cm<cmp><mode>. */
197 BUILTIN_VSDQ_I_DI (BINOP, cmhs)
198 BUILTIN_VSDQ_I_DI (BINOP, cmhi)
199 BUILTIN_VSDQ_I_DI (BINOP, cmtst)
200
201 /* Implemented by aarch64_<fmaxmin><mode>. */
202 BUILTIN_VDQF (BINOP, fmax)
203 BUILTIN_VDQF (BINOP, fmin)
204 /* Implemented by aarch64_<maxmin><mode>. */
205 BUILTIN_VDQ_BHSI (BINOP, smax)
206 BUILTIN_VDQ_BHSI (BINOP, smin)
207 BUILTIN_VDQ_BHSI (BINOP, umax)
208 BUILTIN_VDQ_BHSI (BINOP, umin)
This page took 0.053804 seconds and 5 git commands to generate.