https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100217
--- Comment #11 from Mark Wielaard <mark at gcc dot gnu.org> ---
BTW. Disabling that test in valgrind produces another crash in another test
that looks similar:
gcc -DHAVE_CONFIG_H -I. -I../../.. -I../../.. -I../../../include
-I../../../coregrind -I../../../include -I../../../VEX/pub -I../../../VEX/pub
-DVGA_s390x=1 -DVGO_linux=1 -DVGP_s390x_linux=1 -DVGPV_s390x_linux_vanilla=1
-Winline -Wall -Wshadow -Wno-long-long -g -m64 -c -o pfpo.o pfpo.c
during RTL pass: expand
pfpo.c: In function 'main':
pfpo.c:35:3: internal compiler error: in gen_rtx_SUBREG, at emit-rtl.c:1023
35 | asm volatile(".short 0x010a\n\t"
\
| ^~~
pfpo.c:146:15: note: in expansion of macro 'PFPO'
146 | d32 = PFPO(f128_in[j], long double, _Decimal32,
PFPO_F128_TO_D32,
| ^~~~
The whole PFPO define is:
#define PFPO(initial, src_type, dst_type, fn_code, round, ret_code, cc) \
({ \
register src_type src_reg asm("f4") = initial; \
register dst_type dst_reg asm("f0"); \
register unsigned long fn asm("0") = fn_code | (round & 0xf); \
register unsigned int ret asm("1"); \
asm volatile(".short 0x010a\n\t" \
"ipm %2\n\t" \
"srl %2,28\n\t" \
:"=f"(dst_reg), "=d"(ret), "=d" (cc) \
: "f"(src_reg), "d"(fn)); \
ret_code = ret; \
dst_reg; \
})