Commit ba8ab355 by Jim Wilson

Initial revision

From-SVN: r907
parent f543676f
/* GNU C varargs support for the Intel 80960. */
/* In GCC version 2, we want an ellipsis at the end of the declaration
of the argument list. GCC version 1 can't parse it. */
#if __GNUC__ > 1
#define __va_ellipsis ...
#else
#define __va_ellipsis
#endif
#define va_alist __builtin_va_alist
#define va_dcl char *__builtin_va_alist; __va_ellipsis
/* The first element is the address of the first argument.
The second element is the number of bytes skipped past so far. */
typedef unsigned va_list[2];
/* The stack size of the type t. */
#define __vsiz(T) (((sizeof (T) + 3) / 4) * 4)
/* The stack alignment of the type t. */
#define __vali(T) (__alignof__ (T) >= 4 ? __alignof__ (T) : 4)
/* The offset of the next stack argument after one of type t at offset i. */
#define __vpad(I, T) ((((I) + __vali (T) - 1) / __vali (T)) \
* __vali (T) + __vsiz (T))
#ifdef _STDARG_H
#define va_start(AP, LASTARG) ((AP)[1] = 0, \
*(AP) = (unsigned) __builtin_next_arg ())
#else
#define va_start(AP) ((AP)[1] = 0, *(AP) = (unsigned) &va_alist)
#endif
#define va_arg(AP, T) \
( \
( \
((AP)[1] <= 48 && (__vpad ((AP)[1], T) > 48 || __vsiz (T) > 16)) \
? ((AP)[1] = 48 + __vsiz (T)) \
: ((AP)[1] = __vpad ((AP)[1], T)) \
), \
\
*((T *) ((char *) *(AP) + (AP)[1] - __vsiz (T))) \
)
#define va_end(AP)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment