public inbox for gas2@sourceware.org
 help / color / mirror / Atom feed
From: Alan Modra <alan@spri.levels.unisa.edu.au>
To: hjl@lucon.org (H.J. Lu)
Cc: mikeg@weiden.de, gas2@cygnus.com, egcs@cygnus.com, gcc2@cygnus.com
Subject: Re: gcc generates invalid i386 fmulp
Date: Tue, 14 Apr 1998 16:45:00 -0000	[thread overview]
Message-ID: <199804142345.JAA08056@mullet.Levels.UniSA.Edu.Au> (raw)
In-Reply-To: <m0yP7Uc-00058vC@ocean.lucon.org>

>hjl@lucon.org (H.J. Lu):
> > 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:
> [deleted]

Yes, I know it's tricky.  Basically, Unixware got their assembler
wrong, and we're stuck with an inconsistent syntax.  A test case for
fmulp is glibc-2.0.6/sysdeps/libm-ieee754/s_nextafterf.c.  I put the
preprocessed file at
ftp://mullet.levels.unisa.edu.au/private/teabag/s_nextafterf.i
Mike Galbraith may be able to give you a .i file for the fsubp case;
I didn't have the right version of glibc.

From the start of binutils/include/opcodes/i386.h:

/* The UnixWare assembler, and possibly other ix86 assemblers,
   generate floating point instructions with reversed source and
   destination registers in certain cases.  Unfortunately, gcc and
   possibly many other programs use this reversed syntax, so we're
   stuck with it.

   eg. `fsub %st(3),%st' results in st <- st - st(3) as expected, but
   `fusb %st,%st(3)' results in st(3) <- st - st(3), rather than
   the expected st(3) <- st(3) - st !

   This happens with all the non-commutative arithmetic floating point
   operations with two register operands, where the source register is
   %st, and destination register is %st(i).  Look for FloatDR below.
*/

#ifndef UNIXWARE_COMPAT
/* Set non-zero for broken, compatible instructions.  Set to zero for
   non-broken opcodes at your peril.  gcc generates UnixWare
   compatible instructions.  */
#define UNIXWARE_COMPAT 1
#endif

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

I haven't diverged from the UnixWare syntax, even though I'd dearly
like to.  We just put out a warning for the cases where gcc generates
instructions **that won't assemble on UnixWare**.  Ian Taylor was kind
enough to run a number of test cases through a UnixWare assembler for
me.

Regards, Alan Modra

  reply	other threads:[~1998-04-14 16:45 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-04-14  0:15 Alan Modra
1998-04-14  8:19 ` H.J. Lu
1998-04-14 16:45   ` Alan Modra [this message]
1998-04-14 20:18     ` Michael L. Galbraith
1998-04-14 20:30       ` H.J. Lu
1998-04-14 21:35         ` Michael L. Galbraith
1998-04-14 20:44       ` H.J. Lu
1998-04-15  7:18   ` Alan Modra
1998-04-15  9:01     ` Robert Lipe
1998-04-15 10:05       ` Ulrich Drepper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=199804142345.JAA08056@mullet.Levels.UniSA.Edu.Au \
    --to=alan@spri.levels.unisa.edu.au \
    --cc=egcs@cygnus.com \
    --cc=gas2@cygnus.com \
    --cc=gcc2@cygnus.com \
    --cc=hjl@lucon.org \
    --cc=mikeg@weiden.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).