OSDN Git Service

(_WCHAR_T_H): Test this and define this.
[pf3gnuchains/gcc-fork.git] / gcc / ginclude / va-alpha.h
1 /* GNU C varargs and stdargs support for the DEC Alpha.  */
2
3 /* Note:  We must use the name __builtin_savregs.  GCC attaches special
4    significance to that name.  In particular, regardless of where in a
5    function __builtin_saveregs is called, GCC moves the call up to the
6    very start of the function.  */
7
8 /* Define __gnuc_va_list.  */
9
10 #ifndef __GNUC_VA_LIST
11 #define __GNUC_VA_LIST
12
13 typedef struct {
14   char *__base;                 /* Pointer to first integer register. */
15   long __offset;                /* Byte offset of args so far. */
16 } __gnuc_va_list;
17 #endif /* not __GNUC_VA_LIST */
18
19 /* If this is for internal libc use, don't define anything but
20    __gnuc_va_list.  */
21 #if defined (_STDARG_H) || defined (_VARARGS_H)
22
23 #define va_list __gnuc_va_list
24 #define _VA_LIST
25 #define _VA_LIST_
26
27 #if !defined(_STDARG_H)
28
29 /* varargs support */
30 #define va_alist __builtin_va_alist
31 #define va_dcl
32 #define va_start(pvar) ((pvar) = * (__gnuc_va_list *) __builtin_saveregs ())
33
34 #else /* STDARG.H */
35
36 /* ANSI alternative.  */
37
38 #define va_start(pvar, firstarg)  \
39   ((pvar) = *(__gnuc_va_list *) __builtin_saveregs ())
40
41 #endif /* _STDARG_H */
42
43 #ifndef va_end
44
45 #define va_end(__va)
46
47 /* Values returned by __builtin_classify_type.  */
48
49 enum {
50   __no_type_class = -1,
51   __void_type_class,
52   __integer_type_class,
53   __char_type_class,
54   __enumeral_type_class,
55   __boolean_type_class,
56   __pointer_type_class,
57   __reference_type_class,
58   __offset_type_class,
59   __real_type_class,
60   __complex_type_class,
61   __function_type_class,
62   __method_type_class,
63   __record_type_class,
64   __union_type_class,
65   __array_type_class,
66   __string_type_class,
67   __set_type_class,
68   __file_type_class,
69   __lang_type_class
70 };
71
72 #endif
73
74 /* Note that parameters are always aligned at least to a word boundary
75    (when passed) regardless of what GCC's __alignof__ operator says.  */
76
77 /* Avoid errors if compiling GCC v2 with GCC v1.  */
78 #if __GNUC__ == 1
79 #define __extension__
80 #endif
81
82 /* Get the size of a type in bytes, rounded up to an integral number
83    of words.  */
84
85 #define __va_tsize(__type)  \
86   (((sizeof (__type) + sizeof (long) - 1) / sizeof (long)) * sizeof (long))
87
88 #define va_arg(__va, __type)                                            \
89 (*(((__va).__offset += __va_tsize (__type)),                            \
90    (__type *)((__va).__base + (__va).__offset                           \
91               - (((__builtin_classify_type (* (__type *) 0)             \
92                    == __real_type_class) && (__va).__offset <= (6 * 8)) \
93                  ? (6 * 8) + 8 : __va_tsize (__type)))))
94
95 #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
96