home *** CD-ROM | disk | FTP | other *** search
- /* stdarg.h - PowerPC */
-
- #ifndef __STDARG_H
- #define __STDARG_H 1
-
- typedef struct {
- int gpr;
- int fpr;
- char *regbase;
- char *membase;
- } va_list;
-
- char *__va_start(void);
- char *__va_regbase(void);
- int __va_fixedgpr(void);
- int __va_fixedfpr(void);
-
- #define va_start(vl,dummy) \
- ( \
- vl.gpr=__va_fixedgpr(), \
- vl.fpr=__va_fixedfpr(), \
- vl.regbase=__va_regbase(), \
- vl.membase=__va_start() \
- )
-
- #define va_end(vl) (vl.regbase=vl.membase=0)
-
- #define __va_size(type) ((sizeof(type)+3)/4*4)
-
- #define va_arg(vl,type) \
- ( \
- (__typeof(type)&15)>8? \
- (vl.membase+=__va_size(type),((type*)vl.membase)[-1]) \
- : \
- ( \
- (((__typeof(type)&15)==5||(__typeof(type)&15)==6)) ? \
- ( \
- ++vl.fpr<=8 ? \
- ((type*)(vl.regbase+32))[vl.fpr-1] \
- : \
- (vl.membase+=__va_size(type),((type*)vl.membase)[-1]) \
- ) \
- : \
- ( \
- ++vl.gpr<=8 ? \
- ((type*)(vl.regbase+0))[vl.gpr-1] \
- : \
- (vl.membase+=__va_size(type),((type*)vl.membase)[-1]) \
- ) \
- ) \
- )
- #endif
-