aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1992-04-27 09:44:10 -0700
committerJim Wilson <wilson@gcc.gnu.org>1992-04-27 09:44:10 -0700
commitbec2e3595757d4d7d43972b78fc4eee87e1be753 (patch)
tree62adc32f4adabd538834f0da72423ee84c39707d /gcc
parentea47d37c9a33bda4ea158008cb7eae2a1547af03 (diff)
downloadgcc-bec2e3595757d4d7d43972b78fc4eee87e1be753.zip
gcc-bec2e3595757d4d7d43972b78fc4eee87e1be753.tar.gz
gcc-bec2e3595757d4d7d43972b78fc4eee87e1be753.tar.bz2
*** empty log message ***
From-SVN: r839
Diffstat (limited to 'gcc')
-rw-r--r--gcc/combine.c7
-rw-r--r--gcc/config/sparc/sparc.h73
2 files changed, 41 insertions, 39 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 247f66a..ade79cb 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -4424,8 +4424,7 @@ force_to_mode (x, mode, bits, reg)
case CONST_INT:
if (bits < HOST_BITS_PER_INT)
- x = gen_rtx (CONST_INT, VOIDmode,
- INTVAL (x) & ((1 << (bits + 1)) - 1));
+ x = gen_rtx (CONST_INT, VOIDmode, INTVAL (x) & ((1 << bits) - 1));
return x;
case SUBREG:
@@ -4452,7 +4451,7 @@ force_to_mode (x, mode, bits, reg)
reg);
if (bits < HOST_BITS_PER_INT)
- mask &= (1 << (bits + 1)) - 1;
+ mask &= (1 << bits) - 1;
x = simplify_and_const_int (x, mode, op, mask);
@@ -4462,7 +4461,7 @@ force_to_mode (x, mode, bits, reg)
if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT
&& bits < HOST_BITS_PER_INT
- && INTVAL (XEXP (x, 1)) == (1 << (bits + 1)) - 1)
+ && INTVAL (XEXP (x, 1)) == (1 << bits) - 1)
x = XEXP (x, 0);
return x;
}
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index 51c221c..5be9cdb 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -1065,56 +1065,59 @@ extern union tree_node *current_function_decl;
If you change this, execute "rm explow.o recog.o reload.o". */
+#define RTX_OK_FOR_BASE_P(X) \
+ ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
+ || (GET_CODE (X) == SUBREG \
+ && GET_CODE (SUBREG_REG (X)) == REG \
+ && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
+
+#define RTX_OK_FOR_INDEX_P(X) \
+ ((GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X)) \
+ || (GET_CODE (X) == SUBREG \
+ && GET_CODE (SUBREG_REG (X)) == REG \
+ && REG_OK_FOR_INDEX_P (SUBREG_REG (X))))
+
+#define RTX_OK_FOR_OFFSET_P(X) \
+ (GET_CODE (X) == CONST_INT && INTVAL (X) >= -0x1000 && INTVAL (X) < 0x1000)
+
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
-{ if (GET_CODE (X) == REG) \
- { if (REG_OK_FOR_BASE_P (X)) goto ADDR; } \
+{ if (RTX_OK_FOR_BASE_P (X)) \
+ goto ADDR; \
else if (GET_CODE (X) == PLUS) \
{ \
- if (flag_pic && XEXP (X, 0) == pic_offset_table_rtx)\
+ register rtx op0 = XEXP (X, 0); \
+ register rtx op1 = XEXP (X, 1); \
+ if (flag_pic && op0 == pic_offset_table_rtx) \
{ \
- if (GET_CODE (XEXP (X, 1)) == REG \
- && REG_OK_FOR_BASE_P (XEXP (X, 1))) \
+ if (RTX_OK_FOR_BASE_P (op1)) \
goto ADDR; \
else if (flag_pic == 1 \
- && GET_CODE (XEXP (X, 1)) != REG \
- && GET_CODE (XEXP (X, 1)) != LO_SUM \
- && GET_CODE (XEXP (X, 1)) != MEM) \
+ && GET_CODE (op1) != REG \
+ && GET_CODE (op1) != LO_SUM \
+ && GET_CODE (op1) != MEM) \
goto ADDR; \
} \
- else if (GET_CODE (XEXP (X, 0)) == REG \
- && REG_OK_FOR_BASE_P (XEXP (X, 0))) \
+ else if (RTX_OK_FOR_BASE_P (op0)) \
{ \
- if (GET_CODE (XEXP (X, 1)) == REG \
- && REG_OK_FOR_INDEX_P (XEXP (X, 1))) \
- goto ADDR; \
- if (GET_CODE (XEXP (X, 1)) == CONST_INT \
- && INTVAL (XEXP (X, 1)) >= -0x1000 \
- && INTVAL (XEXP (X, 1)) < 0x1000) \
+ if (RTX_OK_FOR_INDEX_P (op1) \
+ || RTX_OK_FOR_OFFSET_P (op1)) \
goto ADDR; \
} \
- else if (GET_CODE (XEXP (X, 1)) == REG \
- && REG_OK_FOR_BASE_P (XEXP (X, 1))) \
+ else if (RTX_OK_FOR_BASE_P (op1)) \
{ \
- if (GET_CODE (XEXP (X, 0)) == REG \
- && REG_OK_FOR_INDEX_P (XEXP (X, 0))) \
- goto ADDR; \
- if (GET_CODE (XEXP (X, 0)) == CONST_INT \
- && INTVAL (XEXP (X, 0)) >= -0x1000 \
- && INTVAL (XEXP (X, 0)) < 0x1000) \
+ if (RTX_OK_FOR_INDEX_P (op0) \
+ || RTX_OK_FOR_OFFSET_P (op0)) \
goto ADDR; \
} \
} \
- else if (GET_CODE (X) == LO_SUM \
- && GET_CODE (XEXP (X, 0)) == REG \
- && REG_OK_FOR_BASE_P (XEXP (X, 0)) \
- && CONSTANT_P (XEXP (X, 1))) \
- goto ADDR; \
- else if (GET_CODE (X) == LO_SUM \
- && GET_CODE (XEXP (X, 0)) == SUBREG \
- && GET_CODE (SUBREG_REG (XEXP (X, 0))) == REG\
- && REG_OK_FOR_BASE_P (SUBREG_REG (XEXP (X, 0)))\
- && CONSTANT_P (XEXP (X, 1))) \
- goto ADDR; \
+ else if (GET_CODE (X) == LO_SUM) \
+ { \
+ register rtx op0 = XEXP (X, 0); \
+ register rtx op1 = XEXP (X, 1); \
+ if (RTX_OK_FOR_BASE_P (op0) \
+ && CONSTANT_P (op1)) \
+ goto ADDR; \
+ } \
else if (GET_CODE (X) == CONST_INT && SMALL_INT (X)) \
goto ADDR; \
}