You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The (accidental) typedef of __float128 over __ieee128 and the cast
of (vector unsigned int *) constants to (vector unsigned __int128 *)
seems to violate strict-aliasing. But this is not reported unless
-Wstrict-aliasing=2 is used. The result was silently generating
incorrect code. In this case required computation was treated as
dead code and eliminated. Returning incorrect results.
GCC PR 106755.
GCC-12 corrected a long latent problem with vec_cpsgn
(swapped operands). PVECLIB followed the implementation from
previous GCC versions (GCC <= 11). This broke vector float/double
unit tests. GCC PR 101984.
The implementation of IEEE Float128 is evolving and various types
(__float128, __ieee128, _Float128, ...) are highly dependent on the
compiler version/options used. The implementation tries (again) to
#define/typedef __binary128 to the float128 type that the compiler
supports. The API uses __binary128 and avoids _Float128.
src/pveclib/vec_f128_ppc.h (__binary128): Define/typedef to
the quad-precision float type that the compiler supports.
src/pveclib/vec_f32_ppc.h (vec_copysignf32):
Unless PVECLIB_CPSGN_FIXED is defined, avoid vec_cpsgn.
src/pveclib/vec_f64_ppc.h (vec_copysignf64):
Unless PVECLIB_CPSGN_FIXED is defined, avoid vec_cpsgn.
src/testsuite/arith128_test_f32.c (test_float_cpsgn):
Swap operands/results to match GCC12.
src/testsuite/arith128_test_f64.c (test_double_cpsgn):
Swap operands/results to match GCC12.
src/testsuite/arith128_test_i128.c (test_muludq):
Change local variable 'l' type to match vec_muludq parameter.
(test_madduq)
Change local variable 'l' type to match vec_madduq parameter.
src/testsuite/vec_f128_dummy.c: Replace all usage of type
__Float128 with __binary128.
The text was updated successfully, but these errors were encountered:
https://bugzilla.redhat.com/show_bug.cgi?id=2113609
The switch to GCC-12 exposed some latent issues in pveclib-1.0.4-4
The (accidental) typedef of __float128 over __ieee128 and the cast
of (vector unsigned int *) constants to (vector unsigned __int128 *)
seems to violate strict-aliasing. But this is not reported unless
-Wstrict-aliasing=2 is used. The result was silently generating
incorrect code. In this case required computation was treated as
dead code and eliminated. Returning incorrect results.
GCC PR 106755.
GCC-12 corrected a long latent problem with vec_cpsgn
(swapped operands). PVECLIB followed the implementation from
previous GCC versions (GCC <= 11). This broke vector float/double
unit tests. GCC PR 101984.
The implementation of IEEE Float128 is evolving and various types
(__float128, __ieee128, _Float128, ...) are highly dependent on the
compiler version/options used. The implementation tries (again) to
#define/typedef __binary128 to the float128 type that the compiler
supports. The API uses __binary128 and avoids _Float128.
src/pveclib/vec_f128_ppc.h (__binary128): Define/typedef to
the quad-precision float type that the compiler supports.
src/pveclib/vec_f32_ppc.h (vec_copysignf32):
Unless PVECLIB_CPSGN_FIXED is defined, avoid vec_cpsgn.
src/pveclib/vec_f64_ppc.h (vec_copysignf64):
Unless PVECLIB_CPSGN_FIXED is defined, avoid vec_cpsgn.
src/testsuite/arith128_test_f32.c (test_float_cpsgn):
Swap operands/results to match GCC12.
src/testsuite/arith128_test_f64.c (test_double_cpsgn):
Swap operands/results to match GCC12.
src/testsuite/arith128_test_i128.c (test_muludq):
Change local variable 'l' type to match vec_muludq parameter.
(test_madduq)
Change local variable 'l' type to match vec_madduq parameter.
src/testsuite/vec_f128_dummy.c: Replace all usage of type
__Float128 with __binary128.
The text was updated successfully, but these errors were encountered: