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 */
|
/* 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,
|
/* The expression to be build is BASE[INDEX:SCALE]. To recognize this,
|
||||||
scale must be converted from an exponent (from ASHIFT) to a
|
scale must be converted from an exponent (from ASHIFT) to a
|
||||||
muliplier (for MULT). */
|
multiplier (for MULT). */
|
||||||
rtx
|
rtx
|
||||||
gen_indexed_expr (base, index, scale)
|
gen_indexed_expr (base, index, scale)
|
||||||
rtx base, index, scale;
|
rtx base, index, scale;
|
||||||
|
@ -380,22 +380,55 @@ print_operand (file, x, code)
|
||||||
else if (GET_CODE (x) == REG)
|
else if (GET_CODE (x) == REG)
|
||||||
fprintf (file, "%s", reg_names[REGNO (x)]);
|
fprintf (file, "%s", reg_names[REGNO (x)]);
|
||||||
else if (GET_CODE (x) == MEM)
|
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)
|
else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) != DImode)
|
||||||
if (GET_MODE (x) == DFmode)
|
{
|
||||||
{
|
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);
|
union { double d; int i[2]; } u;
|
||||||
PUT_IMMEDIATE_PREFIX(file);
|
u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x);
|
||||||
fprintf (file, "0d%.20e", u.d);
|
PUT_IMMEDIATE_PREFIX(file);
|
||||||
}
|
#ifdef SEQUENT_ASM
|
||||||
else
|
/* Sequent likes it's floating point constants as integers */
|
||||||
{
|
fprintf (file, "0Dx%08x%08x", u.i[1], u.i[0])l
|
||||||
union { double d; int i[2]; } u;
|
#else
|
||||||
u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x);
|
#ifdef ENCORE_ASM
|
||||||
PUT_IMMEDIATE_PREFIX(file);
|
fprintf (file, "0f%.20e", u.d);
|
||||||
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
|
else
|
||||||
{
|
{
|
||||||
PUT_IMMEDIATE_PREFIX(file);
|
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"
|
#define CPP_PREDEFINES "-Dns32000 -Dns32532 -Dpc532 -Dunix"
|
||||||
|
|
||||||
/* Use pc relative addressing whenever possible,
|
/* 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,
|
You have to fix a bug in gas 1.38.1 to make this work with gas,
|
||||||
patch available from jkp@cs.hut.fi. */
|
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. */
|
/* This machine appears to use GAS syntax. */
|
||||||
|
|
||||||
#define GAS_SYNTAX
|
#define GAS_SYNTAX
|
||||||
|
|
||||||
|
/* Every address needs to use a base reg. */
|
||||||
|
|
||||||
|
#define BASE_REG_NEEDED
|
||||||
|
|
Loading…
Reference in New Issue