diff options
Diffstat (limited to 'gcc_arm/ginclude/va-fr30.h')
-rwxr-xr-x | gcc_arm/ginclude/va-fr30.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/gcc_arm/ginclude/va-fr30.h b/gcc_arm/ginclude/va-fr30.h new file mode 100755 index 0000000..17b8e37 --- /dev/null +++ b/gcc_arm/ginclude/va-fr30.h @@ -0,0 +1,49 @@ +/* Define __gnuc_va_list. */ + +#ifndef __GNUC_VA_LIST +#define __GNUC_VA_LIST +typedef void * __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) + +#ifdef _STDARG_H +#define va_start(AP, LASTARG) \ + (AP = ((__gnuc_va_list) __builtin_next_arg (LASTARG))) +#else +#define __va_ellipsis ... +#define va_alist __builtin_va_alist +#define va_dcl int __builtin_va_alist; __va_ellipsis +#define va_start(AP) AP = (char *) & __builtin_va_alist +#endif + +/* Now stuff common to both varargs & stdarg implementations. */ +#define __va_rounded_size(TYPE) \ + (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) + +#undef va_end + +void va_end (__gnuc_va_list); + +#define va_end(AP) ((void)0) + +/* We need to be able to detect structures and handle them specially. */ +#define __va_aggregate_p(TYPE) (__builtin_classify_type(*(TYPE *)0) >= 12) + +#define va_arg(AP, TYPE) \ + (__va_aggregate_p (TYPE) ? \ + (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (char *)), \ + ** ((TYPE **) (void *)((char *) (AP) - __va_rounded_size (char *)))) \ + : (sizeof (TYPE) % sizeof (int) == 0) ? \ + (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \ + * ((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE)))) \ + : (sizeof (TYPE) < 4) ? \ + (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \ + * ((TYPE *) (void *) ((char *) (AP) - sizeof (TYPE)))) \ + : \ + (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (char *)), \ + ** ((TYPE **) (void *)((char *) (AP) - __va_rounded_size (char *))))) + +#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */ |