parent
5089e22e27
commit
6d75030881
|
@ -211,7 +211,7 @@ secondary_reload_class (class, mode, in)
|
|||
/* Generate the rtx that comes from an address expression in the md file */
|
||||
/* The expression to be build is BASE[INDEX:SCALE]. To recognize this,
|
||||
scale must be converted from an exponent (from ASHIFT) to a
|
||||
muliplier (for MULT). */
|
||||
multiplier (for MULT). */
|
||||
rtx
|
||||
gen_indexed_expr (base, index, scale)
|
||||
rtx base, index, scale;
|
||||
|
@ -380,22 +380,55 @@ print_operand (file, x, code)
|
|||
else if (GET_CODE (x) == REG)
|
||||
fprintf (file, "%s", reg_names[REGNO (x)]);
|
||||
else if (GET_CODE (x) == MEM)
|
||||
output_address (XEXP (x, 0));
|
||||
{
|
||||
rtx tmp = XEXP (x, 0);
|
||||
#ifndef PC_RELATIVE
|
||||
if (GET_CODE (tmp) == SYMBOL_REF || GET_CODE (tmp) == LABEL_REF)
|
||||
{
|
||||
char *out = XSTR (tmp, 0);
|
||||
if (out[0] == '*')
|
||||
fprintf (file, "@%s", &out[1]);
|
||||
else
|
||||
ASM_OUTPUT_LABELREF (file, out);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
output_address (XEXP (x, 0));
|
||||
}
|
||||
else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) != DImode)
|
||||
if (GET_MODE (x) == DFmode)
|
||||
{
|
||||
union { double d; int i[2]; } u;
|
||||
u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x);
|
||||
PUT_IMMEDIATE_PREFIX(file);
|
||||
fprintf (file, "0d%.20e", u.d);
|
||||
}
|
||||
else
|
||||
{
|
||||
union { double d; int i[2]; } u;
|
||||
u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x);
|
||||
PUT_IMMEDIATE_PREFIX(file);
|
||||
fprintf (file, "0f%.20e", u.d);
|
||||
}
|
||||
{
|
||||
if (GET_MODE (x) == DFmode)
|
||||
{
|
||||
union { double d; int i[2]; } u;
|
||||
u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x);
|
||||
PUT_IMMEDIATE_PREFIX(file);
|
||||
#ifdef SEQUENT_ASM
|
||||
/* Sequent likes it's floating point constants as integers */
|
||||
fprintf (file, "0Dx%08x%08x", u.i[1], u.i[0])l
|
||||
#else
|
||||
#ifdef ENCORE_ASM
|
||||
fprintf (file, "0f%.20e", u.d);
|
||||
#else
|
||||
fprintf (file, "0d%.20e", u.d);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
union { double d; int i[2]; } u;
|
||||
u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x);
|
||||
PUT_IMMEDIATE_PREFIX(file);
|
||||
#ifdef SEQUENT_ASM
|
||||
{
|
||||
union { float f; long l; } uu;
|
||||
uu.f = u.d;
|
||||
fprintf (file, "0Fx%08x", uu.l);
|
||||
}
|
||||
#else
|
||||
fprintf (file, "0f%.20e", u.d);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PUT_IMMEDIATE_PREFIX(file);
|
||||
|
|
|
@ -57,7 +57,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#define CPP_PREDEFINES "-Dns32000 -Dns32532 -Dpc532 -Dunix"
|
||||
|
||||
/* Use pc relative addressing whenever possible,
|
||||
it's more efficient than absolute (out-ns32k.c)
|
||||
it's more efficient than absolute (ns32k.c)
|
||||
You have to fix a bug in gas 1.38.1 to make this work with gas,
|
||||
patch available from jkp@cs.hut.fi. */
|
||||
|
||||
|
@ -66,3 +66,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
/* This machine appears to use GAS syntax. */
|
||||
|
||||
#define GAS_SYNTAX
|
||||
|
||||
/* Every address needs to use a base reg. */
|
||||
|
||||
#define BASE_REG_NEEDED
|
||||
|
|
Loading…
Reference in New Issue