aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1994-07-12 14:23:58 -0600
committerJeff Law <law@gcc.gnu.org>1994-07-12 14:23:58 -0600
commita08e749380f790c425ee7e6615bff03be4b0a780 (patch)
treeaf5f47faaf8e7ca36a3b59f904f8c388313467b7 /gcc
parentca192950181ba57a9ab7c5d6aa388afa8723806c (diff)
downloadgcc-a08e749380f790c425ee7e6615bff03be4b0a780.zip
gcc-a08e749380f790c425ee7e6615bff03be4b0a780.tar.gz
gcc-a08e749380f790c425ee7e6615bff03be4b0a780.tar.bz2
pa.h (GO_IF_LEGITIMATE_ADDRESS): Only allow immediate addressing using 5 bits to avoid losing with FP loads and...
* pa.h (GO_IF_LEGITIMATE_ADDRESS): Only allow immediate addressing using 5 bits to avoid losing with FP loads and stores on page zero. From-SVN: r7752
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/pa/pa.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 2991f4f..ed20c28 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -1268,7 +1268,11 @@ extern union tree_node *current_function_decl;
REG+REG, REG+(REG*SCALE) or REG+SMALLINT.
But we can treat a SYMBOL_REF as legitimate if it is part of this
function's constant-pool, because such addresses can actually
- be output as REG+SMALLINT. */
+ be output as REG+SMALLINT.
+
+ Note we only allow 5 bit immediates for access to a constant address;
+ doing so avoids losing for loading/storing a FP register at an address
+ which will not fit in 5 bits. */
#define VAL_5_BITS_P(X) ((unsigned)(X) + 0x10 < 0x20)
#define INT_5_BITS(X) VAL_5_BITS_P (INTVAL (X))
@@ -1333,7 +1337,7 @@ extern union tree_node *current_function_decl;
goto ADDR; \
else if (GET_CODE (X) == LABEL_REF \
|| (GET_CODE (X) == CONST_INT \
- && INT_14_BITS (X))) \
+ && INT_5_BITS (X))) \
goto ADDR; \
}