summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-4.3.3/gcc-release-branch/PR-36500-fix-neon.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.3.3/gcc-release-branch/PR-36500-fix-neon.patch')
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.3.3/gcc-release-branch/PR-36500-fix-neon.patch265
1 files changed, 265 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.3.3/gcc-release-branch/PR-36500-fix-neon.patch b/meta/recipes-devtools/gcc/gcc-4.3.3/gcc-release-branch/PR-36500-fix-neon.patch
new file mode 100644
index 0000000000..971dfe7e29
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.3.3/gcc-release-branch/PR-36500-fix-neon.patch
@@ -0,0 +1,265 @@
1--- foo/gcc/config/arm/arm.c 2008/06/11 10:51:34 136660
2+++ foo/gcc/config/arm/arm.c 2008/06/11 10:52:55 136661
3@@ -14830,124 +14830,190 @@
4 {
5 unsigned int i, fcode = ARM_BUILTIN_NEON_BASE;
6
7+ tree neon_intQI_type_node;
8+ tree neon_intHI_type_node;
9+ tree neon_polyQI_type_node;
10+ tree neon_polyHI_type_node;
11+ tree neon_intSI_type_node;
12+ tree neon_intDI_type_node;
13+ tree neon_float_type_node;
14+
15+ tree intQI_pointer_node;
16+ tree intHI_pointer_node;
17+ tree intSI_pointer_node;
18+ tree intDI_pointer_node;
19+ tree float_pointer_node;
20+
21+ tree const_intQI_node;
22+ tree const_intHI_node;
23+ tree const_intSI_node;
24+ tree const_intDI_node;
25+ tree const_float_node;
26+
27+ tree const_intQI_pointer_node;
28+ tree const_intHI_pointer_node;
29+ tree const_intSI_pointer_node;
30+ tree const_intDI_pointer_node;
31+ tree const_float_pointer_node;
32+
33+ tree V8QI_type_node;
34+ tree V4HI_type_node;
35+ tree V2SI_type_node;
36+ tree V2SF_type_node;
37+ tree V16QI_type_node;
38+ tree V8HI_type_node;
39+ tree V4SI_type_node;
40+ tree V4SF_type_node;
41+ tree V2DI_type_node;
42+
43+ tree intUQI_type_node;
44+ tree intUHI_type_node;
45+ tree intUSI_type_node;
46+ tree intUDI_type_node;
47+
48+ tree intEI_type_node;
49+ tree intOI_type_node;
50+ tree intCI_type_node;
51+ tree intXI_type_node;
52+
53+ tree V8QI_pointer_node;
54+ tree V4HI_pointer_node;
55+ tree V2SI_pointer_node;
56+ tree V2SF_pointer_node;
57+ tree V16QI_pointer_node;
58+ tree V8HI_pointer_node;
59+ tree V4SI_pointer_node;
60+ tree V4SF_pointer_node;
61+ tree V2DI_pointer_node;
62+
63+ tree void_ftype_pv8qi_v8qi_v8qi;
64+ tree void_ftype_pv4hi_v4hi_v4hi;
65+ tree void_ftype_pv2si_v2si_v2si;
66+ tree void_ftype_pv2sf_v2sf_v2sf;
67+ tree void_ftype_pdi_di_di;
68+ tree void_ftype_pv16qi_v16qi_v16qi;
69+ tree void_ftype_pv8hi_v8hi_v8hi;
70+ tree void_ftype_pv4si_v4si_v4si;
71+ tree void_ftype_pv4sf_v4sf_v4sf;
72+ tree void_ftype_pv2di_v2di_v2di;
73+
74+ tree reinterp_ftype_dreg[5][5];
75+ tree reinterp_ftype_qreg[5][5];
76+ tree dreg_types[5], qreg_types[5];
77+
78 /* Create distinguished type nodes for NEON vector element types,
79 and pointers to values of such types, so we can detect them later. */
80- tree neon_intQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
81- tree neon_intHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
82- tree neon_polyQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
83- tree neon_polyHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
84- tree neon_intSI_type_node = make_signed_type (GET_MODE_PRECISION (SImode));
85- tree neon_intDI_type_node = make_signed_type (GET_MODE_PRECISION (DImode));
86- tree neon_float_type_node = make_node (REAL_TYPE);
87-
88- tree intQI_pointer_node = build_pointer_type (neon_intQI_type_node);
89- tree intHI_pointer_node = build_pointer_type (neon_intHI_type_node);
90- tree intSI_pointer_node = build_pointer_type (neon_intSI_type_node);
91- tree intDI_pointer_node = build_pointer_type (neon_intDI_type_node);
92- tree float_pointer_node = build_pointer_type (neon_float_type_node);
93+ neon_intQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
94+ neon_intHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
95+ neon_polyQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
96+ neon_polyHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
97+ neon_intSI_type_node = make_signed_type (GET_MODE_PRECISION (SImode));
98+ neon_intDI_type_node = make_signed_type (GET_MODE_PRECISION (DImode));
99+ neon_float_type_node = make_node (REAL_TYPE);
100+ TYPE_PRECISION (neon_float_type_node) = FLOAT_TYPE_SIZE;
101+ layout_type (neon_float_type_node);
102+
103+ intQI_pointer_node = build_pointer_type (neon_intQI_type_node);
104+ intHI_pointer_node = build_pointer_type (neon_intHI_type_node);
105+ intSI_pointer_node = build_pointer_type (neon_intSI_type_node);
106+ intDI_pointer_node = build_pointer_type (neon_intDI_type_node);
107+ float_pointer_node = build_pointer_type (neon_float_type_node);
108
109 /* Next create constant-qualified versions of the above types. */
110- tree const_intQI_node = build_qualified_type (neon_intQI_type_node,
111- TYPE_QUAL_CONST);
112- tree const_intHI_node = build_qualified_type (neon_intHI_type_node,
113- TYPE_QUAL_CONST);
114- tree const_intSI_node = build_qualified_type (neon_intSI_type_node,
115- TYPE_QUAL_CONST);
116- tree const_intDI_node = build_qualified_type (neon_intDI_type_node,
117- TYPE_QUAL_CONST);
118- tree const_float_node = build_qualified_type (neon_float_type_node,
119- TYPE_QUAL_CONST);
120-
121- tree const_intQI_pointer_node = build_pointer_type (const_intQI_node);
122- tree const_intHI_pointer_node = build_pointer_type (const_intHI_node);
123- tree const_intSI_pointer_node = build_pointer_type (const_intSI_node);
124- tree const_intDI_pointer_node = build_pointer_type (const_intDI_node);
125- tree const_float_pointer_node = build_pointer_type (const_float_node);
126+ const_intQI_node = build_qualified_type (neon_intQI_type_node,
127+ TYPE_QUAL_CONST);
128+ const_intHI_node = build_qualified_type (neon_intHI_type_node,
129+ TYPE_QUAL_CONST);
130+ const_intSI_node = build_qualified_type (neon_intSI_type_node,
131+ TYPE_QUAL_CONST);
132+ const_intDI_node = build_qualified_type (neon_intDI_type_node,
133+ TYPE_QUAL_CONST);
134+ const_float_node = build_qualified_type (neon_float_type_node,
135+ TYPE_QUAL_CONST);
136+
137+ const_intQI_pointer_node = build_pointer_type (const_intQI_node);
138+ const_intHI_pointer_node = build_pointer_type (const_intHI_node);
139+ const_intSI_pointer_node = build_pointer_type (const_intSI_node);
140+ const_intDI_pointer_node = build_pointer_type (const_intDI_node);
141+ const_float_pointer_node = build_pointer_type (const_float_node);
142
143 /* Now create vector types based on our NEON element types. */
144 /* 64-bit vectors. */
145- tree V8QI_type_node =
146+ V8QI_type_node =
147 build_vector_type_for_mode (neon_intQI_type_node, V8QImode);
148- tree V4HI_type_node =
149+ V4HI_type_node =
150 build_vector_type_for_mode (neon_intHI_type_node, V4HImode);
151- tree V2SI_type_node =
152+ V2SI_type_node =
153 build_vector_type_for_mode (neon_intSI_type_node, V2SImode);
154- tree V2SF_type_node =
155+ V2SF_type_node =
156 build_vector_type_for_mode (neon_float_type_node, V2SFmode);
157 /* 128-bit vectors. */
158- tree V16QI_type_node =
159+ V16QI_type_node =
160 build_vector_type_for_mode (neon_intQI_type_node, V16QImode);
161- tree V8HI_type_node =
162+ V8HI_type_node =
163 build_vector_type_for_mode (neon_intHI_type_node, V8HImode);
164- tree V4SI_type_node =
165+ V4SI_type_node =
166 build_vector_type_for_mode (neon_intSI_type_node, V4SImode);
167- tree V4SF_type_node =
168+ V4SF_type_node =
169 build_vector_type_for_mode (neon_float_type_node, V4SFmode);
170- tree V2DI_type_node =
171+ V2DI_type_node =
172 build_vector_type_for_mode (neon_intDI_type_node, V2DImode);
173
174 /* Unsigned integer types for various mode sizes. */
175- tree intUQI_type_node = make_unsigned_type (GET_MODE_PRECISION (QImode));
176- tree intUHI_type_node = make_unsigned_type (GET_MODE_PRECISION (HImode));
177- tree intUSI_type_node = make_unsigned_type (GET_MODE_PRECISION (SImode));
178- tree intUDI_type_node = make_unsigned_type (GET_MODE_PRECISION (DImode));
179+ intUQI_type_node = make_unsigned_type (GET_MODE_PRECISION (QImode));
180+ intUHI_type_node = make_unsigned_type (GET_MODE_PRECISION (HImode));
181+ intUSI_type_node = make_unsigned_type (GET_MODE_PRECISION (SImode));
182+ intUDI_type_node = make_unsigned_type (GET_MODE_PRECISION (DImode));
183
184 /* Opaque integer types for structures of vectors. */
185- tree intEI_type_node = make_signed_type (GET_MODE_PRECISION (EImode));
186- tree intOI_type_node = make_signed_type (GET_MODE_PRECISION (OImode));
187- tree intCI_type_node = make_signed_type (GET_MODE_PRECISION (CImode));
188- tree intXI_type_node = make_signed_type (GET_MODE_PRECISION (XImode));
189+ intEI_type_node = make_signed_type (GET_MODE_PRECISION (EImode));
190+ intOI_type_node = make_signed_type (GET_MODE_PRECISION (OImode));
191+ intCI_type_node = make_signed_type (GET_MODE_PRECISION (CImode));
192+ intXI_type_node = make_signed_type (GET_MODE_PRECISION (XImode));
193
194 /* Pointers to vector types. */
195- tree V8QI_pointer_node = build_pointer_type (V8QI_type_node);
196- tree V4HI_pointer_node = build_pointer_type (V4HI_type_node);
197- tree V2SI_pointer_node = build_pointer_type (V2SI_type_node);
198- tree V2SF_pointer_node = build_pointer_type (V2SF_type_node);
199- tree V16QI_pointer_node = build_pointer_type (V16QI_type_node);
200- tree V8HI_pointer_node = build_pointer_type (V8HI_type_node);
201- tree V4SI_pointer_node = build_pointer_type (V4SI_type_node);
202- tree V4SF_pointer_node = build_pointer_type (V4SF_type_node);
203- tree V2DI_pointer_node = build_pointer_type (V2DI_type_node);
204+ V8QI_pointer_node = build_pointer_type (V8QI_type_node);
205+ V4HI_pointer_node = build_pointer_type (V4HI_type_node);
206+ V2SI_pointer_node = build_pointer_type (V2SI_type_node);
207+ V2SF_pointer_node = build_pointer_type (V2SF_type_node);
208+ V16QI_pointer_node = build_pointer_type (V16QI_type_node);
209+ V8HI_pointer_node = build_pointer_type (V8HI_type_node);
210+ V4SI_pointer_node = build_pointer_type (V4SI_type_node);
211+ V4SF_pointer_node = build_pointer_type (V4SF_type_node);
212+ V2DI_pointer_node = build_pointer_type (V2DI_type_node);
213
214 /* Operations which return results as pairs. */
215- tree void_ftype_pv8qi_v8qi_v8qi =
216+ void_ftype_pv8qi_v8qi_v8qi =
217 build_function_type_list (void_type_node, V8QI_pointer_node, V8QI_type_node,
218 V8QI_type_node, NULL);
219- tree void_ftype_pv4hi_v4hi_v4hi =
220+ void_ftype_pv4hi_v4hi_v4hi =
221 build_function_type_list (void_type_node, V4HI_pointer_node, V4HI_type_node,
222 V4HI_type_node, NULL);
223- tree void_ftype_pv2si_v2si_v2si =
224+ void_ftype_pv2si_v2si_v2si =
225 build_function_type_list (void_type_node, V2SI_pointer_node, V2SI_type_node,
226 V2SI_type_node, NULL);
227- tree void_ftype_pv2sf_v2sf_v2sf =
228+ void_ftype_pv2sf_v2sf_v2sf =
229 build_function_type_list (void_type_node, V2SF_pointer_node, V2SF_type_node,
230 V2SF_type_node, NULL);
231- tree void_ftype_pdi_di_di =
232+ void_ftype_pdi_di_di =
233 build_function_type_list (void_type_node, intDI_pointer_node,
234 neon_intDI_type_node, neon_intDI_type_node, NULL);
235- tree void_ftype_pv16qi_v16qi_v16qi =
236+ void_ftype_pv16qi_v16qi_v16qi =
237 build_function_type_list (void_type_node, V16QI_pointer_node,
238 V16QI_type_node, V16QI_type_node, NULL);
239- tree void_ftype_pv8hi_v8hi_v8hi =
240+ void_ftype_pv8hi_v8hi_v8hi =
241 build_function_type_list (void_type_node, V8HI_pointer_node, V8HI_type_node,
242 V8HI_type_node, NULL);
243- tree void_ftype_pv4si_v4si_v4si =
244+ void_ftype_pv4si_v4si_v4si =
245 build_function_type_list (void_type_node, V4SI_pointer_node, V4SI_type_node,
246 V4SI_type_node, NULL);
247- tree void_ftype_pv4sf_v4sf_v4sf =
248+ void_ftype_pv4sf_v4sf_v4sf =
249 build_function_type_list (void_type_node, V4SF_pointer_node, V4SF_type_node,
250 V4SF_type_node, NULL);
251- tree void_ftype_pv2di_v2di_v2di =
252+ void_ftype_pv2di_v2di_v2di =
253 build_function_type_list (void_type_node, V2DI_pointer_node, V2DI_type_node,
254 V2DI_type_node, NULL);
255
256- tree reinterp_ftype_dreg[5][5];
257- tree reinterp_ftype_qreg[5][5];
258- tree dreg_types[5], qreg_types[5];
259-
260- TYPE_PRECISION (neon_float_type_node) = FLOAT_TYPE_SIZE;
261- layout_type (neon_float_type_node);
262-
263 /* Define typedefs which exactly correspond to the modes we are basing vector
264 types on. If you change these names you'll need to change
265 the table used by arm_mangle_type too. */