Merge lp:~ramana/gcc-linaro/fix-lp-823548 into lp:gcc-linaro/4.6

Proposed by Ramana Radhakrishnan
Status: Merged
Approved by: Ulrich Weigand
Approved revision: no longer in the source branch.
Merge reported by: Ramana Radhakrishnan
Merged at revision: not available
Proposed branch: lp:~ramana/gcc-linaro/fix-lp-823548
Merge into: lp:gcc-linaro/4.6
Diff against target: 2747 lines (+1239/-1219)
4 files modified
ChangeLog.linaro (+49/-0)
gcc/config/arm/arm.c (+1176/-1033)
gcc/config/arm/arm.h (+0/-172)
gcc/config/arm/vfp.md (+14/-14)
To merge this branch: bzr merge lp:~ramana/gcc-linaro/fix-lp-823548
Reviewer Review Type Date Requested Status
Ulrich Weigand (community) Approve
Review via email: mp+71050@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild has taken a snapshot of this branch at r106788 and queued it for build.

The snapshot is available at:
 http://ex.seabright.co.nz/snapshots/gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548.tar.xdelta3.xz

and will be built on the following builders:
 a9-builder armv5-builder i686 x86_64

You can track the build queue at:
 http://ex.seabright.co.nz/helpers/scheduler

cbuild-snapshot: gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548
cbuild-ancestor: lp:gcc-linaro/4.6+bzr106785
cbuild-state: check

Revision history for this message
Michael Hope (michaelh1) wrote :

cbuild successfully built this on i686-natty-cbuild159-oort4-i686r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548/logs/i686-natty-cbuild159-oort4-i686r1

The testsuite results are the same as the branch point lp:gcc-linaro/4.6+bzr106785

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548/logs/i686-natty-cbuild159-oort4-i686r1/gcc-testsuite.txt

cbuild-checked: i686-natty-cbuild159-oort4-i686r1

Revision history for this message
Michael Hope (michaelh1) wrote :

cbuild successfully built this on x86_64-natty-cbuild159-oort1-x86_64r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548/logs/x86_64-natty-cbuild159-oort1-x86_64r1

The testsuite results are the same as the branch point lp:gcc-linaro/4.6+bzr106785

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548/logs/x86_64-natty-cbuild159-oort1-x86_64r1/gcc-testsuite.txt

cbuild-checked: x86_64-natty-cbuild159-oort1-x86_64r1

Revision history for this message
Michael Hope (michaelh1) wrote :

cbuild successfully built this on armv7l-natty-cbuild159-ursa2-armv5r2.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548/logs/armv7l-natty-cbuild159-ursa2-armv5r2

The testsuite results are the same as the branch point lp:gcc-linaro/4.6+bzr106785

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548/logs/armv7l-natty-cbuild159-ursa2-armv5r2/gcc-testsuite.txt

cbuild-checked: armv7l-natty-cbuild159-ursa2-armv5r2

Revision history for this message
Michael Hope (michaelh1) wrote :

cbuild successfully built this on armv7l-natty-cbuild159-ursa1-cortexa9r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548/logs/armv7l-natty-cbuild159-ursa1-cortexa9r1

The testsuite results are the same as the branch point lp:gcc-linaro/4.6+bzr106785

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106788~ramana~fix-lp-823548/logs/armv7l-natty-cbuild159-ursa1-cortexa9r1/gcc-testsuite.txt

cbuild-checked: armv7l-natty-cbuild159-ursa1-cortexa9r1

Revision history for this message
Ulrich Weigand (uweigand) wrote :

I'm confused about the vfp.md changes. These are already in the Linaro GCC 4.6 branch; they came in with this merge: https://code.launchpad.net/~ramana/gcc-linaro/vfp-moves-reduction-branch/+merge/69633

This seems to be some artifact with how the current merge request was generated, maybe?

Apart from this issue, the patch is OK.

Revision history for this message
Ulrich Weigand (uweigand) :
review: Approve
Revision history for this message
Ramana Radhakrishnan (ramana) wrote :

It looks like I had accidentally merged that into this branch as well. I've cherry picked the appropriate revisions and merged them into the 4.6 tree.

