|
|
1.1 ! root 1: /* varargs.h for SPUR */ ! 2: ! 3: /* NB. This is NOT the definition needed for the new ANSI proposed ! 4: standard */ ! 5: ! 6: ! 7: struct __va_struct { char __regs[20]; }; ! 8: ! 9: #define va_alist __va_regs, __va_stack ! 10: ! 11: /* In GCC version 2, we want an ellipsis at the end of the declaration ! 12: of the argument list. GCC version 1 can't parse it. */ ! 13: ! 14: #if __GNUC__ > 1 ! 15: #define __va_ellipsis ... ! 16: #else ! 17: #define __va_ellipsis ! 18: #endif ! 19: ! 20: /* The ... causes current_function_varargs to be set in cc1. */ ! 21: #define va_dcl struct __va_struct __va_regs; int __va_stack; ! 22: ! 23: typedef struct { ! 24: int __pnt; ! 25: char *__regs; ! 26: char *__stack; ! 27: } va_list; ! 28: ! 29: #define va_start(pvar) \ ! 30: ((pvar).__pnt = 0, (pvar).__regs = __va_regs.__regs, \ ! 31: (pvar).__stack = (char *) &__va_stack) ! 32: #define va_end(pvar) ! 33: ! 34: /* Avoid errors if compiling GCC v2 with GCC v1. */ ! 35: #if __GNUC__ == 1 ! 36: #define __extension__ ! 37: #endif ! 38: ! 39: #define va_arg(pvar,type) \ ! 40: __extension__ \ ! 41: ({ type __va_result; \ ! 42: if ((pvar).__pnt >= 20) { \ ! 43: __va_result = *( (type *) ((pvar).__stack + (pvar).__pnt - 20)); \ ! 44: (pvar).__pnt += (sizeof(type) + 7) & ~7; \ ! 45: } \ ! 46: else if ((pvar).__pnt + sizeof(type) > 20) { \ ! 47: __va_result = * (type *) (pvar).__stack; \ ! 48: (pvar).__pnt = 20 + ( (sizeof(type) + 7) & ~7); \ ! 49: } \ ! 50: else if (sizeof(type) == 8) { \ ! 51: union {double d; int i[2];} __u; \ ! 52: __u.i[0] = *(int *) ((pvar).__regs + (pvar).__pnt); \ ! 53: __u.i[1] = *(int *) ((pvar).__regs + (pvar).__pnt + 4); \ ! 54: __va_result = * (type *) &__u; \ ! 55: (pvar).__pnt += 8; \ ! 56: } \ ! 57: else { \ ! 58: __va_result = * (type *) ((pvar).__regs + (pvar).__pnt); \ ! 59: (pvar).__pnt += (sizeof(type) + 3) & ~3; \ ! 60: } \ ! 61: __va_result; })
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.