* config/tc-mips.c (mips_emit_delays): Replace magic constant for RA
by the define. Remove superfluous check of mips_opts.mips16. (append_insn): Likewise. Canonicalize variable increments. (macro_build): Canonicalize variable increments. (macro_build_lui): Likewise. (load_register): Likewise. (load_address): Move pointer initialization. (macro): Move pointer to a more local scope. Canonicalize variable increments. Better comments. Replace magic constant for RA by the define. (macro2): Replace magic constant for RA by the define. Canonicalize variable increments. (mips_ip): Canonicalize variable increments. (mips16_ip): Replace magic constant for RA by the define. (my_getSmallParser): Canonicalize variable increments/decrements. (my_getPercentOp): Likewise. (my_getSmallExpression): Likewise. (s_align): Likewise. (s_mipsset): Likewise. (s_cpsetup): Likewise. (s_insn): Remove superfluous check of mips_opts.mips16. (s_mips_stab): Likewise. (mips_handle_align): Canonicalize variable increments. (s_mips_ent): Likewise. (s_mips_end): Add comment.
This commit is contained in:
parent
f2c762e031
commit
f9419b056f
2 changed files with 96 additions and 62 deletions
|
@ -1,3 +1,31 @@
|
||||||
|
2002-05-26 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
|
||||||
|
|
||||||
|
* config/tc-mips.c (mips_emit_delays): Replace magic constant for RA
|
||||||
|
by the define. Remove superfluous check of mips_opts.mips16.
|
||||||
|
(append_insn): Likewise. Canonicalize variable increments.
|
||||||
|
(macro_build): Canonicalize variable increments.
|
||||||
|
(macro_build_lui): Likewise.
|
||||||
|
(load_register): Likewise.
|
||||||
|
(load_address): Move pointer initialization.
|
||||||
|
(macro): Move pointer to a more local scope. Canonicalize variable
|
||||||
|
increments. Better comments. Replace magic constant for RA by the
|
||||||
|
define.
|
||||||
|
(macro2): Replace magic constant for RA by the define. Canonicalize
|
||||||
|
variable increments.
|
||||||
|
(mips_ip): Canonicalize variable increments.
|
||||||
|
(mips16_ip): Replace magic constant for RA by the define.
|
||||||
|
(my_getSmallParser): Canonicalize variable increments/decrements.
|
||||||
|
(my_getPercentOp): Likewise.
|
||||||
|
(my_getSmallExpression): Likewise.
|
||||||
|
(s_align): Likewise.
|
||||||
|
(s_mipsset): Likewise.
|
||||||
|
(s_cpsetup): Likewise.
|
||||||
|
(s_insn): Remove superfluous check of mips_opts.mips16.
|
||||||
|
(s_mips_stab): Likewise.
|
||||||
|
(mips_handle_align): Canonicalize variable increments.
|
||||||
|
(s_mips_ent): Likewise.
|
||||||
|
(s_mips_end): Add comment.
|
||||||
|
|
||||||
2002-05-26 Jason Thorpe <thorpej@wasabisystems.com>
|
2002-05-26 Jason Thorpe <thorpej@wasabisystems.com>
|
||||||
|
|
||||||
* configure.in: Use ns32k-*-netbsd* instead of ns32k-pc532-netbsd*.
|
* configure.in: Use ns32k-*-netbsd* instead of ns32k-pc532-netbsd*.
|
||||||
|
|
|
@ -1656,8 +1656,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
|
||||||
int nops = 0;
|
int nops = 0;
|
||||||
|
|
||||||
/* Mark instruction labels in mips16 mode. */
|
/* Mark instruction labels in mips16 mode. */
|
||||||
if (mips_opts.mips16)
|
mips16_mark_labels ();
|
||||||
mips16_mark_labels ();
|
|
||||||
|
|
||||||
prev_pinfo = prev_insn.insn_mo->pinfo;
|
prev_pinfo = prev_insn.insn_mo->pinfo;
|
||||||
pinfo = ip->insn_mo->pinfo;
|
pinfo = ip->insn_mo->pinfo;
|
||||||
|
@ -1815,7 +1814,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
|
||||||
MIPS_GR_REG))
|
MIPS_GR_REG))
|
||||||
|
|
||||||
{
|
{
|
||||||
nops += 1;
|
++nops;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (prev_pinfo & INSN_READ_LO)
|
else if (prev_pinfo & INSN_READ_LO)
|
||||||
|
@ -1841,7 +1840,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
|
||||||
else if (mips_opts.mips16
|
else if (mips_opts.mips16
|
||||||
&& (mips_optimize == 0
|
&& (mips_optimize == 0
|
||||||
|| (pinfo & MIPS16_INSN_BRANCH)))
|
|| (pinfo & MIPS16_INSN_BRANCH)))
|
||||||
nops += 1;
|
++nops;
|
||||||
}
|
}
|
||||||
else if (prev_insn.insn_mo->pinfo & INSN_READ_HI)
|
else if (prev_insn.insn_mo->pinfo & INSN_READ_HI)
|
||||||
{
|
{
|
||||||
|
@ -1863,7 +1862,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
|
||||||
else if (mips_opts.mips16
|
else if (mips_opts.mips16
|
||||||
&& (mips_optimize == 0
|
&& (mips_optimize == 0
|
||||||
|| (pinfo & MIPS16_INSN_BRANCH)))
|
|| (pinfo & MIPS16_INSN_BRANCH)))
|
||||||
nops += 1;
|
++nops;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the previous instruction was in a noreorder section, then
|
/* If the previous instruction was in a noreorder section, then
|
||||||
|
@ -1950,7 +1949,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
|
||||||
val = (valueT) frag_now_fix ();
|
val = (valueT) frag_now_fix ();
|
||||||
/* mips16 text labels are stored as odd. */
|
/* mips16 text labels are stored as odd. */
|
||||||
if (mips_opts.mips16)
|
if (mips_opts.mips16)
|
||||||
val += 1;
|
++val;
|
||||||
S_SET_VALUE (l->label, val);
|
S_SET_VALUE (l->label, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2248,7 +2247,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
|
||||||
if (pinfo & INSN_READ_GPR_S)
|
if (pinfo & INSN_READ_GPR_S)
|
||||||
mips_gprmask |= 1 << ((ip->insn_opcode >> OP_SH_RS) & OP_MASK_RS);
|
mips_gprmask |= 1 << ((ip->insn_opcode >> OP_SH_RS) & OP_MASK_RS);
|
||||||
if (pinfo & INSN_WRITE_GPR_31)
|
if (pinfo & INSN_WRITE_GPR_31)
|
||||||
mips_gprmask |= 1 << 31;
|
mips_gprmask |= 1 << RA;
|
||||||
if (pinfo & INSN_WRITE_FPR_D)
|
if (pinfo & INSN_WRITE_FPR_D)
|
||||||
mips_cprmask[1] |= 1 << ((ip->insn_opcode >> OP_SH_FD) & OP_MASK_FD);
|
mips_cprmask[1] |= 1 << ((ip->insn_opcode >> OP_SH_FD) & OP_MASK_FD);
|
||||||
if ((pinfo & (INSN_WRITE_FPR_S | INSN_READ_FPR_S)) != 0)
|
if ((pinfo & (INSN_WRITE_FPR_S | INSN_READ_FPR_S)) != 0)
|
||||||
|
@ -2441,7 +2440,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
|
||||||
|| ((pinfo & INSN_WRITE_GPR_31)
|
|| ((pinfo & INSN_WRITE_GPR_31)
|
||||||
&& (((prev_insn.insn_opcode >> OP_SH_RT)
|
&& (((prev_insn.insn_opcode >> OP_SH_RT)
|
||||||
& OP_MASK_RT)
|
& OP_MASK_RT)
|
||||||
== 31))))
|
== RA))))
|
||||||
|| (! mips_opts.mips16
|
|| (! mips_opts.mips16
|
||||||
&& (prev_pinfo & INSN_WRITE_GPR_D)
|
&& (prev_pinfo & INSN_WRITE_GPR_D)
|
||||||
&& (((pinfo & INSN_WRITE_GPR_D)
|
&& (((pinfo & INSN_WRITE_GPR_D)
|
||||||
|
@ -2450,7 +2449,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
|
||||||
|| ((pinfo & INSN_WRITE_GPR_31)
|
|| ((pinfo & INSN_WRITE_GPR_31)
|
||||||
&& (((prev_insn.insn_opcode >> OP_SH_RD)
|
&& (((prev_insn.insn_opcode >> OP_SH_RD)
|
||||||
& OP_MASK_RD)
|
& OP_MASK_RD)
|
||||||
== 31))))
|
== RA))))
|
||||||
|| (mips_opts.mips16
|
|| (mips_opts.mips16
|
||||||
&& (pinfo & MIPS16_INSN_WRITE_31)
|
&& (pinfo & MIPS16_INSN_WRITE_31)
|
||||||
&& ((prev_pinfo & MIPS16_INSN_WRITE_31)
|
&& ((prev_pinfo & MIPS16_INSN_WRITE_31)
|
||||||
|
@ -2468,7 +2467,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
|
||||||
MIPS_GR_REG))
|
MIPS_GR_REG))
|
||||||
|| (! mips_opts.mips16
|
|| (! mips_opts.mips16
|
||||||
&& (pinfo & INSN_WRITE_GPR_31)
|
&& (pinfo & INSN_WRITE_GPR_31)
|
||||||
&& insn_uses_reg (&prev_insn, 31, MIPS_GR_REG))
|
&& insn_uses_reg (&prev_insn, RA, MIPS_GR_REG))
|
||||||
|| (mips_opts.mips16
|
|| (mips_opts.mips16
|
||||||
&& (pinfo & MIPS16_INSN_WRITE_31)
|
&& (pinfo & MIPS16_INSN_WRITE_31)
|
||||||
&& insn_uses_reg (&prev_insn, RA, MIPS_GR_REG))
|
&& insn_uses_reg (&prev_insn, RA, MIPS_GR_REG))
|
||||||
|
@ -2826,14 +2825,14 @@ mips_emit_delays (insns)
|
||||||
val = (valueT) frag_now_fix ();
|
val = (valueT) frag_now_fix ();
|
||||||
/* mips16 text labels are stored as odd. */
|
/* mips16 text labels are stored as odd. */
|
||||||
if (mips_opts.mips16)
|
if (mips_opts.mips16)
|
||||||
val += 1;
|
++val;
|
||||||
S_SET_VALUE (l->label, val);
|
S_SET_VALUE (l->label, val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark instruction labels in mips16 mode. */
|
/* Mark instruction labels in mips16 mode. */
|
||||||
if (mips_opts.mips16 && insns)
|
if (insns)
|
||||||
mips16_mark_labels ();
|
mips16_mark_labels ();
|
||||||
|
|
||||||
mips_no_prev_insn (insns);
|
mips_no_prev_insn (insns);
|
||||||
|
@ -2894,7 +2893,7 @@ macro_build (place, counter, ep, name, fmt, va_alist)
|
||||||
as_warn (_("Macro instruction expanded into multiple instructions in a branch delay slot"));
|
as_warn (_("Macro instruction expanded into multiple instructions in a branch delay slot"));
|
||||||
|
|
||||||
if (place == NULL)
|
if (place == NULL)
|
||||||
*counter += 1; /* bump instruction counter */
|
++*counter; /* bump instruction counter */
|
||||||
|
|
||||||
if (mips_opts.mips16)
|
if (mips_opts.mips16)
|
||||||
{
|
{
|
||||||
|
@ -3254,7 +3253,7 @@ macro_build_lui (place, counter, ep, regnum)
|
||||||
as_warn (_("Macro instruction expanded into multiple instructions"));
|
as_warn (_("Macro instruction expanded into multiple instructions"));
|
||||||
|
|
||||||
if (place == NULL)
|
if (place == NULL)
|
||||||
*counter += 1; /* bump instruction counter */
|
++*counter; /* bump instruction counter */
|
||||||
|
|
||||||
insn.insn_mo = (struct mips_opcode *) hash_find (op_hash, name);
|
insn.insn_mo = (struct mips_opcode *) hash_find (op_hash, name);
|
||||||
assert (insn.insn_mo);
|
assert (insn.insn_mo);
|
||||||
|
@ -3548,7 +3547,7 @@ load_register (counter, reg, ep, dbl)
|
||||||
(shift >= 32) ? shift - 32 : shift);
|
(shift >= 32) ? shift - 32 : shift);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
shift++;
|
++shift;
|
||||||
}
|
}
|
||||||
while (shift <= (64 - 16));
|
while (shift <= (64 - 16));
|
||||||
|
|
||||||
|
@ -3668,7 +3667,7 @@ load_address (counter, reg, ep, dbl, used_at)
|
||||||
int dbl;
|
int dbl;
|
||||||
int *used_at;
|
int *used_at;
|
||||||
{
|
{
|
||||||
char *p;
|
char *p = NULL;
|
||||||
|
|
||||||
if (ep->X_op != O_constant
|
if (ep->X_op != O_constant
|
||||||
&& ep->X_op != O_symbol)
|
&& ep->X_op != O_symbol)
|
||||||
|
@ -3711,8 +3710,6 @@ load_address (counter, reg, ep, dbl, used_at)
|
||||||
*/
|
*/
|
||||||
if (dbl)
|
if (dbl)
|
||||||
{
|
{
|
||||||
p = NULL;
|
|
||||||
|
|
||||||
/* We don't do GP optimization for now because RELAX_ENCODE can't
|
/* We don't do GP optimization for now because RELAX_ENCODE can't
|
||||||
hold the data for such large chunks. */
|
hold the data for such large chunks. */
|
||||||
|
|
||||||
|
@ -3750,7 +3747,6 @@ load_address (counter, reg, ep, dbl, used_at)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p = NULL;
|
|
||||||
if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
|
if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
|
||||||
&& ! nopic_need_relax (ep->X_add_symbol, 1))
|
&& ! nopic_need_relax (ep->X_add_symbol, 1))
|
||||||
{
|
{
|
||||||
|
@ -3925,7 +3921,6 @@ macro (ip)
|
||||||
offsetT maxnum;
|
offsetT maxnum;
|
||||||
int off;
|
int off;
|
||||||
bfd_reloc_code_real_type r;
|
bfd_reloc_code_real_type r;
|
||||||
char *p;
|
|
||||||
int hold_mips_optimize;
|
int hold_mips_optimize;
|
||||||
|
|
||||||
assert (! mips_opts.mips16);
|
assert (! mips_opts.mips16);
|
||||||
|
@ -4119,7 +4114,7 @@ macro (ip)
|
||||||
}
|
}
|
||||||
if (imm_expr.X_op != O_constant)
|
if (imm_expr.X_op != O_constant)
|
||||||
as_bad (_("Unsupported large constant"));
|
as_bad (_("Unsupported large constant"));
|
||||||
imm_expr.X_add_number++;
|
++imm_expr.X_add_number;
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
case M_BGE_I:
|
case M_BGE_I:
|
||||||
case M_BGEL_I:
|
case M_BGEL_I:
|
||||||
|
@ -4188,7 +4183,7 @@ macro (ip)
|
||||||
goto do_false;
|
goto do_false;
|
||||||
if (imm_expr.X_op != O_constant)
|
if (imm_expr.X_op != O_constant)
|
||||||
as_bad (_("Unsupported large constant"));
|
as_bad (_("Unsupported large constant"));
|
||||||
imm_expr.X_add_number++;
|
++imm_expr.X_add_number;
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
case M_BGEU_I:
|
case M_BGEU_I:
|
||||||
case M_BGEUL_I:
|
case M_BGEUL_I:
|
||||||
|
@ -4283,7 +4278,7 @@ macro (ip)
|
||||||
goto do_true;
|
goto do_true;
|
||||||
if (imm_expr.X_op != O_constant)
|
if (imm_expr.X_op != O_constant)
|
||||||
as_bad (_("Unsupported large constant"));
|
as_bad (_("Unsupported large constant"));
|
||||||
imm_expr.X_add_number++;
|
++imm_expr.X_add_number;
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
case M_BLT_I:
|
case M_BLT_I:
|
||||||
case M_BLTL_I:
|
case M_BLTL_I:
|
||||||
|
@ -4333,7 +4328,7 @@ macro (ip)
|
||||||
goto do_true;
|
goto do_true;
|
||||||
if (imm_expr.X_op != O_constant)
|
if (imm_expr.X_op != O_constant)
|
||||||
as_bad (_("Unsupported large constant"));
|
as_bad (_("Unsupported large constant"));
|
||||||
imm_expr.X_add_number++;
|
++imm_expr.X_add_number;
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
case M_BLTU_I:
|
case M_BLTU_I:
|
||||||
case M_BLTUL_I:
|
case M_BLTUL_I:
|
||||||
|
@ -4704,7 +4699,7 @@ macro (ip)
|
||||||
dsll $tempreg,16
|
dsll $tempreg,16
|
||||||
daddiu $tempreg,<sym> (BFD_RELOC_LO16)
|
daddiu $tempreg,<sym> (BFD_RELOC_LO16)
|
||||||
*/
|
*/
|
||||||
p = NULL;
|
char *p = NULL;
|
||||||
if (HAVE_64BIT_ADDRESSES)
|
if (HAVE_64BIT_ADDRESSES)
|
||||||
{
|
{
|
||||||
/* We don't do GP optimization for now because RELAX_ENCODE can't
|
/* We don't do GP optimization for now because RELAX_ENCODE can't
|
||||||
|
@ -4805,6 +4800,7 @@ macro (ip)
|
||||||
if (expr1.X_add_number == 0)
|
if (expr1.X_add_number == 0)
|
||||||
{
|
{
|
||||||
int off;
|
int off;
|
||||||
|
char *p;
|
||||||
|
|
||||||
if (breg == 0)
|
if (breg == 0)
|
||||||
off = 0;
|
off = 0;
|
||||||
|
@ -4894,6 +4890,7 @@ macro (ip)
|
||||||
else if (mips_pic == SVR4_PIC)
|
else if (mips_pic == SVR4_PIC)
|
||||||
{
|
{
|
||||||
int gpdel;
|
int gpdel;
|
||||||
|
char *p;
|
||||||
int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
|
int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
|
||||||
int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
|
int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
|
||||||
|
|
||||||
|
@ -5199,11 +5196,13 @@ macro (ip)
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr, "jal", "a");
|
macro_build ((char *) NULL, &icnt, &offset_expr, "jal", "a");
|
||||||
else if (mips_pic == SVR4_PIC)
|
else if (mips_pic == SVR4_PIC)
|
||||||
{
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
/* If this is a reference to an external symbol, and we are
|
/* If this is a reference to an external symbol, and we are
|
||||||
using a small GOT, we want
|
using a small GOT, we want
|
||||||
lw $25,<sym>($gp) (BFD_RELOC_MIPS_CALL16)
|
lw $25,<sym>($gp) (BFD_RELOC_MIPS_CALL16)
|
||||||
nop
|
nop
|
||||||
jalr $25
|
jalr $ra,$25
|
||||||
nop
|
nop
|
||||||
lw $gp,cprestore($sp)
|
lw $gp,cprestore($sp)
|
||||||
The cprestore value is set using the .cprestore
|
The cprestore value is set using the .cprestore
|
||||||
|
@ -5212,14 +5211,14 @@ macro (ip)
|
||||||
addu $25,$25,$gp
|
addu $25,$25,$gp
|
||||||
lw $25,<sym>($25) (BFD_RELOC_MIPS_CALL_LO16)
|
lw $25,<sym>($25) (BFD_RELOC_MIPS_CALL_LO16)
|
||||||
nop
|
nop
|
||||||
jalr $25
|
jalr $ra,$25
|
||||||
nop
|
nop
|
||||||
lw $gp,cprestore($sp)
|
lw $gp,cprestore($sp)
|
||||||
If the symbol is not external, we want
|
If the symbol is not external, we want
|
||||||
lw $25,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
|
lw $25,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
|
||||||
nop
|
nop
|
||||||
addiu $25,$25,<sym> (BFD_RELOC_LO16)
|
addiu $25,$25,<sym> (BFD_RELOC_LO16)
|
||||||
jalr $25
|
jalr $ra,$25
|
||||||
nop
|
nop
|
||||||
lw $gp,cprestore($sp) */
|
lw $gp,cprestore($sp) */
|
||||||
frag_grow (40);
|
frag_grow (40);
|
||||||
|
@ -5543,6 +5542,8 @@ macro (ip)
|
||||||
if (mips_pic == NO_PIC
|
if (mips_pic == NO_PIC
|
||||||
|| offset_expr.X_op == O_constant)
|
|| offset_expr.X_op == O_constant)
|
||||||
{
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
/* If this is a reference to a GP relative symbol, and there
|
/* If this is a reference to a GP relative symbol, and there
|
||||||
is no base register, we want
|
is no base register, we want
|
||||||
<op> $treg,<sym>($gp) (BFD_RELOC_GPREL16)
|
<op> $treg,<sym>($gp) (BFD_RELOC_GPREL16)
|
||||||
|
@ -5708,6 +5709,8 @@ macro (ip)
|
||||||
}
|
}
|
||||||
else if (mips_pic == SVR4_PIC && ! mips_big_got)
|
else if (mips_pic == SVR4_PIC && ! mips_big_got)
|
||||||
{
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
/* If this is a reference to an external symbol, we want
|
/* If this is a reference to an external symbol, we want
|
||||||
lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
|
lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
|
||||||
nop
|
nop
|
||||||
|
@ -5750,6 +5753,7 @@ macro (ip)
|
||||||
else if (mips_pic == SVR4_PIC)
|
else if (mips_pic == SVR4_PIC)
|
||||||
{
|
{
|
||||||
int gpdel;
|
int gpdel;
|
||||||
|
char *p;
|
||||||
|
|
||||||
/* If this is a reference to an external symbol, we want
|
/* If this is a reference to an external symbol, we want
|
||||||
lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
|
lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
|
||||||
|
@ -5945,7 +5949,7 @@ macro (ip)
|
||||||
{
|
{
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr, "lw", "t,o(b)",
|
macro_build ((char *) NULL, &icnt, &offset_expr, "lw", "t,o(b)",
|
||||||
treg, (int) BFD_RELOC_LO16, AT);
|
treg, (int) BFD_RELOC_LO16, AT);
|
||||||
if (treg != 31)
|
if (treg != RA)
|
||||||
{
|
{
|
||||||
/* FIXME: How in the world do we deal with the possible
|
/* FIXME: How in the world do we deal with the possible
|
||||||
overflow here? */
|
overflow here? */
|
||||||
|
@ -6162,6 +6166,8 @@ macro (ip)
|
||||||
if (mips_pic == NO_PIC
|
if (mips_pic == NO_PIC
|
||||||
|| offset_expr.X_op == O_constant)
|
|| offset_expr.X_op == O_constant)
|
||||||
{
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
/* If this is a reference to a GP relative symbol, we want
|
/* If this is a reference to a GP relative symbol, we want
|
||||||
<op> $treg,<sym>($gp) (BFD_RELOC_GPREL16)
|
<op> $treg,<sym>($gp) (BFD_RELOC_GPREL16)
|
||||||
<op> $treg+1,<sym>+4($gp) (BFD_RELOC_GPREL16)
|
<op> $treg+1,<sym>+4($gp) (BFD_RELOC_GPREL16)
|
||||||
|
@ -6329,6 +6335,7 @@ macro (ip)
|
||||||
else if (mips_pic == SVR4_PIC)
|
else if (mips_pic == SVR4_PIC)
|
||||||
{
|
{
|
||||||
int gpdel, off;
|
int gpdel, off;
|
||||||
|
char *p;
|
||||||
|
|
||||||
/* If this is a reference to an external symbol, we want
|
/* If this is a reference to an external symbol, we want
|
||||||
lui $at,<sym> (BFD_RELOC_MIPS_GOT_HI16)
|
lui $at,<sym> (BFD_RELOC_MIPS_GOT_HI16)
|
||||||
|
@ -6629,7 +6636,7 @@ macro2 (ip)
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "mflo", "d",
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "mflo", "d",
|
||||||
dreg);
|
dreg);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
|
||||||
dbl ? "dsra32" : "sra", "d,w,<", dreg, dreg, 31);
|
dbl ? "dsra32" : "sra", "d,w,<", dreg, dreg, RA);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "mfhi", "d",
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "mfhi", "d",
|
||||||
AT);
|
AT);
|
||||||
if (mips_trap)
|
if (mips_trap)
|
||||||
|
@ -7137,9 +7144,9 @@ macro2 (ip)
|
||||||
++mips_opts.noreorder;
|
++mips_opts.noreorder;
|
||||||
mips_any_noreorder = 1;
|
mips_any_noreorder = 1;
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "cfc1", "t,G",
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "cfc1", "t,G",
|
||||||
treg, 31);
|
treg, RA);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "cfc1", "t,G",
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "cfc1", "t,G",
|
||||||
treg, 31);
|
treg, RA);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "nop", "");
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "nop", "");
|
||||||
expr1.X_add_number = 3;
|
expr1.X_add_number = 3;
|
||||||
macro_build ((char *) NULL, &icnt, &expr1, "ori", "t,r,i", AT, treg,
|
macro_build ((char *) NULL, &icnt, &expr1, "ori", "t,r,i", AT, treg,
|
||||||
|
@ -7148,12 +7155,12 @@ macro2 (ip)
|
||||||
macro_build ((char *) NULL, &icnt, &expr1, "xori", "t,r,i", AT, AT,
|
macro_build ((char *) NULL, &icnt, &expr1, "xori", "t,r,i", AT, AT,
|
||||||
(int) BFD_RELOC_LO16);
|
(int) BFD_RELOC_LO16);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "ctc1", "t,G",
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "ctc1", "t,G",
|
||||||
AT, 31);
|
AT, RA);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "nop", "");
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "nop", "");
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
|
||||||
mask == M_TRUNCWD ? "cvt.w.d" : "cvt.w.s", "D,S", dreg, sreg);
|
mask == M_TRUNCWD ? "cvt.w.d" : "cvt.w.s", "D,S", dreg, sreg);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "ctc1", "t,G",
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "ctc1", "t,G",
|
||||||
treg, 31);
|
treg, RA);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "nop", "");
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "nop", "");
|
||||||
--mips_opts.noreorder;
|
--mips_opts.noreorder;
|
||||||
break;
|
break;
|
||||||
|
@ -7168,13 +7175,13 @@ macro2 (ip)
|
||||||
as_bad (_("operand overflow"));
|
as_bad (_("operand overflow"));
|
||||||
/* avoid load delay */
|
/* avoid load delay */
|
||||||
if (! target_big_endian)
|
if (! target_big_endian)
|
||||||
offset_expr.X_add_number += 1;
|
++offset_expr.X_add_number;
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg,
|
macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg,
|
||||||
(int) BFD_RELOC_LO16, breg);
|
(int) BFD_RELOC_LO16, breg);
|
||||||
if (! target_big_endian)
|
if (! target_big_endian)
|
||||||
offset_expr.X_add_number -= 1;
|
--offset_expr.X_add_number;
|
||||||
else
|
else
|
||||||
offset_expr.X_add_number += 1;
|
++offset_expr.X_add_number;
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr, "lbu", "t,o(b)", AT,
|
macro_build ((char *) NULL, &icnt, &offset_expr, "lbu", "t,o(b)", AT,
|
||||||
(int) BFD_RELOC_LO16, breg);
|
(int) BFD_RELOC_LO16, breg);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "sll", "d,w,<",
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "sll", "d,w,<",
|
||||||
|
@ -7266,15 +7273,15 @@ macro2 (ip)
|
||||||
if (offset_expr.X_add_number >= 0x7fff)
|
if (offset_expr.X_add_number >= 0x7fff)
|
||||||
as_bad (_("operand overflow"));
|
as_bad (_("operand overflow"));
|
||||||
if (target_big_endian)
|
if (target_big_endian)
|
||||||
offset_expr.X_add_number += 1;
|
++offset_expr.X_add_number;
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr, "sb", "t,o(b)", treg,
|
macro_build ((char *) NULL, &icnt, &offset_expr, "sb", "t,o(b)", treg,
|
||||||
(int) BFD_RELOC_LO16, breg);
|
(int) BFD_RELOC_LO16, breg);
|
||||||
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "srl", "d,w,<",
|
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, "srl", "d,w,<",
|
||||||
AT, treg, 8);
|
AT, treg, 8);
|
||||||
if (target_big_endian)
|
if (target_big_endian)
|
||||||
offset_expr.X_add_number -= 1;
|
--offset_expr.X_add_number;
|
||||||
else
|
else
|
||||||
offset_expr.X_add_number += 1;
|
++offset_expr.X_add_number;
|
||||||
macro_build ((char *) NULL, &icnt, &offset_expr, "sb", "t,o(b)", AT,
|
macro_build ((char *) NULL, &icnt, &offset_expr, "sb", "t,o(b)", AT,
|
||||||
(int) BFD_RELOC_LO16, breg);
|
(int) BFD_RELOC_LO16, breg);
|
||||||
break;
|
break;
|
||||||
|
@ -8105,14 +8112,14 @@ mips_ip (str, ip)
|
||||||
as_warn (_("Used $at without \".set noat\""));
|
as_warn (_("Used $at without \".set noat\""));
|
||||||
c = *args;
|
c = *args;
|
||||||
if (*s == ' ')
|
if (*s == ' ')
|
||||||
s++;
|
++s;
|
||||||
if (args[1] != *s)
|
if (args[1] != *s)
|
||||||
{
|
{
|
||||||
if (c == 'r' || c == 'v' || c == 'w')
|
if (c == 'r' || c == 'v' || c == 'w')
|
||||||
{
|
{
|
||||||
regno = lastregno;
|
regno = lastregno;
|
||||||
s = s_reset;
|
s = s_reset;
|
||||||
args++;
|
++args;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* 'z' only matches $0. */
|
/* 'z' only matches $0. */
|
||||||
|
@ -8215,14 +8222,14 @@ mips_ip (str, ip)
|
||||||
|
|
||||||
c = *args;
|
c = *args;
|
||||||
if (*s == ' ')
|
if (*s == ' ')
|
||||||
s++;
|
++s;
|
||||||
if (args[1] != *s)
|
if (args[1] != *s)
|
||||||
{
|
{
|
||||||
if (c == 'V' || c == 'W')
|
if (c == 'V' || c == 'W')
|
||||||
{
|
{
|
||||||
regno = lastregno;
|
regno = lastregno;
|
||||||
s = s_reset;
|
s = s_reset;
|
||||||
args++;
|
++args;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch (c)
|
switch (c)
|
||||||
|
@ -8955,7 +8962,7 @@ mips16_ip (str, ip)
|
||||||
{
|
{
|
||||||
regno = mips16_to_32_reg_map[lastregno];
|
regno = mips16_to_32_reg_map[lastregno];
|
||||||
s = s_reset;
|
s = s_reset;
|
||||||
args++;
|
++args;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9223,7 +9230,7 @@ mips16_ip (str, ip)
|
||||||
mask |= (reg2 - 3) << 3;
|
mask |= (reg2 - 3) << 3;
|
||||||
else if (reg1 == 16 && reg2 >= 16 && reg2 <= 17)
|
else if (reg1 == 16 && reg2 >= 16 && reg2 <= 17)
|
||||||
mask |= (reg2 - 15) << 1;
|
mask |= (reg2 - 15) << 1;
|
||||||
else if (reg1 == 31 && reg2 == 31)
|
else if (reg1 == RA && reg2 == RA)
|
||||||
mask |= 1;
|
mask |= 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -9532,9 +9539,9 @@ my_getSmallParser (str, len, nestlevel)
|
||||||
for (s = *str + 1; *s && pcnt; s++, (*len)++)
|
for (s = *str + 1; *s && pcnt; s++, (*len)++)
|
||||||
{
|
{
|
||||||
if (*s == '(')
|
if (*s == '(')
|
||||||
pcnt++;
|
++pcnt;
|
||||||
else if (*s == ')')
|
else if (*s == ')')
|
||||||
pcnt--;
|
--pcnt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9573,7 +9580,7 @@ my_getPercentOp (str, len, nestlevel)
|
||||||
return S_EX_NONE;
|
return S_EX_NONE;
|
||||||
|
|
||||||
*len = strlen (percent_op[i].str);
|
*len = strlen (percent_op[i].str);
|
||||||
(*nestlevel)++;
|
++(*nestlevel);
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9630,9 +9637,9 @@ my_getSmallExpression (ep, str)
|
||||||
for (end = strchr (s, '(') + 1; *end && pcnt; end++)
|
for (end = strchr (s, '(') + 1; *end && pcnt; end++)
|
||||||
{
|
{
|
||||||
if (*end == '(')
|
if (*end == '(')
|
||||||
pcnt++;
|
++pcnt;
|
||||||
else if (*end == ')')
|
else if (*end == ')')
|
||||||
pcnt--;
|
--pcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset (s, ' ', end - s);
|
memset (s, ' ', end - s);
|
||||||
|
@ -11077,7 +11084,7 @@ s_align (x)
|
||||||
}
|
}
|
||||||
if (*input_line_pointer == ',')
|
if (*input_line_pointer == ',')
|
||||||
{
|
{
|
||||||
input_line_pointer++;
|
++input_line_pointer;
|
||||||
temp_fill = get_absolute_expression ();
|
temp_fill = get_absolute_expression ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -11342,7 +11349,7 @@ s_mipsset (x)
|
||||||
char *name = input_line_pointer, ch;
|
char *name = input_line_pointer, ch;
|
||||||
|
|
||||||
while (!is_end_of_line[(unsigned char) *input_line_pointer])
|
while (!is_end_of_line[(unsigned char) *input_line_pointer])
|
||||||
input_line_pointer++;
|
++input_line_pointer;
|
||||||
ch = *input_line_pointer;
|
ch = *input_line_pointer;
|
||||||
*input_line_pointer = '\0';
|
*input_line_pointer = '\0';
|
||||||
|
|
||||||
|
@ -11625,11 +11632,11 @@ s_cpsetup (ignore)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
input_line_pointer++;
|
++input_line_pointer;
|
||||||
SKIP_WHITESPACE ();
|
SKIP_WHITESPACE ();
|
||||||
sym = input_line_pointer;
|
sym = input_line_pointer;
|
||||||
while (ISALNUM (*input_line_pointer))
|
while (ISALNUM (*input_line_pointer))
|
||||||
input_line_pointer++;
|
++input_line_pointer;
|
||||||
*input_line_pointer = 0;
|
*input_line_pointer = 0;
|
||||||
|
|
||||||
ex_sym.X_op = O_symbol;
|
ex_sym.X_op = O_symbol;
|
||||||
|
@ -11854,8 +11861,7 @@ static void
|
||||||
s_insn (ignore)
|
s_insn (ignore)
|
||||||
int ignore ATTRIBUTE_UNUSED;
|
int ignore ATTRIBUTE_UNUSED;
|
||||||
{
|
{
|
||||||
if (mips_opts.mips16)
|
mips16_mark_labels ();
|
||||||
mips16_mark_labels ();
|
|
||||||
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
}
|
}
|
||||||
|
@ -11870,7 +11876,7 @@ static void
|
||||||
s_mips_stab (type)
|
s_mips_stab (type)
|
||||||
int type;
|
int type;
|
||||||
{
|
{
|
||||||
if (type == 'n' && mips_opts.mips16)
|
if (type == 'n')
|
||||||
mips16_mark_labels ();
|
mips16_mark_labels ();
|
||||||
|
|
||||||
s_stab (type);
|
s_stab (type);
|
||||||
|
@ -12954,7 +12960,7 @@ mips_handle_align (fragp)
|
||||||
if (bytes & 1)
|
if (bytes & 1)
|
||||||
{
|
{
|
||||||
*p++ = 0;
|
*p++ = 0;
|
||||||
fragp->fr_fix += 1;
|
fragp->fr_fix++;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy (p, (target_big_endian ? be_nop : le_nop), 2);
|
memcpy (p, (target_big_endian ? be_nop : le_nop), 2);
|
||||||
|
@ -13126,7 +13132,7 @@ s_mips_end (x)
|
||||||
|
|
||||||
subseg_set (saved_seg, saved_subseg);
|
subseg_set (saved_seg, saved_subseg);
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* MIPS_STABS_ELF */
|
||||||
|
|
||||||
cur_proc_ptr = NULL;
|
cur_proc_ptr = NULL;
|
||||||
}
|
}
|
||||||
|
@ -13142,7 +13148,7 @@ s_mips_ent (aent)
|
||||||
|
|
||||||
symbolP = get_symbol ();
|
symbolP = get_symbol ();
|
||||||
if (*input_line_pointer == ',')
|
if (*input_line_pointer == ',')
|
||||||
input_line_pointer++;
|
++input_line_pointer;
|
||||||
SKIP_WHITESPACE ();
|
SKIP_WHITESPACE ();
|
||||||
if (ISDIGIT (*input_line_pointer)
|
if (ISDIGIT (*input_line_pointer)
|
||||||
|| *input_line_pointer == '-')
|
|| *input_line_pointer == '-')
|
||||||
|
@ -13179,7 +13185,7 @@ s_mips_ent (aent)
|
||||||
|
|
||||||
symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION;
|
symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION;
|
||||||
|
|
||||||
numprocs++;
|
++numprocs;
|
||||||
}
|
}
|
||||||
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
|
|
Loading…
Add table
Reference in a new issue