Port-vax archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
gcc vax bug in built-in ffs function/displacement indexed addressing
Hi,
I fought against SCSI problems on my VS4000/96 and /60 with NetBSD-current:
http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=51761
It was related to tagged queueing somehow, but finally turned out to be
a gcc bug in the built-in ffs function (used in scsipi_get_tag()) and/or
"byte displacement indexed" addressing mode.
Above PR says it all, but again:
bit = ffs(periph->periph_freetags[word]);
is compiled as
15b0: ea 00 20 48 ffs $0x0,$0x20,0x50(r10)[r8],r9
15b4: aa 50 59
[...]
15c0: d6 58 incl r8
which is obviously wrong, as r8 seems to be a byte index, but variable
"word" is an index into u_int32_t periph_freetags[].
The complete disassembly of an affected scsipi_base.o is here:
http://www.netbsd.org/~flxd/scsipi_base_vax_asm.txt
Swapping built-in ffs with a generic implementation successfully worked
around the problem.
It would be great if someone more familiar with gcc vax could have a
look and come up with a fix. Thanks!
Cheers,
Felix
Home |
Main Index |
Thread Index |
Old Index