]>
Commit | Line | Data |
---|---|---|
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) |