+2003-10-19 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * config/tc-mips.c (normalize_constant_expr): New function to fix sign
+ extensions broken by gas' expression evaluation of constants.
+ (check_absolute_expr): Use it.
+ (mips_ip): Likewise.
+
2003-10-18 Hans-Peter Nilsson <hp@bitrange.com>
Generate BFD_RELOC_MMIX_PUSHJ_STUBBABLE for PUSHJ when possible.
}
}
+static void
+normalize_constant_expr (expressionS *ex)
+{
+ if (ex->X_op == O_constant && HAVE_32BIT_GPRS)
+ ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
+ - 0x80000000);
+}
+
/* Warn if an expression is not a constant. */
static void
as_bad (_("unsupported large constant"));
else if (ex->X_op != O_constant)
as_bad (_("Instruction %s requires absolute expression"), ip->insn_mo->name);
+
+ normalize_constant_expr (ex);
}
/* Count the leading zeroes by performing a binary chop. This is a
if (imm2_expr.X_op != O_big
&& imm2_expr.X_op != O_constant)
insn_error = _("absolute expression required");
+ normalize_constant_expr (&imm2_expr);
s = expr_end;
continue;
if (imm_expr.X_op != O_big
&& imm_expr.X_op != O_constant)
insn_error = _("absolute expression required");
+ normalize_constant_expr (&imm_expr);
s = expr_end;
continue;