(va_end): #undef before the declaration.

(va_arg): Alternative definition for big-endian machines.

From-SVN: r2820
This commit is contained in:
Richard Stallman 1992-11-30 23:06:23 +00:00
parent 355b20971a
commit 0cd3c247a3
1 changed files with 12 additions and 0 deletions

View File

@ -62,14 +62,26 @@ typedef void *__gnuc_va_list;
#define va_start(AP, LASTARG) \
(AP = ((__gnuc_va_list) __builtin_next_arg ()))
#undef va_end
void va_end (__gnuc_va_list); /* Defined in libgcc.a */
#define va_end(AP)
/* We cast to void * and then to TYPE * because this avoids
a warning about increasing the alignment requirement. */
#if defined (__arm__) || defined (__i386__) || defined (__ns32000__) || defined (__vax__)
/* This is for little-endian machines; small args are padded upward. */
#define va_arg(AP, TYPE) \
(AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \
*((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE))))
#else /* big-endian */
/* This is for big-endian machines; small args are padded downward. */
#define va_arg(AP, TYPE) \
(AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \
*((TYPE *) (void *) ((char *) (AP) - ((sizeof (TYPE) < 4 \
? sizeof (TYPE) \
: __va_rounded_size (TYPE))))))
#endif /* big-endian */
#endif /* _STDARG_H */
#endif /* not alpha */