Commit: RX: Do not promote vector types

Nick Clifton nickc@redhat.com
Mon Jun 8 14:04:00 GMT 2015


Hi Guys,

  I am applying the patch below to the RX's handling of vector
  functions.  The RX ABI specifies that small integer return values
  should always be promoted to 32-bit values, but the code that performs
  this promotion was also affecting vector types.  This results in
  internal compiler errors when the promoted type does not match the
  original vector type.

Cheers
  Nick

gcc/ChangeLog
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.

Index: gcc/config/rx/rx.c
===================================================================
--- gcc/config/rx/rx.c	(revision 224227)
+++ gcc/config/rx/rx.c	(working copy)
@@ -1174,6 +1181,8 @@
   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 @@
   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;
 
Index: gcc/config/rx/rx.h
===================================================================
--- gcc/config/rx/rx.h	(revision 224227)
+++ gcc/config/rx/rx.h	(working copy)
@@ -267,6 +267,7 @@
 #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),				\



More information about the Gcc-patches mailing list