parent
fa42ea0227
commit
7644b152a6
|
@ -46,11 +46,11 @@ typedef struct
|
||||||
((AP).__va_ap = ((AP).__va_ap + sizeof (int) - 1) & ~(sizeof (int) - 1)))
|
((AP).__va_ap = ((AP).__va_ap + sizeof (int) - 1) & ~(sizeof (int) - 1)))
|
||||||
|
|
||||||
#define va_arg(AP, TYPE) \
|
#define va_arg(AP, TYPE) \
|
||||||
((AP).__va_num < 2 && __builtin_classify_type (* (TYPE *)0) < 12 \
|
(*((AP).__va_num < 2 && __builtin_classify_type (* (TYPE *)0) < 12 \
|
||||||
? (__builtin_classify_type (* (TYPE *)0) == 8 \
|
? (__builtin_classify_type (* (TYPE *)0) == 8 \
|
||||||
? (*(TYPE *)(AP).__va_reg[2 * (AP).__va_num++ + 1]) \
|
? ((TYPE *)(AP).__va_reg[2 * (AP).__va_num++ + 1]) \
|
||||||
: (*(TYPE *)(AP).__va_reg[2 * (AP).__va_num++ ])) \
|
: ((TYPE *)(AP).__va_reg[2 * (AP).__va_num++ ])) \
|
||||||
: ((AP).__va_num++, __va_round (AP,TYPE), *((TYPE *)((AP).__va_ap))++))
|
: ((AP).__va_num++, __va_round (AP,TYPE), ((TYPE *)((AP).__va_ap))++)))
|
||||||
|
|
||||||
#define va_end(AP) ((void) 0)
|
#define va_end(AP) ((void) 0)
|
||||||
|
|
||||||
|
|
|
@ -33,13 +33,13 @@ typedef double *__gnuc_va_list;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define va_arg(AP,TYPE) \
|
#define va_arg(AP,TYPE) \
|
||||||
(sizeof(TYPE) > 8 ? \
|
(*(sizeof(TYPE) > 8 ? \
|
||||||
((AP = (__gnuc_va_list) ((char *)AP - sizeof (int))), \
|
((AP = (__gnuc_va_list) ((char *)AP - sizeof (int))), \
|
||||||
(*((TYPE *) (void *) (*((int *) (AP)))))) \
|
(((TYPE *) (void *) (*((int *) (AP)))))) \
|
||||||
:((AP = \
|
:((AP = \
|
||||||
(__gnuc_va_list) ((long)((char *)AP - sizeof (TYPE)) \
|
(__gnuc_va_list) ((long)((char *)AP - sizeof (TYPE)) \
|
||||||
& (sizeof(TYPE) > 4 ? ~0x7 : ~0x3))), \
|
& (sizeof(TYPE) > 4 ? ~0x7 : ~0x3))), \
|
||||||
(*((TYPE *) (void *) ((char *)AP + ((8 - sizeof(TYPE)) % 4))))))
|
(((TYPE *) (void *) ((char *)AP + ((8 - sizeof(TYPE)) % 4)))))))
|
||||||
|
|
||||||
#ifndef va_end
|
#ifndef va_end
|
||||||
void va_end (__gnuc_va_list); /* Defined in libgcc.a */
|
void va_end (__gnuc_va_list); /* Defined in libgcc.a */
|
||||||
|
|
|
@ -111,7 +111,7 @@ typedef __va_buf __gnuc_va_list;
|
||||||
a warning about increasing the alignment requirement. */
|
a warning about increasing the alignment requirement. */
|
||||||
#define va_arg(_AP, _MODE) \
|
#define va_arg(_AP, _MODE) \
|
||||||
__extension__ \
|
__extension__ \
|
||||||
({__voidptr *__ap = (__voidptr*)&_AP; \
|
(*({__voidptr *__ap = (__voidptr*)&_AP; \
|
||||||
register int __size = sizeof (_MODE); \
|
register int __size = sizeof (_MODE); \
|
||||||
register int __onstack = \
|
register int __onstack = \
|
||||||
(__size > 8 || ( (int)(__ap[2]) > 11) || \
|
(__size > 8 || ( (int)(__ap[2]) > 11) || \
|
||||||
|
@ -121,8 +121,8 @@ __extension__ \
|
||||||
((void *)__ap[__onstack])+=__size; \
|
((void *)__ap[__onstack])+=__size; \
|
||||||
if (__onstack==0 || (int)(__ap[2])==11) \
|
if (__onstack==0 || (int)(__ap[2])==11) \
|
||||||
__ap[2]+= (__size >> 2); \
|
__ap[2]+= (__size >> 2); \
|
||||||
*(( _MODE *) (void *) __param_addr); \
|
(( _MODE *) (void *) __param_addr); \
|
||||||
})
|
}))
|
||||||
|
|
||||||
void va_end (__gnuc_va_list); /* Defined in libgcc.a */
|
void va_end (__gnuc_va_list); /* Defined in libgcc.a */
|
||||||
#define va_end(_X) ((void)0)
|
#define va_end(_X) ((void)0)
|
||||||
|
|
|
@ -132,7 +132,7 @@ enum __va_type_classes {
|
||||||
|
|
||||||
#define va_arg(pvar,TYPE) \
|
#define va_arg(pvar,TYPE) \
|
||||||
__extension__ \
|
__extension__ \
|
||||||
({int __type = __builtin_classify_type (* (TYPE *) 0); \
|
(*({int __type = __builtin_classify_type (* (TYPE *) 0); \
|
||||||
void * __result; \
|
void * __result; \
|
||||||
if (__type == __real_type_class) /* float? */ \
|
if (__type == __real_type_class) /* float? */ \
|
||||||
{ \
|
{ \
|
||||||
|
@ -170,7 +170,7 @@ __extension__ \
|
||||||
__r = (void **) pvar.__va_next_stack++; \
|
__r = (void **) pvar.__va_next_stack++; \
|
||||||
__result = *__r; \
|
__result = *__r; \
|
||||||
} \
|
} \
|
||||||
*(TYPE *) __result;})
|
(TYPE *) __result;}))
|
||||||
|
|
||||||
#else /* not __sparc_v9__ */
|
#else /* not __sparc_v9__ */
|
||||||
|
|
||||||
|
@ -184,18 +184,17 @@ __extension__ \
|
||||||
The casts to char * avoid warnings about invalid pointer arithmetic. */
|
The casts to char * avoid warnings about invalid pointer arithmetic. */
|
||||||
#define va_arg(pvar,TYPE) \
|
#define va_arg(pvar,TYPE) \
|
||||||
__extension__ \
|
__extension__ \
|
||||||
({ TYPE __va_temp; \
|
(*({((__builtin_classify_type (*(TYPE*) 0) >= __record_type_class) \
|
||||||
((__builtin_classify_type (__va_temp) >= __record_type_class) \
|
|
||||||
? ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE *), \
|
? ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE *), \
|
||||||
**(TYPE **) (void *) ((char *)(pvar) - __va_rounded_size (TYPE *))) \
|
*(TYPE **) (void *) ((char *)(pvar) - __va_rounded_size (TYPE *))) \
|
||||||
: __va_rounded_size (TYPE) == 8 \
|
: __va_rounded_size (TYPE) == 8 \
|
||||||
? ({ union {char __d[sizeof (TYPE)]; int __i[2];} __u; \
|
? ({ union {char __d[sizeof (TYPE)]; int __i[2];} __u; \
|
||||||
__u.__i[0] = ((int *) (void *) (pvar))[0]; \
|
__u.__i[0] = ((int *) (void *) (pvar))[0]; \
|
||||||
__u.__i[1] = ((int *) (void *) (pvar))[1]; \
|
__u.__i[1] = ((int *) (void *) (pvar))[1]; \
|
||||||
(pvar) = (char *)(pvar) + 8; \
|
(pvar) = (char *)(pvar) + 8; \
|
||||||
*(TYPE *) (void *) __u.__d; }) \
|
(TYPE *) (void *) __u.__d; }) \
|
||||||
: ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE), \
|
: ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE), \
|
||||||
*((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));})
|
((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));}))
|
||||||
#endif /* not __sparc_v9__ */
|
#endif /* not __sparc_v9__ */
|
||||||
|
|
||||||
#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
|
#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
|
||||||
|
|
|
@ -38,24 +38,24 @@ typedef struct {
|
||||||
|
|
||||||
#define va_arg(pvar,type) \
|
#define va_arg(pvar,type) \
|
||||||
__extension__ \
|
__extension__ \
|
||||||
({ type __va_result; \
|
(*({ type *__va_result; \
|
||||||
if ((pvar).__pnt >= 20) { \
|
if ((pvar).__pnt >= 20) { \
|
||||||
__va_result = *( (type *) ((pvar).__stack + (pvar).__pnt - 20)); \
|
__va_result = ( (type *) ((pvar).__stack + (pvar).__pnt - 20)); \
|
||||||
(pvar).__pnt += (sizeof(type) + 7) & ~7; \
|
(pvar).__pnt += (sizeof(type) + 7) & ~7; \
|
||||||
} \
|
} \
|
||||||
else if ((pvar).__pnt + sizeof(type) > 20) { \
|
else if ((pvar).__pnt + sizeof(type) > 20) { \
|
||||||
__va_result = * (type *) (pvar).__stack; \
|
__va_result = (type *) (pvar).__stack; \
|
||||||
(pvar).__pnt = 20 + ( (sizeof(type) + 7) & ~7); \
|
(pvar).__pnt = 20 + ( (sizeof(type) + 7) & ~7); \
|
||||||
} \
|
} \
|
||||||
else if (sizeof(type) == 8) { \
|
else if (sizeof(type) == 8) { \
|
||||||
union {double d; int i[2];} __u; \
|
union {double d; int i[2];} __u; \
|
||||||
__u.i[0] = *(int *) ((pvar).__regs + (pvar).__pnt); \
|
__u.i[0] = *(int *) ((pvar).__regs + (pvar).__pnt); \
|
||||||
__u.i[1] = *(int *) ((pvar).__regs + (pvar).__pnt + 4); \
|
__u.i[1] = *(int *) ((pvar).__regs + (pvar).__pnt + 4); \
|
||||||
__va_result = * (type *) &__u; \
|
__va_result = (type *) &__u; \
|
||||||
(pvar).__pnt += 8; \
|
(pvar).__pnt += 8; \
|
||||||
} \
|
} \
|
||||||
else { \
|
else { \
|
||||||
__va_result = * (type *) ((pvar).__regs + (pvar).__pnt); \
|
__va_result = (type *) ((pvar).__regs + (pvar).__pnt); \
|
||||||
(pvar).__pnt += (sizeof(type) + 3) & ~3; \
|
(pvar).__pnt += (sizeof(type) + 3) & ~3; \
|
||||||
} \
|
} \
|
||||||
__va_result; })
|
__va_result; }))
|
||||||
|
|
Loading…
Reference in New Issue