Hi,

The attached patch fixes one of arm_neon.h's issues with C++. All scalar types <type>x1_t are mapped to internal __builtin_aarch64_simd_<type> types. This creates duplicate function name symbols when one attempts overloading a standard type and one of these builtin types that are of the same size. For example, int8x1_t when overloaded with signed char creates a duplicate function name symbol. This patch increases the strictness and maps scalar types <type>x1_t to standard types. This means overloading is not possible, but that will not make a difference as we can now define it this way and needless to say it was broken till now anyway.

Tested for aarch64-none-elf. OK for trunk and aarch64-4.7-branch?

Thanks,
Tejas Belagod
ARM.

Changelog:

2013-01-18  Tejas Belagod  <tejas.bela...@arm.com>

gcc/
        * config/aarch64/arm_neon.h: Map scalar types to standard types.
diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h
index 5a72029..50e0a7b 100644
--- a/gcc/config/aarch64/arm_neon.h
+++ b/gcc/config/aarch64/arm_neon.h
@@ -35,11 +35,11 @@ typedef __builtin_aarch64_simd_hi int16x4_t
   __attribute__ ((__vector_size__ (8)));
 typedef __builtin_aarch64_simd_si int32x2_t
   __attribute__ ((__vector_size__ (8)));
-typedef __builtin_aarch64_simd_di int64x1_t;
-typedef __builtin_aarch64_simd_si int32x1_t;
-typedef __builtin_aarch64_simd_hi int16x1_t;
-typedef __builtin_aarch64_simd_qi int8x1_t;
-typedef __builtin_aarch64_simd_df float64x1_t;
+typedef int64_t int64x1_t;
+typedef int32_t int32x1_t;
+typedef int16_t int16x1_t;
+typedef int8_t int8x1_t;
+typedef double float64x1_t;
 typedef __builtin_aarch64_simd_sf float32x2_t
   __attribute__ ((__vector_size__ (8)));
 typedef __builtin_aarch64_simd_poly8 poly8x8_t
@@ -52,10 +52,10 @@ typedef __builtin_aarch64_simd_uhi uint16x4_t
   __attribute__ ((__vector_size__ (8)));
 typedef __builtin_aarch64_simd_usi uint32x2_t
   __attribute__ ((__vector_size__ (8)));
-typedef __builtin_aarch64_simd_udi uint64x1_t;
-typedef __builtin_aarch64_simd_usi uint32x1_t;
-typedef __builtin_aarch64_simd_uhi uint16x1_t;
-typedef __builtin_aarch64_simd_uqi uint8x1_t;
+typedef uint64_t uint64x1_t;
+typedef uint32_t uint32x1_t;
+typedef uint16_t uint16x1_t;
+typedef uint8_t uint8x1_t;
 typedef __builtin_aarch64_simd_qi int8x16_t
   __attribute__ ((__vector_size__ (16)));
 typedef __builtin_aarch64_simd_hi int16x8_t

Reply via email to