* config/tc-mips.c (md_parse_option): Accept -mcpu=4400, 4600, and
orion.
This commit is contained in:
parent
3cdf590141
commit
55933a587a
2 changed files with 88 additions and 46 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
Tue Aug 9 11:12:13 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
|
||||||
|
|
||||||
|
* config/tc-mips.c (md_parse_option): Accept -mcpu=4400, 4600, and
|
||||||
|
orion.
|
||||||
|
|
||||||
|
Mon Aug 8 16:28:08 1994 Steve Chamberlain (sac@jonny.cygnus.com)
|
||||||
|
|
||||||
|
* as.h: Remove FOPEN_WB patch of Aug 6.
|
||||||
|
* configure.in: Configure for ho-go32 correctly.
|
||||||
|
* config/ho-go32.h: Fix copyright.
|
||||||
|
|
||||||
Mon Aug 8 11:59:51 1994 Jeff Law (law@snake.cs.utah.edu)
|
Mon Aug 8 11:59:51 1994 Jeff Law (law@snake.cs.utah.edu)
|
||||||
|
|
||||||
* gas/config/tc-hppa.c (md_pseudo_table): Delete redundant
|
* gas/config/tc-hppa.c (md_pseudo_table): Delete redundant
|
||||||
|
|
|
@ -1726,6 +1726,7 @@ macro (ip)
|
||||||
offsetT maxnum;
|
offsetT maxnum;
|
||||||
bfd_reloc_code_real_type r;
|
bfd_reloc_code_real_type r;
|
||||||
char *p;
|
char *p;
|
||||||
|
int hold_mips_optimize;
|
||||||
|
|
||||||
treg = (ip->insn_opcode >> 16) & 0x1f;
|
treg = (ip->insn_opcode >> 16) & 0x1f;
|
||||||
dreg = (ip->insn_opcode >> 11) & 0x1f;
|
dreg = (ip->insn_opcode >> 11) & 0x1f;
|
||||||
|
@ -2542,7 +2543,13 @@ macro (ip)
|
||||||
off1 = -8;
|
off1 = -8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set mips_optimize around the lui instruction to avoid
|
||||||
|
inserting an unnecessary nop after the lw. */
|
||||||
|
hold_mips_optimize = mips_optimize;
|
||||||
|
mips_optimize = 2;
|
||||||
macro_build_lui ((char *) NULL, &icnt, &expr1, AT);
|
macro_build_lui ((char *) NULL, &icnt, &expr1, AT);
|
||||||
|
mips_optimize = hold_mips_optimize;
|
||||||
|
|
||||||
macro_build ((char *) NULL, &icnt, &expr1,
|
macro_build ((char *) NULL, &icnt, &expr1,
|
||||||
mips_isa < 3 ? "addiu" : "daddiu",
|
mips_isa < 3 ? "addiu" : "daddiu",
|
||||||
"t,r,j", AT, AT, (int) BFD_RELOC_LO16);
|
"t,r,j", AT, AT, (int) BFD_RELOC_LO16);
|
||||||
|
@ -2989,7 +2996,14 @@ macro (ip)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case M_LI_SS:
|
case M_LI_SS:
|
||||||
if (mips_pic == NO_PIC)
|
if (imm_expr.X_op == O_constant)
|
||||||
|
{
|
||||||
|
load_register (&icnt, AT, &imm_expr);
|
||||||
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
|
||||||
|
"mtc1", "t,G", AT, treg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
assert (offset_expr.X_op == O_symbol
|
assert (offset_expr.X_op == O_symbol
|
||||||
&& strcmp (segment_name (S_GET_SEGMENT
|
&& strcmp (segment_name (S_GET_SEGMENT
|
||||||
|
@ -3000,20 +3014,6 @@ macro (ip)
|
||||||
treg, (int) BFD_RELOC_MIPS_LITERAL, GP);
|
treg, (int) BFD_RELOC_MIPS_LITERAL, GP);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (mips_pic == SVR4_PIC
|
|
||||||
|| mips_pic == EMBEDDED_PIC)
|
|
||||||
{
|
|
||||||
assert (imm_expr.X_op == O_constant);
|
|
||||||
load_register (&icnt, AT, &imm_expr);
|
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
|
|
||||||
"mtc1", "t,G", AT, treg);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
abort ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
case M_LI_D:
|
case M_LI_D:
|
||||||
/* We know that sym is in the .rdata section. First we get the
|
/* We know that sym is in the .rdata section. First we get the
|
||||||
|
@ -3068,15 +3068,11 @@ macro (ip)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case M_LI_DD:
|
case M_LI_DD:
|
||||||
if (mips_pic == NO_PIC
|
|
||||||
|| mips_pic == EMBEDDED_PIC)
|
|
||||||
{
|
|
||||||
/* Load a floating point number from the .lit8 section. */
|
|
||||||
assert (offset_expr.X_op == O_symbol
|
assert (offset_expr.X_op == O_symbol
|
||||||
&& strcmp (segment_name (S_GET_SEGMENT
|
|
||||||
(offset_expr.X_add_symbol)),
|
|
||||||
".lit8") == 0
|
|
||||||
&& offset_expr.X_add_number == 0);
|
&& offset_expr.X_add_number == 0);
|
||||||
|
s = segment_name (S_GET_SEGMENT (offset_expr.X_add_symbol));
|
||||||
|
if (strcmp (s, ".lit8") == 0)
|
||||||
|
{
|
||||||
if (mips_isa >= 2)
|
if (mips_isa >= 2)
|
||||||
{
|
{
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr, "ldc1",
|
macro_build ((char *) NULL, &icnt, &offset_expr, "ldc1",
|
||||||
|
@ -3087,24 +3083,29 @@ macro (ip)
|
||||||
r = BFD_RELOC_MIPS_LITERAL;
|
r = BFD_RELOC_MIPS_LITERAL;
|
||||||
goto dob;
|
goto dob;
|
||||||
}
|
}
|
||||||
else if (mips_pic == SVR4_PIC)
|
else
|
||||||
{
|
{
|
||||||
/* Load the double from the .rdata section. */
|
assert (strcmp (s, RDATA_SECTION_NAME) == 0);
|
||||||
|
if (mips_pic == SVR4_PIC)
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr,
|
macro_build ((char *) NULL, &icnt, &offset_expr,
|
||||||
mips_isa < 3 ? "lw" : "ld",
|
mips_isa < 3 ? "lw" : "ld",
|
||||||
"t,o(b)", AT, (int) BFD_RELOC_MIPS_GOT16, GP);
|
"t,o(b)", AT, (int) BFD_RELOC_MIPS_GOT16, GP);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* FIXME: This won't work for a 64 bit address. */
|
||||||
|
macro_build_lui ((char *) NULL, &icnt, &offset_expr, AT);
|
||||||
|
}
|
||||||
|
|
||||||
if (mips_isa >= 2)
|
if (mips_isa >= 2)
|
||||||
{
|
{
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr, "ldc1",
|
macro_build ((char *) NULL, &icnt, &offset_expr, "ldc1",
|
||||||
"T,o(b)", treg, (int) BFD_RELOC_LO16, GP);
|
"T,o(b)", treg, (int) BFD_RELOC_LO16, AT);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
breg = AT;
|
breg = AT;
|
||||||
r = BFD_RELOC_LO16;
|
r = BFD_RELOC_LO16;
|
||||||
goto dob;
|
goto dob;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
case M_L_DOB:
|
case M_L_DOB:
|
||||||
/* Even on a big endian machine $fn comes before $fn+1. We have
|
/* Even on a big endian machine $fn comes before $fn+1. We have
|
||||||
|
@ -3249,9 +3250,16 @@ macro (ip)
|
||||||
coproc ? treg + 1 : treg,
|
coproc ? treg + 1 : treg,
|
||||||
(int) BFD_RELOC_MIPS_GPREL, tempreg);
|
(int) BFD_RELOC_MIPS_GPREL, tempreg);
|
||||||
offset_expr.X_add_number += 4;
|
offset_expr.X_add_number += 4;
|
||||||
|
|
||||||
|
/* Set mips_optimize to 2 to avoid inserting an
|
||||||
|
undesired nop. */
|
||||||
|
hold_mips_optimize = mips_optimize;
|
||||||
|
mips_optimize = 2;
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr, s, fmt,
|
macro_build ((char *) NULL, &icnt, &offset_expr, s, fmt,
|
||||||
coproc ? treg : treg + 1,
|
coproc ? treg : treg + 1,
|
||||||
(int) BFD_RELOC_MIPS_GPREL, tempreg);
|
(int) BFD_RELOC_MIPS_GPREL, tempreg);
|
||||||
|
mips_optimize = hold_mips_optimize;
|
||||||
|
|
||||||
p = frag_var (rs_machine_dependent, 12 + off, 0,
|
p = frag_var (rs_machine_dependent, 12 + off, 0,
|
||||||
RELAX_ENCODE (8 + off, 12 + off, 0, 4 + off, 1,
|
RELAX_ENCODE (8 + off, 12 + off, 0, 4 + off, 1,
|
||||||
used_at && mips_noat),
|
used_at && mips_noat),
|
||||||
|
@ -3331,9 +3339,16 @@ macro (ip)
|
||||||
coproc ? treg + 1 : treg,
|
coproc ? treg + 1 : treg,
|
||||||
(int) BFD_RELOC_LO16, AT);
|
(int) BFD_RELOC_LO16, AT);
|
||||||
expr1.X_add_number += 4;
|
expr1.X_add_number += 4;
|
||||||
|
|
||||||
|
/* Set mips_optimize to 2 to avoid inserting an undesired
|
||||||
|
nop. */
|
||||||
|
hold_mips_optimize = mips_optimize;
|
||||||
|
mips_optimize = 2;
|
||||||
macro_build ((char *) NULL, &icnt, &expr1, s, fmt,
|
macro_build ((char *) NULL, &icnt, &expr1, s, fmt,
|
||||||
coproc ? treg : treg + 1,
|
coproc ? treg : treg + 1,
|
||||||
(int) BFD_RELOC_LO16, AT);
|
(int) BFD_RELOC_LO16, AT);
|
||||||
|
mips_optimize = hold_mips_optimize;
|
||||||
|
|
||||||
(void) frag_var (rs_machine_dependent, 0, 0,
|
(void) frag_var (rs_machine_dependent, 0, 0,
|
||||||
RELAX_ENCODE (0, 0, -16 - off, -8, 1, 0),
|
RELAX_ENCODE (0, 0, -16 - off, -8, 1, 0),
|
||||||
offset_expr.X_add_symbol, (long) 0,
|
offset_expr.X_add_symbol, (long) 0,
|
||||||
|
@ -4449,15 +4464,15 @@ mips_ip (str, ip)
|
||||||
f -- immediate value
|
f -- immediate value
|
||||||
l -- .lit4
|
l -- .lit4
|
||||||
|
|
||||||
When generating SVR4 PIC code, we do not use the
|
The .lit4 and .lit8 sections are only used if
|
||||||
.lit8 or .lit4 sections at all, in order to
|
permitted by the -G argument.
|
||||||
reserve the entire global offset table. When
|
|
||||||
generating embedded PIC code, we use the .lit8
|
When generating embedded PIC code, we use the
|
||||||
section but not the .lit4 section (we can do .lit4
|
.lit8 section but not the .lit4 section (we can do
|
||||||
inline easily; we need to put .lit8 somewhere in
|
.lit4 inline easily; we need to put .lit8
|
||||||
the data segment, and using .lit8 permits the
|
somewhere in the data segment, and using .lit8
|
||||||
linker to eventually combine identical .lit8
|
permits the linker to eventually combine identical
|
||||||
entries). */
|
.lit8 entries). */
|
||||||
|
|
||||||
f64 = *args == 'F' || *args == 'L';
|
f64 = *args == 'F' || *args == 'L';
|
||||||
|
|
||||||
|
@ -4477,7 +4492,12 @@ mips_ip (str, ip)
|
||||||
assert (length == (f64 ? 8 : 4));
|
assert (length == (f64 ? 8 : 4));
|
||||||
|
|
||||||
if (*args == 'f'
|
if (*args == 'f'
|
||||||
|| (mips_pic != NO_PIC && *args == 'l'))
|
|| (*args == 'l'
|
||||||
|
&& (mips_pic == EMBEDDED_PIC
|
||||||
|
#ifdef GPOPT
|
||||||
|
|| g_switch_value < 4
|
||||||
|
#endif
|
||||||
|
)))
|
||||||
{
|
{
|
||||||
imm_expr.X_op = O_constant;
|
imm_expr.X_op = O_constant;
|
||||||
if (byte_order == LITTLE_ENDIAN)
|
if (byte_order == LITTLE_ENDIAN)
|
||||||
|
@ -4505,15 +4525,19 @@ mips_ip (str, ip)
|
||||||
{
|
{
|
||||||
default: /* unused default case avoids warnings. */
|
default: /* unused default case avoids warnings. */
|
||||||
case 'L':
|
case 'L':
|
||||||
newname = (mips_pic != SVR4_PIC
|
newname = ".lit8";
|
||||||
? ".lit8"
|
#ifdef GPOPT
|
||||||
: RDATA_SECTION_NAME);
|
if (g_switch_value < 8)
|
||||||
|
newname = RDATA_SECTION_NAME;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 'F':
|
case 'F':
|
||||||
newname = RDATA_SECTION_NAME;
|
newname = RDATA_SECTION_NAME;
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
assert (mips_pic == NO_PIC);
|
#ifdef GPOPT
|
||||||
|
assert (g_switch_value >= 4);
|
||||||
|
#endif
|
||||||
newname = ".lit4";
|
newname = ".lit4";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -5019,7 +5043,9 @@ md_parse_option (c, arg)
|
||||||
case '4':
|
case '4':
|
||||||
if (strcmp (p, "4000") == 0
|
if (strcmp (p, "4000") == 0
|
||||||
|| strcmp (p, "4k") == 0
|
|| strcmp (p, "4k") == 0
|
||||||
|| strcmp (p, "4K") == 0)
|
|| strcmp (p, "4K") == 0
|
||||||
|
|| strcmp (p, "4400") == 0
|
||||||
|
|| strcmp (p, "4600") == 0)
|
||||||
mips_isa = 3;
|
mips_isa = 3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -5029,6 +5055,11 @@ md_parse_option (c, arg)
|
||||||
|| strcmp (p, "6K") == 0)
|
|| strcmp (p, "6K") == 0)
|
||||||
mips_isa = 2;
|
mips_isa = 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
if (strcmp (p, "orion") == 0)
|
||||||
|
mips_isa = 3;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mips_isa == -1)
|
if (mips_isa == -1)
|
||||||
|
|
Loading…
Reference in a new issue