|
|
1.1 root 1: /* Handle gvarargs.h and gstdarg.h for clipper. */
2:
3: typedef struct
4: {
5: double __va_f[2]; /* saved floating regs f0,f1 */
6: int __va_r[2]; /* saved general regs r0,r1 */
7: int __va_ap; /* pointer stack args */
8: int __va_num; /* number of args processed */
9: } va_list;
10: #define _VA_LIST
11:
12: #ifdef _STDARG_H
13: #define va_start(AP,LASTARG) \
14: ((AP) = *(va_list *)__builtin_saveregs(), \
15: (AP).__va_num = __builtin_args_info (0), \
16: (AP).__va_ap += __builtin_args_info (1))
17: #else
18: #define va_alist __builtin_va_alist
19: /* The ... causes current_function_varargs to be set in cc1. */
20: #define va_dcl va_list __builtin_va_alist; ...
21: #define va_start(AP) \
22: ((AP) = *(va_list *)__builtin_saveregs(), \
23: (AP).__va_num = __builtin_args_info (0))
24: #endif /* _STDARG_H */
25:
26: #define __va_rounded_size(TYPE) \
27: (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
28:
29: #define __va_round(AP,TYPE) \
30: ((AP).__va_ap = ((AP).__va_ap + __alignof__ (TYPE) - 1 ) & \
31: ~(__alignof__ (TYPE) - 1))
32:
33: #define va_arg(AP, TYPE) \
34: ((AP).__va_num < 2 && __builtin_classify_type (* (TYPE *)0) < 12 \
35: ? (__builtin_classify_type (* (TYPE *)0) == 8 \
36: ? (*(TYPE *)&(AP).__va_f[(AP).__va_num++]) \
37: : ((TYPE)((AP).__va_r[(AP).__va_num++]))) \
38: : ((AP).__va_num++, __va_round (AP,TYPE), *((TYPE *)((AP).__va_ap))++))
39:
40: #define va_end(AP)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.