diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2003-04-06 03:16:20 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@redhat.com> | 2003-04-06 03:16:20 +0000 |
commit | 5a7a0b7bf98b702f8caf3e599e6eeb6631a50680 (patch) | |
tree | fdf0f46c573e5ea4eff2a55ac13c381c9a04afda /gas | |
parent | 43bd9a9e02a1279590947a8d7258108207896ba8 (diff) | |
download | gdb-5a7a0b7bf98b702f8caf3e599e6eeb6631a50680.zip gdb-5a7a0b7bf98b702f8caf3e599e6eeb6631a50680.tar.gz gdb-5a7a0b7bf98b702f8caf3e599e6eeb6631a50680.tar.bz2 |
* config/tc-mips.c (HAVE_64BIT_ADDRESS_CONSTANTS): New.
(macro): Use new macro to decide whether to emit constant address
as 32 or 64 bits if addresses are 32-bit wide but registers are
64-bit wide.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 12 |
2 files changed, 16 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index dde3c48..b4183d2 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2003-04-06 Chris Demetriou <cgd@broadcom.com> + + * config/tc-mips.c (HAVE_64BIT_ADDRESS_CONSTANTS): New. + (macro): Use new macro to decide whether to emit constant address + as 32 or 64 bits if addresses are 32-bit wide but registers are + 64-bit wide. + 2003-04-05 Stephane Carrez <stcarrez@nerim.fr> * config/tc-m68hc11.c (M6811_OP_CALL_ADDR): New internal define. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 2e114f4..e07dde3 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -294,6 +294,8 @@ static int mips_32bitmode = 0; && mips_pic != EMBEDDED_PIC)) #define HAVE_64BIT_ADDRESSES (! HAVE_32BIT_ADDRESSES) +#define HAVE_64BIT_ADDRESS_CONSTANTS (HAVE_64BIT_ADDRESSES \ + || HAVE_64BIT_GPRS) /* Return true if the given CPU supports the MIPS16 ASE. */ #define CPU_HAS_MIPS16(cpu) \ @@ -5845,9 +5847,10 @@ macro (ip) probably attempt to generate 64-bit constants more efficiently in general. */ - if (HAVE_64BIT_ADDRESSES - && !(offset_expr.X_op == O_constant - && IS_SEXT_32BIT_NUM (offset_expr.X_add_number + 0x8000))) + if ((offset_expr.X_op != O_constant && HAVE_64BIT_ADDRESSES) + || (offset_expr.X_op == O_constant + && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number) + && HAVE_64BIT_ADDRESS_CONSTANTS)) { p = NULL; @@ -5894,6 +5897,9 @@ macro (ip) return; } + else if (offset_expr.X_op == O_constant + && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number)) + as_bad (_("load/store address overflow (max 32 bits)")); if (breg == 0) { |