From bec2e3595757d4d7d43972b78fc4eee87e1be753 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Mon, 27 Apr 1992 09:44:10 -0700 Subject: [PATCH] *** empty log message *** From-SVN: r839 --- gcc/combine.c | 7 ++-- gcc/config/sparc/sparc.h | 73 +++++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/gcc/combine.c b/gcc/combine.c index 247f66ac2d4..ade79cb9277 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 51c221c1248..5be9cdbf56b 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; \ } -- 2.30.2