Commit 865fc968 by Allan Sandfeld Jensen Committed by Uros Bizjak

re PR target/70118 (UBSan claims misaligned access in SSE instrinsics)

	PR target/70118
	* config/i386/mmintrin.h (__m64_u): New type
	* config/i386/emmintrin.h (_mm_loadl_epi64, _mm_storel_epi64):
	Make the allowed unaligned memory access explicit.

From-SVN: r243527
parent 846fbd1e
2016-12-10 Allan Sandfeld Jensen <allan.jensen@qt.io>
PR target/70118
* config/i386/mmintrin.h (__m64_u): New type
* config/i386/emmintrin.h (_mm_loadl_epi64, _mm_storel_epi64):
Make the allowed unaligned memory access explicit.
2016-12-10 Krister Walfridsson <krister.walfridsson@gmail.com> 2016-12-10 Krister Walfridsson <krister.walfridsson@gmail.com>
* config.gcc (i386-*-netbsd*): Make i486 the default arch on NetBSD. * config.gcc (i386-*-netbsd*): Make i486 the default arch on NetBSD.
...@@ -703,9 +703,9 @@ _mm_loadu_si128 (__m128i_u const *__P) ...@@ -703,9 +703,9 @@ _mm_loadu_si128 (__m128i_u const *__P)
} }
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_loadl_epi64 (__m128i const *__P) _mm_loadl_epi64 (__m128i_u const *__P)
{ {
return _mm_set_epi64 ((__m64)0LL, *(__m64 *)__P); return _mm_set_epi64 ((__m64)0LL, *(__m64_u *)__P);
} }
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__)) extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
...@@ -721,9 +721,9 @@ _mm_storeu_si128 (__m128i_u *__P, __m128i __B) ...@@ -721,9 +721,9 @@ _mm_storeu_si128 (__m128i_u *__P, __m128i __B)
} }
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__)) extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_storel_epi64 (__m128i *__P, __m128i __B) _mm_storel_epi64 (__m128i_u *__P, __m128i __B)
{ {
*(long long *)__P = ((__v2di)__B)[0]; *(__m64_u *)__P = (__m64) ((__v2di)__B)[0];
} }
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
......
...@@ -37,6 +37,9 @@ ...@@ -37,6 +37,9 @@
vector types, and their scalar components. */ vector types, and their scalar components. */
typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__)); typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__));
/* Unaligned version of the same type */
typedef int __m64_u __attribute__ ((__vector_size__ (8), __may_alias__, __aligned__ (1)));
/* Internal data types for implementing the intrinsics. */ /* Internal data types for implementing the intrinsics. */
typedef int __v2si __attribute__ ((__vector_size__ (8))); typedef int __v2si __attribute__ ((__vector_size__ (8)));
typedef short __v4hi __attribute__ ((__vector_size__ (8))); typedef short __v4hi __attribute__ ((__vector_size__ (8)));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment