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; \ })