Bug of gas (binutils-2.9.1.0.23): Wrong code for SETHI on SPARC

Andreas Borchert borchert@mathematik.uni-ulm.de
Fri Apr 2 08:04:00 GMT 1999


Dear H.J. Lu,

gas out of binutils-2.9.1.0.23 (and older versions) has a severe bug
for the SPARC platform (sparc-sun-solaris2.6), i.e. it generates
wrong code for

        sethi   0x4000,%i0

(and probably in all other cases where sethi is used without the
%hi(...)-construct).

The sethi instruction has following suggested assembly syntax
(see SPARC Architecture Manual):

        sethi   const22,reg

const22 is a 22-bit constant that is placed by sethi in the most
significant 22 bits of reg (while it zeroes the 10 least significant
bits of reg). Therefore we would expect the value 0x100000 in %i0
after the execution of ``sethi 16384''. Instead of this, gas
modifies the given constant such that 0x4000 will be found in %i0
afterwards. This would have been equivalent to

        sethi %hi(0x4000),%i0

Anyway, I would like to take this opportunity to forward my severe
thanks to you. For my compilers gas has always been a life safer. The
assembler shipped with Solaris is not just significantly slower, it has
much more severe bugs that are not that easy to live with.

Kind regards, Andreas Borchert.

-- 
Andreas Borchert, Universitaet Ulm, SAI, Helmholtzstr. 18, 89069 Ulm,  Germany
E-Mail: borchert@mathematik.uni-ulm.de
WWW:	http://www.mathematik.uni-ulm.de/sai/borchert/
PGP key available via ``finger borchert@laborix.mathematik.uni-ulm.de''


More information about the Gas2 mailing list