cheers
Ramana

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'ChangeLog.linaro'
2--- ChangeLog.linaro 2011-08-09 12:43:54 +0000
3+++ ChangeLog.linaro 2011-08-10 14:14:10 +0000
4@@ -1,3 +1,52 @@
5+2011-08-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
6+
7+ gcc/
8+ * config/arm/arm.c (arm_init_neon_builtins): Use
9+ n_operands instead of n_generator_args.
10+
11+2011-08-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
12+
13+ Backport from mainline
14+ 2011-04-18 Jie Zhang <jie@codesourcery.com>
15+ Richard Earnshaw <rearnsha@arm.com>
16+
17+ * arm.c (neon_builtin_type_bits): Remove.
18+ (typedef enum neon_builtin_mode): New.
19+ (T_MAX): Don't define.
20+ (typedef enum neon_builtin_datum): Remove bits, codes[],
21+ num_vars and base_fcode. Add mode, code and fcode.
22+ (VAR1, VAR2, VAR3, VAR4, VAR5, VAR6, VAR7, VAR8, VAR9
23+ VAR10): Change accordingly.
24+ (neon_builtin_data[]): Change accordingly
25+ (arm_init_neon_builtins): Change accordingly.
26+ (neon_builtin_compare): Remove.
27+ (locate_neon_builtin_icode): Remove.
28+ (arm_expand_neon_builtin): Change accordingly.
29+
30+ * arm.h (enum arm_builtins): Move to ...
31+ * arm.c (enum arm_builtins): ... here; and rearrange builtin code.
32+
33+ * arm.c (arm_builtin_decl): Declare.
34+ (TARGET_BUILTIN_DECL): Define.
35+ (enum arm_builtins): Correct ARM_BUILTIN_MAX.
36+ (arm_builtin_decls[]): New.
37+ (arm_init_neon_builtins): Store builtin declarations in
38+ arm_builtin_decls[].
39+ (arm_init_tls_builtins): Likewise.
40+ (arm_init_iwmmxt_builtins): Likewise. Refactor initialization code.
41+ (arm_builtin_decl): New.
42+
43+2011-08-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
44+
45+ gcc/
46+ Backport from mainline:
47+
48+ 2011-07-28 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
49+
50+ * config/arm/vfp.md ("*movdf_vfp"): Handle the VFP constraints
51+ before the core constraints. Adjust attributes.
52+ (*thumb2_movdf_vfp"): Likewise.
53+
54 2011-08-09 Revital Eres <revital.eres@linaro.org>
55
56 gcc/
57
58=== modified file 'gcc/config/arm/arm.c'
59--- gcc/config/arm/arm.c 2011-07-04 14:03:49 +0000
60+++ gcc/config/arm/arm.c 2011-08-10 14:14:10 +0000
61@@ -162,6 +162,7 @@
62 static rtx arm_expand_binop_builtin (enum insn_code, tree, rtx);
63 static rtx arm_expand_unop_builtin (enum insn_code, tree, rtx, int);
64 static rtx arm_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
65+static tree arm_builtin_decl (unsigned, bool);
66 static void emit_constant_insn (rtx cond, rtx pattern);
67 static rtx emit_set_insn (rtx, rtx);
68 static int arm_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
69@@ -415,6 +416,8 @@
70 #define TARGET_INIT_BUILTINS arm_init_builtins
71 #undef TARGET_EXPAND_BUILTIN
72 #define TARGET_EXPAND_BUILTIN arm_expand_builtin
73+#undef TARGET_BUILTIN_DECL
74+#define TARGET_BUILTIN_DECL arm_builtin_decl
75
76 #undef TARGET_INIT_LIBFUNCS
77 #define TARGET_INIT_LIBFUNCS arm_init_libfuncs
78@@ -18119,505 +18122,31 @@
79 return value;
80 }
81
82
83-#define def_mbuiltin(MASK, NAME, TYPE, CODE) \
84- do \
85- { \
86- if ((MASK) & insn_flags) \
87- add_builtin_function ((NAME), (TYPE), (CODE), \
88- BUILT_IN_MD, NULL, NULL_TREE); \
89- } \
90- while (0)
91-
92-struct builtin_description
93-{
94- const unsigned int mask;
95- const enum insn_code icode;
96- const char * const name;
97- const enum arm_builtins code;
98- const enum rtx_code comparison;
99- const unsigned int flag;
100-};
101-
102-static const struct builtin_description bdesc_2arg[] =
103-{
104-#define IWMMXT_BUILTIN(code, string, builtin) \
105- { FL_IWMMXT, CODE_FOR_##code, "__builtin_arm_" string, \
106- ARM_BUILTIN_##builtin, UNKNOWN, 0 },
107-
108- IWMMXT_BUILTIN (addv8qi3, "waddb", WADDB)
109- IWMMXT_BUILTIN (addv4hi3, "waddh", WADDH)
110- IWMMXT_BUILTIN (addv2si3, "waddw", WADDW)
111- IWMMXT_BUILTIN (subv8qi3, "wsubb", WSUBB)
112- IWMMXT_BUILTIN (subv4hi3, "wsubh", WSUBH)
113- IWMMXT_BUILTIN (subv2si3, "wsubw", WSUBW)
114- IWMMXT_BUILTIN (ssaddv8qi3, "waddbss", WADDSSB)
115- IWMMXT_BUILTIN (ssaddv4hi3, "waddhss", WADDSSH)
116- IWMMXT_BUILTIN (ssaddv2si3, "waddwss", WADDSSW)
117- IWMMXT_BUILTIN (sssubv8qi3, "wsubbss", WSUBSSB)
118- IWMMXT_BUILTIN (sssubv4hi3, "wsubhss", WSUBSSH)
119- IWMMXT_BUILTIN (sssubv2si3, "wsubwss", WSUBSSW)
120- IWMMXT_BUILTIN (usaddv8qi3, "waddbus", WADDUSB)
121- IWMMXT_BUILTIN (usaddv4hi3, "waddhus", WADDUSH)
122- IWMMXT_BUILTIN (usaddv2si3, "waddwus", WADDUSW)
123- IWMMXT_BUILTIN (ussubv8qi3, "wsubbus", WSUBUSB)
124- IWMMXT_BUILTIN (ussubv4hi3, "wsubhus", WSUBUSH)
125- IWMMXT_BUILTIN (ussubv2si3, "wsubwus", WSUBUSW)
126- IWMMXT_BUILTIN (mulv4hi3, "wmulul", WMULUL)
127- IWMMXT_BUILTIN (smulv4hi3_highpart, "wmulsm", WMULSM)
128- IWMMXT_BUILTIN (umulv4hi3_highpart, "wmulum", WMULUM)
129- IWMMXT_BUILTIN (eqv8qi3, "wcmpeqb", WCMPEQB)
130- IWMMXT_BUILTIN (eqv4hi3, "wcmpeqh", WCMPEQH)
131- IWMMXT_BUILTIN (eqv2si3, "wcmpeqw", WCMPEQW)
132- IWMMXT_BUILTIN (gtuv8qi3, "wcmpgtub", WCMPGTUB)
133- IWMMXT_BUILTIN (gtuv4hi3, "wcmpgtuh", WCMPGTUH)
134- IWMMXT_BUILTIN (gtuv2si3, "wcmpgtuw", WCMPGTUW)
135- IWMMXT_BUILTIN (gtv8qi3, "wcmpgtsb", WCMPGTSB)
136- IWMMXT_BUILTIN (gtv4hi3, "wcmpgtsh", WCMPGTSH)
137- IWMMXT_BUILTIN (gtv2si3, "wcmpgtsw", WCMPGTSW)
138- IWMMXT_BUILTIN (umaxv8qi3, "wmaxub", WMAXUB)
139- IWMMXT_BUILTIN (smaxv8qi3, "wmaxsb", WMAXSB)
140- IWMMXT_BUILTIN (umaxv4hi3, "wmaxuh", WMAXUH)
141- IWMMXT_BUILTIN (smaxv4hi3, "wmaxsh", WMAXSH)
142- IWMMXT_BUILTIN (umaxv2si3, "wmaxuw", WMAXUW)
143- IWMMXT_BUILTIN (smaxv2si3, "wmaxsw", WMAXSW)
144- IWMMXT_BUILTIN (uminv8qi3, "wminub", WMINUB)
145- IWMMXT_BUILTIN (sminv8qi3, "wminsb", WMINSB)
146- IWMMXT_BUILTIN (uminv4hi3, "wminuh", WMINUH)
147- IWMMXT_BUILTIN (sminv4hi3, "wminsh", WMINSH)
148- IWMMXT_BUILTIN (uminv2si3, "wminuw", WMINUW)
149- IWMMXT_BUILTIN (sminv2si3, "wminsw", WMINSW)
150- IWMMXT_BUILTIN (iwmmxt_anddi3, "wand", WAND)
151- IWMMXT_BUILTIN (iwmmxt_nanddi3, "wandn", WANDN)
152- IWMMXT_BUILTIN (iwmmxt_iordi3, "wor", WOR)
153- IWMMXT_BUILTIN (iwmmxt_xordi3, "wxor", WXOR)
154- IWMMXT_BUILTIN (iwmmxt_uavgv8qi3, "wavg2b", WAVG2B)
155- IWMMXT_BUILTIN (iwmmxt_uavgv4hi3, "wavg2h", WAVG2H)
156- IWMMXT_BUILTIN (iwmmxt_uavgrndv8qi3, "wavg2br", WAVG2BR)
157- IWMMXT_BUILTIN (iwmmxt_uavgrndv4hi3, "wavg2hr", WAVG2HR)
158- IWMMXT_BUILTIN (iwmmxt_wunpckilb, "wunpckilb", WUNPCKILB)
159- IWMMXT_BUILTIN (iwmmxt_wunpckilh, "wunpckilh", WUNPCKILH)
160- IWMMXT_BUILTIN (iwmmxt_wunpckilw, "wunpckilw", WUNPCKILW)
161- IWMMXT_BUILTIN (iwmmxt_wunpckihb, "wunpckihb", WUNPCKIHB)
162- IWMMXT_BUILTIN (iwmmxt_wunpckihh, "wunpckihh", WUNPCKIHH)
163- IWMMXT_BUILTIN (iwmmxt_wunpckihw, "wunpckihw", WUNPCKIHW)
164- IWMMXT_BUILTIN (iwmmxt_wmadds, "wmadds", WMADDS)
165- IWMMXT_BUILTIN (iwmmxt_wmaddu, "wmaddu", WMADDU)
166-
167-#define IWMMXT_BUILTIN2(code, builtin) \
168- { FL_IWMMXT, CODE_FOR_##code, NULL, ARM_BUILTIN_##builtin, UNKNOWN, 0 },
169-
170- IWMMXT_BUILTIN2 (iwmmxt_wpackhss, WPACKHSS)
171- IWMMXT_BUILTIN2 (iwmmxt_wpackwss, WPACKWSS)
172- IWMMXT_BUILTIN2 (iwmmxt_wpackdss, WPACKDSS)
173- IWMMXT_BUILTIN2 (iwmmxt_wpackhus, WPACKHUS)
174- IWMMXT_BUILTIN2 (iwmmxt_wpackwus, WPACKWUS)
175- IWMMXT_BUILTIN2 (iwmmxt_wpackdus, WPACKDUS)
176- IWMMXT_BUILTIN2 (ashlv4hi3_di, WSLLH)
177- IWMMXT_BUILTIN2 (ashlv4hi3_iwmmxt, WSLLHI)
178- IWMMXT_BUILTIN2 (ashlv2si3_di, WSLLW)
179- IWMMXT_BUILTIN2 (ashlv2si3_iwmmxt, WSLLWI)
180- IWMMXT_BUILTIN2 (ashldi3_di, WSLLD)
181- IWMMXT_BUILTIN2 (ashldi3_iwmmxt, WSLLDI)
182- IWMMXT_BUILTIN2 (lshrv4hi3_di, WSRLH)
183- IWMMXT_BUILTIN2 (lshrv4hi3_iwmmxt, WSRLHI)
184- IWMMXT_BUILTIN2 (lshrv2si3_di, WSRLW)
185- IWMMXT_BUILTIN2 (lshrv2si3_iwmmxt, WSRLWI)
186- IWMMXT_BUILTIN2 (lshrdi3_di, WSRLD)
187- IWMMXT_BUILTIN2 (lshrdi3_iwmmxt, WSRLDI)
188- IWMMXT_BUILTIN2 (ashrv4hi3_di, WSRAH)
189- IWMMXT_BUILTIN2 (ashrv4hi3_iwmmxt, WSRAHI)
190- IWMMXT_BUILTIN2 (ashrv2si3_di, WSRAW)
191- IWMMXT_BUILTIN2 (ashrv2si3_iwmmxt, WSRAWI)
192- IWMMXT_BUILTIN2 (ashrdi3_di, WSRAD)
193- IWMMXT_BUILTIN2 (ashrdi3_iwmmxt, WSRADI)
194- IWMMXT_BUILTIN2 (rorv4hi3_di, WRORH)
195- IWMMXT_BUILTIN2 (rorv4hi3, WRORHI)
196- IWMMXT_BUILTIN2 (rorv2si3_di, WRORW)
197- IWMMXT_BUILTIN2 (rorv2si3, WRORWI)
198- IWMMXT_BUILTIN2 (rordi3_di, WRORD)
199- IWMMXT_BUILTIN2 (rordi3, WRORDI)
200- IWMMXT_BUILTIN2 (iwmmxt_wmacuz, WMACUZ)
201- IWMMXT_BUILTIN2 (iwmmxt_wmacsz, WMACSZ)
202-};
203-
204-static const struct builtin_description bdesc_1arg[] =
205-{
206- IWMMXT_BUILTIN (iwmmxt_tmovmskb, "tmovmskb", TMOVMSKB)
207- IWMMXT_BUILTIN (iwmmxt_tmovmskh, "tmovmskh", TMOVMSKH)
208- IWMMXT_BUILTIN (iwmmxt_tmovmskw, "tmovmskw", TMOVMSKW)
209- IWMMXT_BUILTIN (iwmmxt_waccb, "waccb", WACCB)
210- IWMMXT_BUILTIN (iwmmxt_wacch, "wacch", WACCH)
211- IWMMXT_BUILTIN (iwmmxt_waccw, "waccw", WACCW)
212- IWMMXT_BUILTIN (iwmmxt_wunpckehub, "wunpckehub", WUNPCKEHUB)
213- IWMMXT_BUILTIN (iwmmxt_wunpckehuh, "wunpckehuh", WUNPCKEHUH)
214- IWMMXT_BUILTIN (iwmmxt_wunpckehuw, "wunpckehuw", WUNPCKEHUW)
215- IWMMXT_BUILTIN (iwmmxt_wunpckehsb, "wunpckehsb", WUNPCKEHSB)
216- IWMMXT_BUILTIN (iwmmxt_wunpckehsh, "wunpckehsh", WUNPCKEHSH)
217- IWMMXT_BUILTIN (iwmmxt_wunpckehsw, "wunpckehsw", WUNPCKEHSW)
218- IWMMXT_BUILTIN (iwmmxt_wunpckelub, "wunpckelub", WUNPCKELUB)
219- IWMMXT_BUILTIN (iwmmxt_wunpckeluh, "wunpckeluh", WUNPCKELUH)
220- IWMMXT_BUILTIN (iwmmxt_wunpckeluw, "wunpckeluw", WUNPCKELUW)
221- IWMMXT_BUILTIN (iwmmxt_wunpckelsb, "wunpckelsb", WUNPCKELSB)
222- IWMMXT_BUILTIN (iwmmxt_wunpckelsh, "wunpckelsh", WUNPCKELSH)
223- IWMMXT_BUILTIN (iwmmxt_wunpckelsw, "wunpckelsw", WUNPCKELSW)
224-};
225-
226-/* Set up all the iWMMXt builtins. This is
227- not called if TARGET_IWMMXT is zero. */
228-
229-static void
230-arm_init_iwmmxt_builtins (void)
231-{
232- const struct builtin_description * d;
233- size_t i;
234- tree endlink = void_list_node;
235-
236- tree V2SI_type_node = build_vector_type_for_mode (intSI_type_node, V2SImode);
237- tree V4HI_type_node = build_vector_type_for_mode (intHI_type_node, V4HImode);
238- tree V8QI_type_node = build_vector_type_for_mode (intQI_type_node, V8QImode);
239-
240- tree int_ftype_int
241- = build_function_type (integer_type_node,
242- tree_cons (NULL_TREE, integer_type_node, endlink));
243- tree v8qi_ftype_v8qi_v8qi_int
244- = build_function_type (V8QI_type_node,
245- tree_cons (NULL_TREE, V8QI_type_node,
246- tree_cons (NULL_TREE, V8QI_type_node,
247- tree_cons (NULL_TREE,
248- integer_type_node,
249- endlink))));
250- tree v4hi_ftype_v4hi_int
251- = build_function_type (V4HI_type_node,
252- tree_cons (NULL_TREE, V4HI_type_node,
253- tree_cons (NULL_TREE, integer_type_node,
254- endlink)));
255- tree v2si_ftype_v2si_int
256- = build_function_type (V2SI_type_node,
257- tree_cons (NULL_TREE, V2SI_type_node,
258- tree_cons (NULL_TREE, integer_type_node,
259- endlink)));
260- tree v2si_ftype_di_di
261- = build_function_type (V2SI_type_node,
262- tree_cons (NULL_TREE, long_long_integer_type_node,
263- tree_cons (NULL_TREE, long_long_integer_type_node,
264- endlink)));
265- tree di_ftype_di_int
266- = build_function_type (long_long_integer_type_node,
267- tree_cons (NULL_TREE, long_long_integer_type_node,
268- tree_cons (NULL_TREE, integer_type_node,
269- endlink)));
270- tree di_ftype_di_int_int
271- = build_function_type (long_long_integer_type_node,
272- tree_cons (NULL_TREE, long_long_integer_type_node,
273- tree_cons (NULL_TREE, integer_type_node,
274- tree_cons (NULL_TREE,
275- integer_type_node,
276- endlink))));
277- tree int_ftype_v8qi
278- = build_function_type (integer_type_node,
279- tree_cons (NULL_TREE, V8QI_type_node,
280- endlink));
281- tree int_ftype_v4hi
282- = build_function_type (integer_type_node,
283- tree_cons (NULL_TREE, V4HI_type_node,
284- endlink));
285- tree int_ftype_v2si
286- = build_function_type (integer_type_node,
287- tree_cons (NULL_TREE, V2SI_type_node,
288- endlink));
289- tree int_ftype_v8qi_int
290- = build_function_type (integer_type_node,
291- tree_cons (NULL_TREE, V8QI_type_node,
292- tree_cons (NULL_TREE, integer_type_node,
293- endlink)));
294- tree int_ftype_v4hi_int
295- = build_function_type (integer_type_node,
296- tree_cons (NULL_TREE, V4HI_type_node,
297- tree_cons (NULL_TREE, integer_type_node,
298- endlink)));
299- tree int_ftype_v2si_int
300- = build_function_type (integer_type_node,
301- tree_cons (NULL_TREE, V2SI_type_node,
302- tree_cons (NULL_TREE, integer_type_node,
303- endlink)));
304- tree v8qi_ftype_v8qi_int_int
305- = build_function_type (V8QI_type_node,
306- tree_cons (NULL_TREE, V8QI_type_node,
307- tree_cons (NULL_TREE, integer_type_node,
308- tree_cons (NULL_TREE,
309- integer_type_node,
310- endlink))));
311- tree v4hi_ftype_v4hi_int_int
312- = build_function_type (V4HI_type_node,
313- tree_cons (NULL_TREE, V4HI_type_node,
314- tree_cons (NULL_TREE, integer_type_node,
315- tree_cons (NULL_TREE,
316- integer_type_node,
317- endlink))));
318- tree v2si_ftype_v2si_int_int
319- = build_function_type (V2SI_type_node,
320- tree_cons (NULL_TREE, V2SI_type_node,
321- tree_cons (NULL_TREE, integer_type_node,
322- tree_cons (NULL_TREE,
323- integer_type_node,
324- endlink))));
325- /* Miscellaneous. */
326- tree v8qi_ftype_v4hi_v4hi
327- = build_function_type (V8QI_type_node,
328- tree_cons (NULL_TREE, V4HI_type_node,
329- tree_cons (NULL_TREE, V4HI_type_node,
330- endlink)));
331- tree v4hi_ftype_v2si_v2si
332- = build_function_type (V4HI_type_node,
333- tree_cons (NULL_TREE, V2SI_type_node,
334- tree_cons (NULL_TREE, V2SI_type_node,
335- endlink)));
336- tree v2si_ftype_v4hi_v4hi
337- = build_function_type (V2SI_type_node,
338- tree_cons (NULL_TREE, V4HI_type_node,
339- tree_cons (NULL_TREE, V4HI_type_node,
340- endlink)));
341- tree v2si_ftype_v8qi_v8qi
342- = build_function_type (V2SI_type_node,
343- tree_cons (NULL_TREE, V8QI_type_node,
344- tree_cons (NULL_TREE, V8QI_type_node,
345- endlink)));
346- tree v4hi_ftype_v4hi_di
347- = build_function_type (V4HI_type_node,
348- tree_cons (NULL_TREE, V4HI_type_node,
349- tree_cons (NULL_TREE,
350- long_long_integer_type_node,
351- endlink)));
352- tree v2si_ftype_v2si_di
353- = build_function_type (V2SI_type_node,
354- tree_cons (NULL_TREE, V2SI_type_node,
355- tree_cons (NULL_TREE,
356- long_long_integer_type_node,
357- endlink)));
358- tree void_ftype_int_int
359- = build_function_type (void_type_node,
360- tree_cons (NULL_TREE, integer_type_node,
361- tree_cons (NULL_TREE, integer_type_node,
362- endlink)));
363- tree di_ftype_void
364- = build_function_type (long_long_unsigned_type_node, endlink);
365- tree di_ftype_v8qi
366- = build_function_type (long_long_integer_type_node,
367- tree_cons (NULL_TREE, V8QI_type_node,
368- endlink));
369- tree di_ftype_v4hi
370- = build_function_type (long_long_integer_type_node,
371- tree_cons (NULL_TREE, V4HI_type_node,
372- endlink));
373- tree di_ftype_v2si
374- = build_function_type (long_long_integer_type_node,
375- tree_cons (NULL_TREE, V2SI_type_node,
376- endlink));
377- tree v2si_ftype_v4hi
378- = build_function_type (V2SI_type_node,
379- tree_cons (NULL_TREE, V4HI_type_node,
380- endlink));
381- tree v4hi_ftype_v8qi
382- = build_function_type (V4HI_type_node,
383- tree_cons (NULL_TREE, V8QI_type_node,
384- endlink));
385-
386- tree di_ftype_di_v4hi_v4hi
387- = build_function_type (long_long_unsigned_type_node,
388- tree_cons (NULL_TREE,
389- long_long_unsigned_type_node,
390- tree_cons (NULL_TREE, V4HI_type_node,
391- tree_cons (NULL_TREE,
392- V4HI_type_node,
393- endlink))));
394-
395- tree di_ftype_v4hi_v4hi
396- = build_function_type (long_long_unsigned_type_node,
397- tree_cons (NULL_TREE, V4HI_type_node,
398- tree_cons (NULL_TREE, V4HI_type_node,
399- endlink)));
400-
401- /* Normal vector binops. */
402- tree v8qi_ftype_v8qi_v8qi
403- = build_function_type (V8QI_type_node,
404- tree_cons (NULL_TREE, V8QI_type_node,
405- tree_cons (NULL_TREE, V8QI_type_node,
406- endlink)));
407- tree v4hi_ftype_v4hi_v4hi
408- = build_function_type (V4HI_type_node,
409- tree_cons (NULL_TREE, V4HI_type_node,
410- tree_cons (NULL_TREE, V4HI_type_node,
411- endlink)));
412- tree v2si_ftype_v2si_v2si
413- = build_function_type (V2SI_type_node,
414- tree_cons (NULL_TREE, V2SI_type_node,
415- tree_cons (NULL_TREE, V2SI_type_node,
416- endlink)));
417- tree di_ftype_di_di
418- = build_function_type (long_long_unsigned_type_node,
419- tree_cons (NULL_TREE, long_long_unsigned_type_node,
420- tree_cons (NULL_TREE,
421- long_long_unsigned_type_node,
422- endlink)));
423-
424- /* Add all builtins that are more or less simple operations on two
425- operands. */
426- for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
427- {
428- /* Use one of the operands; the target can have a different mode for
429- mask-generating compares. */
430- enum machine_mode mode;
431- tree type;
432-
433- if (d->name == 0)
434- continue;
435-
436- mode = insn_data[d->icode].operand[1].mode;
437-
438- switch (mode)
439- {
440- case V8QImode:
441- type = v8qi_ftype_v8qi_v8qi;
442- break;
443- case V4HImode:
444- type = v4hi_ftype_v4hi_v4hi;
445- break;
446- case V2SImode:
447- type = v2si_ftype_v2si_v2si;
448- break;
449- case DImode:
450- type = di_ftype_di_di;
451- break;
452-
453- default:
454- gcc_unreachable ();
455- }
456-
457- def_mbuiltin (d->mask, d->name, type, d->code);
458- }
459-
460- /* Add the remaining MMX insns with somewhat more complicated types. */
461- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wzero", di_ftype_void, ARM_BUILTIN_WZERO);
462- def_mbuiltin (FL_IWMMXT, "__builtin_arm_setwcx", void_ftype_int_int, ARM_BUILTIN_SETWCX);
463- def_mbuiltin (FL_IWMMXT, "__builtin_arm_getwcx", int_ftype_int, ARM_BUILTIN_GETWCX);
464-
465- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllh", v4hi_ftype_v4hi_di, ARM_BUILTIN_WSLLH);
466- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllw", v2si_ftype_v2si_di, ARM_BUILTIN_WSLLW);
467- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wslld", di_ftype_di_di, ARM_BUILTIN_WSLLD);
468- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllhi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSLLHI);
469- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsllwi", v2si_ftype_v2si_int, ARM_BUILTIN_WSLLWI);
470- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wslldi", di_ftype_di_int, ARM_BUILTIN_WSLLDI);
471-
472- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlh", v4hi_ftype_v4hi_di, ARM_BUILTIN_WSRLH);
473- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlw", v2si_ftype_v2si_di, ARM_BUILTIN_WSRLW);
474- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrld", di_ftype_di_di, ARM_BUILTIN_WSRLD);
475- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlhi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSRLHI);
476- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrlwi", v2si_ftype_v2si_int, ARM_BUILTIN_WSRLWI);
477- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrldi", di_ftype_di_int, ARM_BUILTIN_WSRLDI);
478-
479- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrah", v4hi_ftype_v4hi_di, ARM_BUILTIN_WSRAH);
480- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsraw", v2si_ftype_v2si_di, ARM_BUILTIN_WSRAW);
481- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrad", di_ftype_di_di, ARM_BUILTIN_WSRAD);
482- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrahi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSRAHI);
483- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsrawi", v2si_ftype_v2si_int, ARM_BUILTIN_WSRAWI);
484- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsradi", di_ftype_di_int, ARM_BUILTIN_WSRADI);
485-
486- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorh", v4hi_ftype_v4hi_di, ARM_BUILTIN_WRORH);
487- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorw", v2si_ftype_v2si_di, ARM_BUILTIN_WRORW);
488- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrord", di_ftype_di_di, ARM_BUILTIN_WRORD);
489- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorhi", v4hi_ftype_v4hi_int, ARM_BUILTIN_WRORHI);
490- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrorwi", v2si_ftype_v2si_int, ARM_BUILTIN_WRORWI);
491- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wrordi", di_ftype_di_int, ARM_BUILTIN_WRORDI);
492-
493- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wshufh", v4hi_ftype_v4hi_int, ARM_BUILTIN_WSHUFH);
494-
495- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadb", v2si_ftype_v8qi_v8qi, ARM_BUILTIN_WSADB);
496- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadh", v2si_ftype_v4hi_v4hi, ARM_BUILTIN_WSADH);
497- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadbz", v2si_ftype_v8qi_v8qi, ARM_BUILTIN_WSADBZ);
498- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wsadhz", v2si_ftype_v4hi_v4hi, ARM_BUILTIN_WSADHZ);
499-
500- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmsb", int_ftype_v8qi_int, ARM_BUILTIN_TEXTRMSB);
501- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmsh", int_ftype_v4hi_int, ARM_BUILTIN_TEXTRMSH);
502- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmsw", int_ftype_v2si_int, ARM_BUILTIN_TEXTRMSW);
503- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmub", int_ftype_v8qi_int, ARM_BUILTIN_TEXTRMUB);
504- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmuh", int_ftype_v4hi_int, ARM_BUILTIN_TEXTRMUH);
505- def_mbuiltin (FL_IWMMXT, "__builtin_arm_textrmuw", int_ftype_v2si_int, ARM_BUILTIN_TEXTRMUW);
506- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tinsrb", v8qi_ftype_v8qi_int_int, ARM_BUILTIN_TINSRB);
507- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tinsrh", v4hi_ftype_v4hi_int_int, ARM_BUILTIN_TINSRH);
508- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tinsrw", v2si_ftype_v2si_int_int, ARM_BUILTIN_TINSRW);
509-
510- def_mbuiltin (FL_IWMMXT, "__builtin_arm_waccb", di_ftype_v8qi, ARM_BUILTIN_WACCB);
511- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wacch", di_ftype_v4hi, ARM_BUILTIN_WACCH);
512- def_mbuiltin (FL_IWMMXT, "__builtin_arm_waccw", di_ftype_v2si, ARM_BUILTIN_WACCW);
513-
514- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmovmskb", int_ftype_v8qi, ARM_BUILTIN_TMOVMSKB);
515- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmovmskh", int_ftype_v4hi, ARM_BUILTIN_TMOVMSKH);
516- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmovmskw", int_ftype_v2si, ARM_BUILTIN_TMOVMSKW);
517-
518- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackhss", v8qi_ftype_v4hi_v4hi, ARM_BUILTIN_WPACKHSS);
519- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackhus", v8qi_ftype_v4hi_v4hi, ARM_BUILTIN_WPACKHUS);
520- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackwus", v4hi_ftype_v2si_v2si, ARM_BUILTIN_WPACKWUS);
521- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackwss", v4hi_ftype_v2si_v2si, ARM_BUILTIN_WPACKWSS);
522- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackdus", v2si_ftype_di_di, ARM_BUILTIN_WPACKDUS);
523- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wpackdss", v2si_ftype_di_di, ARM_BUILTIN_WPACKDSS);
524-
525- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehub", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKEHUB);
526- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehuh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKEHUH);
527- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehuw", di_ftype_v2si, ARM_BUILTIN_WUNPCKEHUW);
528- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehsb", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKEHSB);
529- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehsh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKEHSH);
530- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckehsw", di_ftype_v2si, ARM_BUILTIN_WUNPCKEHSW);
531- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelub", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKELUB);
532- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckeluh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKELUH);
533- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckeluw", di_ftype_v2si, ARM_BUILTIN_WUNPCKELUW);
534- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelsb", v4hi_ftype_v8qi, ARM_BUILTIN_WUNPCKELSB);
535- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelsh", v2si_ftype_v4hi, ARM_BUILTIN_WUNPCKELSH);
536- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wunpckelsw", di_ftype_v2si, ARM_BUILTIN_WUNPCKELSW);
537-
538- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacs", di_ftype_di_v4hi_v4hi, ARM_BUILTIN_WMACS);
539- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacsz", di_ftype_v4hi_v4hi, ARM_BUILTIN_WMACSZ);
540- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacu", di_ftype_di_v4hi_v4hi, ARM_BUILTIN_WMACU);
541- def_mbuiltin (FL_IWMMXT, "__builtin_arm_wmacuz", di_ftype_v4hi_v4hi, ARM_BUILTIN_WMACUZ);
542-
543- def_mbuiltin (FL_IWMMXT, "__builtin_arm_walign", v8qi_ftype_v8qi_v8qi_int, ARM_BUILTIN_WALIGN);
544- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmia", di_ftype_di_int_int, ARM_BUILTIN_TMIA);
545- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiaph", di_ftype_di_int_int, ARM_BUILTIN_TMIAPH);
546- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiabb", di_ftype_di_int_int, ARM_BUILTIN_TMIABB);
547- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiabt", di_ftype_di_int_int, ARM_BUILTIN_TMIABT);
548- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiatb", di_ftype_di_int_int, ARM_BUILTIN_TMIATB);
549- def_mbuiltin (FL_IWMMXT, "__builtin_arm_tmiatt", di_ftype_di_int_int, ARM_BUILTIN_TMIATT);
550-}
551-
552-static void
553-arm_init_tls_builtins (void)
554-{
555- tree ftype, decl;
556-
557- ftype = build_function_type (ptr_type_node, void_list_node);
558- decl = add_builtin_function ("__builtin_thread_pointer", ftype,
559- ARM_BUILTIN_THREAD_POINTER, BUILT_IN_MD,
560- NULL, NULL_TREE);
561- TREE_NOTHROW (decl) = 1;
562- TREE_READONLY (decl) = 1;
563-}
564-
565-enum neon_builtin_type_bits {
566- T_V8QI = 0x0001,
567- T_V4HI = 0x0002,
568- T_V2SI = 0x0004,
569- T_V2SF = 0x0008,
570- T_DI = 0x0010,
571- T_DREG = 0x001F,
572- T_V16QI = 0x0020,
573- T_V8HI = 0x0040,
574- T_V4SI = 0x0080,
575- T_V4SF = 0x0100,
576- T_V2DI = 0x0200,
577- T_TI = 0x0400,
578- T_QREG = 0x07E0,
579- T_EI = 0x0800,
580- T_OI = 0x1000
581-};
582+typedef enum {
583+ T_V8QI,
584+ T_V4HI,
585+ T_V2SI,
586+ T_V2SF,
587+ T_DI,
588+ T_V16QI,
589+ T_V8HI,
590+ T_V4SI,
591+ T_V4SF,
592+ T_V2DI,
593+ T_TI,
594+ T_EI,
595+ T_OI,
596+ T_MAX /* Size of enum. Keep last. */
597+} neon_builtin_type_mode;
598+
599+#define TYPE_MODE_BIT(X) (1 << (X))
600+
601+#define TB_DREG (TYPE_MODE_BIT (T_V8QI) | TYPE_MODE_BIT (T_V4HI) \
602+ | TYPE_MODE_BIT (T_V2SI) | TYPE_MODE_BIT (T_V2SF) \
603+ | TYPE_MODE_BIT (T_DI))
604+#define TB_QREG (TYPE_MODE_BIT (T_V16QI) | TYPE_MODE_BIT (T_V8HI) \
605+ | TYPE_MODE_BIT (T_V4SI) | TYPE_MODE_BIT (T_V4SF) \
606+ | TYPE_MODE_BIT (T_V2DI) | TYPE_MODE_BIT (T_TI))
607
608 #define v8qi_UP T_V8QI
609 #define v4hi_UP T_V4HI
610@@ -18635,8 +18164,6 @@
611
612 #define UP(X) X##_UP
613
614-#define T_MAX 13
615-
616 typedef enum {
617 NEON_BINOP,
618 NEON_TERNOP,
619@@ -18680,49 +18207,42 @@
620 typedef struct {
621 const char *name;
622 const neon_itype itype;
623- const int bits;
624- const enum insn_code codes[T_MAX];
625- const unsigned int num_vars;
626- unsigned int base_fcode;
627+ const neon_builtin_type_mode mode;
628+ const enum insn_code code;
629+ unsigned int fcode;
630 } neon_builtin_datum;
631
632 #define CF(N,X) CODE_FOR_neon_##N##X
633
634 #define VAR1(T, N, A) \
635- #N, NEON_##T, UP (A), { CF (N, A) }, 1, 0
636+ {#N, NEON_##T, UP (A), CF (N, A), 0}
637 #define VAR2(T, N, A, B) \
638- #N, NEON_##T, UP (A) | UP (B), { CF (N, A), CF (N, B) }, 2, 0
639+ VAR1 (T, N, A), \
640+ {#N, NEON_##T, UP (B), CF (N, B), 0}
641 #define VAR3(T, N, A, B, C) \
642- #N, NEON_##T, UP (A) | UP (B) | UP (C), \
643- { CF (N, A), CF (N, B), CF (N, C) }, 3, 0
644+ VAR2 (T, N, A, B), \
645+ {#N, NEON_##T, UP (C), CF (N, C), 0}
646 #define VAR4(T, N, A, B, C, D) \
647- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D), \
648- { CF (N, A), CF (N, B), CF (N, C), CF (N, D) }, 4, 0
649+ VAR3 (T, N, A, B, C), \
650+ {#N, NEON_##T, UP (D), CF (N, D), 0}
651 #define VAR5(T, N, A, B, C, D, E) \
652- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E), \
653- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E) }, 5, 0
654+ VAR4 (T, N, A, B, C, D), \
655+ {#N, NEON_##T, UP (E), CF (N, E), 0}
656 #define VAR6(T, N, A, B, C, D, E, F) \
657- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F), \
658- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F) }, 6, 0
659+ VAR5 (T, N, A, B, C, D, E), \
660+ {#N, NEON_##T, UP (F), CF (N, F), 0}
661 #define VAR7(T, N, A, B, C, D, E, F, G) \
662- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G), \
663- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
664- CF (N, G) }, 7, 0
665+ VAR6 (T, N, A, B, C, D, E, F), \
666+ {#N, NEON_##T, UP (G), CF (N, G), 0}
667 #define VAR8(T, N, A, B, C, D, E, F, G, H) \
668- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G) \
669- | UP (H), \
670- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
671- CF (N, G), CF (N, H) }, 8, 0
672+ VAR7 (T, N, A, B, C, D, E, F, G), \
673+ {#N, NEON_##T, UP (H), CF (N, H), 0}
674 #define VAR9(T, N, A, B, C, D, E, F, G, H, I) \
675- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G) \
676- | UP (H) | UP (I), \
677- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
678- CF (N, G), CF (N, H), CF (N, I) }, 9, 0
679+ VAR8 (T, N, A, B, C, D, E, F, G, H), \
680+ {#N, NEON_##T, UP (I), CF (N, I), 0}
681 #define VAR10(T, N, A, B, C, D, E, F, G, H, I, J) \
682- #N, NEON_##T, UP (A) | UP (B) | UP (C) | UP (D) | UP (E) | UP (F) | UP (G) \
683- | UP (H) | UP (I) | UP (J), \
684- { CF (N, A), CF (N, B), CF (N, C), CF (N, D), CF (N, E), CF (N, F), \
685- CF (N, G), CF (N, H), CF (N, I), CF (N, J) }, 10, 0
686+ VAR9 (T, N, A, B, C, D, E, F, G, H, I), \
687+ {#N, NEON_##T, UP (J), CF (N, J), 0}
688
689 /* The mode entries in the following table correspond to the "key" type of the
690 instruction variant, i.e. equivalent to that which would be specified after
691@@ -18730,192 +18250,190 @@
692 (Signed/unsigned/polynomial types are not differentiated between though, and
693 are all mapped onto the same mode for a given element size.) The modes
694 listed per instruction should be the same as those defined for that
695- instruction's pattern in neon.md.
696- WARNING: Variants should be listed in the same increasing order as
697- neon_builtin_type_bits. */
698+ instruction's pattern in neon.md. */
699
700 static neon_builtin_datum neon_builtin_data[] =
701 {
702- { VAR10 (BINOP, vadd,
703- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
704- { VAR3 (BINOP, vaddl, v8qi, v4hi, v2si) },
705- { VAR3 (BINOP, vaddw, v8qi, v4hi, v2si) },
706- { VAR6 (BINOP, vhadd, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
707- { VAR8 (BINOP, vqadd, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
708- { VAR3 (BINOP, vaddhn, v8hi, v4si, v2di) },
709- { VAR8 (BINOP, vmul, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
710- { VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
711- { VAR3 (TERNOP, vmlal, v8qi, v4hi, v2si) },
712- { VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
713- { VAR3 (TERNOP, vmlsl, v8qi, v4hi, v2si) },
714- { VAR4 (BINOP, vqdmulh, v4hi, v2si, v8hi, v4si) },
715- { VAR2 (TERNOP, vqdmlal, v4hi, v2si) },
716- { VAR2 (TERNOP, vqdmlsl, v4hi, v2si) },
717- { VAR3 (BINOP, vmull, v8qi, v4hi, v2si) },
718- { VAR2 (SCALARMULL, vmull_n, v4hi, v2si) },
719- { VAR2 (LANEMULL, vmull_lane, v4hi, v2si) },
720- { VAR2 (SCALARMULL, vqdmull_n, v4hi, v2si) },
721- { VAR2 (LANEMULL, vqdmull_lane, v4hi, v2si) },
722- { VAR4 (SCALARMULH, vqdmulh_n, v4hi, v2si, v8hi, v4si) },
723- { VAR4 (LANEMULH, vqdmulh_lane, v4hi, v2si, v8hi, v4si) },
724- { VAR2 (BINOP, vqdmull, v4hi, v2si) },
725- { VAR8 (BINOP, vshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
726- { VAR8 (BINOP, vqshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
727- { VAR8 (SHIFTIMM, vshr_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
728- { VAR3 (SHIFTIMM, vshrn_n, v8hi, v4si, v2di) },
729- { VAR3 (SHIFTIMM, vqshrn_n, v8hi, v4si, v2di) },
730- { VAR3 (SHIFTIMM, vqshrun_n, v8hi, v4si, v2di) },
731- { VAR8 (SHIFTIMM, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
732- { VAR8 (SHIFTIMM, vqshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
733- { VAR8 (SHIFTIMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
734- { VAR3 (SHIFTIMM, vshll_n, v8qi, v4hi, v2si) },
735- { VAR8 (SHIFTACC, vsra_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
736- { VAR10 (BINOP, vsub,
737- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
738- { VAR3 (BINOP, vsubl, v8qi, v4hi, v2si) },
739- { VAR3 (BINOP, vsubw, v8qi, v4hi, v2si) },
740- { VAR8 (BINOP, vqsub, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
741- { VAR6 (BINOP, vhsub, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
742- { VAR3 (BINOP, vsubhn, v8hi, v4si, v2di) },
743- { VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
744- { VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
745- { VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
746- { VAR2 (BINOP, vcage, v2sf, v4sf) },
747- { VAR2 (BINOP, vcagt, v2sf, v4sf) },
748- { VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
749- { VAR8 (BINOP, vabd, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
750- { VAR3 (BINOP, vabdl, v8qi, v4hi, v2si) },
751- { VAR6 (TERNOP, vaba, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
752- { VAR3 (TERNOP, vabal, v8qi, v4hi, v2si) },
753- { VAR8 (BINOP, vmax, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
754- { VAR8 (BINOP, vmin, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
755- { VAR4 (BINOP, vpadd, v8qi, v4hi, v2si, v2sf) },
756- { VAR6 (UNOP, vpaddl, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
757- { VAR6 (BINOP, vpadal, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
758- { VAR4 (BINOP, vpmax, v8qi, v4hi, v2si, v2sf) },
759- { VAR4 (BINOP, vpmin, v8qi, v4hi, v2si, v2sf) },
760- { VAR2 (BINOP, vrecps, v2sf, v4sf) },
761- { VAR2 (BINOP, vrsqrts, v2sf, v4sf) },
762- { VAR8 (SHIFTINSERT, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
763- { VAR8 (SHIFTINSERT, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) },
764- { VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
765- { VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
766- { VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
767- { VAR6 (UNOP, vqneg, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
768- { VAR6 (UNOP, vcls, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
769- { VAR6 (UNOP, vclz, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
770- { VAR2 (UNOP, vcnt, v8qi, v16qi) },
771- { VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf) },
772- { VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf) },
773- { VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si) },
774+ VAR10 (BINOP, vadd,
775+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
776+ VAR3 (BINOP, vaddl, v8qi, v4hi, v2si),
777+ VAR3 (BINOP, vaddw, v8qi, v4hi, v2si),
778+ VAR6 (BINOP, vhadd, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
779+ VAR8 (BINOP, vqadd, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
780+ VAR3 (BINOP, vaddhn, v8hi, v4si, v2di),
781+ VAR8 (BINOP, vmul, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
782+ VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
783+ VAR3 (TERNOP, vmlal, v8qi, v4hi, v2si),
784+ VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
785+ VAR3 (TERNOP, vmlsl, v8qi, v4hi, v2si),
786+ VAR4 (BINOP, vqdmulh, v4hi, v2si, v8hi, v4si),
787+ VAR2 (TERNOP, vqdmlal, v4hi, v2si),
788+ VAR2 (TERNOP, vqdmlsl, v4hi, v2si),
789+ VAR3 (BINOP, vmull, v8qi, v4hi, v2si),
790+ VAR2 (SCALARMULL, vmull_n, v4hi, v2si),
791+ VAR2 (LANEMULL, vmull_lane, v4hi, v2si),
792+ VAR2 (SCALARMULL, vqdmull_n, v4hi, v2si),
793+ VAR2 (LANEMULL, vqdmull_lane, v4hi, v2si),
794+ VAR4 (SCALARMULH, vqdmulh_n, v4hi, v2si, v8hi, v4si),
795+ VAR4 (LANEMULH, vqdmulh_lane, v4hi, v2si, v8hi, v4si),
796+ VAR2 (BINOP, vqdmull, v4hi, v2si),
797+ VAR8 (BINOP, vshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
798+ VAR8 (BINOP, vqshl, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
799+ VAR8 (SHIFTIMM, vshr_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
800+ VAR3 (SHIFTIMM, vshrn_n, v8hi, v4si, v2di),
801+ VAR3 (SHIFTIMM, vqshrn_n, v8hi, v4si, v2di),
802+ VAR3 (SHIFTIMM, vqshrun_n, v8hi, v4si, v2di),
803+ VAR8 (SHIFTIMM, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
804+ VAR8 (SHIFTIMM, vqshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
805+ VAR8 (SHIFTIMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
806+ VAR3 (SHIFTIMM, vshll_n, v8qi, v4hi, v2si),
807+ VAR8 (SHIFTACC, vsra_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
808+ VAR10 (BINOP, vsub,
809+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
810+ VAR3 (BINOP, vsubl, v8qi, v4hi, v2si),
811+ VAR3 (BINOP, vsubw, v8qi, v4hi, v2si),
812+ VAR8 (BINOP, vqsub, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
813+ VAR6 (BINOP, vhsub, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
814+ VAR3 (BINOP, vsubhn, v8hi, v4si, v2di),
815+ VAR8 (BINOP, vceq, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
816+ VAR8 (BINOP, vcge, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
817+ VAR8 (BINOP, vcgt, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
818+ VAR2 (BINOP, vcage, v2sf, v4sf),
819+ VAR2 (BINOP, vcagt, v2sf, v4sf),
820+ VAR6 (BINOP, vtst, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
821+ VAR8 (BINOP, vabd, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
822+ VAR3 (BINOP, vabdl, v8qi, v4hi, v2si),
823+ VAR6 (TERNOP, vaba, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
824+ VAR3 (TERNOP, vabal, v8qi, v4hi, v2si),
825+ VAR8 (BINOP, vmax, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
826+ VAR8 (BINOP, vmin, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
827+ VAR4 (BINOP, vpadd, v8qi, v4hi, v2si, v2sf),
828+ VAR6 (UNOP, vpaddl, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
829+ VAR6 (BINOP, vpadal, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
830+ VAR4 (BINOP, vpmax, v8qi, v4hi, v2si, v2sf),
831+ VAR4 (BINOP, vpmin, v8qi, v4hi, v2si, v2sf),
832+ VAR2 (BINOP, vrecps, v2sf, v4sf),
833+ VAR2 (BINOP, vrsqrts, v2sf, v4sf),
834+ VAR8 (SHIFTINSERT, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
835+ VAR8 (SHIFTINSERT, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di),
836+ VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
837+ VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
838+ VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
839+ VAR6 (UNOP, vqneg, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
840+ VAR6 (UNOP, vcls, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
841+ VAR6 (UNOP, vclz, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
842+ VAR2 (UNOP, vcnt, v8qi, v16qi),
843+ VAR4 (UNOP, vrecpe, v2si, v2sf, v4si, v4sf),
844+ VAR4 (UNOP, vrsqrte, v2si, v2sf, v4si, v4sf),
845+ VAR6 (UNOP, vmvn, v8qi, v4hi, v2si, v16qi, v8hi, v4si),
846 /* FIXME: vget_lane supports more variants than this! */
847- { VAR10 (GETLANE, vget_lane,
848- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
849- { VAR10 (SETLANE, vset_lane,
850- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
851- { VAR5 (CREATE, vcreate, v8qi, v4hi, v2si, v2sf, di) },
852- { VAR10 (DUP, vdup_n,
853- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
854- { VAR10 (DUPLANE, vdup_lane,
855- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
856- { VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di) },
857- { VAR5 (SPLIT, vget_high, v16qi, v8hi, v4si, v4sf, v2di) },
858- { VAR5 (SPLIT, vget_low, v16qi, v8hi, v4si, v4sf, v2di) },
859- { VAR3 (UNOP, vmovn, v8hi, v4si, v2di) },
860- { VAR3 (UNOP, vqmovn, v8hi, v4si, v2di) },
861- { VAR3 (UNOP, vqmovun, v8hi, v4si, v2di) },
862- { VAR3 (UNOP, vmovl, v8qi, v4hi, v2si) },
863- { VAR6 (LANEMUL, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
864- { VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
865- { VAR2 (LANEMAC, vmlal_lane, v4hi, v2si) },
866- { VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si) },
867- { VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
868- { VAR2 (LANEMAC, vmlsl_lane, v4hi, v2si) },
869- { VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si) },
870- { VAR6 (SCALARMUL, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
871- { VAR6 (SCALARMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
872- { VAR2 (SCALARMAC, vmlal_n, v4hi, v2si) },
873- { VAR2 (SCALARMAC, vqdmlal_n, v4hi, v2si) },
874- { VAR6 (SCALARMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
875- { VAR2 (SCALARMAC, vmlsl_n, v4hi, v2si) },
876- { VAR2 (SCALARMAC, vqdmlsl_n, v4hi, v2si) },
877- { VAR10 (BINOP, vext,
878- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
879- { VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
880- { VAR4 (UNOP, vrev32, v8qi, v4hi, v16qi, v8hi) },
881- { VAR2 (UNOP, vrev16, v8qi, v16qi) },
882- { VAR4 (CONVERT, vcvt, v2si, v2sf, v4si, v4sf) },
883- { VAR4 (FIXCONV, vcvt_n, v2si, v2sf, v4si, v4sf) },
884- { VAR10 (SELECT, vbsl,
885- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
886- { VAR1 (VTBL, vtbl1, v8qi) },
887- { VAR1 (VTBL, vtbl2, v8qi) },
888- { VAR1 (VTBL, vtbl3, v8qi) },
889- { VAR1 (VTBL, vtbl4, v8qi) },
890- { VAR1 (VTBX, vtbx1, v8qi) },
891- { VAR1 (VTBX, vtbx2, v8qi) },
892- { VAR1 (VTBX, vtbx3, v8qi) },
893- { VAR1 (VTBX, vtbx4, v8qi) },
894- { VAR8 (RESULTPAIR, vtrn, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
895- { VAR8 (RESULTPAIR, vzip, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
896- { VAR8 (RESULTPAIR, vuzp, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) },
897- { VAR5 (REINTERP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di) },
898- { VAR5 (REINTERP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di) },
899- { VAR5 (REINTERP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di) },
900- { VAR5 (REINTERP, vreinterpretv2sf, v8qi, v4hi, v2si, v2sf, di) },
901- { VAR5 (REINTERP, vreinterpretdi, v8qi, v4hi, v2si, v2sf, di) },
902- { VAR5 (REINTERP, vreinterpretv16qi, v16qi, v8hi, v4si, v4sf, v2di) },
903- { VAR5 (REINTERP, vreinterpretv8hi, v16qi, v8hi, v4si, v4sf, v2di) },
904- { VAR5 (REINTERP, vreinterpretv4si, v16qi, v8hi, v4si, v4sf, v2di) },
905- { VAR5 (REINTERP, vreinterpretv4sf, v16qi, v8hi, v4si, v4sf, v2di) },
906- { VAR5 (REINTERP, vreinterpretv2di, v16qi, v8hi, v4si, v4sf, v2di) },
907- { VAR10 (LOAD1, vld1,
908- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
909- { VAR10 (LOAD1LANE, vld1_lane,
910- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
911- { VAR10 (LOAD1, vld1_dup,
912- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
913- { VAR10 (STORE1, vst1,
914- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
915- { VAR10 (STORE1LANE, vst1_lane,
916- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
917- { VAR9 (LOADSTRUCT,
918- vld2, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
919- { VAR7 (LOADSTRUCTLANE, vld2_lane,
920- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
921- { VAR5 (LOADSTRUCT, vld2_dup, v8qi, v4hi, v2si, v2sf, di) },
922- { VAR9 (STORESTRUCT, vst2,
923- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
924- { VAR7 (STORESTRUCTLANE, vst2_lane,
925- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
926- { VAR9 (LOADSTRUCT,
927- vld3, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
928- { VAR7 (LOADSTRUCTLANE, vld3_lane,
929- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
930- { VAR5 (LOADSTRUCT, vld3_dup, v8qi, v4hi, v2si, v2sf, di) },
931- { VAR9 (STORESTRUCT, vst3,
932- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
933- { VAR7 (STORESTRUCTLANE, vst3_lane,
934- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
935- { VAR9 (LOADSTRUCT, vld4,
936- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
937- { VAR7 (LOADSTRUCTLANE, vld4_lane,
938- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
939- { VAR5 (LOADSTRUCT, vld4_dup, v8qi, v4hi, v2si, v2sf, di) },
940- { VAR9 (STORESTRUCT, vst4,
941- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf) },
942- { VAR7 (STORESTRUCTLANE, vst4_lane,
943- v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf) },
944- { VAR10 (LOGICBINOP, vand,
945- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
946- { VAR10 (LOGICBINOP, vorr,
947- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
948- { VAR10 (BINOP, veor,
949- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
950- { VAR10 (LOGICBINOP, vbic,
951- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) },
952- { VAR10 (LOGICBINOP, vorn,
953- v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) }
954+ VAR10 (GETLANE, vget_lane,
955+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
956+ VAR10 (SETLANE, vset_lane,
957+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
958+ VAR5 (CREATE, vcreate, v8qi, v4hi, v2si, v2sf, di),
959+ VAR10 (DUP, vdup_n,
960+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
961+ VAR10 (DUPLANE, vdup_lane,
962+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
963+ VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di),
964+ VAR5 (SPLIT, vget_high, v16qi, v8hi, v4si, v4sf, v2di),
965+ VAR5 (SPLIT, vget_low, v16qi, v8hi, v4si, v4sf, v2di),
966+ VAR3 (UNOP, vmovn, v8hi, v4si, v2di),
967+ VAR3 (UNOP, vqmovn, v8hi, v4si, v2di),
968+ VAR3 (UNOP, vqmovun, v8hi, v4si, v2di),
969+ VAR3 (UNOP, vmovl, v8qi, v4hi, v2si),
970+ VAR6 (LANEMUL, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
971+ VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
972+ VAR2 (LANEMAC, vmlal_lane, v4hi, v2si),
973+ VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si),
974+ VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
975+ VAR2 (LANEMAC, vmlsl_lane, v4hi, v2si),
976+ VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si),
977+ VAR6 (SCALARMUL, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
978+ VAR6 (SCALARMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
979+ VAR2 (SCALARMAC, vmlal_n, v4hi, v2si),
980+ VAR2 (SCALARMAC, vqdmlal_n, v4hi, v2si),
981+ VAR6 (SCALARMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
982+ VAR2 (SCALARMAC, vmlsl_n, v4hi, v2si),
983+ VAR2 (SCALARMAC, vqdmlsl_n, v4hi, v2si),
984+ VAR10 (BINOP, vext,
985+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
986+ VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
987+ VAR4 (UNOP, vrev32, v8qi, v4hi, v16qi, v8hi),
988+ VAR2 (UNOP, vrev16, v8qi, v16qi),
989+ VAR4 (CONVERT, vcvt, v2si, v2sf, v4si, v4sf),
990+ VAR4 (FIXCONV, vcvt_n, v2si, v2sf, v4si, v4sf),
991+ VAR10 (SELECT, vbsl,
992+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
993+ VAR1 (VTBL, vtbl1, v8qi),
994+ VAR1 (VTBL, vtbl2, v8qi),
995+ VAR1 (VTBL, vtbl3, v8qi),
996+ VAR1 (VTBL, vtbl4, v8qi),
997+ VAR1 (VTBX, vtbx1, v8qi),
998+ VAR1 (VTBX, vtbx2, v8qi),
999+ VAR1 (VTBX, vtbx3, v8qi),
1000+ VAR1 (VTBX, vtbx4, v8qi),
1001+ VAR8 (RESULTPAIR, vtrn, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
1002+ VAR8 (RESULTPAIR, vzip, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
1003+ VAR8 (RESULTPAIR, vuzp, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
1004+ VAR5 (REINTERP, vreinterpretv8qi, v8qi, v4hi, v2si, v2sf, di),
1005+ VAR5 (REINTERP, vreinterpretv4hi, v8qi, v4hi, v2si, v2sf, di),
1006+ VAR5 (REINTERP, vreinterpretv2si, v8qi, v4hi, v2si, v2sf, di),
1007+ VAR5 (REINTERP, vreinterpretv2sf, v8qi, v4hi, v2si, v2sf, di),
1008+ VAR5 (REINTERP, vreinterpretdi, v8qi, v4hi, v2si, v2sf, di),
1009+ VAR5 (REINTERP, vreinterpretv16qi, v16qi, v8hi, v4si, v4sf, v2di),
1010+ VAR5 (REINTERP, vreinterpretv8hi, v16qi, v8hi, v4si, v4sf, v2di),
1011+ VAR5 (REINTERP, vreinterpretv4si, v16qi, v8hi, v4si, v4sf, v2di),
1012+ VAR5 (REINTERP, vreinterpretv4sf, v16qi, v8hi, v4si, v4sf, v2di),
1013+ VAR5 (REINTERP, vreinterpretv2di, v16qi, v8hi, v4si, v4sf, v2di),
1014+ VAR10 (LOAD1, vld1,
1015+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
1016+ VAR10 (LOAD1LANE, vld1_lane,
1017+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
1018+ VAR10 (LOAD1, vld1_dup,
1019+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
1020+ VAR10 (STORE1, vst1,
1021+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
1022+ VAR10 (STORE1LANE, vst1_lane,
1023+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
1024+ VAR9 (LOADSTRUCT,
1025+ vld2, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
1026+ VAR7 (LOADSTRUCTLANE, vld2_lane,
1027+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
1028+ VAR5 (LOADSTRUCT, vld2_dup, v8qi, v4hi, v2si, v2sf, di),
1029+ VAR9 (STORESTRUCT, vst2,
1030+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
1031+ VAR7 (STORESTRUCTLANE, vst2_lane,
1032+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
1033+ VAR9 (LOADSTRUCT,
1034+ vld3, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
1035+ VAR7 (LOADSTRUCTLANE, vld3_lane,
1036+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
1037+ VAR5 (LOADSTRUCT, vld3_dup, v8qi, v4hi, v2si, v2sf, di),
1038+ VAR9 (STORESTRUCT, vst3,
1039+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
1040+ VAR7 (STORESTRUCTLANE, vst3_lane,
1041+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
1042+ VAR9 (LOADSTRUCT, vld4,
1043+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
1044+ VAR7 (LOADSTRUCTLANE, vld4_lane,
1045+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
1046+ VAR5 (LOADSTRUCT, vld4_dup, v8qi, v4hi, v2si, v2sf, di),
1047+ VAR9 (STORESTRUCT, vst4,
1048+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf),
1049+ VAR7 (STORESTRUCTLANE, vst4_lane,
1050+ v8qi, v4hi, v2si, v2sf, v8hi, v4si, v4sf),
1051+ VAR10 (LOGICBINOP, vand,
1052+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
1053+ VAR10 (LOGICBINOP, vorr,
1054+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
1055+ VAR10 (BINOP, veor,
1056+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
1057+ VAR10 (LOGICBINOP, vbic,
1058+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
1059+ VAR10 (LOGICBINOP, vorn,
1060+ v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
1061 };
1062
1063 #undef CF
1064@@ -18930,10 +18448,185 @@
1065 #undef VAR9
1066 #undef VAR10
1067
1068+/* Neon defines builtins from ARM_BUILTIN_MAX upwards, though they don't have
1069+ symbolic names defined here (which would require too much duplication).
1070+ FIXME? */
1071+enum arm_builtins
1072+{
1073+ ARM_BUILTIN_GETWCX,
1074+ ARM_BUILTIN_SETWCX,
1075+
1076+ ARM_BUILTIN_WZERO,
1077+
1078+ ARM_BUILTIN_WAVG2BR,
1079+ ARM_BUILTIN_WAVG2HR,
1080+ ARM_BUILTIN_WAVG2B,
1081+ ARM_BUILTIN_WAVG2H,
1082+
1083+ ARM_BUILTIN_WACCB,
1084+ ARM_BUILTIN_WACCH,
1085+ ARM_BUILTIN_WACCW,
1086+
1087+ ARM_BUILTIN_WMACS,
1088+ ARM_BUILTIN_WMACSZ,
1089+ ARM_BUILTIN_WMACU,
1090+ ARM_BUILTIN_WMACUZ,
1091+
1092+ ARM_BUILTIN_WSADB,
1093+ ARM_BUILTIN_WSADBZ,
1094+ ARM_BUILTIN_WSADH,
1095+ ARM_BUILTIN_WSADHZ,
1096+
1097+ ARM_BUILTIN_WALIGN,
1098+
1099+ ARM_BUILTIN_TMIA,
1100+ ARM_BUILTIN_TMIAPH,
1101+ ARM_BUILTIN_TMIABB,
1102+ ARM_BUILTIN_TMIABT,
1103+ ARM_BUILTIN_TMIATB,
1104+ ARM_BUILTIN_TMIATT,
1105+
1106+ ARM_BUILTIN_TMOVMSKB,
1107+ ARM_BUILTIN_TMOVMSKH,
1108+ ARM_BUILTIN_TMOVMSKW,
1109+
1110+ ARM_BUILTIN_TBCSTB,
1111+ ARM_BUILTIN_TBCSTH,
1112+ ARM_BUILTIN_TBCSTW,
1113+
1114+ ARM_BUILTIN_WMADDS,
1115+ ARM_BUILTIN_WMADDU,
1116+
1117+ ARM_BUILTIN_WPACKHSS,
1118+ ARM_BUILTIN_WPACKWSS,
1119+ ARM_BUILTIN_WPACKDSS,
1120+ ARM_BUILTIN_WPACKHUS,
1121+ ARM_BUILTIN_WPACKWUS,
1122+ ARM_BUILTIN_WPACKDUS,
1123+
1124+ ARM_BUILTIN_WADDB,
1125+ ARM_BUILTIN_WADDH,
1126+ ARM_BUILTIN_WADDW,
1127+ ARM_BUILTIN_WADDSSB,
1128+ ARM_BUILTIN_WADDSSH,
1129+ ARM_BUILTIN_WADDSSW,
1130+ ARM_BUILTIN_WADDUSB,
1131+ ARM_BUILTIN_WADDUSH,
1132+ ARM_BUILTIN_WADDUSW,
1133+ ARM_BUILTIN_WSUBB,
1134+ ARM_BUILTIN_WSUBH,
1135+ ARM_BUILTIN_WSUBW,
1136+ ARM_BUILTIN_WSUBSSB,
1137+ ARM_BUILTIN_WSUBSSH,
1138+ ARM_BUILTIN_WSUBSSW,
1139+ ARM_BUILTIN_WSUBUSB,
1140+ ARM_BUILTIN_WSUBUSH,
1141+ ARM_BUILTIN_WSUBUSW,
1142+
1143+ ARM_BUILTIN_WAND,
1144+ ARM_BUILTIN_WANDN,
1145+ ARM_BUILTIN_WOR,
1146+ ARM_BUILTIN_WXOR,
1147+
1148+ ARM_BUILTIN_WCMPEQB,
1149+ ARM_BUILTIN_WCMPEQH,
1150+ ARM_BUILTIN_WCMPEQW,
1151+ ARM_BUILTIN_WCMPGTUB,
1152+ ARM_BUILTIN_WCMPGTUH,
1153+ ARM_BUILTIN_WCMPGTUW,
1154+ ARM_BUILTIN_WCMPGTSB,
1155+ ARM_BUILTIN_WCMPGTSH,
1156+ ARM_BUILTIN_WCMPGTSW,
1157+
1158+ ARM_BUILTIN_TEXTRMSB,
1159+ ARM_BUILTIN_TEXTRMSH,
1160+ ARM_BUILTIN_TEXTRMSW,
1161+ ARM_BUILTIN_TEXTRMUB,
1162+ ARM_BUILTIN_TEXTRMUH,
1163+ ARM_BUILTIN_TEXTRMUW,
1164+ ARM_BUILTIN_TINSRB,
1165+ ARM_BUILTIN_TINSRH,
1166+ ARM_BUILTIN_TINSRW,
1167+
1168+ ARM_BUILTIN_WMAXSW,
1169+ ARM_BUILTIN_WMAXSH,
1170+ ARM_BUILTIN_WMAXSB,
1171+ ARM_BUILTIN_WMAXUW,
1172+ ARM_BUILTIN_WMAXUH,
1173+ ARM_BUILTIN_WMAXUB,
1174+ ARM_BUILTIN_WMINSW,
1175+ ARM_BUILTIN_WMINSH,
1176+ ARM_BUILTIN_WMINSB,
1177+ ARM_BUILTIN_WMINUW,
1178+ ARM_BUILTIN_WMINUH,
1179+ ARM_BUILTIN_WMINUB,
1180+
1181+ ARM_BUILTIN_WMULUM,
1182+ ARM_BUILTIN_WMULSM,
1183+ ARM_BUILTIN_WMULUL,
1184+
1185+ ARM_BUILTIN_PSADBH,
1186+ ARM_BUILTIN_WSHUFH,
1187+
1188+ ARM_BUILTIN_WSLLH,
1189+ ARM_BUILTIN_WSLLW,
1190+ ARM_BUILTIN_WSLLD,
1191+ ARM_BUILTIN_WSRAH,
1192+ ARM_BUILTIN_WSRAW,
1193+ ARM_BUILTIN_WSRAD,
1194+ ARM_BUILTIN_WSRLH,
1195+ ARM_BUILTIN_WSRLW,
1196+ ARM_BUILTIN_WSRLD,
1197+ ARM_BUILTIN_WRORH,
1198+ ARM_BUILTIN_WRORW,
1199+ ARM_BUILTIN_WRORD,
1200+ ARM_BUILTIN_WSLLHI,
1201+ ARM_BUILTIN_WSLLWI,
1202+ ARM_BUILTIN_WSLLDI,
1203+ ARM_BUILTIN_WSRAHI,
1204+ ARM_BUILTIN_WSRAWI,
1205+ ARM_BUILTIN_WSRADI,
1206+ ARM_BUILTIN_WSRLHI,
1207+ ARM_BUILTIN_WSRLWI,
1208+ ARM_BUILTIN_WSRLDI,
1209+ ARM_BUILTIN_WRORHI,
1210+ ARM_BUILTIN_WRORWI,
1211+ ARM_BUILTIN_WRORDI,
1212+
1213+ ARM_BUILTIN_WUNPCKIHB,
1214+ ARM_BUILTIN_WUNPCKIHH,
1215+ ARM_BUILTIN_WUNPCKIHW,
1216+ ARM_BUILTIN_WUNPCKILB,
1217+ ARM_BUILTIN_WUNPCKILH,
1218+ ARM_BUILTIN_WUNPCKILW,
1219+
1220+ ARM_BUILTIN_WUNPCKEHSB,
1221+ ARM_BUILTIN_WUNPCKEHSH,
1222+ ARM_BUILTIN_WUNPCKEHSW,
1223+ ARM_BUILTIN_WUNPCKEHUB,
1224+ ARM_BUILTIN_WUNPCKEHUH,
1225+ ARM_BUILTIN_WUNPCKEHUW,
1226+ ARM_BUILTIN_WUNPCKELSB,
1227+ ARM_BUILTIN_WUNPCKELSH,
1228+ ARM_BUILTIN_WUNPCKELSW,
1229+ ARM_BUILTIN_WUNPCKELUB,
1230+ ARM_BUILTIN_WUNPCKELUH,
1231+ ARM_BUILTIN_WUNPCKELUW,
1232+
1233+ ARM_BUILTIN_THREAD_POINTER,
1234+
1235+ ARM_BUILTIN_NEON_BASE,
1236+
1237+ ARM_BUILTIN_MAX = ARM_BUILTIN_NEON_BASE + ARRAY_SIZE (neon_builtin_data)
1238+};
1239+
1240+static GTY(()) tree arm_builtin_decls[ARM_BUILTIN_MAX];
1241+
1242 static void
1243 arm_init_neon_builtins (void)
1244 {
1245- unsigned int i, fcode = ARM_BUILTIN_NEON_BASE;
1246+ unsigned int i, fcode;
1247+ tree decl;
1248
1249 tree neon_intQI_type_node;
1250 tree neon_intHI_type_node;
1251@@ -19181,250 +18874,740 @@
1252 }
1253 }
1254
1255- for (i = 0; i < ARRAY_SIZE (neon_builtin_data); i++)
1256+ for (i = 0, fcode = ARM_BUILTIN_NEON_BASE;
1257+ i < ARRAY_SIZE (neon_builtin_data);
1258+ i++, fcode++)
1259 {
1260 neon_builtin_datum *d = &neon_builtin_data[i];
1261- unsigned int j, codeidx = 0;
1262-
1263- d->base_fcode = fcode;
1264-
1265- for (j = 0; j < T_MAX; j++)
1266- {
1267- const char* const modenames[] = {
1268- "v8qi", "v4hi", "v2si", "v2sf", "di",
1269- "v16qi", "v8hi", "v4si", "v4sf", "v2di"
1270- };
1271- char namebuf[60];
1272- tree ftype = NULL;
1273- enum insn_code icode;
1274- int is_load = 0, is_store = 0;
1275-
1276- if ((d->bits & (1 << j)) == 0)
1277- continue;
1278-
1279- icode = d->codes[codeidx++];
1280-
1281- switch (d->itype)
1282- {
1283- case NEON_LOAD1:
1284- case NEON_LOAD1LANE:
1285- case NEON_LOADSTRUCT:
1286- case NEON_LOADSTRUCTLANE:
1287- is_load = 1;
1288- /* Fall through. */
1289- case NEON_STORE1:
1290- case NEON_STORE1LANE:
1291- case NEON_STORESTRUCT:
1292- case NEON_STORESTRUCTLANE:
1293- if (!is_load)
1294- is_store = 1;
1295- /* Fall through. */
1296- case NEON_UNOP:
1297- case NEON_BINOP:
1298- case NEON_LOGICBINOP:
1299- case NEON_SHIFTINSERT:
1300- case NEON_TERNOP:
1301- case NEON_GETLANE:
1302- case NEON_SETLANE:
1303- case NEON_CREATE:
1304- case NEON_DUP:
1305- case NEON_DUPLANE:
1306- case NEON_SHIFTIMM:
1307- case NEON_SHIFTACC:
1308- case NEON_COMBINE:
1309- case NEON_SPLIT:
1310- case NEON_CONVERT:
1311- case NEON_FIXCONV:
1312- case NEON_LANEMUL:
1313- case NEON_LANEMULL:
1314- case NEON_LANEMULH:
1315- case NEON_LANEMAC:
1316- case NEON_SCALARMUL:
1317- case NEON_SCALARMULL:
1318- case NEON_SCALARMULH:
1319- case NEON_SCALARMAC:
1320- case NEON_SELECT:
1321- case NEON_VTBL:
1322- case NEON_VTBX:
1323- {
1324- int k;
1325- tree return_type = void_type_node, args = void_list_node;
1326-
1327- /* Build a function type directly from the insn_data for this
1328- builtin. The build_function_type() function takes care of
1329- removing duplicates for us. */
1330- for (k = insn_data[icode].n_operands - 1; k >= 0; k--)
1331- {
1332- tree eltype;
1333-
1334- if (is_load && k == 1)
1335- {
1336- /* Neon load patterns always have the memory operand
1337- in the operand 1 position. */
1338- gcc_assert (insn_data[icode].operand[k].predicate
1339- == neon_struct_operand);
1340-
1341- switch (1 << j)
1342- {
1343- case T_V8QI:
1344- case T_V16QI:
1345- eltype = const_intQI_pointer_node;
1346- break;
1347-
1348- case T_V4HI:
1349- case T_V8HI:
1350- eltype = const_intHI_pointer_node;
1351- break;
1352-
1353- case T_V2SI:
1354- case T_V4SI:
1355- eltype = const_intSI_pointer_node;
1356- break;
1357-
1358- case T_V2SF:
1359- case T_V4SF:
1360- eltype = const_float_pointer_node;
1361- break;
1362-
1363- case T_DI:
1364- case T_V2DI:
1365- eltype = const_intDI_pointer_node;
1366- break;
1367-
1368- default: gcc_unreachable ();
1369- }
1370- }
1371- else if (is_store && k == 0)
1372- {
1373- /* Similarly, Neon store patterns use operand 0 as
1374- the memory location to store to. */
1375- gcc_assert (insn_data[icode].operand[k].predicate
1376- == neon_struct_operand);
1377-
1378- switch (1 << j)
1379- {
1380- case T_V8QI:
1381- case T_V16QI:
1382- eltype = intQI_pointer_node;
1383- break;
1384-
1385- case T_V4HI:
1386- case T_V8HI:
1387- eltype = intHI_pointer_node;
1388- break;
1389-
1390- case T_V2SI:
1391- case T_V4SI:
1392- eltype = intSI_pointer_node;
1393- break;
1394-
1395- case T_V2SF:
1396- case T_V4SF:
1397- eltype = float_pointer_node;
1398- break;
1399-
1400- case T_DI:
1401- case T_V2DI:
1402- eltype = intDI_pointer_node;
1403- break;
1404-
1405- default: gcc_unreachable ();
1406- }
1407- }
1408- else
1409- {
1410- switch (insn_data[icode].operand[k].mode)
1411- {
1412- case VOIDmode: eltype = void_type_node; break;
1413- /* Scalars. */
1414- case QImode: eltype = neon_intQI_type_node; break;
1415- case HImode: eltype = neon_intHI_type_node; break;
1416- case SImode: eltype = neon_intSI_type_node; break;
1417- case SFmode: eltype = neon_float_type_node; break;
1418- case DImode: eltype = neon_intDI_type_node; break;
1419- case TImode: eltype = intTI_type_node; break;
1420- case EImode: eltype = intEI_type_node; break;
1421- case OImode: eltype = intOI_type_node; break;
1422- case CImode: eltype = intCI_type_node; break;
1423- case XImode: eltype = intXI_type_node; break;
1424- /* 64-bit vectors. */
1425- case V8QImode: eltype = V8QI_type_node; break;
1426- case V4HImode: eltype = V4HI_type_node; break;
1427- case V2SImode: eltype = V2SI_type_node; break;
1428- case V2SFmode: eltype = V2SF_type_node; break;
1429- /* 128-bit vectors. */
1430- case V16QImode: eltype = V16QI_type_node; break;
1431- case V8HImode: eltype = V8HI_type_node; break;
1432- case V4SImode: eltype = V4SI_type_node; break;
1433- case V4SFmode: eltype = V4SF_type_node; break;
1434- case V2DImode: eltype = V2DI_type_node; break;
1435- default: gcc_unreachable ();
1436- }
1437- }
1438-
1439- if (k == 0 && !is_store)
1440- return_type = eltype;
1441- else
1442- args = tree_cons (NULL_TREE, eltype, args);
1443- }
1444-
1445- ftype = build_function_type (return_type, args);
1446- }
1447- break;
1448-
1449- case NEON_RESULTPAIR:
1450- {
1451- switch (insn_data[icode].operand[1].mode)
1452- {
1453- case V8QImode: ftype = void_ftype_pv8qi_v8qi_v8qi; break;
1454- case V4HImode: ftype = void_ftype_pv4hi_v4hi_v4hi; break;
1455- case V2SImode: ftype = void_ftype_pv2si_v2si_v2si; break;
1456- case V2SFmode: ftype = void_ftype_pv2sf_v2sf_v2sf; break;
1457- case DImode: ftype = void_ftype_pdi_di_di; break;
1458- case V16QImode: ftype = void_ftype_pv16qi_v16qi_v16qi; break;
1459- case V8HImode: ftype = void_ftype_pv8hi_v8hi_v8hi; break;
1460- case V4SImode: ftype = void_ftype_pv4si_v4si_v4si; break;
1461- case V4SFmode: ftype = void_ftype_pv4sf_v4sf_v4sf; break;
1462- case V2DImode: ftype = void_ftype_pv2di_v2di_v2di; break;
1463- default: gcc_unreachable ();
1464- }
1465- }
1466- break;
1467-
1468- case NEON_REINTERP:
1469- {
1470- /* We iterate over 5 doubleword types, then 5 quadword
1471- types. */
1472- int rhs = j % 5;
1473- switch (insn_data[icode].operand[0].mode)
1474- {
1475- case V8QImode: ftype = reinterp_ftype_dreg[0][rhs]; break;
1476- case V4HImode: ftype = reinterp_ftype_dreg[1][rhs]; break;
1477- case V2SImode: ftype = reinterp_ftype_dreg[2][rhs]; break;
1478- case V2SFmode: ftype = reinterp_ftype_dreg[3][rhs]; break;
1479- case DImode: ftype = reinterp_ftype_dreg[4][rhs]; break;
1480- case V16QImode: ftype = reinterp_ftype_qreg[0][rhs]; break;
1481- case V8HImode: ftype = reinterp_ftype_qreg[1][rhs]; break;
1482- case V4SImode: ftype = reinterp_ftype_qreg[2][rhs]; break;
1483- case V4SFmode: ftype = reinterp_ftype_qreg[3][rhs]; break;
1484- case V2DImode: ftype = reinterp_ftype_qreg[4][rhs]; break;
1485- default: gcc_unreachable ();
1486- }
1487- }
1488- break;
1489-
1490- default:
1491- gcc_unreachable ();
1492- }
1493-
1494- gcc_assert (ftype != NULL);
1495-
1496- sprintf (namebuf, "__builtin_neon_%s%s", d->name, modenames[j]);
1497-
1498- add_builtin_function (namebuf, ftype, fcode++, BUILT_IN_MD, NULL,
1499- NULL_TREE);
1500- }
1501- }
1502+
1503+ const char* const modenames[] = {
1504+ "v8qi", "v4hi", "v2si", "v2sf", "di",
1505+ "v16qi", "v8hi", "v4si", "v4sf", "v2di",
1506+ "ti", "ei", "oi"
1507+ };
1508+ char namebuf[60];
1509+ tree ftype = NULL;
1510+ int is_load = 0, is_store = 0;
1511+
1512+ gcc_assert (ARRAY_SIZE (modenames) == T_MAX);
1513+
1514+ d->fcode = fcode;
1515+
1516+ switch (d->itype)
1517+ {
1518+ case NEON_LOAD1:
1519+ case NEON_LOAD1LANE:
1520+ case NEON_LOADSTRUCT:
1521+ case NEON_LOADSTRUCTLANE:
1522+ is_load = 1;
1523+ /* Fall through. */
1524+ case NEON_STORE1:
1525+ case NEON_STORE1LANE:
1526+ case NEON_STORESTRUCT:
1527+ case NEON_STORESTRUCTLANE:
1528+ if (!is_load)
1529+ is_store = 1;
1530+ /* Fall through. */
1531+ case NEON_UNOP:
1532+ case NEON_BINOP:
1533+ case NEON_LOGICBINOP:
1534+ case NEON_SHIFTINSERT:
1535+ case NEON_TERNOP:
1536+ case NEON_GETLANE:
1537+ case NEON_SETLANE:
1538+ case NEON_CREATE:
1539+ case NEON_DUP:
1540+ case NEON_DUPLANE:
1541+ case NEON_SHIFTIMM:
1542+ case NEON_SHIFTACC:
1543+ case NEON_COMBINE:
1544+ case NEON_SPLIT:
1545+ case NEON_CONVERT:
1546+ case NEON_FIXCONV:
1547+ case NEON_LANEMUL:
1548+ case NEON_LANEMULL:
1549+ case NEON_LANEMULH:
1550+ case NEON_LANEMAC:
1551+ case NEON_SCALARMUL:
1552+ case NEON_SCALARMULL:
1553+ case NEON_SCALARMULH:
1554+ case NEON_SCALARMAC:
1555+ case NEON_SELECT:
1556+ case NEON_VTBL:
1557+ case NEON_VTBX:
1558+ {
1559+ int k;
1560+ tree return_type = void_type_node, args = void_list_node;
1561+
1562+ /* Build a function type directly from the insn_data for
1563+ this builtin. The build_function_type() function takes
1564+ care of removing duplicates for us. */
1565+ for (k = insn_data[d->code].n_operands - 1; k >= 0; k--)
1566+ {
1567+ tree eltype;
1568+
1569+ if (is_load && k == 1)
1570+ {
1571+ /* Neon load patterns always have the memory
1572+ operand in the operand 1 position. */
1573+ gcc_assert (insn_data[d->code].operand[k].predicate
1574+ == neon_struct_operand);
1575+
1576+ switch (d->mode)
1577+ {
1578+ case T_V8QI:
1579+ case T_V16QI:
1580+ eltype = const_intQI_pointer_node;
1581+ break;
1582+
1583+ case T_V4HI:
1584+ case T_V8HI:
1585+ eltype = const_intHI_pointer_node;
1586+ break;
1587+
1588+ case T_V2SI:
1589+ case T_V4SI:
1590+ eltype = const_intSI_pointer_node;
1591+ break;
1592+
1593+ case T_V2SF:
1594+ case T_V4SF:
1595+ eltype = const_float_pointer_node;
1596+ break;
1597+
1598+ case T_DI:
1599+ case T_V2DI:
1600+ eltype = const_intDI_pointer_node;
1601+ break;
1602+
1603+ default: gcc_unreachable ();
1604+ }
1605+ }
1606+ else if (is_store && k == 0)
1607+ {
1608+ /* Similarly, Neon store patterns use operand 0 as
1609+ the memory location to store to. */
1610+ gcc_assert (insn_data[d->code].operand[k].predicate
1611+ == neon_struct_operand);
1612+
1613+ switch (d->mode)
1614+ {
1615+ case T_V8QI:
1616+ case T_V16QI:
1617+ eltype = intQI_pointer_node;
1618+ break;
1619+
1620+ case T_V4HI:
1621+ case T_V8HI:
1622+ eltype = intHI_pointer_node;
1623+ break;
1624+
1625+ case T_V2SI:
1626+ case T_V4SI:
1627+ eltype = intSI_pointer_node;
1628+ break;
1629+
1630+ case T_V2SF:
1631+ case T_V4SF:
1632+ eltype = float_pointer_node;
1633+ break;
1634+
1635+ case T_DI:
1636+ case T_V2DI:
1637+ eltype = intDI_pointer_node;
1638+ break;
1639+
1640+ default: gcc_unreachable ();
1641+ }
1642+ }
1643+ else
1644+ {
1645+ switch (insn_data[d->code].operand[k].mode)
1646+ {
1647+ case VOIDmode: eltype = void_type_node; break;
1648+ /* Scalars. */
1649+ case QImode: eltype = neon_intQI_type_node; break;
1650+ case HImode: eltype = neon_intHI_type_node; break;
1651+ case SImode: eltype = neon_intSI_type_node; break;
1652+ case SFmode: eltype = neon_float_type_node; break;
1653+ case DImode: eltype = neon_intDI_type_node; break;
1654+ case TImode: eltype = intTI_type_node; break;
1655+ case EImode: eltype = intEI_type_node; break;
1656+ case OImode: eltype = intOI_type_node; break;
1657+ case CImode: eltype = intCI_type_node; break;
1658+ case XImode: eltype = intXI_type_node; break;
1659+ /* 64-bit vectors. */
1660+ case V8QImode: eltype = V8QI_type_node; break;
1661+ case V4HImode: eltype = V4HI_type_node; break;
1662+ case V2SImode: eltype = V2SI_type_node; break;
1663+ case V2SFmode: eltype = V2SF_type_node; break;
1664+ /* 128-bit vectors. */
1665+ case V16QImode: eltype = V16QI_type_node; break;
1666+ case V8HImode: eltype = V8HI_type_node; break;
1667+ case V4SImode: eltype = V4SI_type_node; break;
1668+ case V4SFmode: eltype = V4SF_type_node; break;
1669+ case V2DImode: eltype = V2DI_type_node; break;
1670+ default: gcc_unreachable ();
1671+ }
1672+ }
1673+
1674+ if (k == 0 && !is_store)
1675+ return_type = eltype;
1676+ else
1677+ args = tree_cons (NULL_TREE, eltype, args);
1678+ }
1679+
1680+ ftype = build_function_type (return_type, args);
1681+ }
1682+ break;
1683+
1684+ case NEON_RESULTPAIR:
1685+ {
1686+ switch (insn_data[d->code].operand[1].mode)
1687+ {
1688+ case V8QImode: ftype = void_ftype_pv8qi_v8qi_v8qi; break;
1689+ case V4HImode: ftype = void_ftype_pv4hi_v4hi_v4hi; break;
1690+ case V2SImode: ftype = void_ftype_pv2si_v2si_v2si; break;
1691+ case V2SFmode: ftype = void_ftype_pv2sf_v2sf_v2sf; break;
1692+ case DImode: ftype = void_ftype_pdi_di_di; break;
1693+ case V16QImode: ftype = void_ftype_pv16qi_v16qi_v16qi; break;
1694+ case V8HImode: ftype = void_ftype_pv8hi_v8hi_v8hi; break;
1695+ case V4SImode: ftype = void_ftype_pv4si_v4si_v4si; break;
1696+ case V4SFmode: ftype = void_ftype_pv4sf_v4sf_v4sf; break;
1697+ case V2DImode: ftype = void_ftype_pv2di_v2di_v2di; break;
1698+ default: gcc_unreachable ();
1699+ }
1700+ }
1701+ break;
1702+
1703+ case NEON_REINTERP:
1704+ {
1705+ /* We iterate over 5 doubleword types, then 5 quadword
1706+ types. */
1707+ int rhs = d->mode % 5;
1708+ switch (insn_data[d->code].operand[0].mode)
1709+ {
1710+ case V8QImode: ftype = reinterp_ftype_dreg[0][rhs]; break;
1711+ case V4HImode: ftype = reinterp_ftype_dreg[1][rhs]; break;
1712+ case V2SImode: ftype = reinterp_ftype_dreg[2][rhs]; break;
1713+ case V2SFmode: ftype = reinterp_ftype_dreg[3][rhs]; break;
1714+ case DImode: ftype = reinterp_ftype_dreg[4][rhs]; break;
1715+ case V16QImode: ftype = reinterp_ftype_qreg[0][rhs]; break;
1716+ case V8HImode: ftype = reinterp_ftype_qreg[1][rhs]; break;
1717+ case V4SImode: ftype = reinterp_ftype_qreg[2][rhs]; break;
1718+ case V4SFmode: ftype = reinterp_ftype_qreg[3][rhs]; break;
1719+ case V2DImode: ftype = reinterp_ftype_qreg[4][rhs]; break;
1720+ default: gcc_unreachable ();
1721+ }
1722+ }
1723+ break;
1724+
1725+ default:
1726+ gcc_unreachable ();
1727+ }
1728+
1729+ gcc_assert (ftype != NULL);
1730+
1731+ sprintf (namebuf, "__builtin_neon_%s%s", d->name, modenames[d->mode]);
1732+
1733+ decl = add_builtin_function (namebuf, ftype, fcode, BUILT_IN_MD, NULL,
1734+ NULL_TREE);
1735+ arm_builtin_decls[fcode] = decl;
1736+ }
1737+}
1738+
1739+#define def_mbuiltin(MASK, NAME, TYPE, CODE) \
1740+ do \
1741+ { \
1742+ if ((MASK) & insn_flags) \
1743+ { \
1744+ tree bdecl; \
1745+ bdecl = add_builtin_function ((NAME), (TYPE), (CODE), \
1746+ BUILT_IN_MD, NULL, NULL_TREE); \
1747+ arm_builtin_decls[CODE] = bdecl; \
1748+ } \
1749+ } \
1750+ while (0)
1751+
1752+struct builtin_description
1753+{
1754+ const unsigned int mask;
1755+ const enum insn_code icode;
1756+ const char * const name;
1757+ const enum arm_builtins code;
1758+ const enum rtx_code comparison;
1759+ const unsigned int flag;
1760+};
1761+
1762+static const struct builtin_description bdesc_2arg[] =
1763+{
1764+#define IWMMXT_BUILTIN(code, string, builtin) \
1765+ { FL_IWMMXT, CODE_FOR_##code, "__builtin_arm_" string, \
1766+ ARM_BUILTIN_##builtin, UNKNOWN, 0 },
1767+
1768+ IWMMXT_BUILTIN (addv8qi3, "waddb", WADDB)
1769+ IWMMXT_BUILTIN (addv4hi3, "waddh", WADDH)
1770+ IWMMXT_BUILTIN (addv2si3, "waddw", WADDW)
1771+ IWMMXT_BUILTIN (subv8qi3, "wsubb", WSUBB)
1772+ IWMMXT_BUILTIN (subv4hi3, "wsubh", WSUBH)
1773+ IWMMXT_BUILTIN (subv2si3, "wsubw", WSUBW)
1774+ IWMMXT_BUILTIN (ssaddv8qi3, "waddbss", WADDSSB)
1775+ IWMMXT_BUILTIN (ssaddv4hi3, "waddhss", WADDSSH)
1776+ IWMMXT_BUILTIN (ssaddv2si3, "waddwss", WADDSSW)
1777+ IWMMXT_BUILTIN (sssubv8qi3, "wsubbss", WSUBSSB)
1778+ IWMMXT_BUILTIN (sssubv4hi3, "wsubhss", WSUBSSH)
1779+ IWMMXT_BUILTIN (sssubv2si3, "wsubwss", WSUBSSW)
1780+ IWMMXT_BUILTIN (usaddv8qi3, "waddbus", WADDUSB)
1781+ IWMMXT_BUILTIN (usaddv4hi3, "waddhus", WADDUSH)
1782+ IWMMXT_BUILTIN (usaddv2si3, "waddwus", WADDUSW)
1783+ IWMMXT_BUILTIN (ussubv8qi3, "wsubbus", WSUBUSB)
1784+ IWMMXT_BUILTIN (ussubv4hi3, "wsubhus", WSUBUSH)
1785+ IWMMXT_BUILTIN (ussubv2si3, "wsubwus", WSUBUSW)
1786+ IWMMXT_BUILTIN (mulv4hi3, "wmulul", WMULUL)
1787+ IWMMXT_BUILTIN (smulv4hi3_highpart, "wmulsm", WMULSM)
1788+ IWMMXT_BUILTIN (umulv4hi3_highpart, "wmulum", WMULUM)
1789+ IWMMXT_BUILTIN (eqv8qi3, "wcmpeqb", WCMPEQB)
1790+ IWMMXT_BUILTIN (eqv4hi3, "wcmpeqh", WCMPEQH)
1791+ IWMMXT_BUILTIN (eqv2si3, "wcmpeqw", WCMPEQW)
1792+ IWMMXT_BUILTIN (gtuv8qi3, "wcmpgtub", WCMPGTUB)
1793+ IWMMXT_BUILTIN (gtuv4hi3, "wcmpgtuh", WCMPGTUH)
1794+ IWMMXT_BUILTIN (gtuv2si3, "wcmpgtuw", WCMPGTUW)
1795+ IWMMXT_BUILTIN (gtv8qi3, "wcmpgtsb", WCMPGTSB)
1796+ IWMMXT_BUILTIN (gtv4hi3, "wcmpgtsh", WCMPGTSH)
1797+ IWMMXT_BUILTIN (gtv2si3, "wcmpgtsw", WCMPGTSW)
1798+ IWMMXT_BUILTIN (umaxv8qi3, "wmaxub", WMAXUB)
1799+ IWMMXT_BUILTIN (smaxv8qi3, "wmaxsb", WMAXSB)
1800+ IWMMXT_BUILTIN (umaxv4hi3, "wmaxuh", WMAXUH)
1801+ IWMMXT_BUILTIN (smaxv4hi3, "wmaxsh", WMAXSH)
1802+ IWMMXT_BUILTIN (umaxv2si3, "wmaxuw", WMAXUW)
1803+ IWMMXT_BUILTIN (smaxv2si3, "wmaxsw", WMAXSW)
1804+ IWMMXT_BUILTIN (uminv8qi3, "wminub", WMINUB)
1805+ IWMMXT_BUILTIN (sminv8qi3, "wminsb", WMINSB)
1806+ IWMMXT_BUILTIN (uminv4hi3, "wminuh", WMINUH)
1807+ IWMMXT_BUILTIN (sminv4hi3, "wminsh", WMINSH)
1808+ IWMMXT_BUILTIN (uminv2si3, "wminuw", WMINUW)
1809+ IWMMXT_BUILTIN (sminv2si3, "wminsw", WMINSW)
1810+ IWMMXT_BUILTIN (iwmmxt_anddi3, "wand", WAND)
1811+ IWMMXT_BUILTIN (iwmmxt_nanddi3, "wandn", WANDN)
1812+ IWMMXT_BUILTIN (iwmmxt_iordi3, "wor", WOR)
1813+ IWMMXT_BUILTIN (iwmmxt_xordi3, "wxor", WXOR)
1814+ IWMMXT_BUILTIN (iwmmxt_uavgv8qi3, "wavg2b", WAVG2B)
1815+ IWMMXT_BUILTIN (iwmmxt_uavgv4hi3, "wavg2h", WAVG2H)
1816+ IWMMXT_BUILTIN (iwmmxt_uavgrndv8qi3, "wavg2br", WAVG2BR)
1817+ IWMMXT_BUILTIN (iwmmxt_uavgrndv4hi3, "wavg2hr", WAVG2HR)
1818+ IWMMXT_BUILTIN (iwmmxt_wunpckilb, "wunpckilb", WUNPCKILB)
1819+ IWMMXT_BUILTIN (iwmmxt_wunpckilh, "wunpckilh", WUNPCKILH)
1820+ IWMMXT_BUILTIN (iwmmxt_wunpckilw, "wunpckilw", WUNPCKILW)
1821+ IWMMXT_BUILTIN (iwmmxt_wunpckihb, "wunpckihb", WUNPCKIHB)
1822+ IWMMXT_BUILTIN (iwmmxt_wunpckihh, "wunpckihh", WUNPCKIHH)
1823+ IWMMXT_BUILTIN (iwmmxt_wunpckihw, "wunpckihw", WUNPCKIHW)
1824+ IWMMXT_BUILTIN (iwmmxt_wmadds, "wmadds", WMADDS)
1825+ IWMMXT_BUILTIN (iwmmxt_wmaddu, "wmaddu", WMADDU)
1826+
1827+#define IWMMXT_BUILTIN2(code, builtin) \
1828+ { FL_IWMMXT, CODE_FOR_##code, NULL, ARM_BUILTIN_##builtin, UNKNOWN, 0 },
1829+
1830+ IWMMXT_BUILTIN2 (iwmmxt_wpackhss, WPACKHSS)
1831+ IWMMXT_BUILTIN2 (iwmmxt_wpackwss, WPACKWSS)
1832+ IWMMXT_BUILTIN2 (iwmmxt_wpackdss, WPACKDSS)
1833+ IWMMXT_BUILTIN2 (iwmmxt_wpackhus, WPACKHUS)
1834+ IWMMXT_BUILTIN2 (iwmmxt_wpackwus, WPACKWUS)
1835+ IWMMXT_BUILTIN2 (iwmmxt_wpackdus, WPACKDUS)
1836+ IWMMXT_BUILTIN2 (ashlv4hi3_di, WSLLH)
1837+ IWMMXT_BUILTIN2 (ashlv4hi3_iwmmxt, WSLLHI)
1838+ IWMMXT_BUILTIN2 (ashlv2si3_di, WSLLW)
1839+ IWMMXT_BUILTIN2 (ashlv2si3_iwmmxt, WSLLWI)
1840+ IWMMXT_BUILTIN2 (ashldi3_di, WSLLD)
1841+ IWMMXT_BUILTIN2 (ashldi3_iwmmxt, WSLLDI)
1842+ IWMMXT_BUILTIN2 (lshrv4hi3_di, WSRLH)
1843+ IWMMXT_BUILTIN2 (lshrv4hi3_iwmmxt, WSRLHI)
1844+ IWMMXT_BUILTIN2 (lshrv2si3_di, WSRLW)
1845+ IWMMXT_BUILTIN2 (lshrv2si3_iwmmxt, WSRLWI)
1846+ IWMMXT_BUILTIN2 (lshrdi3_di, WSRLD)
1847+ IWMMXT_BUILTIN2 (lshrdi3_iwmmxt, WSRLDI)
1848+ IWMMXT_BUILTIN2 (ashrv4hi3_di, WSRAH)
1849+ IWMMXT_BUILTIN2 (ashrv4hi3_iwmmxt, WSRAHI)
1850+ IWMMXT_BUILTIN2 (ashrv2si3_di, WSRAW)
1851+ IWMMXT_BUILTIN2 (ashrv2si3_iwmmxt, WSRAWI)
1852+ IWMMXT_BUILTIN2 (ashrdi3_di, WSRAD)
1853+ IWMMXT_BUILTIN2 (ashrdi3_iwmmxt, WSRADI)
1854+ IWMMXT_BUILTIN2 (rorv4hi3_di, WRORH)
1855+ IWMMXT_BUILTIN2 (rorv4hi3, WRORHI)
1856+ IWMMXT_BUILTIN2 (rorv2si3_di, WRORW)
1857+ IWMMXT_BUILTIN2 (rorv2si3, WRORWI)
1858+ IWMMXT_BUILTIN2 (rordi3_di, WRORD)
1859+ IWMMXT_BUILTIN2 (rordi3, WRORDI)
1860+ IWMMXT_BUILTIN2 (iwmmxt_wmacuz, WMACUZ)
1861+ IWMMXT_BUILTIN2 (iwmmxt_wmacsz, WMACSZ)
1862+};
1863+
1864+static const struct builtin_description bdesc_1arg[] =
1865+{
1866+ IWMMXT_BUILTIN (iwmmxt_tmovmskb, "tmovmskb", TMOVMSKB)
1867+ IWMMXT_BUILTIN (iwmmxt_tmovmskh, "tmovmskh", TMOVMSKH)
1868+ IWMMXT_BUILTIN (iwmmxt_tmovmskw, "tmovmskw", TMOVMSKW)
1869+ IWMMXT_BUILTIN (iwmmxt_waccb, "waccb", WACCB)
1870+ IWMMXT_BUILTIN (iwmmxt_wacch, "wacch", WACCH)
1871+ IWMMXT_BUILTIN (iwmmxt_waccw, "waccw", WACCW)
1872+ IWMMXT_BUILTIN (iwmmxt_wunpckehub, "wunpckehub", WUNPCKEHUB)
1873+ IWMMXT_BUILTIN (iwmmxt_wunpckehuh, "wunpckehuh", WUNPCKEHUH)
1874+ IWMMXT_BUILTIN (iwmmxt_wunpckehuw, "wunpckehuw", WUNPCKEHUW)
1875+ IWMMXT_BUILTIN (iwmmxt_wunpckehsb, "wunpckehsb", WUNPCKEHSB)
1876+ IWMMXT_BUILTIN (iwmmxt_wunpckehsh, "wunpckehsh", WUNPCKEHSH)
1877+ IWMMXT_BUILTIN (iwmmxt_wunpckehsw, "wunpckehsw", WUNPCKEHSW)
1878+ IWMMXT_BUILTIN (iwmmxt_wunpckelub, "wunpckelub", WUNPCKELUB)
1879+ IWMMXT_BUILTIN (iwmmxt_wunpckeluh, "wunpckeluh", WUNPCKELUH)
1880+ IWMMXT_BUILTIN (iwmmxt_wunpckeluw, "wunpckeluw", WUNPCKELUW)
1881+ IWMMXT_BUILTIN (iwmmxt_wunpckelsb, "wunpckelsb", WUNPCKELSB)
1882+ IWMMXT_BUILTIN (iwmmxt_wunpckelsh, "wunpckelsh", WUNPCKELSH)
1883+ IWMMXT_BUILTIN (iwmmxt_wunpckelsw, "wunpckelsw", WUNPCKELSW)
1884+};
1885+
1886+/* Set up all the iWMMXt builtins. This is not called if
1887+ TARGET_IWMMXT is zero. */
1888+
1889+static void
1890+arm_init_iwmmxt_builtins (void)
1891+{
1892+ const struct builtin_description * d;
1893+ size_t i;
1894+ tree endlink = void_list_node;
1895+
1896+ tree V2SI_type_node = build_vector_type_for_mode (intSI_type_node, V2SImode);
1897+ tree V4HI_type_node = build_vector_type_for_mode (intHI_type_node, V4HImode);
1898+ tree V8QI_type_node = build_vector_type_for_mode (intQI_type_node, V8QImode);
1899+
1900+ tree int_ftype_int
1901+ = build_function_type (integer_type_node,
1902+ tree_cons (NULL_TREE, integer_type_node, endlink));
1903+ tree v8qi_ftype_v8qi_v8qi_int
1904+ = build_function_type (V8QI_type_node,
1905+ tree_cons (NULL_TREE, V8QI_type_node,
1906+ tree_cons (NULL_TREE, V8QI_type_node,
1907+ tree_cons (NULL_TREE,
1908+ integer_type_node,
1909+ endlink))));
1910+ tree v4hi_ftype_v4hi_int
1911+ = build_function_type (V4HI_type_node,
1912+ tree_cons (NULL_TREE, V4HI_type_node,
1913+ tree_cons (NULL_TREE, integer_type_node,
1914+ endlink)));
1915+ tree v2si_ftype_v2si_int
1916+ = build_function_type (V2SI_type_node,
1917+ tree_cons (NULL_TREE, V2SI_type_node,
1918+ tree_cons (NULL_TREE, integer_type_node,
1919+ endlink)));
1920+ tree v2si_ftype_di_di
1921+ = build_function_type (V2SI_type_node,
1922+ tree_cons (NULL_TREE, long_long_integer_type_node,
1923+ tree_cons (NULL_TREE,
1924+ long_long_integer_type_node,
1925+ endlink)));
1926+ tree di_ftype_di_int
1927+ = build_function_type (long_long_integer_type_node,
1928+ tree_cons (NULL_TREE, long_long_integer_type_node,
1929+ tree_cons (NULL_TREE, integer_type_node,
1930+ endlink)));
1931+ tree di_ftype_di_int_int
1932+ = build_function_type (long_long_integer_type_node,
1933+ tree_cons (NULL_TREE, long_long_integer_type_node,
1934+ tree_cons (NULL_TREE, integer_type_node,
1935+ tree_cons (NULL_TREE,
1936+ integer_type_node,
1937+ endlink))));
1938+ tree int_ftype_v8qi
1939+ = build_function_type (integer_type_node,
1940+ tree_cons (NULL_TREE, V8QI_type_node,
1941+ endlink));
1942+ tree int_ftype_v4hi
1943+ = build_function_type (integer_type_node,
1944+ tree_cons (NULL_TREE, V4HI_type_node,
1945+ endlink));
1946+ tree int_ftype_v2si
1947+ = build_function_type (integer_type_node,
1948+ tree_cons (NULL_TREE, V2SI_type_node,
1949+ endlink));
1950+ tree int_ftype_v8qi_int
1951+ = build_function_type (integer_type_node,
1952+ tree_cons (NULL_TREE, V8QI_type_node,
1953+ tree_cons (NULL_TREE, integer_type_node,
1954+ endlink)));
1955+ tree int_ftype_v4hi_int
1956+ = build_function_type (integer_type_node,
1957+ tree_cons (NULL_TREE, V4HI_type_node,
1958+ tree_cons (NULL_TREE, integer_type_node,
1959+ endlink)));
1960+ tree int_ftype_v2si_int
1961+ = build_function_type (integer_type_node,
1962+ tree_cons (NULL_TREE, V2SI_type_node,
1963+ tree_cons (NULL_TREE, integer_type_node,
1964+ endlink)));
1965+ tree v8qi_ftype_v8qi_int_int
1966+ = build_function_type (V8QI_type_node,
1967+ tree_cons (NULL_TREE, V8QI_type_node,
1968+ tree_cons (NULL_TREE, integer_type_node,
1969+ tree_cons (NULL_TREE,
1970+ integer_type_node,
1971+ endlink))));
1972+ tree v4hi_ftype_v4hi_int_int
1973+ = build_function_type (V4HI_type_node,
1974+ tree_cons (NULL_TREE, V4HI_type_node,
1975+ tree_cons (NULL_TREE, integer_type_node,
1976+ tree_cons (NULL_TREE,
1977+ integer_type_node,
1978+ endlink))));
1979+ tree v2si_ftype_v2si_int_int
1980+ = build_function_type (V2SI_type_node,
1981+ tree_cons (NULL_TREE, V2SI_type_node,
1982+ tree_cons (NULL_TREE, integer_type_node,
1983+ tree_cons (NULL_TREE,
1984+ integer_type_node,
1985+ endlink))));
1986+ /* Miscellaneous. */
1987+ tree v8qi_ftype_v4hi_v4hi
1988+ = build_function_type (V8QI_type_node,
1989+ tree_cons (NULL_TREE, V4HI_type_node,
1990+ tree_cons (NULL_TREE, V4HI_type_node,
1991+ endlink)));
1992+ tree v4hi_ftype_v2si_v2si
1993+ = build_function_type (V4HI_type_node,
1994+ tree_cons (NULL_TREE, V2SI_type_node,
1995+ tree_cons (NULL_TREE, V2SI_type_node,
1996+ endlink)));
1997+ tree v2si_ftype_v4hi_v4hi
1998+ = build_function_type (V2SI_type_node,
1999+ tree_cons (NULL_TREE, V4HI_type_node,
2000+ tree_cons (NULL_TREE, V4HI_type_node,
2001+ endlink)));
2002+ tree v2si_ftype_v8qi_v8qi
2003+ = build_function_type (V2SI_type_node,
2004+ tree_cons (NULL_TREE, V8QI_type_node,
2005+ tree_cons (NULL_TREE, V8QI_type_node,
2006+ endlink)));
2007+ tree v4hi_ftype_v4hi_di
2008+ = build_function_type (V4HI_type_node,
2009+ tree_cons (NULL_TREE, V4HI_type_node,
2010+ tree_cons (NULL_TREE,
2011+ long_long_integer_type_node,
2012+ endlink)));
2013+ tree v2si_ftype_v2si_di
2014+ = build_function_type (V2SI_type_node,
2015+ tree_cons (NULL_TREE, V2SI_type_node,
2016+ tree_cons (NULL_TREE,
2017+ long_long_integer_type_node,
2018+ endlink)));
2019+ tree void_ftype_int_int
2020+ = build_function_type (void_type_node,
2021+ tree_cons (NULL_TREE, integer_type_node,
2022+ tree_cons (NULL_TREE, integer_type_node,
2023+ endlink)));
2024+ tree di_ftype_void
2025+ = build_function_type (long_long_unsigned_type_node, endlink);
2026+ tree di_ftype_v8qi
2027+ = build_function_type (long_long_integer_type_node,
2028+ tree_cons (NULL_TREE, V8QI_type_node,
2029+ endlink));
2030+ tree di_ftype_v4hi
2031+ = build_function_type (long_long_integer_type_node,
2032+ tree_cons (NULL_TREE, V4HI_type_node,
2033+ endlink));
2034+ tree di_ftype_v2si
2035+ = build_function_type (long_long_integer_type_node,
2036+ tree_cons (NULL_TREE, V2SI_type_node,
2037+ endlink));
2038+ tree v2si_ftype_v4hi
2039+ = build_function_type (V2SI_type_node,
2040+ tree_cons (NULL_TREE, V4HI_type_node,
2041+ endlink));
2042+ tree v4hi_ftype_v8qi
2043+ = build_function_type (V4HI_type_node,
2044+ tree_cons (NULL_TREE, V8QI_type_node,
2045+ endlink));
2046+
2047+ tree di_ftype_di_v4hi_v4hi
2048+ = build_function_type (long_long_unsigned_type_node,
2049+ tree_cons (NULL_TREE,
2050+ long_long_unsigned_type_node,
2051+ tree_cons (NULL_TREE, V4HI_type_node,
2052+ tree_cons (NULL_TREE,
2053+ V4HI_type_node,
2054+ endlink))));
2055+
2056+ tree di_ftype_v4hi_v4hi
2057+ = build_function_type (long_long_unsigned_type_node,
2058+ tree_cons (NULL_TREE, V4HI_type_node,
2059+ tree_cons (NULL_TREE, V4HI_type_node,
2060+ endlink)));
2061+
2062+ /* Normal vector binops. */
2063+ tree v8qi_ftype_v8qi_v8qi
2064+ = build_function_type (V8QI_type_node,
2065+ tree_cons (NULL_TREE, V8QI_type_node,
2066+ tree_cons (NULL_TREE, V8QI_type_node,
2067+ endlink)));
2068+ tree v4hi_ftype_v4hi_v4hi
2069+ = build_function_type (V4HI_type_node,
2070+ tree_cons (NULL_TREE, V4HI_type_node,
2071+ tree_cons (NULL_TREE, V4HI_type_node,
2072+ endlink)));
2073+ tree v2si_ftype_v2si_v2si
2074+ = build_function_type (V2SI_type_node,
2075+ tree_cons (NULL_TREE, V2SI_type_node,
2076+ tree_cons (NULL_TREE, V2SI_type_node,
2077+ endlink)));
2078+ tree di_ftype_di_di
2079+ = build_function_type (long_long_unsigned_type_node,
2080+ tree_cons (NULL_TREE, long_long_unsigned_type_node,
2081+ tree_cons (NULL_TREE,
2082+ long_long_unsigned_type_node,
2083+ endlink)));
2084+
2085+ /* Add all builtins that are more or less simple operations on two
2086+ operands. */
2087+ for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
2088+ {
2089+ /* Use one of the operands; the target can have a different mode for
2090+ mask-generating compares. */
2091+ enum machine_mode mode;
2092+ tree type;
2093+
2094+ if (d->name == 0)
2095+ continue;
2096+
2097+ mode = insn_data[d->icode].operand[1].mode;
2098+
2099+ switch (mode)
2100+ {
2101+ case V8QImode:
2102+ type = v8qi_ftype_v8qi_v8qi;
2103+ break;
2104+ case V4HImode:
2105+ type = v4hi_ftype_v4hi_v4hi;
2106+ break;
2107+ case V2SImode:
2108+ type = v2si_ftype_v2si_v2si;
2109+ break;
2110+ case DImode:
2111+ type = di_ftype_di_di;
2112+ break;
2113+
2114+ default:
2115+ gcc_unreachable ();
2116+ }
2117+
2118+ def_mbuiltin (d->mask, d->name, type, d->code);
2119+ }
2120+
2121+ /* Add the remaining MMX insns with somewhat more complicated types. */
2122+#define iwmmx_mbuiltin(NAME, TYPE, CODE) \
2123+ def_mbuiltin (FL_IWMMXT, "__builtin_arm_" NAME, (TYPE), \
2124+ ARM_BUILTIN_ ## CODE)
2125+
2126+ iwmmx_mbuiltin ("wzero", di_ftype_void, WZERO);
2127+ iwmmx_mbuiltin ("setwcx", void_ftype_int_int, SETWCX);
2128+ iwmmx_mbuiltin ("getwcx", int_ftype_int, GETWCX);
2129+
2130+ iwmmx_mbuiltin ("wsllh", v4hi_ftype_v4hi_di, WSLLH);
2131+ iwmmx_mbuiltin ("wsllw", v2si_ftype_v2si_di, WSLLW);
2132+ iwmmx_mbuiltin ("wslld", di_ftype_di_di, WSLLD);
2133+ iwmmx_mbuiltin ("wsllhi", v4hi_ftype_v4hi_int, WSLLHI);
2134+ iwmmx_mbuiltin ("wsllwi", v2si_ftype_v2si_int, WSLLWI);
2135+ iwmmx_mbuiltin ("wslldi", di_ftype_di_int, WSLLDI);
2136+
2137+ iwmmx_mbuiltin ("wsrlh", v4hi_ftype_v4hi_di, WSRLH);
2138+ iwmmx_mbuiltin ("wsrlw", v2si_ftype_v2si_di, WSRLW);
2139+ iwmmx_mbuiltin ("wsrld", di_ftype_di_di, WSRLD);
2140+ iwmmx_mbuiltin ("wsrlhi", v4hi_ftype_v4hi_int, WSRLHI);
2141+ iwmmx_mbuiltin ("wsrlwi", v2si_ftype_v2si_int, WSRLWI);
2142+ iwmmx_mbuiltin ("wsrldi", di_ftype_di_int, WSRLDI);
2143+
2144+ iwmmx_mbuiltin ("wsrah", v4hi_ftype_v4hi_di, WSRAH);
2145+ iwmmx_mbuiltin ("wsraw", v2si_ftype_v2si_di, WSRAW);
2146+ iwmmx_mbuiltin ("wsrad", di_ftype_di_di, WSRAD);
2147+ iwmmx_mbuiltin ("wsrahi", v4hi_ftype_v4hi_int, WSRAHI);
2148+ iwmmx_mbuiltin ("wsrawi", v2si_ftype_v2si_int, WSRAWI);
2149+ iwmmx_mbuiltin ("wsradi", di_ftype_di_int, WSRADI);
2150+
2151+ iwmmx_mbuiltin ("wrorh", v4hi_ftype_v4hi_di, WRORH);
2152+ iwmmx_mbuiltin ("wrorw", v2si_ftype_v2si_di, WRORW);
2153+ iwmmx_mbuiltin ("wrord", di_ftype_di_di, WRORD);
2154+ iwmmx_mbuiltin ("wrorhi", v4hi_ftype_v4hi_int, WRORHI);
2155+ iwmmx_mbuiltin ("wrorwi", v2si_ftype_v2si_int, WRORWI);
2156+ iwmmx_mbuiltin ("wrordi", di_ftype_di_int, WRORDI);
2157+
2158+ iwmmx_mbuiltin ("wshufh", v4hi_ftype_v4hi_int, WSHUFH);
2159+
2160+ iwmmx_mbuiltin ("wsadb", v2si_ftype_v8qi_v8qi, WSADB);
2161+ iwmmx_mbuiltin ("wsadh", v2si_ftype_v4hi_v4hi, WSADH);
2162+ iwmmx_mbuiltin ("wsadbz", v2si_ftype_v8qi_v8qi, WSADBZ);
2163+ iwmmx_mbuiltin ("wsadhz", v2si_ftype_v4hi_v4hi, WSADHZ);
2164+
2165+ iwmmx_mbuiltin ("textrmsb", int_ftype_v8qi_int, TEXTRMSB);
2166+ iwmmx_mbuiltin ("textrmsh", int_ftype_v4hi_int, TEXTRMSH);
2167+ iwmmx_mbuiltin ("textrmsw", int_ftype_v2si_int, TEXTRMSW);
2168+ iwmmx_mbuiltin ("textrmub", int_ftype_v8qi_int, TEXTRMUB);
2169+ iwmmx_mbuiltin ("textrmuh", int_ftype_v4hi_int, TEXTRMUH);
2170+ iwmmx_mbuiltin ("textrmuw", int_ftype_v2si_int, TEXTRMUW);
2171+ iwmmx_mbuiltin ("tinsrb", v8qi_ftype_v8qi_int_int, TINSRB);
2172+ iwmmx_mbuiltin ("tinsrh", v4hi_ftype_v4hi_int_int, TINSRH);
2173+ iwmmx_mbuiltin ("tinsrw", v2si_ftype_v2si_int_int, TINSRW);
2174+
2175+ iwmmx_mbuiltin ("waccb", di_ftype_v8qi, WACCB);
2176+ iwmmx_mbuiltin ("wacch", di_ftype_v4hi, WACCH);
2177+ iwmmx_mbuiltin ("waccw", di_ftype_v2si, WACCW);
2178+
2179+ iwmmx_mbuiltin ("tmovmskb", int_ftype_v8qi, TMOVMSKB);
2180+ iwmmx_mbuiltin ("tmovmskh", int_ftype_v4hi, TMOVMSKH);
2181+ iwmmx_mbuiltin ("tmovmskw", int_ftype_v2si, TMOVMSKW);
2182+
2183+ iwmmx_mbuiltin ("wpackhss", v8qi_ftype_v4hi_v4hi, WPACKHSS);
2184+ iwmmx_mbuiltin ("wpackhus", v8qi_ftype_v4hi_v4hi, WPACKHUS);
2185+ iwmmx_mbuiltin ("wpackwus", v4hi_ftype_v2si_v2si, WPACKWUS);
2186+ iwmmx_mbuiltin ("wpackwss", v4hi_ftype_v2si_v2si, WPACKWSS);
2187+ iwmmx_mbuiltin ("wpackdus", v2si_ftype_di_di, WPACKDUS);
2188+ iwmmx_mbuiltin ("wpackdss", v2si_ftype_di_di, WPACKDSS);
2189+
2190+ iwmmx_mbuiltin ("wunpckehub", v4hi_ftype_v8qi, WUNPCKEHUB);
2191+ iwmmx_mbuiltin ("wunpckehuh", v2si_ftype_v4hi, WUNPCKEHUH);
2192+ iwmmx_mbuiltin ("wunpckehuw", di_ftype_v2si, WUNPCKEHUW);
2193+ iwmmx_mbuiltin ("wunpckehsb", v4hi_ftype_v8qi, WUNPCKEHSB);
2194+ iwmmx_mbuiltin ("wunpckehsh", v2si_ftype_v4hi, WUNPCKEHSH);
2195+ iwmmx_mbuiltin ("wunpckehsw", di_ftype_v2si, WUNPCKEHSW);
2196+ iwmmx_mbuiltin ("wunpckelub", v4hi_ftype_v8qi, WUNPCKELUB);
2197+ iwmmx_mbuiltin ("wunpckeluh", v2si_ftype_v4hi, WUNPCKELUH);
2198+ iwmmx_mbuiltin ("wunpckeluw", di_ftype_v2si, WUNPCKELUW);
2199+ iwmmx_mbuiltin ("wunpckelsb", v4hi_ftype_v8qi, WUNPCKELSB);
2200+ iwmmx_mbuiltin ("wunpckelsh", v2si_ftype_v4hi, WUNPCKELSH);
2201+ iwmmx_mbuiltin ("wunpckelsw", di_ftype_v2si, WUNPCKELSW);
2202+
2203+ iwmmx_mbuiltin ("wmacs", di_ftype_di_v4hi_v4hi, WMACS);
2204+ iwmmx_mbuiltin ("wmacsz", di_ftype_v4hi_v4hi, WMACSZ);
2205+ iwmmx_mbuiltin ("wmacu", di_ftype_di_v4hi_v4hi, WMACU);
2206+ iwmmx_mbuiltin ("wmacuz", di_ftype_v4hi_v4hi, WMACUZ);
2207+
2208+ iwmmx_mbuiltin ("walign", v8qi_ftype_v8qi_v8qi_int, WALIGN);
2209+ iwmmx_mbuiltin ("tmia", di_ftype_di_int_int, TMIA);
2210+ iwmmx_mbuiltin ("tmiaph", di_ftype_di_int_int, TMIAPH);
2211+ iwmmx_mbuiltin ("tmiabb", di_ftype_di_int_int, TMIABB);
2212+ iwmmx_mbuiltin ("tmiabt", di_ftype_di_int_int, TMIABT);
2213+ iwmmx_mbuiltin ("tmiatb", di_ftype_di_int_int, TMIATB);
2214+ iwmmx_mbuiltin ("tmiatt", di_ftype_di_int_int, TMIATT);
2215+
2216+#undef iwmmx_mbuiltin
2217+}
2218+
2219+static void
2220+arm_init_tls_builtins (void)
2221+{
2222+ tree ftype, decl;
2223+
2224+ ftype = build_function_type (ptr_type_node, void_list_node);
2225+ decl = add_builtin_function ("__builtin_thread_pointer", ftype,
2226+ ARM_BUILTIN_THREAD_POINTER, BUILT_IN_MD,
2227+ NULL, NULL_TREE);
2228+ TREE_NOTHROW (decl) = 1;
2229+ TREE_READONLY (decl) = 1;
2230+ arm_builtin_decls[ARM_BUILTIN_THREAD_POINTER] = decl;
2231 }
2232
2233 static void
2234@@ -19451,6 +19634,17 @@
2235 arm_init_fp16_builtins ();
2236 }
2237
2238+/* Return the ARM builtin for CODE. */
2239+
2240+static tree
2241+arm_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
2242+{
2243+ if (code >= ARM_BUILTIN_MAX)
2244+ return error_mark_node;
2245+
2246+ return arm_builtin_decls[code];
2247+}
2248+
2249 /* Implement TARGET_INVALID_PARAMETER_TYPE. */
2250
2251 static const char *
2252@@ -19602,58 +19796,6 @@
2253 return target;
2254 }
2255
2256-static int
2257-neon_builtin_compare (const void *a, const void *b)
2258-{
2259- const neon_builtin_datum *const key = (const neon_builtin_datum *) a;
2260- const neon_builtin_datum *const memb = (const neon_builtin_datum *) b;
2261- unsigned int soughtcode = key->base_fcode;
2262-
2263- if (soughtcode >= memb->base_fcode
2264- && soughtcode < memb->base_fcode + memb->num_vars)
2265- return 0;
2266- else if (soughtcode < memb->base_fcode)
2267- return -1;
2268- else
2269- return 1;
2270-}
2271-
2272-static enum insn_code
2273-locate_neon_builtin_icode (int fcode, neon_itype *itype,
2274- enum neon_builtin_type_bits *type_bit)
2275-{
2276- neon_builtin_datum key
2277- = { NULL, (neon_itype) 0, 0, { CODE_FOR_nothing }, 0, 0 };
2278- neon_builtin_datum *found;
2279- int idx, type, ntypes;
2280-
2281- key.base_fcode = fcode;
2282- found = (neon_builtin_datum *)
2283- bsearch (&key, &neon_builtin_data[0], ARRAY_SIZE (neon_builtin_data),
2284- sizeof (neon_builtin_data[0]), neon_builtin_compare);
2285- gcc_assert (found);
2286- idx = fcode - (int) found->base_fcode;
2287- gcc_assert (idx >= 0 && idx < T_MAX && idx < (int)found->num_vars);
2288-
2289- if (itype)
2290- *itype = found->itype;
2291-
2292- if (type_bit)
2293- {
2294- ntypes = 0;
2295- for (type = 0; type < T_MAX; type++)
2296- if (found->bits & (1 << type))
2297- {
2298- if (ntypes == idx)
2299- break;
2300- ntypes++;
2301- }
2302- gcc_assert (type < T_MAX);
2303- *type_bit = (enum neon_builtin_type_bits) (1 << type);
2304- }
2305- return found->codes[idx];
2306-}
2307-
2308 typedef enum {
2309 NEON_ARG_COPY_TO_REG,
2310 NEON_ARG_CONSTANT,
2311@@ -19667,14 +19809,14 @@
2312 and return an expression for the accessed memory.
2313
2314 The intrinsic function operates on a block of registers that has
2315- mode REG_MODE. This block contains vectors of type TYPE_BIT.
2316+ mode REG_MODE. This block contains vectors of type TYPE_MODE.
2317 The function references the memory at EXP in mode MEM_MODE;
2318 this mode may be BLKmode if no more suitable mode is available. */
2319
2320 static tree
2321 neon_dereference_pointer (tree exp, enum machine_mode mem_mode,
2322 enum machine_mode reg_mode,
2323- enum neon_builtin_type_bits type_bit)
2324+ neon_builtin_type_mode type_mode)
2325 {
2326 HOST_WIDE_INT reg_size, vector_size, nvectors, nelems;
2327 tree elem_type, upper_bound, array_type;
2328@@ -19683,8 +19825,8 @@
2329 reg_size = GET_MODE_SIZE (reg_mode);
2330
2331 /* Work out the size of each vector in bytes. */
2332- gcc_assert (type_bit & (T_DREG | T_QREG));
2333- vector_size = (type_bit & T_QREG ? 16 : 8);
2334+ gcc_assert (TYPE_MODE_BIT (type_mode) & (TB_DREG | TB_QREG));
2335+ vector_size = (TYPE_MODE_BIT (type_mode) & TB_QREG ? 16 : 8);
2336
2337 /* Work out how many vectors there are. */
2338 gcc_assert (reg_size % vector_size == 0);
2339@@ -19715,7 +19857,7 @@
2340 /* Expand a Neon builtin. */
2341 static rtx
2342 arm_expand_neon_args (rtx target, int icode, int have_retval,
2343- enum neon_builtin_type_bits type_bit,
2344+ neon_builtin_type_mode type_mode,
2345 tree exp, ...)
2346 {
2347 va_list ap;
2348@@ -19751,7 +19893,7 @@
2349 {
2350 other_mode = insn_data[icode].operand[1 - opno].mode;
2351 arg[argc] = neon_dereference_pointer (arg[argc], mode[argc],
2352- other_mode, type_bit);
2353+ other_mode, type_mode);
2354 }
2355 op[argc] = expand_normal (arg[argc]);
2356
2357@@ -19861,16 +20003,17 @@
2358 static rtx
2359 arm_expand_neon_builtin (int fcode, tree exp, rtx target)
2360 {
2361- neon_itype itype;
2362- enum neon_builtin_type_bits type_bit;
2363- enum insn_code icode = locate_neon_builtin_icode (fcode, &itype, &type_bit);
2364+ neon_builtin_datum *d = &neon_builtin_data[fcode - ARM_BUILTIN_NEON_BASE];
2365+ neon_itype itype = d->itype;
2366+ enum insn_code icode = d->code;
2367+ neon_builtin_type_mode type_mode = d->mode;
2368
2369 switch (itype)
2370 {
2371 case NEON_UNOP:
2372 case NEON_CONVERT:
2373 case NEON_DUPLANE:
2374- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2375+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2376 NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT, NEON_ARG_STOP);
2377
2378 case NEON_BINOP:
2379@@ -19880,89 +20023,89 @@
2380 case NEON_SCALARMULH:
2381 case NEON_SHIFTINSERT:
2382 case NEON_LOGICBINOP:
2383- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2384+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2385 NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
2386 NEON_ARG_STOP);
2387
2388 case NEON_TERNOP:
2389- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2390+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2391 NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
2392 NEON_ARG_CONSTANT, NEON_ARG_STOP);
2393
2394 case NEON_GETLANE:
2395 case NEON_FIXCONV:
2396 case NEON_SHIFTIMM:
2397- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2398+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2399 NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT, NEON_ARG_CONSTANT,
2400 NEON_ARG_STOP);
2401
2402 case NEON_CREATE:
2403- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2404+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2405 NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
2406
2407 case NEON_DUP:
2408 case NEON_SPLIT:
2409 case NEON_REINTERP:
2410- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2411+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2412 NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
2413
2414 case NEON_COMBINE:
2415 case NEON_VTBL:
2416- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2417+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2418 NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
2419
2420 case NEON_RESULTPAIR:
2421- return arm_expand_neon_args (target, icode, 0, type_bit, exp,
2422+ return arm_expand_neon_args (target, icode, 0, type_mode, exp,
2423 NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
2424 NEON_ARG_STOP);
2425
2426 case NEON_LANEMUL:
2427 case NEON_LANEMULL:
2428 case NEON_LANEMULH:
2429- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2430+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2431 NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
2432 NEON_ARG_CONSTANT, NEON_ARG_STOP);
2433
2434 case NEON_LANEMAC:
2435- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2436+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2437 NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
2438 NEON_ARG_CONSTANT, NEON_ARG_CONSTANT, NEON_ARG_STOP);
2439
2440 case NEON_SHIFTACC:
2441- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2442+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2443 NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
2444 NEON_ARG_CONSTANT, NEON_ARG_STOP);
2445
2446 case NEON_SCALARMAC:
2447- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2448+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2449 NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
2450 NEON_ARG_CONSTANT, NEON_ARG_STOP);
2451
2452 case NEON_SELECT:
2453 case NEON_VTBX:
2454- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2455+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2456 NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG, NEON_ARG_COPY_TO_REG,
2457 NEON_ARG_STOP);
2458
2459 case NEON_LOAD1:
2460 case NEON_LOADSTRUCT:
2461- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2462+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2463 NEON_ARG_MEMORY, NEON_ARG_STOP);
2464
2465 case NEON_LOAD1LANE:
2466 case NEON_LOADSTRUCTLANE:
2467- return arm_expand_neon_args (target, icode, 1, type_bit, exp,
2468+ return arm_expand_neon_args (target, icode, 1, type_mode, exp,
2469 NEON_ARG_MEMORY, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
2470 NEON_ARG_STOP);
2471
2472 case NEON_STORE1:
2473 case NEON_STORESTRUCT:
2474- return arm_expand_neon_args (target, icode, 0, type_bit, exp,
2475+ return arm_expand_neon_args (target, icode, 0, type_mode, exp,
2476 NEON_ARG_MEMORY, NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
2477
2478 case NEON_STORE1LANE:
2479 case NEON_STORESTRUCTLANE:
2480- return arm_expand_neon_args (target, icode, 0, type_bit, exp,
2481+ return arm_expand_neon_args (target, icode, 0, type_mode, exp,
2482 NEON_ARG_MEMORY, NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT,
2483 NEON_ARG_STOP);
2484 }
2485
2486=== modified file 'gcc/config/arm/arm.h'
2487--- gcc/config/arm/arm.h 2011-06-14 14:53:07 +0000
2488+++ gcc/config/arm/arm.h 2011-08-10 14:14:10 +0000
2489@@ -2267,178 +2267,6 @@
2490 : arm_gen_return_addr_mask ())
2491
2492
2493
2494-/* Neon defines builtins from ARM_BUILTIN_MAX upwards, though they don't have
2495- symbolic names defined here (which would require too much duplication).
2496- FIXME? */
2497-enum arm_builtins
2498-{
2499- ARM_BUILTIN_GETWCX,
2500- ARM_BUILTIN_SETWCX,
2501-
2502- ARM_BUILTIN_WZERO,
2503-
2504- ARM_BUILTIN_WAVG2BR,
2505- ARM_BUILTIN_WAVG2HR,
2506- ARM_BUILTIN_WAVG2B,
2507- ARM_BUILTIN_WAVG2H,
2508-
2509- ARM_BUILTIN_WACCB,
2510- ARM_BUILTIN_WACCH,
2511- ARM_BUILTIN_WACCW,
2512-
2513- ARM_BUILTIN_WMACS,
2514- ARM_BUILTIN_WMACSZ,
2515- ARM_BUILTIN_WMACU,
2516- ARM_BUILTIN_WMACUZ,
2517-
2518- ARM_BUILTIN_WSADB,
2519- ARM_BUILTIN_WSADBZ,
2520- ARM_BUILTIN_WSADH,
2521- ARM_BUILTIN_WSADHZ,
2522-
2523- ARM_BUILTIN_WALIGN,
2524-
2525- ARM_BUILTIN_TMIA,
2526- ARM_BUILTIN_TMIAPH,
2527- ARM_BUILTIN_TMIABB,
2528- ARM_BUILTIN_TMIABT,
2529- ARM_BUILTIN_TMIATB,
2530- ARM_BUILTIN_TMIATT,
2531-
2532- ARM_BUILTIN_TMOVMSKB,
2533- ARM_BUILTIN_TMOVMSKH,
2534- ARM_BUILTIN_TMOVMSKW,
2535-
2536- ARM_BUILTIN_TBCSTB,
2537- ARM_BUILTIN_TBCSTH,
2538- ARM_BUILTIN_TBCSTW,
2539-
2540- ARM_BUILTIN_WMADDS,
2541- ARM_BUILTIN_WMADDU,
2542-
2543- ARM_BUILTIN_WPACKHSS,
2544- ARM_BUILTIN_WPACKWSS,
2545- ARM_BUILTIN_WPACKDSS,
2546- ARM_BUILTIN_WPACKHUS,
2547- ARM_BUILTIN_WPACKWUS,
2548- ARM_BUILTIN_WPACKDUS,
2549-
2550- ARM_BUILTIN_WADDB,
2551- ARM_BUILTIN_WADDH,
2552- ARM_BUILTIN_WADDW,
2553- ARM_BUILTIN_WADDSSB,
2554- ARM_BUILTIN_WADDSSH,
2555- ARM_BUILTIN_WADDSSW,
2556- ARM_BUILTIN_WADDUSB,
2557- ARM_BUILTIN_WADDUSH,
2558- ARM_BUILTIN_WADDUSW,
2559- ARM_BUILTIN_WSUBB,
2560- ARM_BUILTIN_WSUBH,
2561- ARM_BUILTIN_WSUBW,
2562- ARM_BUILTIN_WSUBSSB,
2563- ARM_BUILTIN_WSUBSSH,
2564- ARM_BUILTIN_WSUBSSW,
2565- ARM_BUILTIN_WSUBUSB,
2566- ARM_BUILTIN_WSUBUSH,
2567- ARM_BUILTIN_WSUBUSW,
2568-
2569- ARM_BUILTIN_WAND,
2570- ARM_BUILTIN_WANDN,
2571- ARM_BUILTIN_WOR,
2572- ARM_BUILTIN_WXOR,
2573-
2574- ARM_BUILTIN_WCMPEQB,
2575- ARM_BUILTIN_WCMPEQH,
2576- ARM_BUILTIN_WCMPEQW,
2577- ARM_BUILTIN_WCMPGTUB,
2578- ARM_BUILTIN_WCMPGTUH,
2579- ARM_BUILTIN_WCMPGTUW,
2580- ARM_BUILTIN_WCMPGTSB,
2581- ARM_BUILTIN_WCMPGTSH,
2582- ARM_BUILTIN_WCMPGTSW,
2583-
2584- ARM_BUILTIN_TEXTRMSB,
2585- ARM_BUILTIN_TEXTRMSH,
2586- ARM_BUILTIN_TEXTRMSW,
2587- ARM_BUILTIN_TEXTRMUB,
2588- ARM_BUILTIN_TEXTRMUH,
2589- ARM_BUILTIN_TEXTRMUW,
2590- ARM_BUILTIN_TINSRB,
2591- ARM_BUILTIN_TINSRH,
2592- ARM_BUILTIN_TINSRW,
2593-
2594- ARM_BUILTIN_WMAXSW,
2595- ARM_BUILTIN_WMAXSH,
2596- ARM_BUILTIN_WMAXSB,
2597- ARM_BUILTIN_WMAXUW,
2598- ARM_BUILTIN_WMAXUH,
2599- ARM_BUILTIN_WMAXUB,
2600- ARM_BUILTIN_WMINSW,
2601- ARM_BUILTIN_WMINSH,
2602- ARM_BUILTIN_WMINSB,
2603- ARM_BUILTIN_WMINUW,
2604- ARM_BUILTIN_WMINUH,
2605- ARM_BUILTIN_WMINUB,
2606-
2607- ARM_BUILTIN_WMULUM,
2608- ARM_BUILTIN_WMULSM,
2609- ARM_BUILTIN_WMULUL,
2610-
2611- ARM_BUILTIN_PSADBH,
2612- ARM_BUILTIN_WSHUFH,
2613-
2614- ARM_BUILTIN_WSLLH,
2615- ARM_BUILTIN_WSLLW,
2616- ARM_BUILTIN_WSLLD,
2617- ARM_BUILTIN_WSRAH,
2618- ARM_BUILTIN_WSRAW,
2619- ARM_BUILTIN_WSRAD,
2620- ARM_BUILTIN_WSRLH,
2621- ARM_BUILTIN_WSRLW,
2622- ARM_BUILTIN_WSRLD,
2623- ARM_BUILTIN_WRORH,
2624- ARM_BUILTIN_WRORW,
2625- ARM_BUILTIN_WRORD,
2626- ARM_BUILTIN_WSLLHI,
2627- ARM_BUILTIN_WSLLWI,
2628- ARM_BUILTIN_WSLLDI,
2629- ARM_BUILTIN_WSRAHI,
2630- ARM_BUILTIN_WSRAWI,
2631- ARM_BUILTIN_WSRADI,
2632- ARM_BUILTIN_WSRLHI,
2633- ARM_BUILTIN_WSRLWI,
2634- ARM_BUILTIN_WSRLDI,
2635- ARM_BUILTIN_WRORHI,
2636- ARM_BUILTIN_WRORWI,
2637- ARM_BUILTIN_WRORDI,
2638-
2639- ARM_BUILTIN_WUNPCKIHB,
2640- ARM_BUILTIN_WUNPCKIHH,
2641- ARM_BUILTIN_WUNPCKIHW,
2642- ARM_BUILTIN_WUNPCKILB,
2643- ARM_BUILTIN_WUNPCKILH,
2644- ARM_BUILTIN_WUNPCKILW,
2645-
2646- ARM_BUILTIN_WUNPCKEHSB,
2647- ARM_BUILTIN_WUNPCKEHSH,
2648- ARM_BUILTIN_WUNPCKEHSW,
2649- ARM_BUILTIN_WUNPCKEHUB,
2650- ARM_BUILTIN_WUNPCKEHUH,
2651- ARM_BUILTIN_WUNPCKEHUW,
2652- ARM_BUILTIN_WUNPCKELSB,
2653- ARM_BUILTIN_WUNPCKELSH,
2654- ARM_BUILTIN_WUNPCKELSW,
2655- ARM_BUILTIN_WUNPCKELUB,
2656- ARM_BUILTIN_WUNPCKELUH,
2657- ARM_BUILTIN_WUNPCKELUW,
2658-
2659- ARM_BUILTIN_THREAD_POINTER,
2660-
2661- ARM_BUILTIN_NEON_BASE,
2662-
2663- ARM_BUILTIN_MAX = ARM_BUILTIN_NEON_BASE /* FIXME: Wrong! */
2664-};
2665-
2666 /* Do not emit .note.GNU-stack by default. */
2667 #ifndef NEED_INDICATE_EXEC_STACK
2668 #define NEED_INDICATE_EXEC_STACK 0
2669
2670=== modified file 'gcc/config/arm/vfp.md'
2671--- gcc/config/arm/vfp.md 2011-01-20 22:03:29 +0000
2672+++ gcc/config/arm/vfp.md 2011-08-10 14:14:10 +0000
2673@@ -401,8 +401,8 @@
2674 ;; DFmode moves
2675
2676 (define_insn "*movdf_vfp"
2677- [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w ,Uv,w,r")
2678- (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,mF,r,UvF,w, w,r"))]
2679+ [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w ,Uv,r, m,w,r")
2680+ (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,UvF,w ,mF,r,w,r"))]
2681 "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
2682 && ( register_operand (operands[0], DFmode)
2683 || register_operand (operands[1], DFmode))"
2684@@ -418,9 +418,9 @@
2685 gcc_assert (TARGET_VFP_DOUBLE);
2686 return \"fconstd%?\\t%P0, #%G1\";
2687 case 3: case 4:
2688+ return output_move_vfp (operands);
2689+ case 5: case 6:
2690 return output_move_double (operands);
2691- case 5: case 6:
2692- return output_move_vfp (operands);
2693 case 7:
2694 if (TARGET_VFP_SINGLE)
2695 return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\";
2696@@ -435,7 +435,7 @@
2697 "
2698 [(set_attr "type"
2699 "r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*")
2700- (set (attr "length") (cond [(eq_attr "alternative" "3,4,8") (const_int 8)
2701+ (set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
2702 (eq_attr "alternative" "7")
2703 (if_then_else
2704 (eq (symbol_ref "TARGET_VFP_SINGLE")
2705@@ -449,8 +449,8 @@
2706 )
2707
2708 (define_insn "*thumb2_movdf_vfp"
2709- [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w ,Uv,w,r")
2710- (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,mF,r,UvF,w, w,r"))]
2711+ [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w ,Uv,r ,m,w,r")
2712+ (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,UvF,w, mF,r, w,r"))]
2713 "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP"
2714 "*
2715 {
2716@@ -463,10 +463,10 @@
2717 case 2:
2718 gcc_assert (TARGET_VFP_DOUBLE);
2719 return \"fconstd%?\\t%P0, #%G1\";
2720- case 3: case 4: case 8:
2721+ case 3: case 4:
2722+ return output_move_vfp (operands);
2723+ case 5: case 6: case 8:
2724 return output_move_double (operands);
2725- case 5: case 6:
2726- return output_move_vfp (operands);
2727 case 7:
2728 if (TARGET_VFP_SINGLE)
2729 return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\";
2730@@ -478,8 +478,8 @@
2731 }
2732 "
2733 [(set_attr "type"
2734- "r_2_f,f_2_r,fconstd,load2,store2,f_loadd,f_stored,ffarithd,*")
2735- (set (attr "length") (cond [(eq_attr "alternative" "3,4,8") (const_int 8)
2736+ "r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*")
2737+ (set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
2738 (eq_attr "alternative" "7")
2739 (if_then_else
2740 (eq (symbol_ref "TARGET_VFP_SINGLE")
2741@@ -487,8 +487,8 @@
2742 (const_int 8)
2743 (const_int 4))]
2744 (const_int 4)))
2745- (set_attr "pool_range" "*,*,*,4096,*,1020,*,*,*")
2746- (set_attr "neg_pool_range" "*,*,*,0,*,1008,*,*,*")]
2747+ (set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*")
2748+ (set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
2749 )
2750
2751

Subscribers

People subscribed via source and target branches