https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126503

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(gdb) x/8gx &u
0x420030 <u>:   0x0000000000000001      0x0000000000000000
0x420040 <u+16>:        0x0000000000000000      0x0000000000000000
0x420050 <u+32>:        0xffffffffffffffff      0xffffffffffffffff
0x420060 <u+48>:        0x000000000000ffff      0x0000000000000000
(gdb) x/6gx &v
0x420070 <v>:   0xfffffffffffffffc      0xffffffffffffffff
0x420080 <v+16>:        0xffffffffffffffff      0xffffffffffffffff
0x420090 <v+32>:        0x0000000000000000      0x0000000000000000
(gdb) x/4gx &w
0x4200a0 <w>:   0x000000000000004c      0x0000000000000000
0x4200b0 <w+16>:        0xffffffffffffffff      0x0000000000000000

where
unsigned _BitInt(400) u;
unsigned _BitInt(300) v;
_BitInt(129) w;
and
  u = foo (-1wb);
  v = bar (1wb, 3uwb);
  w = baz (100);
so, the first one has unwanted 1 bits in upper 144 bits, low 256 bits correct,
the second one unwanted 0 bits in upper 44 bits, low 256 bits correct, and
finally the
last one incorrect 1 bit in the most significant bit.
Doesn't mean it has to be a RTL issue, could be bitint lowering too, let me
check.

Reply via email to