+2003-09-18 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+ * config/tc-mips.c (macro_build_ldst_constoffset): Don't silently
+ truncate values which won't fit im 32 bits.
+ (load_register): Likewise.
+ (macro): Likewise.
+
2003-09-17 Dmitry Diky <diwil@mail.ru>
* config/tc-msp430.c (MAX_OP_LEN): Set to 256.
/* Sign-extending 32-bit constants makes their handling easier. */
if (! dbl)
+ {
+ if (ep->X_add_number & ~((bfd_vma) 0xffffffff)
+ && ~(ep->X_add_number | 0xffffffff))
+ as_bad (_("too large constant specified"));
+
ep->X_add_number = (((ep->X_add_number & 0xffffffff) ^ 0x80000000)
- 0x80000000);
+ }
/* Right now, this routine can only handle signed 32-bit contants. */
if (! IS_SEXT_32BIT_NUM(ep->X_add_number))
/* Sign-extending 32-bit constants makes their handling easier. */
if (! dbl)
+ {
+ if (ep->X_add_number & ~((bfd_vma) 0xffffffff)
+ && ~(ep->X_add_number | 0xffffffff))
+ as_bad (_("too large constant specified"));
+
ep->X_add_number = (((ep->X_add_number & 0xffffffff) ^ 0x80000000)
- 0x80000000);
+ }
if (IS_SEXT_16BIT_NUM (ep->X_add_number))
{
if ((! HAVE_64BIT_ADDRESSES
&& (! HAVE_64BIT_GPRS && offset_expr.X_op == O_constant))
&& (offset_expr.X_op == O_constant))
+ {
+ if (offset_expr.X_add_number & ~((bfd_vma) 0xffffffff)
+ && ~(offset_expr.X_add_number | 0xffffffff))
+ as_bad (_("too large constant specified"));
+
offset_expr.X_add_number = (((offset_expr.X_add_number & 0xffffffff)
^ 0x80000000) - 0x80000000);
+ }
/* For embedded PIC, we allow loads where the offset is calculated
by subtracting a symbol in the current segment from an unknown