Resolve FTBFS [Bug 2113609] pveclib in rawhide/f37
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.
-