aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-mips.c77
2 files changed, 48 insertions, 35 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 34154db..3b1435f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+Thu Aug 13 15:08:42 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/tc-mips.c (macro): Correct M_SGE_I/M_SGEUI_I case for a
+ small immediate constant to use the constant itself rather than
+ always using 1.
+
Wed Aug 12 18:47:38 1998 Ian Lance Taylor <ian@cygnus.com>
* config/tc-hppa.c (pa_enter): Call as_bad rather than abort.
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index fe5fdb3..fd23b6f 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -212,11 +212,11 @@ static int mips_4100 = -1;
static int mips_4320 = -1;
/* end-sanitize-vr4320 */
-/* start-sanitize-vr5400 */
+/* start-sanitize-cygnus */
/* Whether NEC vr5400 instructions are permitted. */
static int mips_5400 = -1;
-/* end-sanitize-vr5400 */
+/* end-sanitize-cygnus */
/* start-sanitize-r5900 */
/* Whether Toshiba r5900 instructions are permitted. */
static int mips_5900 = -1;
@@ -264,10 +264,10 @@ static int mips_4900 = -1;
/* Whether the processor uses hardware interlocks to protect reads
from the GPRs, and thus does not require nops to be inserted. */
#define gpr_interlocks (mips_opts.isa >= 2 || mips_3900)
-/* start-sanitize-vr5400 */
+/* start-sanitize-cygnus */
#undef gpr_interlocks
#define gpr_interlocks (mips_opts.isa >= 2 || mips_3900 || mips_5400)
-/* end-sanitize-vr5400 */
+/* end-sanitize-cygnus */
/* As with other "interlocks" this is used by hardware that has FP
@@ -277,9 +277,9 @@ static int mips_4900 = -1;
/* start-sanitize-vr4320 */ \
|| mips_cpu == 4320 \
/* end-sanitize-vr4320 */ \
- /* start-sanitize-vr5400 */ \
+ /* start-sanitize-cygnus */ \
|| mips_cpu == 5400 \
- /* end-sanitize-vr5400 */ \
+ /* end-sanitize-cygnus */ \
)
/* MIPS PIC level. */
@@ -943,11 +943,11 @@ md_begin ()
|| strcmp (cpu, "mips64vr5000") == 0)
mips_cpu = 5000;
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
else if (strcmp (cpu, "r5400") == 0
|| strcmp (cpu, "mips64vr5400") == 0)
mips_cpu = 5400;
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
/* start-sanitize-r5900 */
else if (strcmp (cpu, "r5900") == 0
@@ -997,9 +997,9 @@ md_begin ()
mips_opts.isa = 3;
else if (mips_cpu == 5000
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
|| mips_cpu == 5400
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
|| mips_cpu == 8000
|| mips_cpu == 10000)
mips_opts.isa = 4;
@@ -1030,10 +1030,10 @@ md_begin ()
mips_4320 = (mips_cpu == 4320);
/* end-sanitize-vr4320 */
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
if (mips_5400 < 0)
mips_5400 = (mips_cpu == 5400);
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
/* start-sanitize-r5900 */
if (mips_5900 < 0)
@@ -2572,10 +2572,10 @@ macro_build (place, counter, ep, name, fmt, va_alist)
|| (mips_5900
&& (insn.insn_mo->membership & INSN_5900) != 0)
/* end-sanitize-r5900 */
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
|| (mips_5400
&& (insn.insn_mo->membership & INSN_5400) != 0)
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
|| (mips_3900
&& (insn.insn_mo->membership & INSN_3900) != 0))
/* start-sanitize-r5900 */
@@ -6294,7 +6294,7 @@ macro2 (ip)
&& imm_expr.X_add_number >= -0x8000
&& imm_expr.X_add_number < 0x8000)
{
- macro_build ((char *) NULL, &icnt, &expr1,
+ macro_build ((char *) NULL, &icnt, &imm_expr,
mask == M_SGE_I ? "slti" : "sltiu",
"t,r,j", dreg, sreg, (int) BFD_RELOC_LO16);
used_at = 0;
@@ -7111,12 +7111,12 @@ validate_mips_insn (opc)
case '-': break;
case '+': break;
/* end-sanitize-r5900 */
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
case 'e': USE_BITS (OP_MASK_VECBYTE, OP_SH_VECBYTE); break;
case '%': USE_BITS (OP_MASK_VECALIGN, OP_SH_VECALIGN); break;
case '[': break;
case ']': break;
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
default:
as_bad (_("internal: bad mips opcode (unknown operand type `%c'): %s %s"),
c, opc->name, opc->args);
@@ -7238,9 +7238,9 @@ mips_ip (str, ip)
/* start-sanitize-r5900 */
|| (mips_5900 && (insn->membership & INSN_5900) != 0)
/* end-sanitize-r5900 */
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
|| (mips_5400 && (insn->membership & INSN_5400) != 0)
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
|| (mips_3900 && (insn->membership & INSN_3900) != 0))
ok = true;
else
@@ -7324,10 +7324,10 @@ mips_ip (str, ip)
return;
case ')': /* these must match exactly */
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
case '[':
case ']':
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
/* start-sanitize-r5900 */
case '-':
case '+':
@@ -8199,6 +8199,8 @@ mips_ip (str, ip)
else
imm_reloc = BFD_RELOC_HI16;
}
+ else if (imm_expr.X_op == O_constant)
+ imm_expr.X_add_number &= 0xffff;
}
if (*args == 'i')
{
@@ -8302,10 +8304,6 @@ mips_ip (str, ip)
case 'u': /* upper 16 bits */
c = my_getSmallExpression (&imm_expr, s);
- if (imm_expr.X_op == O_constant
- && (imm_expr.X_add_number < 0
- || imm_expr.X_add_number >= 0x10000))
- as_bad (_("lui expression not in range 0..65535"));
imm_reloc = BFD_RELOC_LO16;
if (c)
{
@@ -8322,7 +8320,13 @@ mips_ip (str, ip)
else
imm_reloc = BFD_RELOC_HI16;
}
+ else if (imm_expr.X_op == O_constant)
+ imm_expr.X_add_number &= 0xffff;
}
+ if (imm_expr.X_op == O_constant
+ && (imm_expr.X_add_number < 0
+ || imm_expr.X_add_number >= 0x10000))
+ as_bad (_("lui expression not in range 0..65535"));
s = expr_end;
continue;
@@ -8353,7 +8357,7 @@ mips_ip (str, ip)
ip->insn_opcode |= regno << OP_SH_CCC;
continue;
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
case 'e': /* must be at least one digit */
my_getExpression (&imm_expr, s);
check_absolute_expr (ip, &imm_expr);
@@ -8382,7 +8386,7 @@ mips_ip (str, ip)
s = expr_end;
continue;
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
default:
as_bad (_("bad char = '%c'\n"), *args);
internalError ();
@@ -9358,13 +9362,13 @@ struct option md_longopts[] = {
{"no-m1900", no_argument, NULL, OPTION_NO_M3900},
/* end-sanitize-tx19 */
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
#define OPTION_M5400 (OPTION_MD_BASE + 28)
{"m5400", no_argument, NULL, OPTION_M5400},
#define OPTION_NO_M5400 (OPTION_MD_BASE + 29)
{"no-m5400", no_argument, NULL, OPTION_NO_M5400},
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
/* start-sanitize-tx49 */
#define OPTION_M4900 (OPTION_MD_BASE + 30)
{"m4900", no_argument, NULL, OPTION_M4900},
@@ -9547,10 +9551,10 @@ md_parse_option (c, arg)
|| strcmp (p, "5k") == 0
|| strcmp (p, "5K") == 0)
mips_cpu = 5000;
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
else if (strcmp (p, "5400") == 0)
mips_cpu = 5400;
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
/* start-sanitize-r5900 */
else if (strcmp (p, "5900") == 0)
mips_cpu = 5900;
@@ -9583,9 +9587,9 @@ md_parse_option (c, arg)
/* start-sanitize-vr4320 */
&& mips_cpu != 4320
/* end-sanitize-vr4320 */
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
&& mips_cpu != 5400
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
&& mips_cpu != 5000))
{
as_bad (_("ignoring invalid leading 'v' in -mcpu=%s switch"), arg);
@@ -9645,7 +9649,7 @@ md_parse_option (c, arg)
break;
/* end-sanitize-vr4320 */
- /* start-sanitize-vr5400 */
+ /* start-sanitize-cygnus */
case OPTION_M5400:
mips_5400 = 1;
break;
@@ -9654,7 +9658,7 @@ md_parse_option (c, arg)
mips_5400 = 0;
break;
- /* end-sanitize-vr5400 */
+ /* end-sanitize-cygnus */
case OPTION_M3900:
mips_3900 = 1;
break;
@@ -12178,6 +12182,9 @@ s_ent (aent)
else
proc_rootP = procP;
proc_lastP = procP;
+
+ symbolP->bsym->flags |= BSF_FUNCTION;
+
numprocs++;
}
demand_empty_rest_of_line ();