Annotation of GNUtools/cc/va-m88k.h, revision 1.1.1.1

1.1       root        1: /* GNU C varargs support for the Motorola 88100  */
                      2: 
                      3: /* Define __gnuc_va_list.  */
                      4: 
                      5: #ifndef __GNUC_VA_LIST
                      6: #define __GNUC_VA_LIST
                      7: 
                      8: typedef struct
                      9: {
                     10:   int  __va_arg;               /* argument number */
                     11:   int *__va_stk;               /* start of args passed on stack */
                     12:   int *__va_reg;               /* start of args passed in regs */
                     13: } __gnuc_va_list;
                     14: #endif /* not __GNUC_VA_LIST */
                     15: 
                     16: /* If this is for internal libc use, don't define anything but
                     17:    __gnuc_va_list.  */
                     18: #if defined (_STDARG_H) || defined (_VARARGS_H)
                     19: 
                     20: #ifdef _STDARG_H /* stdarg.h support */
                     21: 
                     22: #if __GNUC__ > 1 /* GCC 2.0 and beyond */
                     23: #define va_start(AP,LASTARG) ((AP) = *(__gnuc_va_list *)__builtin_saveregs())
                     24: #else
                     25: #define va_start(AP,LASTARG) \
                     26:   ( (AP).__va_reg = (int *) __builtin_saveregs2(0), \
                     27:     (AP).__va_stk = (int *) __builtin_argptr(), \
                     28:     (AP).__va_arg = (int) (__builtin_argsize() + 3) / 4 )
                     29: #endif
                     30: 
                     31: #else /* varargs.h support */
                     32: 
                     33: #if __GNUC__ > 1 /* GCC 2.0 and beyond */
                     34: #define va_start(AP) ((AP) = *(__gnuc_va_list *)__builtin_saveregs())
                     35: #else
                     36: #define va_start(AP) \
                     37:   ( (AP).__va_reg = (int *) __builtin_saveregs2(1), \
                     38:     (AP).__va_stk = (int *) __builtin_argptr(), \
                     39:     (AP).__va_arg = (int) (__builtin_argsize() - 4 + 3) / 4 )
                     40: #endif
                     41: #define va_alist __va_1st_arg
                     42: #define va_dcl register int va_alist;
                     43: 
                     44: #endif /* _STDARG_H */
                     45: 
                     46: /* Avoid trouble between this file and _int_varargs.h under DG/UX.  This file
                     47:    can be included by <stdio.h> and others and provides definitions of
                     48:    __va_size and __va_reg_p and  a va_list typedef.  Avoid defining va_list
                     49:    again with _VA_LIST.  */
                     50: #ifdef __INT_VARARGS_H
                     51: #undef __va_size
                     52: #undef __va_reg_p
                     53: #define __gnuc_va_list va_list
                     54: #define _VA_LIST
                     55: #define _VA_LIST_
                     56: #else
                     57: /* Similarly, if this gets included first, do nothing in _int_varargs.h.  */
                     58: #define __INT_VARARGS_H
                     59: #endif
                     60: 
                     61: #define __va_reg_p(TYPE) \
                     62:   (__builtin_classify_type(*(TYPE *)0) < 12 \
                     63:    ? sizeof(TYPE) <= 8 : sizeof(TYPE) == 4 && __alignof__(TYPE) == 4)
                     64: 
                     65: #define        __va_size(TYPE) ((sizeof(TYPE) + 3) >> 2)
                     66: 
                     67: /* We cast to void * and then to TYPE * because this avoids
                     68:    a warning about increasing the alignment requirement.  */
                     69: #define va_arg(AP,TYPE)                                                           \
                     70:   ( (AP).__va_arg = (((AP).__va_arg + (1 << (__alignof__(TYPE) >> 3)) - 1) \
                     71:                     & ~((1 << (__alignof__(TYPE) >> 3)) - 1))             \
                     72:     + __va_size(TYPE),                                                    \
                     73:     *((TYPE *) (void *) ((__va_reg_p(TYPE)                                \
                     74:                          && (AP).__va_arg < 8 + __va_size(TYPE)           \
                     75:                          ? (AP).__va_reg : (AP).__va_stk)                 \
                     76:                         + ((AP).__va_arg - __va_size(TYPE)))))
                     77: 
                     78: #define va_end(AP)
                     79: 
                     80: #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.