va-mips.h

来自「GUN开源阻止下的编译器GCC」· C头文件 代码 · 共 111 行

H
111
字号
/* ---------------------------------------- *//*           VARARGS  for MIPS/GNU CC       *//*                                          *//*                                          *//*                                          *//*                                          *//* ---------------------------------------- *//* These macros implement varargs for GNU C--either traditional or ANSI.  *//* Define __gnuc_va_list.  */#ifndef __GNUC_VA_LIST#define __GNUC_VA_LISTtypedef char * __gnuc_va_list;#endif /* not __GNUC_VA_LIST *//* If this is for internal libc use, don't define anything but   __gnuc_va_list.  */#if defined (_STDARG_H) || defined (_VARARGS_H)/* 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#ifdef __mips64#define __va_rounded_size(__TYPE)  \  (((sizeof (__TYPE) + 8 - 1) / 8) * 8)#else#define __va_rounded_size(__TYPE)  \  (((sizeof (__TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))#endif/* Get definitions for _MIPS_SIM_ABI64 etc.  */#ifdef _MIPS_SIM#include <sgidefs.h>#endif#ifdef _STDARG_H#define va_start(__AP, __LASTARG) \  (__AP = (__gnuc_va_list) __builtin_next_arg (__LASTARG))#else#define va_alist  __builtin_va_alist#ifdef __mips64/* This assumes that `long long int' is always a 64 bit type.  */#define va_dcl    long long int __builtin_va_alist; __va_ellipsis#else#define va_dcl    int __builtin_va_alist; __va_ellipsis#endif/* Need alternate code for _MIPS_SIM_ABI64.  */#if defined(_MIPS_SIM) && (_MIPS_SIM == _MIPS_SIM_ABI64)#define va_start(__AP)							\  (__AP = (__gnuc_va_list) __builtin_next_arg ()			\   + (__builtin_args_info (2) >= 8 ? -8 : 0))#else#define va_start(__AP)  __AP = (char *) &__builtin_va_alist#endif#endif#ifndef va_endvoid va_end (__gnuc_va_list);		/* Defined in libgcc.a */#endif#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#ifdef __MIPSEB__#define va_arg(__AP, __type)                                    \  ((__type *) (void *) (__AP = (char *) ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \					 + __va_rounded_size (__type))))[-1]#else#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#else /* not __mips64 */#ifdef __MIPSEB__/* For big-endian machines.  */#define va_arg(__AP, __type)					\  ((__AP = (char *) ((__alignof__ (__type) > 4			\		      ? ((int)__AP + 8 - 1) & -8		\		      : ((int)__AP + 4 - 1) & -4)		\		     + __va_rounded_size (__type))),		\   *(__type *) (void *) (__AP - __va_rounded_size (__type)))#else/* For little-endian machines.  */#define va_arg(__AP, __type)						    \  ((__type *) (void *) (__AP = (char *) ((__alignof__(__type) > 4	    \					  ? ((int)__AP + 8 - 1) & -8	    \					  : ((int)__AP + 4 - 1) & -4)	    \					 + __va_rounded_size(__type))))[-1]#endif#endif#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?