diff options
author | Nick Clifton <nickc@redhat.com> | 2015-06-08 13:57:58 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2015-06-08 13:57:58 +0000 |
commit | e50869f7a638328f609afc0cbfa77ccaa2cbe01a (patch) | |
tree | fc186b27117ad066504d7a44e648253e3f72c084 /gcc | |
parent | 66c277f11b6247750e0206d630bb6d0757e56cec (diff) | |
download | gcc-e50869f7a638328f609afc0cbfa77ccaa2cbe01a.zip gcc-e50869f7a638328f609afc0cbfa77ccaa2cbe01a.tar.gz gcc-e50869f7a638328f609afc0cbfa77ccaa2cbe01a.tar.bz2 |
rx.c (rx_function_value): Do not promote vector types.
* config/rx/rx.c (rx_function_value): Do not promote vector types.
(rx_promote_function_mode): Likewise.
* config/rx/rx.h (LIBCALL_VALUE): Likewise.
From-SVN: r224228
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rx/rx.c | 20 | ||||
-rw-r--r-- | gcc/config/rx/rx.h | 1 |
3 files changed, 22 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1831c64..9908efd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-06-08 Nick Clifton <nickc@redhat.com> + + * config/rx/rx.c (rx_function_value): Do not promote vector types. + (rx_promote_function_mode): Likewise. + * config/rx/rx.h (LIBCALL_VALUE): Likewise. + 2015-06-08 Jakub Jelinek <jakub@redhat.com> * genattrtab.c (insn_alternatives): Change type from int * diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c index 5262fbf..5bf38df 100644 --- a/gcc/config/rx/rx.c +++ b/gcc/config/rx/rx.c @@ -477,11 +477,18 @@ rx_print_operand_address (FILE * file, rtx addr) addr = XEXP (addr, 0); gcc_assert (XINT (addr, 1) == UNSPEC_CONST); - /* FIXME: Putting this case label here is an appalling abuse of the C language. */ - case UNSPEC: addr = XVECEXP (addr, 0, 0); gcc_assert (CONST_INT_P (addr)); + fprintf (file, "#"); + output_addr_const (file, addr); + break; } + fprintf (file, "#"); + output_addr_const (file, XEXP (addr, 0)); + break; + + case UNSPEC: + addr = XVECEXP (addr, 0, 0); /* Fall through. */ case LABEL_REF: case SYMBOL_REF: @@ -1174,6 +1181,8 @@ rx_function_value (const_tree ret_type, if (GET_MODE_SIZE (mode) > 0 && GET_MODE_SIZE (mode) < 4 && ! COMPLEX_MODE_P (mode) + && ! VECTOR_TYPE_P (ret_type) + && ! VECTOR_MODE_P (mode) ) return gen_rtx_REG (SImode, FUNC_RETURN_REGNUM); @@ -1193,6 +1202,8 @@ rx_promote_function_mode (const_tree type ATTRIBUTE_UNUSED, if (for_return != 1 || GET_MODE_SIZE (mode) >= 4 || COMPLEX_MODE_P (mode) + || VECTOR_MODE_P (mode) + || VECTOR_TYPE_P (type) || GET_MODE_SIZE (mode) < 1) return mode; @@ -1712,7 +1723,6 @@ gen_safe_add (rtx dest, rtx src, rtx val, bool is_frame_related) if (is_frame_related) RTX_FRAME_RELATED_P (insn) = 1; - return; } static void @@ -1746,7 +1756,7 @@ rx_expand_prologue (void) if (flag_stack_usage_info) current_function_static_stack_size = frame_size + stack_size; - + /* If we use any of the callee-saved registers, save them now. */ if (mask) { @@ -1852,7 +1862,7 @@ rx_expand_prologue (void) GEN_INT (- (HOST_WIDE_INT) frame_size), true); else gen_safe_add (stack_pointer_rtx, frame_pointer_rtx, NULL_RTX, - true); + false /* False because the epilogue will use the FP not the SP. */); } } diff --git a/gcc/config/rx/rx.h b/gcc/config/rx/rx.h index 8391b5b..d2d6bce 100644 --- a/gcc/config/rx/rx.h +++ b/gcc/config/rx/rx.h @@ -267,6 +267,7 @@ enum reg_class #define LIBCALL_VALUE(MODE) \ gen_rtx_REG (((GET_MODE_CLASS (MODE) != MODE_INT \ || COMPLEX_MODE_P (MODE) \ + || VECTOR_MODE_P (MODE) \ || GET_MODE_SIZE (MODE) >= 4) \ ? (MODE) \ : SImode), \ |