summaryrefslogtreecommitdiff
path: root/gcc/ginclude
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-10-09 16:35:48 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-10-09 16:35:48 +0000
commita2dc7c59c36923023279c00e41ec4cfed90b0041 (patch)
treee3d857a4e22969da0f86e14343e48687177e16a8 /gcc/ginclude
parent26a52387253977dbbf061ee28f06caf01041100a (diff)
downloadgcc-a2dc7c59c36923023279c00e41ec4cfed90b0041.tar.gz
(va_arg): Deal with long longs that would be passed in the 7th
register, and are passed in the stack instead. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10436 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ginclude')
-rw-r--r--gcc/ginclude/va-ppc.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ginclude/va-ppc.h b/gcc/ginclude/va-ppc.h
index 940657483c3..09f11e0d298 100644
--- a/gcc/ginclude/va-ppc.h
+++ b/gcc/ginclude/va-ppc.h
@@ -5,6 +5,8 @@
#ifndef __GNUC_VA_LIST
#define __GNUC_VA_LIST
+/* Note that the names in this structure are in the user's namespace, but
+ that the V.4 abi explicitly states that these names should be used. */
typedef struct {
char gpr; /* index into the array of 8 GPRs stored in the
register save area gpr=0 corresponds to r3,
@@ -115,6 +117,14 @@ __extension__ (*({ \
(AP)->gpr += __va_size (TYPE); \
} \
\
+ else if (!__va_float_p (TYPE) && !__va_aggregate_p (TYPE) \
+ && (AP)->gpr < 8) \
+ { \
+ (AP)->gpr = 8; \
+ __ptr = (TYPE *) (void *) ((AP)->overflow_arg_area); \
+ (AP)->overflow_arg_area += __va_size (TYPE) * sizeof (long); \
+ } \
+ \
else if (__va_aggregate_p (TYPE)) \
{ \
__ptr = * (TYPE **) (void *) ((AP)->overflow_arg_area); \