57c0281eb0
Patches created by git format-patch -k -p glibc-2.25..origin/release/2.25/master
106 lines
4 KiB
Diff
106 lines
4 KiB
Diff
From 34b6f41c14d09fe627c6a6224880d76d0959079e Mon Sep 17 00:00:00 2001
|
|
From: Joseph Myers <joseph@codesourcery.com>
|
|
Date: Wed, 15 Mar 2017 17:32:46 +0000
|
|
Subject: Fix test-math-vector-sincos.h aliasing.
|
|
|
|
x86_64 libmvec tests have been failing to build lately with GCC
|
|
mainline with -Wuninitialized errors, and Markus Trippelsdorf traced
|
|
this to an aliasing issue
|
|
<https://sourceware.org/ml/libc-alpha/2017-03/msg00169.html>.
|
|
|
|
This patch fixes the aliasing issue, so that the vectors-of-pointers
|
|
are initialized using a union instead of pointer casts. This also
|
|
fixes the testsuite build failures with GCC mainline.
|
|
|
|
Tested for x86_64 (full testsuite with GCC 6; testsuite build with GCC
|
|
mainline with build-many-glibcs.py).
|
|
|
|
* sysdeps/x86/fpu/test-math-vector-sincos.h (INIT_VEC_PTRS_LOOP):
|
|
Use a union when storing pointers.
|
|
(VECTOR_WRAPPER_fFF_2): Do not take address of integer vector and
|
|
cast result when passing to INIT_VEC_PTRS_LOOP.
|
|
(VECTOR_WRAPPER_fFF_3): Likewise.
|
|
(VECTOR_WRAPPER_fFF_4): Likewise.
|
|
|
|
(cherry picked from commit ffe308e4fcf2f276c87fd405596569ba52ad0a29)
|
|
|
|
diff --git a/ChangeLog b/ChangeLog
|
|
index ac19e98613..290515a58e 100644
|
|
--- a/ChangeLog
|
|
+++ b/ChangeLog
|
|
@@ -1,3 +1,12 @@
|
|
+2017-03-15 Joseph Myers <joseph@codesourcery.com>
|
|
+
|
|
+ * sysdeps/x86/fpu/test-math-vector-sincos.h (INIT_VEC_PTRS_LOOP):
|
|
+ Use a union when storing pointers.
|
|
+ (VECTOR_WRAPPER_fFF_2): Do not take address of integer vector and
|
|
+ cast result when passing to INIT_VEC_PTRS_LOOP.
|
|
+ (VECTOR_WRAPPER_fFF_3): Likewise.
|
|
+ (VECTOR_WRAPPER_fFF_4): Likewise.
|
|
+
|
|
2017-05-01 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
|
|
|
[BZ# 21182]
|
|
diff --git a/sysdeps/x86/fpu/test-math-vector-sincos.h b/sysdeps/x86/fpu/test-math-vector-sincos.h
|
|
index 5043b32563..95282a3ac7 100644
|
|
--- a/sysdeps/x86/fpu/test-math-vector-sincos.h
|
|
+++ b/sysdeps/x86/fpu/test-math-vector-sincos.h
|
|
@@ -17,14 +17,14 @@
|
|
License along with the GNU C Library; if not, see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
-#define INIT_VEC_PTRS_LOOP(vec, val, len) \
|
|
- do \
|
|
- { \
|
|
- for (i = 0; i < len; i++) \
|
|
- { \
|
|
- vec[i] = &val[i]; \
|
|
- } \
|
|
- } \
|
|
+#define INIT_VEC_PTRS_LOOP(vec, val, len) \
|
|
+ do \
|
|
+ { \
|
|
+ union { VEC_INT_TYPE v; __typeof__ ((val)[0]) *a[(len)]; } u; \
|
|
+ for (i = 0; i < len; i++) \
|
|
+ u.a[i] = &(val)[i]; \
|
|
+ (vec) = u.v; \
|
|
+ } \
|
|
while (0)
|
|
|
|
/* Wrapper for vector sincos/sincosf compatible with x86_64 and x32 variants
|
|
@@ -40,8 +40,8 @@ void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \
|
|
VEC_TYPE mx; \
|
|
VEC_INT_TYPE mr, mr1; \
|
|
INIT_VEC_LOOP (mx, x, VEC_LEN); \
|
|
- INIT_VEC_PTRS_LOOP (((FLOAT **) &mr), r_loc, VEC_LEN); \
|
|
- INIT_VEC_PTRS_LOOP (((FLOAT **) &mr1), r1_loc, VEC_LEN); \
|
|
+ INIT_VEC_PTRS_LOOP (mr, r_loc, VEC_LEN); \
|
|
+ INIT_VEC_PTRS_LOOP (mr1, r1_loc, VEC_LEN); \
|
|
vector_func (mx, mr, mr1); \
|
|
TEST_VEC_LOOP (r_loc, VEC_LEN); \
|
|
TEST_VEC_LOOP (r1_loc, VEC_LEN); \
|
|
@@ -63,8 +63,8 @@ void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \
|
|
VEC_TYPE mx; \
|
|
VEC_INT_TYPE mr, mr1; \
|
|
INIT_VEC_LOOP (mx, x, VEC_LEN); \
|
|
- INIT_VEC_PTRS_LOOP (((FLOAT **) &mr), r_loc, VEC_LEN/2); \
|
|
- INIT_VEC_PTRS_LOOP (((FLOAT **) &mr1), r1_loc, VEC_LEN/2); \
|
|
+ INIT_VEC_PTRS_LOOP (mr, r_loc, VEC_LEN/2); \
|
|
+ INIT_VEC_PTRS_LOOP (mr1, r1_loc, VEC_LEN/2); \
|
|
vector_func (mx, mr, mr, mr1, mr1); \
|
|
TEST_VEC_LOOP (r_loc, VEC_LEN/2); \
|
|
TEST_VEC_LOOP (r1_loc, VEC_LEN/2); \
|
|
@@ -87,8 +87,8 @@ void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \
|
|
VEC_TYPE mx; \
|
|
VEC_INT_TYPE mr, mr1; \
|
|
INIT_VEC_LOOP (mx, x, VEC_LEN); \
|
|
- INIT_VEC_PTRS_LOOP (((FLOAT **) &mr), r_loc, VEC_LEN/4); \
|
|
- INIT_VEC_PTRS_LOOP (((FLOAT **) &mr1), r1_loc, VEC_LEN/4); \
|
|
+ INIT_VEC_PTRS_LOOP (mr, r_loc, VEC_LEN/4); \
|
|
+ INIT_VEC_PTRS_LOOP (mr1, r1_loc, VEC_LEN/4); \
|
|
vector_func (mx, mr, mr, mr, mr, mr1, mr1, mr1, mr1); \
|
|
TEST_VEC_LOOP (r_loc, VEC_LEN/4); \
|
|
TEST_VEC_LOOP (r1_loc, VEC_LEN/4); \
|
|
--
|
|
2.13.1
|
|
|