diff options
author | sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-16 16:07:13 +0000 |
---|---|---|
committer | sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-16 16:07:13 +0000 |
commit | 9fd73f310177bb1a205a61e48eb1da2ef461455c (patch) | |
tree | 2179a5c81855008c66bb0dfa9ca2d9b2f05490ec /gcc/explow.c | |
parent | dc099f6cb82eb843963f1dbeb96ed064778fa85b (diff) | |
download | gcc-9fd73f310177bb1a205a61e48eb1da2ef461455c.tar.gz |
* gcc/explow.c (convert_memory_address): Remove special handling
when POINTERS_EXTEND_UNSIGNED < 0.
* gcc/config/ia64.md (movsi_symbolic): New instruction for ILP32
mode.
(movedi_symbolic): Fix typo.
(load_fptr): Remove mode restriction so it works for SI and DI.
(load_fptr_internal1): Ditto.
(load_gprel): Ditto.
(load_symptr_internal1): Ditto.
(call_pic): Ditto.
* gcc/config/ia64.c (call_operand): Modify mode check.
(ia64_expand_load_address): Handle DI and SI addresses and symbols.
(ia64_expand_move): Ditto.
(ia64_assemble_integer): Handle SImode function pointers.
(ia64_expand_fetch_and_op): Handle SImode mem addresses.
(ia64_expand_op_and_fetch): Ditto.
(ia64_expand_compare_and_swap): Ditto.
(ia64_expand_lock_test_and_set): Ditto.
(ia64_expand_lock_release): Ditto.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55488 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/explow.c')
-rw-r--r-- | gcc/explow.c | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/gcc/explow.c b/gcc/explow.c index 8f0b52fef21..13a7b82be5b 100644 --- a/gcc/explow.c +++ b/gcc/explow.c @@ -363,36 +363,28 @@ convert_memory_address (to_mode, x) return x; case SUBREG: - if (POINTERS_EXTEND_UNSIGNED >= 0 - && (SUBREG_PROMOTED_VAR_P (x) || REG_POINTER (SUBREG_REG (x))) + if ((SUBREG_PROMOTED_VAR_P (x) || REG_POINTER (SUBREG_REG (x))) && GET_MODE (SUBREG_REG (x)) == to_mode) return SUBREG_REG (x); break; case LABEL_REF: - if (POINTERS_EXTEND_UNSIGNED >= 0) - { - temp = gen_rtx_LABEL_REF (to_mode, XEXP (x, 0)); - LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x); - return temp; - } + temp = gen_rtx_LABEL_REF (to_mode, XEXP (x, 0)); + LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x); + return temp; break; case SYMBOL_REF: - if (POINTERS_EXTEND_UNSIGNED >= 0) - { - temp = gen_rtx_SYMBOL_REF (to_mode, XSTR (x, 0)); - SYMBOL_REF_FLAG (temp) = SYMBOL_REF_FLAG (x); - CONSTANT_POOL_ADDRESS_P (temp) = CONSTANT_POOL_ADDRESS_P (x); - STRING_POOL_ADDRESS_P (temp) = STRING_POOL_ADDRESS_P (x); - return temp; - } + temp = gen_rtx_SYMBOL_REF (to_mode, XSTR (x, 0)); + SYMBOL_REF_FLAG (temp) = SYMBOL_REF_FLAG (x); + CONSTANT_POOL_ADDRESS_P (temp) = CONSTANT_POOL_ADDRESS_P (x); + STRING_POOL_ADDRESS_P (temp) = STRING_POOL_ADDRESS_P (x); + return temp; break; case CONST: - if (POINTERS_EXTEND_UNSIGNED >= 0) - return gen_rtx_CONST (to_mode, - convert_memory_address (to_mode, XEXP (x, 0))); + return gen_rtx_CONST (to_mode, + convert_memory_address (to_mode, XEXP (x, 0))); break; case PLUS: @@ -401,8 +393,7 @@ convert_memory_address (to_mode, x) permute the conversion and addition operation. We can always safely permute them if we are making the address narrower. In addition, always permute the operations if this is a constant. */ - if (POINTERS_EXTEND_UNSIGNED >= 0 - && (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode) + if ((GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode) || (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT && (INTVAL (XEXP (x, 1)) + 20000 < 40000 || CONSTANT_P (XEXP (x, 0)))))) |