Skip to content

Releases: open-power-sdk/pveclib

Fixes for Fedora 37/GCC12

16 Sep 19:16
e3ecd3b
Compare
Choose a tag to compare

Resolve FTBFS [Bug 2113609] pveclib in rawhide/f37

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.