386BSD 0.0 development
[unix-history] / usr / src / usr.bin / gcc / cc1 / gvarargs.h
CommitLineData
2e6c90f3
WJ
1#ifndef __GNUC__
2/* Use the system's macros with the system's compiler. */
3#include <varargs.h>
4#else
5/* Record that varargs.h is defined; this turns off stdarg.h. */
6
7#ifndef _VARARGS_H
8#define _VARARGS_H
9
10#ifdef __sparc__
11#include "va-sparc.h"
12#else
13#ifdef __spur__
14#include "va-spur.h"
15#else
16#ifdef __mips__
17#include "va-mips.h"
18#else
19#ifdef __i860__
20#include "va-i860.h"
21#else
22#ifdef __pyr__
23#include "va-pyr.h"
24#else
25
26#ifdef __NeXT__
27
28/* On Next, erase any vestiges of stdarg.h. */
29
30#undef va_alist
31#undef va_dcl
32#undef va_list
33#undef va_start
34#undef va_end
35#undef __va_rounded_size
36#undef va_arg
37#endif /* __NeXT__ */
38
39/* These macros implement traditional (non-ANSI) varargs
40 for GNU C. */
41
42#define va_alist __builtin_va_alist
43#define va_dcl int __builtin_va_alist;
44#define va_list char *
45
46#ifdef __sparc__
47#define va_start(AP) \
48 (__builtin_saveregs (), \
49 AP = ((void *) &__builtin_va_alist))
50#else
51#define va_start(AP) AP=(char *) &__builtin_va_alist
52#endif
53#define va_end(AP)
54
55#define __va_rounded_size(TYPE) \
56 (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
57
58#define va_arg(AP, TYPE) \
59 (*((TYPE *) (AP += __va_rounded_size (TYPE), \
60 AP - __va_rounded_size (TYPE))))
61
62#endif /* not pyr */
63#endif /* not i860 */
64#endif /* not mips */
65#endif /* not spur */
66#endif /* not sparc */
67#endif /* not _VARARGS_H */
68#endif /* __GNUC__ */