home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / gnu / gcc-2.3.3-bin.lha / lib / gcc-lib / amigados / 2.3.3 / include / va-pa.h < prev    next >
C/C++ Source or Header  |  1994-02-06  |  1KB  |  47 lines

  1.  
  2. /* Define __gnuc_va_list. */
  3.  
  4. #ifndef __GNUC_VA_LIST
  5. #define __GNUC_VA_LIST
  6.  
  7. typedef double *__gnuc_va_list;
  8. #endif /* not __GNUC_VA_LIST */
  9.  
  10. /* If this is for internal libc use, don't define anything but
  11.    __gnuc_va_list.  */
  12. #if defined (_STDARG_H) || defined (_VARARGS_H)
  13. #if __GNUC__ > 1
  14. #define __va_ellipsis ...
  15. #define __gnuc_va_start(AP) ((AP) = (va_list)__builtin_saveregs())
  16. #else
  17. #define va_alist __va_a__, __va_b__, __va_c__, __va_d__
  18. #define __va_ellipsis 
  19. #define __gnuc_va_start(AP)\
  20.   (AP) = (double *) &__va_a__, &__va_b__, &__va_c__, &__va_d__, \
  21.   (AP) = (double *)((char *)(AP) + 4)
  22. #endif /* __GNUC__ > 1 */
  23.  
  24. #ifdef _STDARG_H
  25. #define va_start(AP,LASTARG) __gnuc_va_start (AP)
  26. #else
  27. /* The ... causes current_function_varargs to be set in cc1.  */
  28. #define va_dcl long va_alist; __va_ellipsis
  29. #define va_start(AP) __gnuc_va_start (AP)
  30. #endif
  31.  
  32. #define va_arg(AP,TYPE)                        \
  33.   (sizeof(TYPE) > 8 ?                        \
  34.    ((AP = (__gnuc_va_list) ((char *)AP - sizeof (int))),    \
  35.     (*((TYPE *) (void *) (*((int *) (AP))))))            \
  36.    :((AP =                            \
  37.       (__gnuc_va_list) ((long)((char *)AP - sizeof (TYPE))    \
  38.             & (sizeof(TYPE) > 4 ? ~0x7 : ~0x3))),    \
  39.      (*((TYPE *) (void *) ((char *)AP + ((8 - sizeof(TYPE)) % 4))))))
  40.  
  41. #ifndef va_end
  42. void va_end (__gnuc_va_list);        /* Defined in libgcc.a */
  43. #endif
  44. #define va_end(AP)
  45.  
  46. #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
  47.