aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-05-16 19:40:17 +0000
committerRichard Stallman <rms@gnu.org>1992-05-16 19:40:17 +0000
commitb8168f0d34366808143d0f0365243d0a13e520eb (patch)
treead44cde09744047703938ebf2056496bd6679f24
parent754731823fbe874204c1277823e07d9673aa3e93 (diff)
downloadgcc-b8168f0d34366808143d0f0365243d0a13e520eb.zip
gcc-b8168f0d34366808143d0f0365243d0a13e520eb.tar.gz
gcc-b8168f0d34366808143d0f0365243d0a13e520eb.tar.bz2
*** empty log message ***
From-SVN: r998
-rw-r--r--gcc/config/ns32k/ns32k.h12
-rw-r--r--gcc/config/ns32k/ns32k.md6
2 files changed, 14 insertions, 4 deletions
diff --git a/gcc/config/ns32k/ns32k.h b/gcc/config/ns32k/ns32k.h
index 07fc882..1291638 100644
--- a/gcc/config/ns32k/ns32k.h
+++ b/gcc/config/ns32k/ns32k.h
@@ -830,7 +830,17 @@ __transfer_from_trampoline () \
|| (GET_CODE (X) == PLUS \
&& GET_CODE (XEXP (X, 0)) == REG \
&& REG_OK_FOR_BASE_P (XEXP (X, 0)) \
- && CONSTANT_ADDRESS_P (XEXP (X, 1))))
+ && CONSTANT_ADDRESS_P (XEXP (X, 1)) \
+ && (GET_CODE (X) != CONST_INT || NS32K_DISPLACEMENT_P (INTVAL (X)))))
+
+/* 1 if integer I will fit in a 4 byte displacement field.
+ Strictly speaking, we can't be sure that a symbol will fit this range.
+ But, in practice, it always will. */
+
+#define NS32K_DISPLACEMENT(i) \
+ (((i) <= 16777215 && (i) >= -16777216) \
+ || ((TARGET_32532 || TARGET_32332) \
+ && (i) <= 536870913 && (i) >= -536870912))
/* Check for frame pointer or stack pointer. */
#define MEM_REG(X) \
diff --git a/gcc/config/ns32k/ns32k.md b/gcc/config/ns32k/ns32k.md
index 107ad41..4fcfe78 100644
--- a/gcc/config/ns32k/ns32k.md
+++ b/gcc/config/ns32k/ns32k.md
@@ -833,10 +833,10 @@
if (which_alternative == 1)
{
int i = INTVAL (operands[2]);
- if ( i < 0x40000000 && i >= -0x40000000 )
- return \"addr %c2(%1),%0\";
+ if (NS32K_DISPLACEMENT_P (i))
+ return \"addr %c2(%1),%0\";
else
- return \"movd %1,%0\;addd %2,%0\";
+ return \"movd %1,%0\;addd %2,%0\";
}
if (GET_CODE (operands[2]) == CONST_INT)
{