home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / gcc-2.4.5 / va-clipper.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-24  |  1.3 KB  |  41 lines

  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)
  41.