[oe-commits] org.oe.dev gcc 4.3.1: fix NEON ice: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36500

koen commit oe at amethyst.openembedded.net
Wed Jun 11 21:13:23 UTC 2008


gcc 4.3.1: fix NEON ice: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36500

Author: koen at openembedded.org
Branch: org.openembedded.dev
Revision: 2b8d334e0972c3e6a5a88214ac4af7d46fcb2118
ViewMTN: http://monotone.openembedded.org/revision/info/2b8d334e0972c3e6a5a88214ac4af7d46fcb2118
Files:
1
packages/gcc/gcc-4.3.1/gcc-release-branch
packages/gcc/gcc-4.3.1/gcc-release-branch/PR-36500-fix-neon.patch
packages/gcc/gcc-4.3.1.inc
packages/gcc/gcc-cross_4.3.1.bb
Diffs:

#
# mt diff -r4d18c2a7fdeaf912ff7e42c60409c678f7c1d840 -r2b8d334e0972c3e6a5a88214ac4af7d46fcb2118
#
#
#
# add_dir "packages/gcc/gcc-4.3.1/gcc-release-branch"
# 
# add_file "packages/gcc/gcc-4.3.1/gcc-release-branch/PR-36500-fix-neon.patch"
#  content [3875698567cf2f0c76da4c500c17523991227ecb]
# 
# patch "packages/gcc/gcc-4.3.1.inc"
#  from [2e494a129f468083a15c2912de1beac230d01ca2]
#    to [c95319fe788a145ce0a5aecd6d6c270424e47e03]
# 
# patch "packages/gcc/gcc-cross_4.3.1.bb"
#  from [cc76abacb299b51bb7da2b6bc0a6f7bec093ebeb]
#    to [6bacdf326b12e4c3280a994812f4aaeea7dc586c]
#
============================================================
--- packages/gcc/gcc-4.3.1/gcc-release-branch/PR-36500-fix-neon.patch	3875698567cf2f0c76da4c500c17523991227ecb
+++ packages/gcc/gcc-4.3.1/gcc-release-branch/PR-36500-fix-neon.patch	3875698567cf2f0c76da4c500c17523991227ecb
@@ -0,0 +1,265 @@
+--- foo/gcc/config/arm/arm.c	2008/06/11 10:51:34	136660
++++ foo/gcc/config/arm/arm.c	2008/06/11 10:52:55	136661
+@@ -14830,124 +14830,190 @@
+ {
+   unsigned int i, fcode = ARM_BUILTIN_NEON_BASE;
+ 
++  tree neon_intQI_type_node;
++  tree neon_intHI_type_node;
++  tree neon_polyQI_type_node;
++  tree neon_polyHI_type_node;
++  tree neon_intSI_type_node;
++  tree neon_intDI_type_node;
++  tree neon_float_type_node;
++
++  tree intQI_pointer_node;
++  tree intHI_pointer_node;
++  tree intSI_pointer_node;
++  tree intDI_pointer_node;
++  tree float_pointer_node;
++
++  tree const_intQI_node;
++  tree const_intHI_node;
++  tree const_intSI_node;
++  tree const_intDI_node;
++  tree const_float_node;
++
++  tree const_intQI_pointer_node;
++  tree const_intHI_pointer_node;
++  tree const_intSI_pointer_node;
++  tree const_intDI_pointer_node;
++  tree const_float_pointer_node;
++
++  tree V8QI_type_node;
++  tree V4HI_type_node;
++  tree V2SI_type_node;
++  tree V2SF_type_node;
++  tree V16QI_type_node;
++  tree V8HI_type_node;
++  tree V4SI_type_node;
++  tree V4SF_type_node;
++  tree V2DI_type_node;
++
++  tree intUQI_type_node;
++  tree intUHI_type_node;
++  tree intUSI_type_node;
++  tree intUDI_type_node;
++
++  tree intEI_type_node;
++  tree intOI_type_node;
++  tree intCI_type_node;
++  tree intXI_type_node;
++
++  tree V8QI_pointer_node;
++  tree V4HI_pointer_node;
++  tree V2SI_pointer_node;
++  tree V2SF_pointer_node;
++  tree V16QI_pointer_node;
++  tree V8HI_pointer_node;
++  tree V4SI_pointer_node;
++  tree V4SF_pointer_node;
++  tree V2DI_pointer_node;
++
++  tree void_ftype_pv8qi_v8qi_v8qi;
++  tree void_ftype_pv4hi_v4hi_v4hi;
++  tree void_ftype_pv2si_v2si_v2si;
++  tree void_ftype_pv2sf_v2sf_v2sf;
++  tree void_ftype_pdi_di_di;
++  tree void_ftype_pv16qi_v16qi_v16qi;
++  tree void_ftype_pv8hi_v8hi_v8hi;
++  tree void_ftype_pv4si_v4si_v4si;
++  tree void_ftype_pv4sf_v4sf_v4sf;
++  tree void_ftype_pv2di_v2di_v2di;
++
++  tree reinterp_ftype_dreg[5][5];
++  tree reinterp_ftype_qreg[5][5];
++  tree dreg_types[5], qreg_types[5];
++
+   /* Create distinguished type nodes for NEON vector element types,
+      and pointers to values of such types, so we can detect them later.  */
+-  tree neon_intQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
+-  tree neon_intHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
+-  tree neon_polyQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
+-  tree neon_polyHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
+-  tree neon_intSI_type_node = make_signed_type (GET_MODE_PRECISION (SImode));
+-  tree neon_intDI_type_node = make_signed_type (GET_MODE_PRECISION (DImode));
+-  tree neon_float_type_node = make_node (REAL_TYPE);
+-
+-  tree intQI_pointer_node = build_pointer_type (neon_intQI_type_node);
+-  tree intHI_pointer_node = build_pointer_type (neon_intHI_type_node);
+-  tree intSI_pointer_node = build_pointer_type (neon_intSI_type_node);
+-  tree intDI_pointer_node = build_pointer_type (neon_intDI_type_node);
+-  tree float_pointer_node = build_pointer_type (neon_float_type_node);
++  neon_intQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
++  neon_intHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
++  neon_polyQI_type_node = make_signed_type (GET_MODE_PRECISION (QImode));
++  neon_polyHI_type_node = make_signed_type (GET_MODE_PRECISION (HImode));
++  neon_intSI_type_node = make_signed_type (GET_MODE_PRECISION (SImode));
++  neon_intDI_type_node = make_signed_type (GET_MODE_PRECISION (DImode));
++  neon_float_type_node = make_node (REAL_TYPE);
++  TYPE_PRECISION (neon_float_type_node) = FLOAT_TYPE_SIZE;
++  layout_type (neon_float_type_node);
++
++  intQI_pointer_node = build_pointer_type (neon_intQI_type_node);
++  intHI_pointer_node = build_pointer_type (neon_intHI_type_node);
++  intSI_pointer_node = build_pointer_type (neon_intSI_type_node);
++  intDI_pointer_node = build_pointer_type (neon_intDI_type_node);
++  float_pointer_node = build_pointer_type (neon_float_type_node);
+ 
+   /* Next create constant-qualified versions of the above types.  */
+-  tree const_intQI_node = build_qualified_type (neon_intQI_type_node,
+-						TYPE_QUAL_CONST);
+-  tree const_intHI_node = build_qualified_type (neon_intHI_type_node,
+-						TYPE_QUAL_CONST);
+-  tree const_intSI_node = build_qualified_type (neon_intSI_type_node,
+-						TYPE_QUAL_CONST);
+-  tree const_intDI_node = build_qualified_type (neon_intDI_type_node,
+-						TYPE_QUAL_CONST);
+-  tree const_float_node = build_qualified_type (neon_float_type_node,
+-						TYPE_QUAL_CONST);
+-
+-  tree const_intQI_pointer_node = build_pointer_type (const_intQI_node);
+-  tree const_intHI_pointer_node = build_pointer_type (const_intHI_node);
+-  tree const_intSI_pointer_node = build_pointer_type (const_intSI_node);
+-  tree const_intDI_pointer_node = build_pointer_type (const_intDI_node);
+-  tree const_float_pointer_node = build_pointer_type (const_float_node);
++  const_intQI_node = build_qualified_type (neon_intQI_type_node,
++					   TYPE_QUAL_CONST);
++  const_intHI_node = build_qualified_type (neon_intHI_type_node,
++					   TYPE_QUAL_CONST);
++  const_intSI_node = build_qualified_type (neon_intSI_type_node,
++					   TYPE_QUAL_CONST);
++  const_intDI_node = build_qualified_type (neon_intDI_type_node,
++					   TYPE_QUAL_CONST);
++  const_float_node = build_qualified_type (neon_float_type_node,
++					   TYPE_QUAL_CONST);
++
++  const_intQI_pointer_node = build_pointer_type (const_intQI_node);
++  const_intHI_pointer_node = build_pointer_type (const_intHI_node);
++  const_intSI_pointer_node = build_pointer_type (const_intSI_node);
++  const_intDI_pointer_node = build_pointer_type (const_intDI_node);
++  const_float_pointer_node = build_pointer_type (const_float_node);
+ 
+   /* Now create vector types based on our NEON element types.  */
+   /* 64-bit vectors.  */
+-  tree V8QI_type_node =
++  V8QI_type_node =
+     build_vector_type_for_mode (neon_intQI_type_node, V8QImode);
+-  tree V4HI_type_node =
++  V4HI_type_node =
+     build_vector_type_for_mode (neon_intHI_type_node, V4HImode);
+-  tree V2SI_type_node =
++  V2SI_type_node =
+     build_vector_type_for_mode (neon_intSI_type_node, V2SImode);
+-  tree V2SF_type_node =
++  V2SF_type_node =
+     build_vector_type_for_mode (neon_float_type_node, V2SFmode);
+   /* 128-bit vectors.  */
+-  tree V16QI_type_node =
++  V16QI_type_node =
+     build_vector_type_for_mode (neon_intQI_type_node, V16QImode);
+-  tree V8HI_type_node =
++  V8HI_type_node =
+     build_vector_type_for_mode (neon_intHI_type_node, V8HImode);
+-  tree V4SI_type_node =
++  V4SI_type_node =
+     build_vector_type_for_mode (neon_intSI_type_node, V4SImode);
+-  tree V4SF_type_node =
++  V4SF_type_node =
+     build_vector_type_for_mode (neon_float_type_node, V4SFmode);
+-  tree V2DI_type_node =
++  V2DI_type_node =
+     build_vector_type_for_mode (neon_intDI_type_node, V2DImode);
+ 
+   /* Unsigned integer types for various mode sizes.  */
+-  tree intUQI_type_node = make_unsigned_type (GET_MODE_PRECISION (QImode));
+-  tree intUHI_type_node = make_unsigned_type (GET_MODE_PRECISION (HImode));
+-  tree intUSI_type_node = make_unsigned_type (GET_MODE_PRECISION (SImode));
+-  tree intUDI_type_node = make_unsigned_type (GET_MODE_PRECISION (DImode));
++  intUQI_type_node = make_unsigned_type (GET_MODE_PRECISION (QImode));
++  intUHI_type_node = make_unsigned_type (GET_MODE_PRECISION (HImode));
++  intUSI_type_node = make_unsigned_type (GET_MODE_PRECISION (SImode));
++  intUDI_type_node = make_unsigned_type (GET_MODE_PRECISION (DImode));
+ 
+   /* Opaque integer types for structures of vectors.  */
+-  tree intEI_type_node = make_signed_type (GET_MODE_PRECISION (EImode));
+-  tree intOI_type_node = make_signed_type (GET_MODE_PRECISION (OImode));
+-  tree intCI_type_node = make_signed_type (GET_MODE_PRECISION (CImode));
+-  tree intXI_type_node = make_signed_type (GET_MODE_PRECISION (XImode));
++  intEI_type_node = make_signed_type (GET_MODE_PRECISION (EImode));
++  intOI_type_node = make_signed_type (GET_MODE_PRECISION (OImode));
++  intCI_type_node = make_signed_type (GET_MODE_PRECISION (CImode));
++  intXI_type_node = make_signed_type (GET_MODE_PRECISION (XImode));
+ 
+   /* Pointers to vector types.  */
+-  tree V8QI_pointer_node = build_pointer_type (V8QI_type_node);
+-  tree V4HI_pointer_node = build_pointer_type (V4HI_type_node);
+-  tree V2SI_pointer_node = build_pointer_type (V2SI_type_node);
+-  tree V2SF_pointer_node = build_pointer_type (V2SF_type_node);
+-  tree V16QI_pointer_node = build_pointer_type (V16QI_type_node);
+-  tree V8HI_pointer_node = build_pointer_type (V8HI_type_node);
+-  tree V4SI_pointer_node = build_pointer_type (V4SI_type_node);
+-  tree V4SF_pointer_node = build_pointer_type (V4SF_type_node);
+-  tree V2DI_pointer_node = build_pointer_type (V2DI_type_node);
++  V8QI_pointer_node = build_pointer_type (V8QI_type_node);
++  V4HI_pointer_node = build_pointer_type (V4HI_type_node);
++  V2SI_pointer_node = build_pointer_type (V2SI_type_node);
++  V2SF_pointer_node = build_pointer_type (V2SF_type_node);
++  V16QI_pointer_node = build_pointer_type (V16QI_type_node);
++  V8HI_pointer_node = build_pointer_type (V8HI_type_node);
++  V4SI_pointer_node = build_pointer_type (V4SI_type_node);
++  V4SF_pointer_node = build_pointer_type (V4SF_type_node);
++  V2DI_pointer_node = build_pointer_type (V2DI_type_node);
+ 
+   /* Operations which return results as pairs.  */
+-  tree void_ftype_pv8qi_v8qi_v8qi =
++  void_ftype_pv8qi_v8qi_v8qi =
+     build_function_type_list (void_type_node, V8QI_pointer_node, V8QI_type_node,
+   			      V8QI_type_node, NULL);
+-  tree void_ftype_pv4hi_v4hi_v4hi =
++  void_ftype_pv4hi_v4hi_v4hi =
+     build_function_type_list (void_type_node, V4HI_pointer_node, V4HI_type_node,
+   			      V4HI_type_node, NULL);
+-  tree void_ftype_pv2si_v2si_v2si =
++  void_ftype_pv2si_v2si_v2si =
+     build_function_type_list (void_type_node, V2SI_pointer_node, V2SI_type_node,
+   			      V2SI_type_node, NULL);
+-  tree void_ftype_pv2sf_v2sf_v2sf =
++  void_ftype_pv2sf_v2sf_v2sf =
+     build_function_type_list (void_type_node, V2SF_pointer_node, V2SF_type_node,
+   			      V2SF_type_node, NULL);
+-  tree void_ftype_pdi_di_di =
++  void_ftype_pdi_di_di =
+     build_function_type_list (void_type_node, intDI_pointer_node,
+ 			      neon_intDI_type_node, neon_intDI_type_node, NULL);
+-  tree void_ftype_pv16qi_v16qi_v16qi =
++  void_ftype_pv16qi_v16qi_v16qi =
+     build_function_type_list (void_type_node, V16QI_pointer_node,
+ 			      V16QI_type_node, V16QI_type_node, NULL);
+-  tree void_ftype_pv8hi_v8hi_v8hi =
++  void_ftype_pv8hi_v8hi_v8hi =
+     build_function_type_list (void_type_node, V8HI_pointer_node, V8HI_type_node,
+   			      V8HI_type_node, NULL);
+-  tree void_ftype_pv4si_v4si_v4si =
++  void_ftype_pv4si_v4si_v4si =
+     build_function_type_list (void_type_node, V4SI_pointer_node, V4SI_type_node,
+   			      V4SI_type_node, NULL);
+-  tree void_ftype_pv4sf_v4sf_v4sf =
++  void_ftype_pv4sf_v4sf_v4sf =
+     build_function_type_list (void_type_node, V4SF_pointer_node, V4SF_type_node,
+   			      V4SF_type_node, NULL);
+-  tree void_ftype_pv2di_v2di_v2di =
++  void_ftype_pv2di_v2di_v2di =
+     build_function_type_list (void_type_node, V2DI_pointer_node, V2DI_type_node,
+ 			      V2DI_type_node, NULL);
+ 
+-  tree reinterp_ftype_dreg[5][5];
+-  tree reinterp_ftype_qreg[5][5];
+-  tree dreg_types[5], qreg_types[5];
+-
+-  TYPE_PRECISION (neon_float_type_node) = FLOAT_TYPE_SIZE;
+-  layout_type (neon_float_type_node);
+-
+   /* Define typedefs which exactly correspond to the modes we are basing vector
+      types on.  If you change these names you'll need to change
+      the table used by arm_mangle_type too.  */
============================================================
--- packages/gcc/gcc-4.3.1.inc	2e494a129f468083a15c2912de1beac230d01ca2
+++ packages/gcc/gcc-4.3.1.inc	c95319fe788a145ce0a5aecd6d6c270424e47e03
@@ -58,6 +58,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc
 #	file://fortran-static-linking.patch;patch=1 \
 #	file://intermask-bigendian.patch;patch=1 \
 	file://gcc-arm-frename-registers.patch;patch=1 \
+	file://gcc-release-branch/PR-36500-fix-neon.patch;patch=1 \
 "
 
 SRC_URI_append_sh3  = " file://sh3-installfix-fixheaders.patch;patch=1 "
============================================================
--- packages/gcc/gcc-cross_4.3.1.bb	cc76abacb299b51bb7da2b6bc0a6f7bec093ebeb
+++ packages/gcc/gcc-cross_4.3.1.bb	6bacdf326b12e4c3280a994812f4aaeea7dc586c
@@ -1,4 +1,4 @@
-PR = "r7"
+PR = "r8"
 
 require gcc-${PV}.inc
 require gcc-cross4.inc






More information about the Openembedded-commits mailing list