open-power-sdk / pveclib

Power Vector Library
Apache License 2.0
29 stars 8 forks source link

pveclib: FTBFS in Fedora rawhide/f37 #169

Open munroesj52 opened 2 years ago

munroesj52 commented 2 years ago

https://bugzilla.redhat.com/show_bug.cgi?id=2113609 The switch to GCC-12 exposed some latent issues in pveclib-1.0.4-4 1) 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. 2) 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. 3) 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.