|
|
1.1 ! root 1: typedef char *va_list; ! 2: ! 3: #if __GNUCC__ > 1 ! 4: ! 5: #ifdef _STDARG_H ! 6: #define va_start(AP,LASTARG) \ ! 7: (__builtin_saveregs(), (AP) = __builtin_next_arg ()) ! 8: #else ! 9: #define va_alist __builtin_va_alist ! 10: /* The ... causes current_function_varargs to be set in cc1. */ ! 11: #define va_dcl int __builtin_va_alist; ... ! 12: #define va_start(AP) \ ! 13: ((AP) = (va_list *)&__builtin_va_alist + sizeof(int)) ! 14: #endif /* _STDARG_H */ ! 15: ! 16: /* Handle pass by invisible reference and voids left by aligned */ ! 17: /* doubles. */ ! 18: ! 19: #define __va_rounded_size(TYPE) \ ! 20: (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) ! 21: ! 22: #define va_arg(AP,TYPE) \ ! 23: ((__va_rounded_size(TYPE) <= 8)) \ ! 24: ? ((AP) -= __va_rounded_size (TYPE), (__alignof__ (TYPE) > 4 ? \ ! 25: (int)AP &= ~(0x7) : 0), \ ! 26: *(TYPE *)(AP)) \ ! 27: : ((AP) -= sizeof (TYPE *), **(TYPE **)(AP)) ! 28: ! 29: void va_end (va_list); /* Defined in libgcc.a */ ! 30: #define va_end(AP) ! 31: ! 32: #else /* __GNUCC__ > 1 */ ! 33: ! 34: /* __builtin_saveregs () tickles a bug in the pa-risc gcc 1.39 port, */ ! 35: /* so don't use it for varargs. Obviously the stdarg stuff doesn't */ ! 36: /* work very well. */ ! 37: ! 38: #ifdef _STDARG_H ! 39: #define va_start(AP,LASTARG) \ ! 40: (__builtin_saveregs(), (AP) = __builtin_next_arg ()) ! 41: ! 42: /* gcc1 doesn't implement pass by invisible reference */ ! 43: #define __va_rounded_size(TYPE) \ ! 44: (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) ! 45: ! 46: #define va_arg(AP,TYPE) \ ! 47: ((AP) -= __va_rounded_size (TYPE), (__alignof__ (TYPE) > 4 ? \ ! 48: (int)AP &= ~(0x7) : 0), \ ! 49: *(TYPE *)(AP)) ! 50: ! 51: void va_end (va_list); /* Defined in libgcc.a */ ! 52: #define va_end(AP) ! 53: #else /* _STDARG_H */ ! 54: #define va_alist __va_a__, __va_b__, __va_c__, __va_d__ ! 55: #define va_dcl int __va_a__, __va_b__, __va_c__, __va_d__; ! 56: #define va_start(list) list = (char *) &__va_a__, &__va_b__, &__va_c__, \ ! 57: &__va_d__ ! 58: ! 59: # define va_arg(list,mode) *(mode *) ((int) (list = (char *) \ ! 60: (((int) list + sizeof(int /*__va_a__*/) - sizeof(mode)) & ~(sizeof(mode)-1)) \ ! 61: - sizeof(int /*__va_a__*/)) + sizeof(int /*__va_a__*/)) ! 62: ! 63: #define va_end(list) ! 64: ! 65: #endif /* _STDARG_H */ ! 66: #endif /* __GNUCC__ > 1 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.