This is the mail archive of the gas2@sourceware.cygnus.com mailing list for the gas2 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: gcc generates invalid i386 fmulp


> 
> Hello all,
>   I've been doing a little work on gas for i386, tidying up a few
> things and adding reasonably strict operand/suffix checking.  The new
> gas has already found a couple of errors in the linux kernel asm, one
> in glibc1, and a problem with gcc.
> 
> For anyone who's interested, the gas patches can be found at
> ftp://mullet.levels.unisa.edu.au/private/teabag/gas-980407-alan.diff.gz
> They should apply to binutils-2.9 without problems too.
> 
> The gcc problem (found by mikeg@weiden.de (Michael L. Galbraith)),
> when compiling glibc2 is that gcc will generate instructions like
> 	`fsubp %st(1),%st'
> 

Can you show me a small test case please? It is very tricky. Here are
the ChangeLog entries:

Mon Apr 14 14:56:58 1997  Ian Lance Taylor  <ian@cygnus.com>

        * i386.h: Change the opcodes for fsubp, fsubrp, fdivp, and fdivrp       
        with no arguments to match that generated by the UnixWare
        assembler.

Sat Apr  5 13:14:05 1997  Ian Lance Taylor  <ian@cygnus.com>

        * i386.h: Revert last patch for the NON_BROKEN_OPCODES cases.  

Fri Apr  4 14:02:32 1997  Ian Lance Taylor  <ian@cygnus.com>

        * i386.h: Correct opcode values for fsubp, fsubrp, fdivp, and
        fdivrp.

It is very different from Intel and very confusing. But changing it
will break many things.

Thanks.

H.J.