]> gcc.gnu.org Git - gcc.git/commitdiff
* sh.h (STRUCT_VALUE, RETURN_IN_MEMORY): Define.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Thu, 6 Apr 2000 19:43:12 +0000 (19:43 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Thu, 6 Apr 2000 19:43:12 +0000 (20:43 +0100)
From-SVN: r32977

gcc/ChangeLog
gcc/config/sh/sh.h

index 9d4000f6ab461eea7640325be229b06f6352292c..b4aabb47bea8326565a5010d74c9b56e9f8514ea 100644 (file)
@@ -1,3 +1,7 @@
+Thu Apr  6 20:39:26 2000  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.h (STRUCT_VALUE, RETURN_IN_MEMORY): Define.
+
 Thu Apr  6 19:34:08 2000  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * config/sh/lib1funcs.asm (___udivsi3_i4):
index 9e1eba2ab82c7c188db5e36c41de7c2748193949..efeab0a6b9e93907ebfc3aa711454d71933e7c3e 100644 (file)
@@ -592,7 +592,25 @@ do {                                                                       \
    where the address is passed.  If it returns 0, the address is
    passed as an "invisible" first argument.  */
 
-/*#define STRUCT_VALUE ((rtx)0)*/
+/* The Hitachi calling convention doesn't quite fit into this scheme since
+   the address is passed like an invisible argument, but one that is always
+   passed in memory.  We approximate this by saying where the pointer is;
+   however, this will put any actual arguments that are passed in memory
+   in the wrong place.
+   If we wanted to implement this exactly, we'd need a STRUCT_VALUE of 0,
+   an extra field in CUMULATIVE_ARGS, initialize it in INIT_CUMULATIVE_ARGS,
+   and hack FUNCTION_VALUE / FUNCTION_ARG_ADVANCE to look directly at
+   DECL_RESULT of the current function in conjunction with CUM to determine
+   if the argument in question it is a struct value pointer, and if it is,
+   pass it in memory.  */
+#define STRUCT_VALUE \
+  (TARGET_HITACHI \
+   ? gen_rtx_MEM (Pmode, arg_pointer_rtx) \
+   : gen_rtx_REG (Pmode, STRUCT_VALUE_REGNUM))
+
+#define RETURN_IN_MEMORY(TYPE) \
+  (TYPE_MODE (TYPE) == BLKmode \
+   || TARGET_HITACHI && TREE_CODE (TYPE) == RECORD_TYPE)
 
 /* Don't default to pcc-struct-return, because we have already specified
    exactly how to return structures in the RETURN_IN_MEMORY macro.  */
This page took 0.101132 seconds and 5 git commands to generate.