Hi! When these functions are called with integer minimum, there is UB on the libgcc side. Fixed in the obvious way, the code in the end wants ABSU_EXPR behavior.
Bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk as obvious. 2021-02-24 Jakub Jelinek <ja...@redhat.com> PR libgcc/99236 * libgcc2.c (__powisf2, __powidf2, __powitf2, __powixf2): Perform negation of m in unsigned type. --- libgcc/libgcc2.c.jj 2021-01-04 10:25:53.727065175 +0100 +++ libgcc/libgcc2.c 2021-02-24 13:33:38.415470027 +0100 @@ -1834,7 +1834,7 @@ __fixunssfSI (SFtype a) TYPE NAME (TYPE x, int m) { - unsigned int n = m < 0 ? -m : m; + unsigned int n = m < 0 ? -(unsigned int) m : (unsigned int) m; TYPE y = n % 2 ? x : 1; while (n >>= 1) { Jakub