Correct intel_syntax fsub* and fdiv* handling. Oh, how I'd like to be rid

of UNIXWARE_COMPAT.
This commit is contained in:
Alan Modra 2000-02-24 12:40:45 +00:00
parent 9aa07a8f60
commit df256a94d6
1 changed files with 9 additions and 4 deletions

View File

@ -23,13 +23,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
gcc and possibly many other programs use this reversed syntax, so gcc and possibly many other programs use this reversed syntax, so
we're stuck with it. we're stuck with it.
eg. `fsub %st(3),%st' results in st <- st - st(3) as expected, but eg. `fsub %st(3),%st' results in st = st - st(3) as expected, but
`fsub %st,%st(3)' results in st(3) <- st - st(3), rather than `fsub %st,%st(3)' results in st(3) = st - st(3), rather than
the expected st(3) <- st(3) - st ! the expected st(3) = st(3) - st
This happens with all the non-commutative arithmetic floating point This happens with all the non-commutative arithmetic floating point
operations with two register operands, where the source register is operations with two register operands, where the source register is
%st, and destination register is %st(i). Look for FloatDR below. */ %st, and destination register is %st(i). See FloatDR below.
The affected opcode map is dceX, dcfX, deeX, defX. */
#ifndef UNIXWARE_COMPAT #ifndef UNIXWARE_COMPAT
/* Set non-zero for broken, compatible instructions. Set to zero for /* Set non-zero for broken, compatible instructions. Set to zero for
@ -64,6 +66,9 @@ static const template i386_optab[] = {
#define sld_FP (sld_Suf|IgnoreSize) #define sld_FP (sld_Suf|IgnoreSize)
#define sldx_FP (sldx_Suf|IgnoreSize) #define sldx_FP (sldx_Suf|IgnoreSize)
#if UNIXWARE_COMPAT #if UNIXWARE_COMPAT
/* Someone forgot that the FloatR bit reverses the operation when not
equal to the FloatD bit. ie. Changing only FloatD results in the
destination being swapped *and* the direction being reversed. */
#define FloatDR FloatD #define FloatDR FloatD
#else #else
#define FloatDR (FloatD|FloatR) #define FloatDR (FloatD|FloatR)