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

Reply via email to