rs6000.h (RETURN_IN_MEMORY): Cast result of int_size_in_bytes to unsigned HOST_WIDEST...
authorZack Weinberg <zack@codesourcery.com>
Mon, 3 Dec 2001 18:47:44 +0000 (18:47 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Mon, 3 Dec 2001 18:47:44 +0000 (18:47 +0000)
* rs6000.h (RETURN_IN_MEMORY): Cast result of
int_size_in_bytes to unsigned HOST_WIDEST_INT so that -1 > 8.

From-SVN: r47554

gcc/ChangeLog
gcc/config/rs6000/rs6000.h

index da642a93491db4a80c38396c88c33ac492f8f575..0458f583aeca27e6344c2d0d38736664108f9090 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-03  Zack Weinberg  <zack@codesourcery.com>
+
+       * rs6000.h (RETURN_IN_MEMORY): Cast result of
+       int_size_in_bytes to unsigned HOST_WIDEST_INT so that -1 > 8.
+
 Mon Dec  3 09:18:34 2001  Jeffrey A Law  (law@cygnus.com)
 
        * mn10200.md (negsf2): Use -0x8000 instead of 0x8000 for
index 59c0455b5f2cd44cae70f74b3d818cf4a77f192f..3baf6866f602e33ed58b5c96d9412b5371795697 100644 (file)
@@ -1486,11 +1486,15 @@ typedef struct rs6000_stack {
    controls this instead of DEFAULT_ABI; V.4 targets needing backward
    compatibility can change DRAFT_V4_STRUCT_RET to override the
    default, and -m switches get the final word.  See
-   rs6000_override_options for more details.  */
-   
+   rs6000_override_options for more details.
+
+   int_size_in_bytes returns -1 for variable size objects, which go in
+   memory always.  The cast to unsigned makes -1 > 8.  */
+
 #define RETURN_IN_MEMORY(TYPE) \
   (AGGREGATE_TYPE_P (TYPE) && \
-   (TARGET_AIX_STRUCT_RET || int_size_in_bytes (TYPE) > 8))
+   (TARGET_AIX_STRUCT_RET || \
+    (unsigned HOST_WIDEST_INT) int_size_in_bytes (TYPE) > 8))
 
 /* DRAFT_V4_STRUCT_RET defaults off.  */
 #define DRAFT_V4_STRUCT_RET 0