1/* NEON builtin definitions for ARM.
2   Copyright (C) 2013-2014 Free Software Foundation, Inc.
3   Contributed by ARM Ltd.
4
5   This file is part of GCC.
6
7   GCC is free software; you can redistribute it and/or modify it
8   under the terms of the GNU General Public License as published
9   by the Free Software Foundation; either version 3, or (at your
10   option) any later version.
11
12   GCC is distributed in the hope that it will be useful, but WITHOUT
13   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15   License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with GCC; see the file COPYING3.  If not see
19   <http://www.gnu.org/licenses/>.  */
20
21VAR10 (BINOP, vadd,
22	v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
23VAR3 (BINOP, vaddl, v8qi, v4hi, v2si),
24VAR3 (BINOP, vaddw, v8qi, v4hi, v2si),
25VAR6 (BINOP, vhadd, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
26VAR8 (BINOP, vqadd, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
27VAR3 (BINOP, vaddhn, v8hi, v4si, v2di),
28VAR8 (BINOP, vmul, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
29VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
30VAR3 (TERNOP, vmlal, v8qi, v4hi, v2si),
31VAR2 (TERNOP, vfma, v2sf, v4sf),
32VAR2 (TERNOP, vfms, v2sf, v4sf),
33VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
34VAR3 (TERNOP, vmlsl, v8qi, v4hi, v2si),
35VAR4 (BINOP, vqdmulh, v4hi, v2si, v8hi, v4si),
36VAR2 (TERNOP, vqdmlal, v4hi, v2si),
37VAR2 (TERNOP, vqdmlsl, v4hi, v2si),
38VAR3 (BINOP, vmull, v8qi, v4hi, v2si),
39VAR2 (SCALARMULL, vmull_n, v4hi, v2si),
40VAR2 (LANEMULL, vmull_lane, v4hi, v2si),
41VAR2 (SCALARMULL, vqdmull_n, v4hi, v2si),
42VAR2 (LANEMULL, vqdmull_lane, v4hi, v2si),
43VAR4 (SCALARMULH, vqdmulh_n, v4hi, v2si, v8hi, v4si),
44VAR4 (LANEMULH, vqdmulh_lane, v4hi, v2si, v8hi, v4si),
45VAR2 (BINOP, vqdmull, v4hi, v2si),
46VAR8 (BINOP, vshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
47VAR8 (BINOP, vqshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
48VAR8 (SHIFTIMM, vshr_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
49VAR3 (SHIFTIMM, vshrn_n, v8hi, v4si, v2di),
50VAR3 (SHIFTIMM, vqshrn_n, v8hi, v4si, v2di),
51VAR3 (SHIFTIMM, vqshrun_n, v8hi, v4si, v2di),
52VAR8 (SHIFTIMM, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
53VAR8 (SHIFTIMM, vqshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
54VAR8 (SHIFTIMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
55VAR3 (SHIFTIMM, vshll_n, v8qi, v4hi, v2si),
56VAR8 (SHIFTACC, vsra_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
57VAR10 (BINOP, vsub, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
58VAR3 (BINOP, vsubl, v8qi, v4hi, v2si),
59VAR3 (BINOP, vsubw, v8qi, v4hi, v2si),
60VAR8 (BINOP, vqsub, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
61VAR6 (BINOP, vhsub, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
62VAR3 (BINOP, vsubhn, v8hi, v4si, v2di),
63VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
64VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
65VAR6 (BINOP, vcgeu, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
66VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
67VAR6 (BINOP, vcgtu, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
68VAR2 (BINOP, vcage, v2sf, v4sf),
69VAR2 (BINOP, vcagt, v2sf, v4sf),
70VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
71VAR8 (BINOP, vabd, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
72VAR3 (BINOP, vabdl, v8qi, v4hi, v2si),
73VAR6 (TERNOP, vaba, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
74VAR3 (TERNOP, vabal, v8qi, v4hi, v2si),
75VAR8 (BINOP, vmax, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
76VAR8 (BINOP, vmin, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
77VAR4 (BINOP, vpadd, v8qi, v4hi, v2si, v2sf),
78VAR6 (UNOP, vpaddl, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
79VAR6 (BINOP, vpadal, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
80VAR4 (BINOP, vpmax, v8qi, v4hi, v2si, v2sf),
81VAR4 (BINOP, vpmin, v8qi, v4hi, v2si, v2sf),
82VAR2 (BINOP, vrecps, v2sf, v4sf),
83VAR2 (BINOP, vrsqrts, v2sf, v4sf),
84VAR8 (SHIFTINSERT, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
85VAR8 (SHIFTINSERT, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
86VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
87VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
88VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
89VAR6 (UNOP, vqneg, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
90VAR6 (UNOP, vcls, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
91VAR6 (UNOP, vclz, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
92VAR2 (UNOP, vcnt, v8qi, v16qi),
93VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf),
94VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf),
95VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
96  /* FIXME: vget_lane supports more variants than this!  */
97VAR10 (GETLANE, vget_lane,
98	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
99VAR10 (SETLANE, vset_lane,
100	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
101VAR5 (CREATE, vcreate, v8qi, v4hi, v2si, v2sf, di),
102VAR10 (DUP, vdup_n,
103	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
104VAR10 (DUPLANE, vdup_lane,
105	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
106VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di),
107VAR5 (SPLIT, vget_high, v16qi, v8hi, v4si, v4sf, v2di),
108VAR5 (SPLIT, vget_low, v16qi, v8hi, v4si, v4sf, v2di),
109VAR3 (UNOP, vmovn, v8hi, v4si, v2di),
110VAR3 (UNOP, vqmovn, v8hi, v4si, v2di),
111VAR3 (UNOP, vqmovun, v8hi, v4si, v2di),
112VAR3 (UNOP, vmovl, v8qi, v4hi, v2si),
113VAR6 (LANEMUL, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
114VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
115VAR2 (LANEMAC, vmlal_lane, v4hi, v2si),
116VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si),
117VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
118VAR2 (LANEMAC, vmlsl_lane, v4hi, v2si),
119VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si),
120VAR6 (SCALARMUL, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
121VAR6 (SCALARMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
122VAR2 (SCALARMAC, vmlal_n, v4hi, v2si),
123VAR2 (SCALARMAC, vqdmlal_n, v4hi, v2si),
124VAR6 (SCALARMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
125VAR2 (SCALARMAC, vmlsl_n, v4hi, v2si),
126VAR2 (SCALARMAC, vqdmlsl_n, v4hi, v2si),
127VAR10 (BINOP, vext,
128	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
129VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
130VAR4 (UNOP, vrev32, v8qi, v4hi, v16qi, v8hi),
131VAR2 (UNOP, vrev16, v8qi, v16qi),
132VAR4 (CONVERT, vcvt, v2si, v2sf, v4si, v4sf),
133VAR4 (FIXCONV, vcvt_n, v2si, v2sf, v4si, v4sf),
134VAR1 (FLOAT_WIDEN, vcvtv4sf, v4hf),
135VAR1 (FLOAT_NARROW, vcvtv4hf, v4sf),
136VAR10 (SELECT, vbsl,
137	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
138VAR2 (RINT, vrintn, v2sf, v4sf),
139VAR2 (RINT, vrinta, v2sf, v4sf),
140VAR2 (RINT, vrintp, v2sf, v4sf),
141VAR2 (RINT, vrintm, v2sf, v4sf),
142VAR2 (RINT, vrintz, v2sf, v4sf),
143VAR2 (RINT, vrintx, v2sf, v4sf),
144VAR1 (VTBL, vtbl1, v8qi),
145VAR1 (VTBL, vtbl2, v8qi),
146VAR1 (VTBL, vtbl3, v8qi),
147VAR1 (VTBL, vtbl4, v8qi),
148VAR1 (VTBX, vtbx1, v8qi),
149VAR1 (VTBX, vtbx2, v8qi),
150VAR1 (VTBX, vtbx3, v8qi),
151VAR1 (VTBX, vtbx4, v8qi),
152VAR8 (RESULTPAIR, vtrn, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
153VAR8 (RESULTPAIR, vzip, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
154VAR8 (RESULTPAIR, vuzp, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
155VAR5 (REINTERP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di),
156VAR5 (REINTERP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di),
157VAR5 (REINTERP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di),
158VAR5 (REINTERP, vreinterpretv2sf, v8qi, v4hi, v2si, v2sf, di),
159VAR5 (REINTERP, vreinterpretdi, v8qi, v4hi, v2si, v2sf, di),
160VAR6 (REINTERP, vreinterpretv16qi, v16qi, v8hi, v4si, v4sf, v2di, ti),
161VAR6 (REINTERP, vreinterpretv8hi, v16qi, v8hi, v4si, v4sf, v2di, ti),
162VAR6 (REINTERP, vreinterpretv4si, v16qi, v8hi, v4si, v4sf, v2di, ti),
163VAR6 (REINTERP, vreinterpretv4sf, v16qi, v8hi, v4si, v4sf, v2di, ti),
164VAR6 (REINTERP, vreinterpretv2di, v16qi, v8hi, v4si, v4sf, v2di, ti),
165VAR6 (REINTERP, vreinterpretti, v16qi, v8hi, v4si, v4sf, v2di, ti),
166VAR10 (LOAD1, vld1,
167         v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
168VAR10 (LOAD1LANE, vld1_lane,
169	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
170VAR10 (LOAD1, vld1_dup,
171	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
172VAR10 (STORE1, vst1,
173	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
174VAR10 (STORE1LANE, vst1_lane,
175	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
176VAR9 (LOADSTRUCT,
177	vld2, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
178VAR7 (LOADSTRUCTLANE, vld2_lane,
179	v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
180VAR5 (LOADSTRUCT, vld2_dup, v8qi, v4hi, v2si, v2sf, di),
181VAR9 (STORESTRUCT, vst2,
182	v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
183VAR7 (STORESTRUCTLANE, vst2_lane,
184	v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
185VAR9 (LOADSTRUCT,
186	vld3, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
187VAR7 (LOADSTRUCTLANE, vld3_lane,
188	v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
189VAR5 (LOADSTRUCT, vld3_dup, v8qi, v4hi, v2si, v2sf, di),
190VAR9 (STORESTRUCT, vst3,
191	v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
192VAR7 (STORESTRUCTLANE, vst3_lane,
193	v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
194VAR9 (LOADSTRUCT, vld4,
195	v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
196VAR7 (LOADSTRUCTLANE, vld4_lane,
197	v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
198VAR5 (LOADSTRUCT, vld4_dup, v8qi, v4hi, v2si, v2sf, di),
199VAR9 (STORESTRUCT, vst4,
200	v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
201VAR7 (STORESTRUCTLANE, vst4_lane,
202	v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
203VAR10 (LOGICBINOP, vand,
204	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
205VAR10 (LOGICBINOP, vorr,
206	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
207VAR10 (BINOP, veor,
208	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
209VAR10 (LOGICBINOP, vbic,
210	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
211VAR10 (LOGICBINOP, vorn,
212	 v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
213