Index: sys/mips/include/stdarg.h =================================================================== --- sys/mips/include/stdarg.h +++ sys/mips/include/stdarg.h @@ -5,140 +5,12 @@ #ifndef _MACHINE_STDARG_H_ #define _MACHINE_STDARG_H_ -#include -#include +#include -#if __GNUC__ >= 3 - -#ifndef _VA_LIST_DECLARED -#define _VA_LIST_DECLARED -typedef __va_list va_list; +#ifndef va_start + #error this file needs to be ported to your compiler #endif -#define va_start(v,l) __builtin_va_start((v),l) -#define va_end __builtin_va_end -#define va_arg __builtin_va_arg -#define va_copy __builtin_va_copy - -#else /* __GNUC__ */ - - -/* ---------------------------------------- */ -/* VARARGS for MIPS/GNU CC */ -/* ---------------------------------------- */ - -#include - -/* These macros implement varargs for GNU C--either traditional or ANSI. */ - -/* Define __gnuc_va_list. */ - -#ifndef __GNUC_VA_LIST -#define __GNUC_VA_LIST - -typedef char * __gnuc_va_list; -typedef __gnuc_va_list va_list; - -#endif /* ! __GNUC_VA_LIST */ - -/* If this is for internal libc use, don't define anything but - __gnuc_va_list. */ - -#ifndef _VA_MIPS_H_ENUM -#define _VA_MIPS_H_ENUM -enum { - __no_type_class = -1, - __void_type_class, - __integer_type_class, - __char_type_class, - __enumeral_type_class, - __boolean_type_class, - __pointer_type_class, - __reference_type_class, - __offset_type_class, - __real_type_class, - __complex_type_class, - __function_type_class, - __method_type_class, - __record_type_class, - __union_type_class, - __array_type_class, - __string_type_class, - __set_type_class, - __file_type_class, - __lang_type_class -}; -#endif - -/* 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_start(__AP, __LASTARG) \ - (__AP = (__gnuc_va_list) __builtin_next_arg (__LASTARG)) - -#define va_end(__AP) ((void)0) - - -/* We cast to void * and then to TYPE * because this avoids - a warning about increasing the alignment requirement. */ -/* The __mips64 cases are reversed from the 32 bit cases, because the standard - 32 bit calling convention left-aligns all parameters smaller than a word, - whereas the __mips64 calling convention does not (and hence they are - right aligned). */ - -#ifdef __mips64 - -#define __va_rounded_size(__TYPE) (((sizeof (__TYPE) + 8 - 1) / 8) * 8) - -#define __va_reg_size 8 - -#if defined(__MIPSEB__) || (BYTE_ORDER == BIG_ENDIAN) -#define va_arg(__AP, __type) \ - ((__type *) (void *) (__AP = (char *) \ - ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \ - + __va_rounded_size (__type))))[-1] -#else /* ! __MIPSEB__ && !BYTE_ORDER == BIG_ENDIAN */ -#define va_arg(__AP, __type) \ - ((__AP = (char *) ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \ - + __va_rounded_size (__type))), \ - *(__type *) (void *) (__AP - __va_rounded_size (__type))) -#endif /* ! __MIPSEB__ && !BYTE_ORDER == BIG_ENDIAN */ - -#else /* ! __mips64 */ - -#define __va_rounded_size(__TYPE) \ - (((sizeof (__TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) - -#define __va_reg_size 4 - -#if defined(__MIPSEB__) || (BYTE_ORDER == BIG_ENDIAN) -/* For big-endian machines. */ -#define va_arg(__AP, __type) \ - ((__AP = (char *) ((__alignof__ (__type) > 4 \ - ? ((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8 \ - : ((__PTRDIFF_TYPE__)__AP + 4 - 1) & -4) \ - + __va_rounded_size (__type))), \ - *(__type *) (void *) (__AP - __va_rounded_size (__type))) -#else /* ! __MIPSEB__ && !BYTE_ORDER == BIG_ENDIAN */ -/* For little-endian machines. */ -#define va_arg(__AP, __type) \ - ((__type *) (void *) (__AP = (char *) ((__alignof__(__type) > 4 \ - ? ((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8 \ - : ((__PTRDIFF_TYPE__)__AP + 4 - 1) & -4) \ - + __va_rounded_size(__type))))[-1] -#endif /* ! __MIPSEB__ && !BYTE_ORDER == BIG_ENDIAN */ -#endif /* ! __mips64 */ -/* Copy __gnuc_va_list into another variable of this type. */ -#define __va_copy(dest, src) (dest) = (src) -#define va_copy(dest, src) (dest) = (src) -#endif /* __GNUC__ */ #endif /* _MACHINE_STDARG_H_ */