diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-10-09 16:35:48 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-10-09 16:35:48 +0000 |
commit | a2dc7c59c36923023279c00e41ec4cfed90b0041 (patch) | |
tree | e3d857a4e22969da0f86e14343e48687177e16a8 /gcc/ginclude | |
parent | 26a52387253977dbbf061ee28f06caf01041100a (diff) | |
download | gcc-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.h | 10 |
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); \ |