summaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99351.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99351.patch')
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99351.patch548
1 files changed, 548 insertions, 0 deletions
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99351.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99351.patch
new file mode 100644
index 0000000000..aa3b3eb85f
--- /dev/null
+++ b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99351.patch
@@ -0,0 +1,548 @@
12010-07-26 Julian Brown <julian@codesourcery.com>
2
3 Merge from Sourcery G++ 4.4:
4
5 Jie Zhang <jie@codesourcery.com>
6 Issue #7122
7
8 gcc/
9 * config/arm/arm.c (arm_rtx_costs_1): Adjust cost for
10 CONST_VECTOR.
11 (arm_size_rtx_costs): Likewise.
12 (thumb2_size_rtx_costs): Likewise.
13 (neon_valid_immediate): Add a case for double 0.0.
14
15 gcc/testsuite/
16 * gcc.target/arm/neon-vdup-1.c: New test case.
17 * gcc.target/arm/neon-vdup-2.c: New test case.
18 * gcc.target/arm/neon-vdup-3.c: New test case.
19 * gcc.target/arm/neon-vdup-4.c: New test case.
20 * gcc.target/arm/neon-vdup-5.c: New test case.
21 * gcc.target/arm/neon-vdup-6.c: New test case.
22 * gcc.target/arm/neon-vdup-7.c: New test case.
23 * gcc.target/arm/neon-vdup-8.c: New test case.
24 * gcc.target/arm/neon-vdup-9.c: New test case.
25 * gcc.target/arm/neon-vdup-10.c: New test case.
26 * gcc.target/arm/neon-vdup-11.c: New test case.
27 * gcc.target/arm/neon-vdup-12.c: New test case.
28 * gcc.target/arm/neon-vdup-13.c: New test case.
29 * gcc.target/arm/neon-vdup-14.c: New test case.
30 * gcc.target/arm/neon-vdup-15.c: New test case.
31 * gcc.target/arm/neon-vdup-16.c: New test case.
32 * gcc.target/arm/neon-vdup-17.c: New test case.
33 * gcc.target/arm/neon-vdup-18.c: New test case.
34 * gcc.target/arm/neon-vdup-19.c: New test case.
35
36
37=== modified file 'gcc/config/arm/arm.c'
38--- old/gcc/config/arm/arm.c 2010-08-13 10:55:28 +0000
39+++ new/gcc/config/arm/arm.c 2010-08-13 11:02:47 +0000
40@@ -7061,6 +7061,17 @@
41 *total = COSTS_N_INSNS (4);
42 return true;
43
44+ case CONST_VECTOR:
45+ if (TARGET_NEON
46+ && TARGET_HARD_FLOAT
47+ && outer == SET
48+ && (VALID_NEON_DREG_MODE (mode) || VALID_NEON_QREG_MODE (mode))
49+ && neon_immediate_valid_for_move (x, mode, NULL, NULL))
50+ *total = COSTS_N_INSNS (1);
51+ else
52+ *total = COSTS_N_INSNS (4);
53+ return true;
54+
55 default:
56 *total = COSTS_N_INSNS (4);
57 return false;
58@@ -7301,6 +7312,17 @@
59 *total = COSTS_N_INSNS (4);
60 return true;
61
62+ case CONST_VECTOR:
63+ if (TARGET_NEON
64+ && TARGET_HARD_FLOAT
65+ && outer_code == SET
66+ && (VALID_NEON_DREG_MODE (mode) || VALID_NEON_QREG_MODE (mode))
67+ && neon_immediate_valid_for_move (x, mode, NULL, NULL))
68+ *total = COSTS_N_INSNS (1);
69+ else
70+ *total = COSTS_N_INSNS (4);
71+ return true;
72+
73 case HIGH:
74 case LO_SUM:
75 /* We prefer constant pool entries to MOVW/MOVT pairs, so bump the
76@@ -7647,6 +7669,17 @@
77 *total = COSTS_WIDE_INSNS (4);
78 return true;
79
80+ case CONST_VECTOR:
81+ if (TARGET_NEON
82+ && TARGET_HARD_FLOAT
83+ && outer_code == SET
84+ && (VALID_NEON_DREG_MODE (mode) || VALID_NEON_QREG_MODE (mode))
85+ && neon_immediate_valid_for_move (x, mode, NULL, NULL))
86+ *total = COSTS_WIDE_INSNS (1);
87+ else
88+ *total = COSTS_WIDE_INSNS (4);
89+ return true;
90+
91 case HIGH:
92 case LO_SUM:
93 /* We prefer constant pool entries to MOVW/MOVT pairs, so bump the
94@@ -8315,11 +8348,14 @@
95 vmov i64 17 aaaaaaaa bbbbbbbb cccccccc dddddddd
96 eeeeeeee ffffffff gggggggg hhhhhhhh
97 vmov f32 18 aBbbbbbc defgh000 00000000 00000000
98+ vmov f32 19 00000000 00000000 00000000 00000000
99
100 For case 18, B = !b. Representable values are exactly those accepted by
101 vfp3_const_double_index, but are output as floating-point numbers rather
102 than indices.
103
104+ For case 19, we will change it to vmov.i32 when assembling.
105+
106 Variants 0-5 (inclusive) may also be used as immediates for the second
107 operand of VORR/VBIC instructions.
108
109@@ -8362,7 +8398,7 @@
110 rtx el0 = CONST_VECTOR_ELT (op, 0);
111 REAL_VALUE_TYPE r0;
112
113- if (!vfp3_const_double_rtx (el0))
114+ if (!vfp3_const_double_rtx (el0) && el0 != CONST0_RTX (GET_MODE (el0)))
115 return -1;
116
117 REAL_VALUE_FROM_CONST_DOUBLE (r0, el0);
118@@ -8384,7 +8420,10 @@
119 if (elementwidth)
120 *elementwidth = 0;
121
122- return 18;
123+ if (el0 == CONST0_RTX (GET_MODE (el0)))
124+ return 19;
125+ else
126+ return 18;
127 }
128
129 /* Splat vector constant out into a byte vector. */
130
131=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-1.c'
132--- old/gcc/testsuite/gcc.target/arm/neon-vdup-1.c 1970-01-01 00:00:00 +0000
133+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-1.c 2010-08-13 11:02:47 +0000
134@@ -0,0 +1,17 @@
135+/* Test the optimization of `vdupq_n_f32' ARM Neon intrinsic. */
136+
137+/* { dg-do compile } */
138+/* { dg-require-effective-target arm_neon_ok } */
139+/* { dg-options "-O2" } */
140+/* { dg-add-options arm_neon } */
141+
142+#include <arm_neon.h>
143+
144+float32x4_t out_float32x4_t;
145+void test_vdupq_nf32 (void)
146+{
147+ out_float32x4_t = vdupq_n_f32 (0.0);
148+}
149+
150+/* { dg-final { scan-assembler "vmov\.f32\[ \]+\[qQ\]\[0-9\]+, #0\.0\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
151+/* { dg-final { cleanup-saved-temps } } */
152
153=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-10.c'
154--- old/gcc/testsuite/gcc.target/arm/neon-vdup-10.c 1970-01-01 00:00:00 +0000
155+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-10.c 2010-08-13 11:02:47 +0000
156@@ -0,0 +1,17 @@
157+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
158+
159+/* { dg-do compile } */
160+/* { dg-require-effective-target arm_neon_ok } */
161+/* { dg-options "-O2" } */
162+/* { dg-add-options arm_neon } */
163+
164+#include <arm_neon.h>
165+
166+uint32x4_t out_uint32x4_t;
167+void test_vdupq_nu32 (void)
168+{
169+ out_uint32x4_t = vdupq_n_u32 (~0x12000000);
170+}
171+
172+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #3992977407\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
173+/* { dg-final { cleanup-saved-temps } } */
174
175=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-11.c'
176--- old/gcc/testsuite/gcc.target/arm/neon-vdup-11.c 1970-01-01 00:00:00 +0000
177+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-11.c 2010-08-13 11:02:47 +0000
178@@ -0,0 +1,17 @@
179+/* Test the optimization of `vdupq_n_u16' ARM Neon intrinsic. */
180+
181+/* { dg-do compile } */
182+/* { dg-require-effective-target arm_neon_ok } */
183+/* { dg-options "-O2" } */
184+/* { dg-add-options arm_neon } */
185+
186+#include <arm_neon.h>
187+
188+uint16x8_t out_uint16x8_t;
189+void test_vdupq_nu16 (void)
190+{
191+ out_uint16x8_t = vdupq_n_u16 (0x12);
192+}
193+
194+/* { dg-final { scan-assembler "vmov\.i16\[ \]+\[qQ\]\[0-9\]+, #18\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
195+/* { dg-final { cleanup-saved-temps } } */
196
197=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-12.c'
198--- old/gcc/testsuite/gcc.target/arm/neon-vdup-12.c 1970-01-01 00:00:00 +0000
199+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-12.c 2010-08-13 11:02:47 +0000
200@@ -0,0 +1,17 @@
201+/* Test the optimization of `vdupq_n_u16' ARM Neon intrinsic. */
202+
203+/* { dg-do compile } */
204+/* { dg-require-effective-target arm_neon_ok } */
205+/* { dg-options "-O2" } */
206+/* { dg-add-options arm_neon } */
207+
208+#include <arm_neon.h>
209+
210+uint16x8_t out_uint16x8_t;
211+void test_vdupq_nu16 (void)
212+{
213+ out_uint16x8_t = vdupq_n_u16 (0x1200);
214+}
215+
216+/* { dg-final { scan-assembler "vmov\.i16\[ \]+\[qQ\]\[0-9\]+, #4608\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
217+/* { dg-final { cleanup-saved-temps } } */
218
219=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-13.c'
220--- old/gcc/testsuite/gcc.target/arm/neon-vdup-13.c 1970-01-01 00:00:00 +0000
221+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-13.c 2010-08-13 11:02:47 +0000
222@@ -0,0 +1,17 @@
223+/* Test the optimization of `vdupq_n_u16' ARM Neon intrinsic. */
224+
225+/* { dg-do compile } */
226+/* { dg-require-effective-target arm_neon_ok } */
227+/* { dg-options "-O2" } */
228+/* { dg-add-options arm_neon } */
229+
230+#include <arm_neon.h>
231+
232+uint16x8_t out_uint16x8_t;
233+void test_vdupq_nu16 (void)
234+{
235+ out_uint16x8_t = vdupq_n_u16 (~0x12);
236+}
237+
238+/* { dg-final { scan-assembler "vmov\.i16\[ \]+\[qQ\]\[0-9\]+, #65517\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
239+/* { dg-final { cleanup-saved-temps } } */
240
241=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-14.c'
242--- old/gcc/testsuite/gcc.target/arm/neon-vdup-14.c 1970-01-01 00:00:00 +0000
243+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-14.c 2010-08-13 11:02:47 +0000
244@@ -0,0 +1,17 @@
245+/* Test the optimization of `vdupq_n_u16' ARM Neon intrinsic. */
246+
247+/* { dg-do compile } */
248+/* { dg-require-effective-target arm_neon_ok } */
249+/* { dg-options "-O2" } */
250+/* { dg-add-options arm_neon } */
251+
252+#include <arm_neon.h>
253+
254+uint16x8_t out_uint16x8_t;
255+void test_vdupq_nu16 (void)
256+{
257+ out_uint16x8_t = vdupq_n_u16 (~0x1200);
258+}
259+
260+/* { dg-final { scan-assembler "vmov\.i16\[ \]+\[qQ\]\[0-9\]+, #60927\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
261+/* { dg-final { cleanup-saved-temps } } */
262
263=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-15.c'
264--- old/gcc/testsuite/gcc.target/arm/neon-vdup-15.c 1970-01-01 00:00:00 +0000
265+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-15.c 2010-08-13 11:02:47 +0000
266@@ -0,0 +1,17 @@
267+/* Test the optimization of `vdupq_n_u8' ARM Neon intrinsic. */
268+
269+/* { dg-do compile } */
270+/* { dg-require-effective-target arm_neon_ok } */
271+/* { dg-options "-O2" } */
272+/* { dg-add-options arm_neon } */
273+
274+#include <arm_neon.h>
275+
276+uint8x16_t out_uint8x16_t;
277+void test_vdupq_nu8 (void)
278+{
279+ out_uint8x16_t = vdupq_n_u8 (0x12);
280+}
281+
282+/* { dg-final { scan-assembler "vmov\.i8\[ \]+\[qQ\]\[0-9\]+, #18\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
283+/* { dg-final { cleanup-saved-temps } } */
284
285=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-16.c'
286--- old/gcc/testsuite/gcc.target/arm/neon-vdup-16.c 1970-01-01 00:00:00 +0000
287+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-16.c 2010-08-13 11:02:47 +0000
288@@ -0,0 +1,17 @@
289+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
290+
291+/* { dg-do compile } */
292+/* { dg-require-effective-target arm_neon_ok } */
293+/* { dg-options "-O2" } */
294+/* { dg-add-options arm_neon } */
295+
296+#include <arm_neon.h>
297+
298+uint32x4_t out_uint32x4_t;
299+void test_vdupq_nu32 (void)
300+{
301+ out_uint32x4_t = vdupq_n_u32 (0x12ff);
302+}
303+
304+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #4863\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
305+/* { dg-final { cleanup-saved-temps } } */
306
307=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-17.c'
308--- old/gcc/testsuite/gcc.target/arm/neon-vdup-17.c 1970-01-01 00:00:00 +0000
309+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-17.c 2010-08-13 11:02:47 +0000
310@@ -0,0 +1,17 @@
311+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
312+
313+/* { dg-do compile } */
314+/* { dg-require-effective-target arm_neon_ok } */
315+/* { dg-options "-O2" } */
316+/* { dg-add-options arm_neon } */
317+
318+#include <arm_neon.h>
319+
320+uint32x4_t out_uint32x4_t;
321+void test_vdupq_nu32 (void)
322+{
323+ out_uint32x4_t = vdupq_n_u32 (0x12ffff);
324+}
325+
326+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #1245183\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
327+/* { dg-final { cleanup-saved-temps } } */
328
329=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-18.c'
330--- old/gcc/testsuite/gcc.target/arm/neon-vdup-18.c 1970-01-01 00:00:00 +0000
331+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-18.c 2010-08-13 11:02:47 +0000
332@@ -0,0 +1,17 @@
333+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
334+
335+/* { dg-do compile } */
336+/* { dg-require-effective-target arm_neon_ok } */
337+/* { dg-options "-O2" } */
338+/* { dg-add-options arm_neon } */
339+
340+#include <arm_neon.h>
341+
342+uint32x4_t out_uint32x4_t;
343+void test_vdupq_nu32 (void)
344+{
345+ out_uint32x4_t = vdupq_n_u32 (~0x12ff);
346+}
347+
348+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #4294962432\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
349+/* { dg-final { cleanup-saved-temps } } */
350
351=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-19.c'
352--- old/gcc/testsuite/gcc.target/arm/neon-vdup-19.c 1970-01-01 00:00:00 +0000
353+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-19.c 2010-08-13 11:02:47 +0000
354@@ -0,0 +1,17 @@
355+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
356+
357+/* { dg-do compile } */
358+/* { dg-require-effective-target arm_neon_ok } */
359+/* { dg-options "-O2" } */
360+/* { dg-add-options arm_neon } */
361+
362+#include <arm_neon.h>
363+
364+uint32x4_t out_uint32x4_t;
365+void test_vdupq_nu32 (void)
366+{
367+ out_uint32x4_t = vdupq_n_u32 (~0x12ffff);
368+}
369+
370+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #4293722112\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
371+/* { dg-final { cleanup-saved-temps } } */
372
373=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-2.c'
374--- old/gcc/testsuite/gcc.target/arm/neon-vdup-2.c 1970-01-01 00:00:00 +0000
375+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-2.c 2010-08-13 11:02:47 +0000
376@@ -0,0 +1,17 @@
377+/* Test the optimization of `vdupq_n_f32' ARM Neon intrinsic. */
378+
379+/* { dg-do compile } */
380+/* { dg-require-effective-target arm_neon_ok } */
381+/* { dg-options "-O2" } */
382+/* { dg-add-options arm_neon } */
383+
384+#include <arm_neon.h>
385+
386+float32x4_t out_float32x4_t;
387+void test_vdupq_nf32 (void)
388+{
389+ out_float32x4_t = vdupq_n_f32 (0.125);
390+}
391+
392+/* { dg-final { scan-assembler "vmov\.f32\[ \]+\[qQ\]\[0-9\]+, #1\.25e-1\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
393+/* { dg-final { cleanup-saved-temps } } */
394
395=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-3.c'
396--- old/gcc/testsuite/gcc.target/arm/neon-vdup-3.c 1970-01-01 00:00:00 +0000
397+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-3.c 2010-08-13 11:02:47 +0000
398@@ -0,0 +1,17 @@
399+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
400+
401+/* { dg-do compile } */
402+/* { dg-require-effective-target arm_neon_ok } */
403+/* { dg-options "-O2" } */
404+/* { dg-add-options arm_neon } */
405+
406+#include <arm_neon.h>
407+
408+uint32x4_t out_uint32x4_t;
409+void test_vdupq_nu32 (void)
410+{
411+ out_uint32x4_t = vdupq_n_u32 (0x12);
412+}
413+
414+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #18\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
415+/* { dg-final { cleanup-saved-temps } } */
416
417=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-4.c'
418--- old/gcc/testsuite/gcc.target/arm/neon-vdup-4.c 1970-01-01 00:00:00 +0000
419+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-4.c 2010-08-13 11:02:47 +0000
420@@ -0,0 +1,17 @@
421+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
422+
423+/* { dg-do compile } */
424+/* { dg-require-effective-target arm_neon_ok } */
425+/* { dg-options "-O2" } */
426+/* { dg-add-options arm_neon } */
427+
428+#include <arm_neon.h>
429+
430+uint32x4_t out_uint32x4_t;
431+void test_vdupq_nu32 (void)
432+{
433+ out_uint32x4_t = vdupq_n_u32 (0x1200);
434+}
435+
436+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #4608\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
437+/* { dg-final { cleanup-saved-temps } } */
438
439=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-5.c'
440--- old/gcc/testsuite/gcc.target/arm/neon-vdup-5.c 1970-01-01 00:00:00 +0000
441+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-5.c 2010-08-13 11:02:47 +0000
442@@ -0,0 +1,17 @@
443+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
444+
445+/* { dg-do compile } */
446+/* { dg-require-effective-target arm_neon_ok } */
447+/* { dg-options "-O2" } */
448+/* { dg-add-options arm_neon } */
449+
450+#include <arm_neon.h>
451+
452+uint32x4_t out_uint32x4_t;
453+void test_vdupq_nu32 (void)
454+{
455+ out_uint32x4_t = vdupq_n_u32 (0x120000);
456+}
457+
458+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #1179648\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
459+/* { dg-final { cleanup-saved-temps } } */
460
461=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-6.c'
462--- old/gcc/testsuite/gcc.target/arm/neon-vdup-6.c 1970-01-01 00:00:00 +0000
463+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-6.c 2010-08-13 11:02:47 +0000
464@@ -0,0 +1,17 @@
465+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
466+
467+/* { dg-do compile } */
468+/* { dg-require-effective-target arm_neon_ok } */
469+/* { dg-options "-O2" } */
470+/* { dg-add-options arm_neon } */
471+
472+#include <arm_neon.h>
473+
474+uint32x4_t out_uint32x4_t;
475+void test_vdupq_nu32 (void)
476+{
477+ out_uint32x4_t = vdupq_n_u32 (0x12000000);
478+}
479+
480+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #301989888\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
481+/* { dg-final { cleanup-saved-temps } } */
482
483=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-7.c'
484--- old/gcc/testsuite/gcc.target/arm/neon-vdup-7.c 1970-01-01 00:00:00 +0000
485+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-7.c 2010-08-13 11:02:47 +0000
486@@ -0,0 +1,17 @@
487+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
488+
489+/* { dg-do compile } */
490+/* { dg-require-effective-target arm_neon_ok } */
491+/* { dg-options "-O2" } */
492+/* { dg-add-options arm_neon } */
493+
494+#include <arm_neon.h>
495+
496+uint32x4_t out_uint32x4_t;
497+void test_vdupq_nu32 (void)
498+{
499+ out_uint32x4_t = vdupq_n_u32 (~0x12);
500+}
501+
502+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #4294967277\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
503+/* { dg-final { cleanup-saved-temps } } */
504
505=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-8.c'
506--- old/gcc/testsuite/gcc.target/arm/neon-vdup-8.c 1970-01-01 00:00:00 +0000
507+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-8.c 2010-08-13 11:02:47 +0000
508@@ -0,0 +1,17 @@
509+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
510+
511+/* { dg-do compile } */
512+/* { dg-require-effective-target arm_neon_ok } */
513+/* { dg-options "-O2" } */
514+/* { dg-add-options arm_neon } */
515+
516+#include <arm_neon.h>
517+
518+uint32x4_t out_uint32x4_t;
519+void test_vdupq_nu32 (void)
520+{
521+ out_uint32x4_t = vdupq_n_u32 (~0x1200);
522+}
523+
524+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #4294962687\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
525+/* { dg-final { cleanup-saved-temps } } */
526
527=== added file 'gcc/testsuite/gcc.target/arm/neon-vdup-9.c'
528--- old/gcc/testsuite/gcc.target/arm/neon-vdup-9.c 1970-01-01 00:00:00 +0000
529+++ new/gcc/testsuite/gcc.target/arm/neon-vdup-9.c 2010-08-13 11:02:47 +0000
530@@ -0,0 +1,17 @@
531+/* Test the optimization of `vdupq_n_u32' ARM Neon intrinsic. */
532+
533+/* { dg-do compile } */
534+/* { dg-require-effective-target arm_neon_ok } */
535+/* { dg-options "-O2" } */
536+/* { dg-add-options arm_neon } */
537+
538+#include <arm_neon.h>
539+
540+uint32x4_t out_uint32x4_t;
541+void test_vdupq_nu32 (void)
542+{
543+ out_uint32x4_t = vdupq_n_u32 (~0x120000);
544+}
545+
546+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #4293787647\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
547+/* { dg-final { cleanup-saved-temps } } */
548