0000: 2f 2a 20 76 61 63 61 6c 6c 2e 68 2e 20 20 47 65 /* vacall.h. Ge
0010: 6e 65 72 61 74 65 64 20 62 79 20 63 6f 6e 66 69 nerated by confi
0020: 67 75 72 65 2e 20 20 2a 2f 0a 23 69 66 6e 64 65 gure. */.#ifnde
0030: 66 20 5f 56 41 43 41 4c 4c 5f 48 20 20 20 20 20 f _VACALL_H
0040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0050: 20 20 20 20 20 20 20 20 20 20 2f 2a 2d 2a 2d 20 /*-*-
0060: 43 20 2d 2a 2d 2a 2f 0a 23 64 65 66 69 6e 65 20 C -*-*/.#define
0070: 5f 56 41 43 41 4c 4c 5f 48 0a 0a 2f 2a 0a 20 2a _VACALL_H../*. *
0080: 20 43 6f 70 79 72 69 67 68 74 20 31 39 39 35 2d Copyright 1995-
0090: 32 30 30 34 20 42 72 75 6e 6f 20 48 61 69 62 6c 2004 Bruno Haibl
00a0: 65 2c 20 3c 62 72 75 6e 6f 40 63 6c 69 73 70 2e e, <bruno@clisp.
00b0: 6f 72 67 3e 0a 20 2a 0a 20 2a 20 54 68 69 73 20 org>. *. * This
00c0: 69 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 is free software
00d0: 20 64 69 73 74 72 69 62 75 74 65 64 20 75 6e 64 distributed und
00e0: 65 72 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 er the GNU Gener
00f0: 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 63 al Public Licenc
0100: 65 0a 20 2a 20 64 65 73 63 72 69 62 65 64 20 69 e. * described i
0110: 6e 20 74 68 65 20 66 69 6c 65 20 43 4f 50 59 49 n the file COPYI
0120: 4e 47 2e 20 43 6f 6e 74 61 63 74 20 74 68 65 20 NG. Contact the
0130: 61 75 74 68 6f 72 20 69 66 20 79 6f 75 20 64 6f author if you do
0140: 6e 27 74 20 68 61 76 65 20 74 68 69 73 0a 20 2a n't have this. *
0150: 20 6f 72 20 63 61 6e 27 74 20 6c 69 76 65 20 77 or can't live w
0160: 69 74 68 20 69 74 2e 20 54 68 65 72 65 20 69 73 ith it. There is
0170: 20 41 42 53 4f 4c 55 54 45 4c 59 20 4e 4f 20 57 ABSOLUTELY NO W
0180: 41 52 52 41 4e 54 59 2c 20 65 78 70 6c 69 63 69 ARRANTY, explici
0190: 74 20 6f 72 20 69 6d 70 6c 69 65 64 2c 0a 20 2a t or implied,. *
01a0: 20 6f 6e 20 74 68 69 73 20 73 6f 66 74 77 61 72 on this softwar
01b0: 65 2e 0a 20 2a 2f 0a 0a 0a 2f 2a 20 54 68 65 73 e.. */.../* Thes
01c0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 61 72 e definitions ar
01d0: 65 20 61 64 6a 75 73 74 65 64 20 62 79 20 60 63 e adjusted by `c
01e0: 6f 6e 66 69 67 75 72 65 27 20 61 75 74 6f 6d 61 onfigure' automa
01f0: 74 69 63 61 6c 6c 79 2e 20 2a 2f 0a 0a 2f 2a 20 tically. */../*
0200: 43 50 55 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f CPU */.#ifndef _
0210: 5f 69 33 38 36 5f 5f 0a 23 64 65 66 69 6e 65 20 _i386__.#define
0220: 5f 5f 69 33 38 36 5f 5f 20 31 0a 23 65 6e 64 69 __i386__ 1.#endi
0230: 66 0a 23 69 66 6e 64 65 66 20 5f 5f 6d 36 38 6b f.#ifndef __m68k
0240: 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 5f 6d __./* #undef __m
0250: 36 38 6b 5f 5f 20 2a 2f 0a 23 65 6e 64 69 66 0a 68k__ */.#endif.
0260: 23 69 66 6e 64 65 66 20 5f 5f 6d 69 70 73 5f 5f #ifndef __mips__
0270: 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 5f 6d 69 70 ./* #undef __mip
0280: 73 5f 5f 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 s__ */.#endif.#i
0290: 66 6e 64 65 66 20 5f 5f 6d 69 70 73 6e 33 32 5f fndef __mipsn32_
02a0: 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 5f 6d 69 _./* #undef __mi
02b0: 70 73 6e 33 32 5f 5f 20 2a 2f 0a 23 65 6e 64 69 psn32__ */.#endi
02c0: 66 0a 23 69 66 6e 64 65 66 20 5f 5f 6d 69 70 73 f.#ifndef __mips
02d0: 36 34 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 64__./* #undef _
02e0: 5f 6d 69 70 73 36 34 5f 5f 20 2a 2f 0a 23 65 6e _mips64__ */.#en
02f0: 64 69 66 0a 23 69 66 6e 64 65 66 20 5f 5f 73 70 dif.#ifndef __sp
0300: 61 72 63 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 arc__./* #undef
0310: 5f 5f 73 70 61 72 63 5f 5f 20 2a 2f 0a 23 65 6e __sparc__ */.#en
0320: 64 69 66 0a 23 69 66 6e 64 65 66 20 5f 5f 73 70 dif.#ifndef __sp
0330: 61 72 63 36 34 5f 5f 0a 2f 2a 20 23 75 6e 64 65 arc64__./* #unde
0340: 66 20 5f 5f 73 70 61 72 63 36 34 5f 5f 20 2a 2f f __sparc64__ */
0350: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 .#endif.#ifndef
0360: 5f 5f 61 6c 70 68 61 5f 5f 0a 2f 2a 20 23 75 6e __alpha__./* #un
0370: 64 65 66 20 5f 5f 61 6c 70 68 61 5f 5f 20 2a 2f def __alpha__ */
0380: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 .#endif.#ifndef
0390: 5f 5f 68 70 70 61 5f 5f 0a 2f 2a 20 23 75 6e 64 __hppa__./* #und
03a0: 65 66 20 5f 5f 68 70 70 61 5f 5f 20 2a 2f 0a 23 ef __hppa__ */.#
03b0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 5f 5f endif.#ifndef __
03c0: 61 72 6d 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 arm__./* #undef
03d0: 5f 5f 61 72 6d 5f 5f 20 2a 2f 0a 23 65 6e 64 69 __arm__ */.#endi
03e0: 66 0a 23 69 66 6e 64 65 66 20 5f 5f 72 73 36 30 f.#ifndef __rs60
03f0: 30 30 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 00__./* #undef _
0400: 5f 72 73 36 30 30 30 5f 5f 20 2a 2f 0a 23 65 6e _rs6000__ */.#en
0410: 64 69 66 0a 23 69 66 6e 64 65 66 20 5f 5f 73 33 dif.#ifndef __s3
0420: 39 30 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 90__./* #undef _
0430: 5f 73 33 39 30 5f 5f 20 2a 2f 0a 23 65 6e 64 69 _s390__ */.#endi
0440: 66 0a 23 69 66 6e 64 65 66 20 5f 5f 6d 38 38 6b f.#ifndef __m88k
0450: 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 5f 6d __./* #undef __m
0460: 38 38 6b 5f 5f 20 2a 2f 0a 23 65 6e 64 69 66 0a 88k__ */.#endif.
0470: 23 69 66 6e 64 65 66 20 5f 5f 63 6f 6e 76 65 78 #ifndef __convex
0480: 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 5f 63 __./* #undef __c
0490: 6f 6e 76 65 78 5f 5f 20 2a 2f 0a 23 65 6e 64 69 onvex__ */.#endi
04a0: 66 0a 23 69 66 6e 64 65 66 20 5f 5f 69 61 36 34 f.#ifndef __ia64
04b0: 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 5f 69 __./* #undef __i
04c0: 61 36 34 5f 5f 20 2a 2f 0a 23 65 6e 64 69 66 0a a64__ */.#endif.
04d0: 23 69 66 6e 64 65 66 20 5f 5f 78 38 36 5f 36 34 #ifndef __x86_64
04e0: 5f 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 5f 78 __./* #undef __x
04f0: 38 36 5f 36 34 5f 5f 20 2a 2f 0a 23 65 6e 64 69 86_64__ */.#endi
0500: 66 0a 0a 2f 2a 20 43 61 6c 6c 69 6e 67 20 63 6f f../* Calling co
0510: 6e 76 65 6e 74 69 6f 6e 20 2a 2f 0a 2f 2a 20 44 nvention */./* D
0520: 65 66 69 6e 65 20 69 66 20 75 73 69 6e 67 20 70 efine if using p
0530: 63 63 20 6e 6f 6e 2d 72 65 65 6e 74 72 61 6e 74 cc non-reentrant
0540: 20 73 74 72 75 63 74 20 72 65 74 75 72 6e 20 63 struct return c
0550: 6f 6e 76 65 6e 74 69 6f 6e 20 2a 2f 0a 2f 2a 20 onvention */./*
0560: 23 75 6e 64 65 66 20 5f 5f 50 43 43 5f 53 54 52 #undef __PCC_STR
0570: 55 43 54 5f 52 45 54 55 52 4e 5f 5f 20 2a 2f 0a UCT_RETURN__ */.
0580: 2f 2a 20 44 65 66 69 6e 65 20 69 66 20 73 6d 61 /* Define if sma
0590: 6c 6c 20 73 74 72 75 63 74 73 20 61 72 65 20 72 ll structs are r
05a0: 65 74 75 72 6e 65 64 20 69 6e 20 72 65 67 69 73 eturned in regis
05b0: 74 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 ters */.#define
05c0: 5f 5f 53 4d 41 4c 4c 5f 53 54 52 55 43 54 5f 52 __SMALL_STRUCT_R
05d0: 45 54 55 52 4e 5f 5f 20 31 0a 2f 2a 20 44 65 66 ETURN__ 1./* Def
05e0: 69 6e 65 20 69 66 20 66 6c 6f 61 74 69 6e 67 2d ine if floating-
05f0: 70 6f 69 6e 74 20 72 65 73 75 6c 74 73 20 61 72 point results ar
0600: 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 74 68 e returned in th
0610: 65 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74 e integer regist
0620: 65 72 73 20 2a 2f 0a 2f 2a 20 23 75 6e 64 65 66 ers */./* #undef
0630: 20 5f 5f 49 52 45 47 5f 46 4c 4f 41 54 5f 52 45 __IREG_FLOAT_RE
0640: 54 55 52 4e 5f 5f 20 2a 2f 0a 0a 2f 2a 20 43 4c TURN__ */../* CL
0650: 5f 4c 4f 4e 47 4c 4f 4e 47 20 2a 2f 0a 2f 2a 20 _LONGLONG */./*
0660: 44 65 66 69 6e 65 20 69 66 20 79 6f 75 72 20 63 Define if your c
0670: 6f 6d 70 69 6c 65 72 20 73 75 70 70 6f 72 74 73 ompiler supports
0680: 20 74 68 65 20 60 6c 6f 6e 67 20 6c 6f 6e 67 27 the `long long'
0690: 20 74 79 70 65 2e 20 2a 2f 0a 23 69 66 6e 64 65 type. */.#ifnde
06a0: 66 20 48 41 56 45 5f 4c 4f 4e 47 4c 4f 4e 47 0a f HAVE_LONGLONG.
06b0: 23 64 65 66 69 6e 65 20 48 41 56 45 5f 4c 4f 4e #define HAVE_LON
06c0: 47 4c 4f 4e 47 20 0a 23 65 6e 64 69 66 0a 0a 2f GLONG .#endif../
06d0: 2a 20 41 43 5f 43 5f 43 48 41 52 5f 55 4e 53 49 * AC_C_CHAR_UNSI
06e0: 47 4e 45 44 20 2a 2f 0a 23 69 66 6e 64 65 66 20 GNED */.#ifndef
06f0: 5f 5f 43 48 41 52 5f 55 4e 53 49 47 4e 45 44 5f __CHAR_UNSIGNED_
0700: 5f 0a 2f 2a 20 23 75 6e 64 65 66 20 5f 5f 43 48 _./* #undef __CH
0710: 41 52 5f 55 4e 53 49 47 4e 45 44 5f 5f 20 2a 2f AR_UNSIGNED__ */
0720: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 45 6e 64 20 .#endif../* End
0730: 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 61 of definitions a
0740: 64 6a 75 73 74 65 64 20 62 79 20 60 63 6f 6e 66 djusted by `conf
0750: 69 67 75 72 65 27 2e 20 2a 2f 0a 0a 0a 2f 2a 20 igure'. */.../*
0760: 4d 61 78 20 23 20 77 6f 72 64 73 20 69 6e 20 61 Max # words in a
0770: 72 67 75 6d 65 6e 74 2d 6c 69 73 74 20 61 6e 64 rgument-list and
0780: 20 74 65 6d 70 6f 72 61 72 79 20 73 74 72 75 63 temporary struc
0790: 74 75 72 65 20 73 74 6f 72 61 67 65 2e 0a 20 2a ture storage.. *
07a0: 2f 0a 23 69 66 6e 64 65 66 20 5f 5f 56 41 5f 41 /.#ifndef __VA_A
07b0: 4c 49 53 54 5f 57 4f 52 44 53 0a 23 64 65 66 69 LIST_WORDS.#defi
07c0: 6e 65 20 5f 5f 56 41 5f 41 4c 49 53 54 5f 57 4f ne __VA_ALIST_WO
07d0: 52 44 53 20 20 32 35 36 0a 23 65 6e 64 69 66 0a RDS 256.#endif.
07e0: 0a 2f 2a 20 54 68 65 20 60 73 69 67 6e 65 64 27 ./* The `signed'
07f0: 20 6b 65 79 77 6f 72 64 2e 0a 20 2a 2f 0a 23 69 keyword.. */.#i
0800: 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 53 54 44 f !defined(__STD
0810: 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 C__) && !defined
0820: 28 5f 5f 43 48 41 52 5f 55 4e 53 49 47 4e 45 44 (__CHAR_UNSIGNED
0830: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 __) && !defined(
0840: 73 69 67 6e 65 64 29 0a 23 64 65 66 69 6e 65 20 signed).#define
0850: 73 69 67 6e 65 64 0a 23 65 6e 64 69 66 0a 0a 2f signed.#endif../
0860: 2a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 * Determine the
0870: 61 6c 69 67 6e 6d 65 6e 74 20 6f 66 20 61 20 74 alignment of a t
0880: 79 70 65 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 ype at compile t
0890: 69 6d 65 2e 0a 20 2a 2f 0a 23 69 66 20 64 65 66 ime.. */.#if def
08a0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 ined(__GNUC__).#
08b0: 64 65 66 69 6e 65 20 5f 5f 56 41 5f 61 6c 69 67 define __VA_alig
08c0: 6e 6f 66 20 5f 5f 61 6c 69 67 6e 6f 66 5f 5f 0a nof __alignof__.
08d0: 23 65 6c 73 65 0a 23 69 66 20 64 65 66 69 6e 65 #else.#if define
08e0: 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 7c 7c 20 64 d(__mips__) || d
08f0: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 efined(__mipsn32
0900: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
0910: 5f 6d 69 70 73 36 34 5f 5f 29 20 2f 2a 20 53 47 _mips64__) /* SG
0920: 49 20 63 6f 6d 70 69 6c 65 72 20 2a 2f 0a 23 64 I compiler */.#d
0930: 65 66 69 6e 65 20 5f 5f 56 41 5f 61 6c 69 67 6e efine __VA_align
0940: 6f 66 20 5f 5f 62 75 69 6c 74 69 6e 5f 61 6c 69 of __builtin_ali
0950: 67 6e 6f 66 0a 23 65 6c 73 65 0a 23 64 65 66 69 gnof.#else.#defi
0960: 6e 65 20 5f 5f 56 41 5f 6f 66 66 73 65 74 6f 66 ne __VA_offsetof
0970: 28 74 79 70 65 2c 69 64 65 6e 74 29 20 20 28 28 (type,ident) ((
0980: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 26 28 unsigned long)&(
0990: 28 28 74 79 70 65 2a 29 30 29 2d 3e 69 64 65 6e ((type*)0)->iden
09a0: 74 29 29 0a 23 64 65 66 69 6e 65 20 5f 5f 56 41 t)).#define __VA
09b0: 5f 61 6c 69 67 6e 6f 66 28 74 79 70 65 29 20 20 _alignof(type)
09c0: 5f 5f 56 41 5f 6f 66 66 73 65 74 6f 66 28 73 74 __VA_offsetof(st
09d0: 72 75 63 74 20 7b 20 63 68 61 72 20 5f 5f 73 6c ruct { char __sl
09e0: 6f 74 31 3b 20 74 79 70 65 20 5f 5f 73 6c 6f 74 ot1; type __slot
09f0: 32 3b 20 7d 2c 20 5f 5f 73 6c 6f 74 32 29 0a 23 2; }, __slot2).#
0a00: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a endif.#endif../*
0a10: 20 43 20 62 75 69 6c 74 69 6e 20 74 79 70 65 73 C builtin types
0a20: 2e 0a 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 .. */.#if define
0a30: 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a 74 d(__mipsn32__).t
0a40: 79 70 65 64 65 66 20 6c 6f 6e 67 20 6c 6f 6e 67 ypedef long long
0a50: 20 5f 5f 76 61 77 6f 72 64 3b 0a 23 65 6c 73 65 __vaword;.#else
0a60: 0a 74 79 70 65 64 65 66 20 6c 6f 6e 67 20 5f 5f .typedef long __
0a70: 76 61 77 6f 72 64 3b 0a 23 65 6e 64 69 66 0a 0a vaword;.#endif..
0a80: 65 6e 75 6d 20 5f 5f 56 41 74 79 70 65 0a 7b 0a enum __VAtype.{.
0a90: 20 20 5f 5f 56 41 76 6f 69 64 2c 0a 20 20 5f 5f __VAvoid,. __
0aa0: 56 41 63 68 61 72 2c 0a 20 20 5f 5f 56 41 73 63 VAchar,. __VAsc
0ab0: 68 61 72 2c 0a 20 20 5f 5f 56 41 75 63 68 61 72 har,. __VAuchar
0ac0: 2c 0a 20 20 5f 5f 56 41 73 68 6f 72 74 2c 0a 20 ,. __VAshort,.
0ad0: 20 5f 5f 56 41 75 73 68 6f 72 74 2c 0a 20 20 5f __VAushort,. _
0ae0: 5f 56 41 69 6e 74 2c 0a 20 20 5f 5f 56 41 75 69 _VAint,. __VAui
0af0: 6e 74 2c 0a 20 20 5f 5f 56 41 6c 6f 6e 67 2c 0a nt,. __VAlong,.
0b00: 20 20 5f 5f 56 41 75 6c 6f 6e 67 2c 0a 20 20 5f __VAulong,. _
0b10: 5f 56 41 6c 6f 6e 67 6c 6f 6e 67 2c 0a 20 20 5f _VAlonglong,. _
0b20: 5f 56 41 75 6c 6f 6e 67 6c 6f 6e 67 2c 0a 20 20 _VAulonglong,.
0b30: 5f 5f 56 41 66 6c 6f 61 74 2c 0a 20 20 5f 5f 56 __VAfloat,. __V
0b40: 41 64 6f 75 62 6c 65 2c 0a 20 20 5f 5f 56 41 76 Adouble,. __VAv
0b50: 6f 69 64 70 2c 0a 20 20 5f 5f 56 41 73 74 72 75 oidp,. __VAstru
0b60: 63 74 0a 7d 3b 0a 0a 65 6e 75 6d 20 5f 5f 56 41 ct.};..enum __VA
0b70: 5f 61 6c 69 73 74 5f 66 6c 61 67 73 0a 7b 0a 0a _alist_flags.{..
0b80: 20 20 2f 2a 20 68 6f 77 20 74 6f 20 72 65 74 75 /* how to retu
0b90: 72 6e 20 73 74 72 75 63 74 73 20 2a 2f 0a 20 20 rn structs */.
0ba0: 2f 2a 20 54 68 65 72 65 20 61 72 65 20 62 61 73 /* There are bas
0bb0: 69 63 61 6c 6c 79 20 33 20 77 61 79 73 20 74 6f ically 3 ways to
0bc0: 20 72 65 74 75 72 6e 20 73 74 72 75 63 74 73 3a return structs:
0bd0: 0a 20 20 20 2a 20 61 2e 20 54 68 65 20 63 61 6c . * a. The cal
0be0: 6c 65 64 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 led function ret
0bf0: 75 72 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 urns a pointer t
0c00: 6f 20 73 74 61 74 69 63 20 64 61 74 61 2e 20 4e o static data. N
0c10: 6f 74 20 72 65 65 6e 74 72 61 6e 74 2e 0a 20 20 ot reentrant..
0c20: 20 2a 20 62 2e 20 54 68 65 20 63 61 6c 6c 65 72 * b. The caller
0c30: 20 70 61 73 73 65 73 20 74 68 65 20 72 65 74 75 passes the retu
0c40: 72 6e 20 73 74 72 75 63 74 75 72 65 20 61 64 64 rn structure add
0c50: 72 65 73 73 20 69 6e 20 61 20 64 65 64 69 63 61 ress in a dedica
0c60: 74 65 64 20 72 65 67 69 73 74 65 72 0a 20 20 20 ted register.
0c70: 2a 20 20 20 20 6f 72 20 61 73 20 61 20 66 69 72 * or as a fir
0c80: 73 74 20 28 6f 72 20 6c 61 73 74 29 2c 20 69 6e st (or last), in
0c90: 76 69 73 69 62 6c 65 20 61 72 67 75 6d 65 6e 74 visible argument
0ca0: 2e 20 54 68 65 20 63 61 6c 6c 65 64 20 66 75 6e . The called fun
0cb0: 63 74 69 6f 6e 20 73 74 6f 72 65 73 0a 20 20 20 ction stores.
0cc0: 2a 20 20 20 20 69 74 73 20 72 65 73 75 6c 74 20 * its result
0cd0: 74 68 65 72 65 2e 0a 20 20 20 2a 20 63 2e 20 4c there.. * c. L
0ce0: 69 6b 65 20 62 2c 20 61 6e 64 20 74 68 65 20 63 ike b, and the c
0cf0: 61 6c 6c 65 64 20 66 75 6e 63 74 69 6f 6e 20 61 alled function a
0d00: 6c 73 6f 20 72 65 74 75 72 6e 73 20 74 68 65 20 lso returns the
0d10: 72 65 74 75 72 6e 20 73 74 72 75 63 74 75 72 65 return structure
0d20: 0a 20 20 20 2a 20 20 20 20 61 64 64 72 65 73 73 . * address
0d30: 20 69 6e 20 74 68 65 20 72 65 74 75 72 6e 20 76 in the return v
0d40: 61 6c 75 65 20 72 65 67 69 73 74 65 72 2e 20 28 alue register. (
0d50: 54 68 69 73 20 69 73 20 6e 6f 74 20 76 65 72 79 This is not very
0d60: 20 64 69 73 74 69 6e 67 75 69 73 68 61 62 6c 65 distinguishable
0d70: 0a 20 20 20 2a 20 20 20 20 66 72 6f 6d 20 62 2e . * from b.
0d80: 29 0a 20 20 20 2a 20 49 6e 64 65 70 65 6e 64 65 ). * Independe
0d90: 6e 74 6c 79 20 6f 66 20 74 68 69 73 2c 0a 20 20 ntly of this,.
0da0: 20 2a 20 72 2e 20 73 6d 61 6c 6c 20 73 74 72 75 * r. small stru
0db0: 63 74 75 72 65 73 20 28 3c 3d 20 34 20 6f 72 20 ctures (<= 4 or
0dc0: 3c 3d 20 38 20 62 79 74 65 73 29 20 6d 61 79 20 <= 8 bytes) may
0dd0: 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 74 be returned in t
0de0: 68 65 20 72 65 74 75 72 6e 0a 20 20 20 2a 20 20 he return. *
0df0: 20 20 76 61 6c 75 65 20 72 65 67 69 73 74 65 72 value register
0e00: 28 73 29 2c 20 6f 72 0a 20 20 20 2a 20 6d 2e 20 (s), or. * m.
0e10: 65 76 65 6e 20 73 6d 61 6c 6c 20 73 74 72 75 63 even small struc
0e20: 74 75 72 65 73 20 61 72 65 20 70 61 73 73 65 64 tures are passed
0e30: 20 69 6e 20 6d 65 6d 6f 72 79 2e 0a 20 20 20 2a in memory.. *
0e40: 2f 0a 20 20 2f 2a 20 67 63 63 2d 32 2e 36 2e 33 /. /* gcc-2.6.3
0e50: 20 65 6d 70 6c 6f 79 73 20 74 68 65 20 66 6f 6c employs the fol
0e60: 6c 6f 77 69 6e 67 20 73 74 72 61 74 65 67 79 3a lowing strategy:
0e70: 0a 20 20 20 2a 20 20 20 2d 20 49 66 20 50 43 43 . * - If PCC
0e80: 5f 53 54 41 54 49 43 5f 53 54 52 55 43 54 5f 52 _STATIC_STRUCT_R
0e90: 45 54 55 52 4e 20 69 73 20 64 65 66 69 6e 65 64 ETURN is defined
0ea0: 20 69 6e 20 74 68 65 20 6d 61 63 68 69 6e 65 20 in the machine
0eb0: 64 65 73 63 72 69 70 74 69 6f 6e 0a 20 20 20 2a description. *
0ec0: 20 20 20 20 20 69 74 20 75 73 65 73 20 6d 65 74 it uses met
0ed0: 68 6f 64 20 61 2c 20 65 6c 73 65 20 6d 65 74 68 hod a, else meth
0ee0: 6f 64 20 63 2e 0a 20 20 20 2a 20 20 20 2d 20 49 od c.. * - I
0ef0: 66 20 66 6c 61 67 5f 70 63 63 5f 73 74 72 75 63 f flag_pcc_struc
0f00: 74 5f 72 65 74 75 72 6e 20 69 73 20 73 65 74 20 t_return is set
0f10: 28 65 69 74 68 65 72 20 62 79 20 2d 66 70 63 63 (either by -fpcc
0f20: 2d 73 74 72 75 63 74 2d 72 65 74 75 72 6e 20 6f -struct-return o
0f30: 72 20 69 66 0a 20 20 20 2a 20 20 20 20 20 44 45 r if. * DE
0f40: 46 41 55 4c 54 5f 50 43 43 5f 53 54 52 55 43 54 FAULT_PCC_STRUCT
0f50: 5f 52 45 54 55 52 4e 20 69 73 20 64 65 66 69 6e _RETURN is defin
0f60: 65 64 20 74 6f 20 31 20 69 6e 20 74 68 65 20 6d ed to 1 in the m
0f70: 61 63 68 69 6e 65 20 64 65 73 63 72 69 70 74 69 achine descripti
0f80: 6f 6e 29 0a 20 20 20 2a 20 20 20 20 20 69 74 20 on). * it
0f90: 75 73 65 73 20 6d 65 74 68 6f 64 20 6d 2c 20 65 uses method m, e
0fa0: 6c 73 65 20 28 65 69 74 68 65 72 20 62 79 20 2d lse (either by -
0fb0: 66 72 65 67 2d 73 74 72 75 63 74 2d 72 65 74 75 freg-struct-retu
0fc0: 72 6e 20 6f 72 20 69 66 0a 20 20 20 2a 20 20 20 rn or if. *
0fd0: 20 20 44 45 46 41 55 4c 54 5f 50 43 43 5f 53 54 DEFAULT_PCC_ST
0fe0: 52 55 43 54 5f 52 45 54 55 52 4e 20 69 73 20 64 RUCT_RETURN is d
0ff0: 65 66 69 6e 65 64 20 74 6f 20 30 20 69 6e 20 74 efined to 0 in t
1000: 68 65 20 6d 61 63 68 69 6e 65 20 64 65 73 63 72 he machine descr
1010: 69 70 74 69 6f 6e 29 0a 20 20 20 2a 20 20 20 20 iption). *
1020: 20 6d 65 74 68 6f 64 20 72 2e 0a 20 20 20 2a 2f method r.. */
1030: 0a 20 20 5f 5f 56 41 5f 50 43 43 5f 53 54 52 55 . __VA_PCC_STRU
1040: 43 54 5f 52 45 54 55 52 4e 09 3d 20 31 3c 3c 30 CT_RETURN.= 1<<0
1050: 2c 09 2f 2a 20 61 3a 20 6e 65 65 64 20 74 6f 20 ,./* a: need to
1060: 63 6f 70 79 20 74 68 65 20 73 74 72 75 63 74 20 copy the struct
1070: 2a 2f 0a 20 20 5f 5f 56 41 5f 53 4d 41 4c 4c 5f */. __VA_SMALL_
1080: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 09 3d 20 STRUCT_RETURN.=
1090: 31 3c 3c 31 2c 09 2f 2a 20 72 3a 20 73 70 65 63 1<<1,./* r: spec
10a0: 69 61 6c 20 63 61 73 65 20 66 6f 72 20 73 6d 61 ial case for sma
10b0: 6c 6c 20 73 74 72 75 63 74 73 20 2a 2f 0a 20 20 ll structs */.
10c0: 5f 5f 56 41 5f 47 43 43 5f 53 54 52 55 43 54 5f __VA_GCC_STRUCT_
10d0: 52 45 54 55 52 4e 09 3d 20 31 3c 3c 32 2c 09 2f RETURN.= 1<<2,./
10e0: 2a 20 63 6f 6e 73 69 64 65 72 20 38 20 62 79 74 * consider 8 byt
10f0: 65 20 73 74 72 75 63 74 73 20 61 73 20 73 6d 61 e structs as sma
1100: 6c 6c 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 ll */.#if define
1110: 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 d(__sparc__) &&
1120: 21 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 !defined(__sparc
1130: 36 34 5f 5f 29 0a 20 20 5f 5f 56 41 5f 53 55 4e 64__). __VA_SUN
1140: 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e CC_STRUCT_RETURN
1150: 09 3d 20 31 3c 3c 33 2c 0a 20 20 5f 5f 56 41 5f .= 1<<3,. __VA_
1160: 53 55 4e 50 52 4f 43 43 5f 53 54 52 55 43 54 5f SUNPROCC_STRUCT_
1170: 52 45 54 55 52 4e 09 3d 20 31 3c 3c 34 2c 0a 23 RETURN.= 1<<4,.#
1180: 65 6c 73 65 0a 20 20 5f 5f 56 41 5f 53 55 4e 43 else. __VA_SUNC
1190: 43 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 09 C_STRUCT_RETURN.
11a0: 3d 20 30 2c 0a 20 20 5f 5f 56 41 5f 53 55 4e 50 = 0,. __VA_SUNP
11b0: 52 4f 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 ROCC_STRUCT_RETU
11c0: 52 4e 09 3d 20 30 2c 0a 23 65 6e 64 69 66 0a 23 RN.= 0,.#endif.#
11d0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 if defined(__i38
11e0: 36 5f 5f 29 0a 20 20 5f 5f 56 41 5f 4e 45 58 54 6__). __VA_NEXT
11f0: 47 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 52 GCC_STRUCT_RETUR
1200: 4e 09 3d 20 31 3c 3c 33 2c 0a 20 20 5f 5f 56 41 N.= 1<<3,. __VA
1210: 5f 4d 53 56 43 5f 53 54 52 55 43 54 5f 52 45 54 _MSVC_STRUCT_RET
1220: 55 52 4e 09 3d 20 31 3c 3c 34 2c 0a 23 65 6e 64 URN.= 1<<4,.#end
1230: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f if.#if defined(_
1240: 5f 68 70 70 61 5f 5f 29 0a 20 20 5f 5f 56 41 5f _hppa__). __VA_
1250: 4f 4c 44 47 43 43 5f 53 54 52 55 43 54 5f 52 45 OLDGCC_STRUCT_RE
1260: 54 55 52 4e 09 3d 20 31 3c 3c 33 2c 0a 23 65 6e TURN.= 1<<3,.#en
1270: 64 69 66 0a 20 20 2f 2a 20 74 68 65 20 64 65 66 dif. /* the def
1280: 61 75 6c 74 20 77 61 79 20 74 6f 20 72 65 74 75 ault way to retu
1290: 72 6e 20 73 74 72 75 63 74 73 20 2a 2f 0a 20 20 rn structs */.
12a0: 2f 2a 20 54 68 69 73 20 63 68 6f 69 63 65 20 68 /* This choice h
12b0: 65 72 65 20 69 73 20 62 61 73 65 64 20 6f 6e 20 ere is based on
12c0: 74 68 65 20 61 73 73 75 6d 70 74 69 6f 6e 20 74 the assumption t
12d0: 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e hat the function
12e0: 20 79 6f 75 20 61 72 65 0a 20 20 20 2a 20 67 6f you are. * go
12f0: 69 6e 67 20 74 6f 20 63 61 6c 6c 20 68 61 73 20 ing to call has
1300: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69 been compiled wi
1310: 74 68 20 74 68 65 20 73 61 6d 65 20 63 6f 6d 70 th the same comp
1320: 69 6c 65 72 20 79 6f 75 20 61 72 65 20 75 73 69 iler you are usi
1330: 6e 67 20 74 6f 0a 20 20 20 2a 20 69 6e 63 6c 75 ng to. * inclu
1340: 64 65 20 74 68 69 73 20 66 69 6c 65 2e 0a 20 20 de this file..
1350: 20 2a 20 49 66 20 79 6f 75 20 77 61 6e 74 20 74 * If you want t
1360: 6f 20 63 61 6c 6c 20 66 75 6e 63 74 69 6f 6e 73 o call functions
1370: 20 77 69 74 68 20 61 6e 6f 74 68 65 72 20 73 74 with another st
1380: 72 75 63 74 20 72 65 74 75 72 6e 69 6e 67 20 63 ruct returning c
1390: 6f 6e 76 65 6e 74 69 6f 6e 2c 0a 20 20 20 2a 20 onvention,. *
13a0: 6a 75 73 74 20 20 23 64 65 66 69 6e 65 20 5f 5f just #define __
13b0: 56 41 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e VA_STRUCT_RETURN
13c0: 20 2e 2e 2e 0a 20 20 20 2a 20 62 65 66 6f 72 65 .... * before
13d0: 20 6f 72 20 61 66 74 65 72 20 23 69 6e 63 6c 75 or after #inclu
13e0: 64 69 6e 67 20 3c 76 61 63 61 6c 6c 2e 68 3e 2e ding <vacall.h>.
13f0: 0a 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f . */.#ifndef _
1400: 5f 56 41 5f 53 54 52 55 43 54 5f 52 45 54 55 52 _VA_STRUCT_RETUR
1410: 4e 0a 20 20 5f 5f 56 41 5f 53 54 52 55 43 54 5f N. __VA_STRUCT_
1420: 52 45 54 55 52 4e 09 09 3d 0a 23 69 66 20 64 65 RETURN..=.#if de
1430: 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 fined(__sparc__)
1440: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 73 && !defined(__s
1450: 70 61 72 63 36 34 5f 5f 29 20 26 26 20 64 65 66 parc64__) && def
1460: 69 6e 65 64 28 73 75 6e 29 20 26 26 20 64 65 66 ined(sun) && def
1470: 69 6e 65 64 28 5f 5f 53 55 4e 50 52 4f 5f 43 29 ined(__SUNPRO_C)
1480: 20 2f 2a 20 53 55 4e 57 73 70 72 6f 20 63 63 20 /* SUNWspro cc
1490: 2a 2f 0a 09 09 09 09 20 20 5f 5f 56 41 5f 53 55 */..... __VA_SU
14a0: 4e 50 52 4f 43 43 5f 53 54 52 55 43 54 5f 52 45 NPROCC_STRUCT_RE
14b0: 54 55 52 4e 2c 0a 23 65 6c 73 65 0a 23 69 66 20 TURN,.#else.#if
14c0: 64 65 66 69 6e 65 64 28 5f 5f 50 43 43 5f 53 54 defined(__PCC_ST
14d0: 52 55 43 54 5f 52 45 54 55 52 4e 5f 5f 29 20 2f RUCT_RETURN__) /
14e0: 2a 20 64 65 66 69 6e 65 64 20 74 68 72 6f 75 67 * defined throug
14f0: 68 20 63 6f 6e 66 69 67 75 72 65 2c 20 73 65 65 h configure, see
1500: 20 61 62 6f 76 65 20 2a 2f 0a 09 09 09 09 20 20 above */.....
1510: 5f 5f 56 41 5f 50 43 43 5f 53 54 52 55 43 54 5f __VA_PCC_STRUCT_
1520: 52 45 54 55 52 4e 20 7c 0a 23 69 66 20 64 65 66 RETURN |.#if def
1530: 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 ined(__sparc__)
1540: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 73 70 && !defined(__sp
1550: 61 72 63 36 34 5f 5f 29 20 26 26 20 64 65 66 69 arc64__) && defi
1560: 6e 65 64 28 73 75 6e 29 20 26 26 20 21 28 64 65 ned(sun) && !(de
1570: 66 69 6e 65 64 28 5f 5f 53 54 44 43 5f 5f 29 20 fined(__STDC__)
1580: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 || defined(__GNU
1590: 43 5f 5f 29 29 20 2f 2a 20 73 75 6e 20 63 63 20 C__)) /* sun cc
15a0: 2a 2f 0a 20 20 09 09 09 09 20 20 5f 5f 56 41 5f */. .... __VA_
15b0: 53 55 4e 43 43 5f 53 54 52 55 43 54 5f 52 45 54 SUNCC_STRUCT_RET
15c0: 55 52 4e 2c 0a 23 65 6c 73 65 0a 20 20 09 09 09 URN,.#else. ...
15d0: 09 20 20 30 2c 0a 23 65 6e 64 69 66 0a 23 65 6c . 0,.#endif.#el
15e0: 73 65 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f se.#if defined(_
15f0: 5f 53 4d 41 4c 4c 5f 53 54 52 55 43 54 5f 52 45 _SMALL_STRUCT_RE
1600: 54 55 52 4e 5f 5f 29 20 7c 7c 20 64 65 66 69 6e TURN__) || defin
1610: 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 20 ed(__mipsn32__)
1620: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 || defined(__mip
1630: 73 36 34 5f 5f 29 20 2f 2a 20 64 65 66 69 6e 65 s64__) /* define
1640: 64 20 74 68 72 6f 75 67 68 20 63 6f 6e 66 69 67 d through config
1650: 75 72 65 2c 20 73 65 65 20 61 62 6f 76 65 20 2a ure, see above *
1660: 2f 0a 09 09 09 09 20 20 5f 5f 56 41 5f 53 4d 41 /..... __VA_SMA
1670: 4c 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e LL_STRUCT_RETURN
1680: 20 7c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 |.#endif.#if de
1690: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a fined(__GNUC__).
16a0: 09 09 09 09 20 20 5f 5f 56 41 5f 47 43 43 5f 53 .... __VA_GCC_S
16b0: 54 52 55 43 54 5f 52 45 54 55 52 4e 20 7c 0a 23 TRUCT_RETURN |.#
16c0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
16d0: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 26 26 20 64 d(__i386__) && d
16e0: 65 66 69 6e 65 64 28 4e 65 58 54 29 20 26 26 20 efined(NeXT) &&
16f0: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f defined(__GNUC__
1700: 29 20 2f 2a 20 4e 65 58 54 20 67 63 63 2d 32 2e ) /* NeXT gcc-2.
1710: 35 2e 38 20 2a 2f 0a 09 09 09 09 20 20 5f 5f 56 5.8 */..... __V
1720: 41 5f 4e 45 58 54 47 43 43 5f 53 54 52 55 43 54 A_NEXTGCC_STRUCT
1730: 5f 52 45 54 55 52 4e 20 7c 0a 23 65 6e 64 69 66 _RETURN |.#endif
1740: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 .#if defined(__i
1750: 33 38 36 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 386__) && define
1760: 64 28 5f 4d 53 43 5f 56 45 52 29 20 2f 2a 20 4d d(_MSC_VER) /* M
1770: 53 56 43 20 34 2e 30 20 2a 2f 0a 09 09 09 09 20 SVC 4.0 */.....
1780: 20 5f 5f 56 41 5f 4d 53 56 43 5f 53 54 52 55 43 __VA_MSVC_STRUC
1790: 54 5f 52 45 54 55 52 4e 20 7c 0a 23 65 6e 64 69 T_RETURN |.#endi
17a0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
17b0: 68 70 70 61 5f 5f 29 20 26 26 20 64 65 66 69 6e hppa__) && defin
17c0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 ed(__GNUC__) &&
17d0: 28 5f 5f 47 4e 55 43 5f 5f 20 3c 20 33 29 20 26 (__GNUC__ < 3) &
17e0: 26 20 28 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f & (__GNUC_MINOR_
17f0: 5f 20 3c 20 37 29 0a 09 09 09 09 20 20 5f 5f 56 _ < 7)..... __V
1800: 41 5f 4f 4c 44 47 43 43 5f 53 54 52 55 43 54 5f A_OLDGCC_STRUCT_
1810: 52 45 54 55 52 4e 20 7c 0a 23 65 6e 64 69 66 0a RETURN |.#endif.
1820: 20 20 09 09 09 09 20 20 30 2c 0a 23 65 6e 64 69 .... 0,.#endi
1830: 66 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a f.#endif.#endif.
1840: 0a 20 20 2f 2a 20 68 6f 77 20 74 6f 20 72 65 74 . /* how to ret
1850: 75 72 6e 20 66 6c 6f 61 74 73 20 2a 2f 0a 23 69 urn floats */.#i
1860: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b f defined(__m68k
1870: 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 __) || (defined(
1880: 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 __sparc__) && !d
1890: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 efined(__sparc64
18a0: 5f 5f 29 29 0a 20 20 5f 5f 56 41 5f 53 55 4e 43 __)). __VA_SUNC
18b0: 43 5f 46 4c 4f 41 54 5f 52 45 54 55 52 4e 09 3d C_FLOAT_RETURN.=
18c0: 20 31 3c 3c 35 2c 0a 23 65 6e 64 69 66 0a 23 69 1<<5,.#endif.#i
18d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b f defined(__m68k
18e0: 5f 5f 29 0a 20 20 5f 5f 56 41 5f 46 52 45 47 5f __). __VA_FREG_
18f0: 46 4c 4f 41 54 5f 52 45 54 55 52 4e 09 3d 20 31 FLOAT_RETURN.= 1
1900: 3c 3c 36 2c 0a 23 65 6e 64 69 66 0a 20 20 2f 2a <<6,.#endif. /*
1910: 20 74 68 65 20 64 65 66 61 75 6c 74 20 77 61 79 the default way
1920: 20 74 6f 20 72 65 74 75 72 6e 20 66 6c 6f 61 74 to return float
1930: 73 20 2a 2f 0a 20 20 2f 2a 20 54 68 69 73 20 63 s */. /* This c
1940: 68 6f 69 63 65 20 68 65 72 65 20 69 73 20 62 61 hoice here is ba
1950: 73 65 64 20 6f 6e 20 74 68 65 20 61 73 73 75 6d sed on the assum
1960: 70 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 66 ption that the f
1970: 75 6e 63 74 69 6f 6e 20 79 6f 75 20 61 72 65 0a unction you are.
1980: 20 20 20 2a 20 67 6f 69 6e 67 20 74 6f 20 63 61 * going to ca
1990: 6c 6c 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 ll has been comp
19a0: 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 73 61 iled with the sa
19b0: 6d 65 20 63 6f 6d 70 69 6c 65 72 20 79 6f 75 20 me compiler you
19c0: 61 72 65 20 75 73 69 6e 67 20 74 6f 0a 20 20 20 are using to.
19d0: 2a 20 69 6e 63 6c 75 64 65 20 74 68 69 73 20 66 * include this f
19e0: 69 6c 65 2e 0a 20 20 20 2a 20 49 66 20 79 6f 75 ile.. * If you
19f0: 20 77 61 6e 74 20 74 6f 20 63 61 6c 6c 20 66 75 want to call fu
1a00: 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 61 6e 6f nctions with ano
1a10: 74 68 65 72 20 66 6c 6f 61 74 20 72 65 74 75 72 ther float retur
1a20: 6e 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 2c ning convention,
1a30: 0a 20 20 20 2a 20 6a 75 73 74 20 20 23 64 65 66 . * just #def
1a40: 69 6e 65 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 52 ine __VA_FLOAT_R
1a50: 45 54 55 52 4e 20 2e 2e 2e 0a 20 20 20 2a 20 62 ETURN .... * b
1a60: 65 66 6f 72 65 20 6f 72 20 61 66 74 65 72 20 23 efore or after #
1a70: 69 6e 63 6c 75 64 69 6e 67 20 3c 76 61 63 61 6c including <vacal
1a80: 6c 2e 68 3e 2e 0a 20 20 20 2a 2f 0a 23 69 66 6e l.h>.. */.#ifn
1a90: 64 65 66 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 52 def __VA_FLOAT_R
1aa0: 45 54 55 52 4e 0a 23 69 66 20 28 64 65 66 69 6e ETURN.#if (defin
1ab0: 65 64 28 5f 5f 6d 36 38 6b 5f 5f 29 20 7c 7c 20 ed(__m68k__) ||
1ac0: 28 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 (defined(__sparc
1ad0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 __) && !defined(
1ae0: 5f 5f 73 70 61 72 63 36 34 5f 5f 29 29 29 20 26 __sparc64__))) &
1af0: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 & !defined(__GNU
1b00: 43 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 C__) && defined(
1b10: 73 75 6e 29 20 26 26 20 21 64 65 66 69 6e 65 64 sun) && !defined
1b20: 28 5f 5f 53 55 4e 50 52 4f 5f 43 29 20 20 2f 2a (__SUNPRO_C) /*
1b30: 20 73 75 6e 20 63 63 20 2a 2f 0a 20 20 5f 5f 56 sun cc */. __V
1b40: 41 5f 46 4c 4f 41 54 5f 52 45 54 55 52 4e 09 09 A_FLOAT_RETURN..
1b50: 3d 20 5f 5f 56 41 5f 53 55 4e 43 43 5f 46 4c 4f = __VA_SUNCC_FLO
1b60: 41 54 5f 52 45 54 55 52 4e 2c 0a 23 65 6c 69 66 AT_RETURN,.#elif
1b70: 20 28 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b (defined(__m68k
1b80: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 __) && !defined(
1b90: 5f 5f 49 52 45 47 5f 46 4c 4f 41 54 5f 52 45 54 __IREG_FLOAT_RET
1ba0: 55 52 4e 5f 5f 29 29 0a 20 20 5f 5f 56 41 5f 46 URN__)). __VA_F
1bb0: 4c 4f 41 54 5f 52 45 54 55 52 4e 09 09 3d 20 5f LOAT_RETURN..= _
1bc0: 5f 56 41 5f 46 52 45 47 5f 46 4c 4f 41 54 5f 52 _VA_FREG_FLOAT_R
1bd0: 45 54 55 52 4e 2c 0a 23 65 6c 73 65 0a 20 20 5f ETURN,.#else. _
1be0: 5f 56 41 5f 46 4c 4f 41 54 5f 52 45 54 55 52 4e _VA_FLOAT_RETURN
1bf0: 09 09 3d 20 30 2c 0a 23 65 6e 64 69 66 0a 23 65 ..= 0,.#endif.#e
1c00: 6e 64 69 66 0a 0a 20 20 2f 2a 20 68 6f 77 20 74 ndif.. /* how t
1c10: 6f 20 70 61 73 73 20 73 74 72 75 63 74 73 20 2a o pass structs *
1c20: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f /.#if defined(__
1c30: 6d 69 70 73 5f 5f 29 20 7c 7c 20 64 65 66 69 6e mips__) || defin
1c40: 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 20 ed(__mipsn32__)
1c50: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 || defined(__mip
1c60: 73 36 34 5f 5f 29 0a 20 20 5f 5f 56 41 5f 53 47 s64__). __VA_SG
1c70: 49 43 43 5f 53 54 52 55 43 54 5f 41 52 47 53 09 ICC_STRUCT_ARGS.
1c80: 3d 20 31 3c 3c 37 2c 0a 23 65 6e 64 69 66 0a 23 = 1<<7,.#endif.#
1c90: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 if defined(__rs6
1ca0: 30 30 30 5f 5f 29 0a 20 20 5f 5f 56 41 5f 41 49 000__). __VA_AI
1cb0: 58 43 43 5f 53 54 52 55 43 54 5f 41 52 47 53 09 XCC_STRUCT_ARGS.
1cc0: 3d 20 31 3c 3c 37 2c 0a 23 65 6e 64 69 66 0a 20 = 1<<7,.#endif.
1cd0: 20 2f 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 /* the default
1ce0: 77 61 79 20 74 6f 20 70 61 73 73 20 66 6c 6f 61 way to pass floa
1cf0: 74 73 20 2a 2f 0a 20 20 2f 2a 20 54 68 69 73 20 ts */. /* This
1d00: 63 68 6f 69 63 65 20 68 65 72 65 20 69 73 20 62 choice here is b
1d10: 61 73 65 64 20 6f 6e 20 74 68 65 20 61 73 73 75 ased on the assu
1d20: 6d 70 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 mption that the
1d30: 66 75 6e 63 74 69 6f 6e 20 79 6f 75 20 61 72 65 function you are
1d40: 0a 20 20 20 2a 20 67 6f 69 6e 67 20 74 6f 20 63 . * going to c
1d50: 61 6c 6c 20 68 61 73 20 62 65 65 6e 20 63 6f 6d all has been com
1d60: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 73 piled with the s
1d70: 61 6d 65 20 63 6f 6d 70 69 6c 65 72 20 79 6f 75 ame compiler you
1d80: 20 61 72 65 20 75 73 69 6e 67 20 74 6f 0a 20 20 are using to.
1d90: 20 2a 20 69 6e 63 6c 75 64 65 20 74 68 69 73 20 * include this
1da0: 66 69 6c 65 2e 0a 20 20 20 2a 20 49 66 20 79 6f file.. * If yo
1db0: 75 20 77 61 6e 74 20 74 6f 20 63 61 6c 6c 20 66 u want to call f
1dc0: 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 61 6e unctions with an
1dd0: 6f 74 68 65 72 20 66 6c 6f 61 74 20 70 61 73 73 other float pass
1de0: 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 2c 0a ing convention,.
1df0: 20 20 20 2a 20 6a 75 73 74 20 20 23 64 65 66 69 * just #defi
1e00: 6e 65 20 5f 5f 56 41 5f 53 54 52 55 43 54 5f 41 ne __VA_STRUCT_A
1e10: 52 47 53 20 2e 2e 2e 0a 20 20 20 2a 20 62 65 66 RGS .... * bef
1e20: 6f 72 65 20 6f 72 20 61 66 74 65 72 20 23 69 6e ore or after #in
1e30: 63 6c 75 64 69 6e 67 20 3c 76 61 63 61 6c 6c 2e cluding <vacall.
1e40: 68 3e 2e 0a 20 20 20 2a 2f 0a 23 69 66 6e 64 65 h>.. */.#ifnde
1e50: 66 20 5f 5f 56 41 5f 53 54 52 55 43 54 5f 41 52 f __VA_STRUCT_AR
1e60: 47 53 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 GS.#if (defined(
1e70: 5f 5f 6d 69 70 73 5f 5f 29 20 7c 7c 20 64 65 66 __mips__) || def
1e80: 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f ined(__mipsn32__
1e90: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d ) || defined(__m
1ea0: 69 70 73 36 34 5f 5f 29 29 20 26 26 20 21 64 65 ips64__)) && !de
1eb0: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 fined(__GNUC__)
1ec0: 2f 2a 20 53 47 49 20 6d 69 70 73 20 63 63 20 2a /* SGI mips cc *
1ed0: 2f 0a 20 20 5f 5f 56 41 5f 53 54 52 55 43 54 5f /. __VA_STRUCT_
1ee0: 41 52 47 53 09 09 3d 20 5f 5f 56 41 5f 53 47 49 ARGS..= __VA_SGI
1ef0: 43 43 5f 53 54 52 55 43 54 5f 41 52 47 53 2c 0a CC_STRUCT_ARGS,.
1f00: 23 65 6c 73 65 0a 23 69 66 20 64 65 66 69 6e 65 #else.#if define
1f10: 64 28 5f 5f 72 73 36 30 30 30 5f 5f 29 20 26 26 d(__rs6000__) &&
1f20: 20 64 65 66 69 6e 65 64 28 5f 41 49 58 29 20 26 defined(_AIX) &
1f30: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 & !defined(__GNU
1f40: 43 5f 5f 29 20 2f 2a 20 41 49 58 20 63 63 2c 20 C__) /* AIX cc,
1f50: 78 6c 63 20 2a 2f 0a 20 20 5f 5f 56 41 5f 53 54 xlc */. __VA_ST
1f60: 52 55 43 54 5f 41 52 47 53 09 09 3d 20 5f 5f 56 RUCT_ARGS..= __V
1f70: 41 5f 41 49 58 43 43 5f 53 54 52 55 43 54 5f 41 A_AIXCC_STRUCT_A
1f80: 52 47 53 2c 0a 23 65 6c 73 65 0a 20 20 5f 5f 56 RGS,.#else. __V
1f90: 41 5f 53 54 52 55 43 54 5f 41 52 47 53 09 09 3d A_STRUCT_ARGS..=
1fa0: 20 30 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 0,.#endif.#endi
1fb0: 66 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 68 f.#endif.. /* h
1fc0: 6f 77 20 74 6f 20 70 61 73 73 20 66 6c 6f 61 74 ow to pass float
1fd0: 73 20 2a 2f 0a 20 20 2f 2a 20 41 4e 53 49 20 43 s */. /* ANSI C
1fe0: 20 63 6f 6d 70 69 6c 65 72 73 20 61 6e 64 20 47 compilers and G
1ff0: 4e 55 20 67 63 63 20 70 61 73 73 20 66 6c 6f 61 NU gcc pass floa
2000: 74 73 20 61 73 20 66 6c 6f 61 74 73 2e 0a 20 20 ts as floats..
2010: 20 2a 20 4b 26 52 20 43 20 63 6f 6d 70 69 6c 65 * K&R C compile
2020: 72 73 20 70 61 73 73 20 66 6c 6f 61 74 73 20 61 rs pass floats a
2030: 73 20 64 6f 75 62 6c 65 73 2e 0a 20 20 20 2a 20 s doubles.. *
2040: 28 45 78 63 65 70 74 20 73 6f 6d 65 20 63 6f 6d (Except some com
2050: 70 69 6c 65 72 73 20 6c 69 6b 65 20 53 47 49 20 pilers like SGI
2060: 4d 49 50 53 20 22 63 63 22 20 61 6e 64 20 22 63 MIPS "cc" and "c
2070: 63 20 2d 63 63 6b 72 22 20 69 66 20 61 20 70 72 c -cckr" if a pr
2080: 6f 74 6f 74 79 70 65 20 69 73 0a 20 20 20 2a 20 ototype is. *
2090: 6b 6e 6f 77 6e 20 66 6f 72 20 74 68 65 20 63 61 known for the ca
20a0: 6c 6c 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 20 lled functions.
20b0: 42 75 74 20 74 6f 20 63 6f 6d 70 69 6c 65 20 61 But to compile a
20c0: 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 70 72 program with pr
20d0: 6f 74 6f 74 79 70 65 73 2c 0a 20 20 20 2a 20 22 ototypes,. * "
20e0: 63 63 20 2d 61 6e 73 69 22 20 69 73 20 62 65 74 cc -ansi" is bet
20f0: 74 65 72 20 61 6e 79 77 61 79 2e 0a 20 20 20 2a ter anyway.. *
2100: 2f 0a 20 20 5f 5f 56 41 5f 41 4e 53 49 5f 46 4c /. __VA_ANSI_FL
2110: 4f 41 54 5f 41 52 47 53 09 09 3d 20 30 2c 20 20 OAT_ARGS..= 0,
2120: 20 20 2f 2a 20 70 61 73 73 20 66 6c 6f 61 74 73 /* pass floats
2130: 20 61 73 20 66 6c 6f 61 74 73 20 2a 2f 0a 20 20 as floats */.
2140: 5f 5f 56 41 5f 54 52 41 44 49 54 49 4f 4e 41 4c __VA_TRADITIONAL
2150: 5f 46 4c 4f 41 54 5f 41 52 47 53 09 3d 20 31 3c _FLOAT_ARGS.= 1<
2160: 3c 38 2c 20 2f 2a 20 70 61 73 73 20 66 6c 6f 61 <8, /* pass floa
2170: 74 73 20 61 73 20 64 6f 75 62 6c 65 73 20 2a 2f ts as doubles */
2180: 0a 20 20 2f 2a 20 74 68 65 20 64 65 66 61 75 6c . /* the defaul
2190: 74 20 77 61 79 20 74 6f 20 70 61 73 73 20 66 6c t way to pass fl
21a0: 6f 61 74 73 20 2a 2f 0a 20 20 2f 2a 20 54 68 69 oats */. /* Thi
21b0: 73 20 63 68 6f 69 63 65 20 68 65 72 65 20 69 73 s choice here is
21c0: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 61 73 based on the as
21d0: 73 75 6d 70 74 69 6f 6e 20 74 68 61 74 20 74 68 sumption that th
21e0: 65 20 66 75 6e 63 74 69 6f 6e 20 79 6f 75 20 61 e function you a
21f0: 72 65 0a 20 20 20 2a 20 67 6f 69 6e 67 20 74 6f re. * going to
2200: 20 63 61 6c 6c 20 68 61 73 20 62 65 65 6e 20 63 call has been c
2210: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 ompiled with the
2220: 20 73 61 6d 65 20 63 6f 6d 70 69 6c 65 72 20 79 same compiler y
2230: 6f 75 20 61 72 65 20 75 73 69 6e 67 20 74 6f 0a ou are using to.
2240: 20 20 20 2a 20 69 6e 63 6c 75 64 65 20 74 68 69 * include thi
2250: 73 20 66 69 6c 65 2e 0a 20 20 20 2a 20 49 66 20 s file.. * If
2260: 79 6f 75 20 77 61 6e 74 20 74 6f 20 63 61 6c 6c you want to call
2270: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 functions with
2280: 61 6e 6f 74 68 65 72 20 66 6c 6f 61 74 20 70 61 another float pa
2290: 73 73 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e ssing convention
22a0: 2c 0a 20 20 20 2a 20 6a 75 73 74 20 20 23 64 65 ,. * just #de
22b0: 66 69 6e 65 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f fine __VA_FLOAT_
22c0: 41 52 47 53 20 2e 2e 2e 0a 20 20 20 2a 20 62 65 ARGS .... * be
22d0: 66 6f 72 65 20 6f 72 20 61 66 74 65 72 20 23 69 fore or after #i
22e0: 6e 63 6c 75 64 69 6e 67 20 3c 76 61 63 61 6c 6c ncluding <vacall
22f0: 2e 68 3e 2e 0a 20 20 20 2a 2f 0a 23 69 66 6e 64 .h>.. */.#ifnd
2300: 65 66 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 41 52 ef __VA_FLOAT_AR
2310: 47 53 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f GS.#if defined(_
2320: 5f 53 54 44 43 5f 5f 29 20 7c 7c 20 64 65 66 69 _STDC__) || defi
2330: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 2f 2a ned(__GNUC__) /*
2340: 20 77 68 61 74 20 61 62 6f 75 74 20 68 70 70 61 what about hppa
2350: 20 22 63 63 20 2d 41 61 22 20 3f 3f 20 2a 2f 0a "cc -Aa" ?? */.
2360: 20 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 41 52 47 __VA_FLOAT_ARG
2370: 53 09 09 3d 20 5f 5f 56 41 5f 41 4e 53 49 5f 46 S..= __VA_ANSI_F
2380: 4c 4f 41 54 5f 41 52 47 53 2c 0a 23 65 6c 73 65 LOAT_ARGS,.#else
2390: 0a 20 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 41 52 . __VA_FLOAT_AR
23a0: 47 53 09 09 3d 20 5f 5f 56 41 5f 54 52 41 44 49 GS..= __VA_TRADI
23b0: 54 49 4f 4e 41 4c 5f 46 4c 4f 41 54 5f 41 52 47 TIONAL_FLOAT_ARG
23c0: 53 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 S,.#endif.#endif
23d0: 0a 0a 20 20 2f 2a 20 68 6f 77 20 74 6f 20 70 61 .. /* how to pa
23e0: 73 73 20 61 6e 64 20 72 65 74 75 72 6e 20 73 6d ss and return sm
23f0: 61 6c 6c 20 69 6e 74 65 67 65 72 20 61 72 67 75 all integer argu
2400: 6d 65 6e 74 73 20 2a 2f 0a 20 20 5f 5f 56 41 5f ments */. __VA_
2410: 41 4e 53 49 5f 49 4e 54 45 47 45 52 53 09 09 3d ANSI_INTEGERS..=
2420: 20 30 2c 20 2f 2a 20 6e 6f 20 70 72 6f 6d 6f 74 0, /* no promot
2430: 69 6f 6e 73 20 2a 2f 0a 20 20 5f 5f 56 41 5f 54 ions */. __VA_T
2440: 52 41 44 49 54 49 4f 4e 41 4c 5f 49 4e 54 45 47 RADITIONAL_INTEG
2450: 45 52 53 09 3d 20 30 2c 20 2f 2a 20 70 72 6f 6d ERS.= 0, /* prom
2460: 6f 74 65 20 5b 75 5d 63 68 61 72 2c 20 5b 75 5d ote [u]char, [u]
2470: 73 68 6f 72 74 20 74 6f 20 5b 75 5d 69 6e 74 20 short to [u]int
2480: 2a 2f 0a 20 20 2f 2a 20 46 6f 72 74 75 6e 61 74 */. /* Fortunat
2490: 65 6c 79 20 74 68 65 73 65 20 74 77 6f 20 6d 65 ely these two me
24a0: 74 68 6f 64 73 20 61 72 65 20 63 6f 6d 70 61 74 thods are compat
24b0: 69 62 6c 65 2e 20 4f 75 72 20 6d 61 63 72 6f 73 ible. Our macros
24c0: 20 77 6f 72 6b 20 77 69 74 68 20 62 6f 74 68 2e work with both.
24d0: 20 2a 2f 0a 20 20 2f 2a 20 74 68 65 20 64 65 66 */. /* the def
24e0: 61 75 6c 74 20 77 61 79 20 74 6f 20 70 61 73 73 ault way to pass
24f0: 20 61 6e 64 20 72 65 74 75 72 6e 20 73 6d 61 6c and return smal
2500: 6c 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 l integer argume
2510: 6e 74 73 20 2a 2f 0a 20 20 2f 2a 20 54 68 69 73 nts */. /* This
2520: 20 63 68 6f 69 63 65 20 68 65 72 65 20 69 73 20 choice here is
2530: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 61 73 73 based on the ass
2540: 75 6d 70 74 69 6f 6e 20 74 68 61 74 20 74 68 65 umption that the
2550: 20 66 75 6e 63 74 69 6f 6e 20 79 6f 75 20 61 72 function you ar
2560: 65 0a 20 20 20 2a 20 67 6f 69 6e 67 20 74 6f 20 e. * going to
2570: 63 61 6c 6c 20 68 61 73 20 62 65 65 6e 20 63 6f call has been co
2580: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 mpiled with the
2590: 73 61 6d 65 20 63 6f 6d 70 69 6c 65 72 20 79 6f same compiler yo
25a0: 75 20 61 72 65 20 75 73 69 6e 67 20 74 6f 0a 20 u are using to.
25b0: 20 20 2a 20 69 6e 63 6c 75 64 65 20 74 68 69 73 * include this
25c0: 20 66 69 6c 65 2e 0a 20 20 20 2a 20 49 66 20 79 file.. * If y
25d0: 6f 75 20 77 61 6e 74 20 74 6f 20 63 61 6c 6c 20 ou want to call
25e0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 61 functions with a
25f0: 6e 6f 74 68 65 72 20 66 6c 6f 61 74 20 70 61 73 nother float pas
2600: 73 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 2c sing convention,
2610: 0a 20 20 20 2a 20 6a 75 73 74 20 20 23 64 65 66 . * just #def
2620: 69 6e 65 20 5f 5f 56 41 5f 49 4e 54 45 47 45 52 ine __VA_INTEGER
2630: 53 20 2e 2e 2e 0a 20 20 20 2a 20 62 65 66 6f 72 S .... * befor
2640: 65 20 6f 72 20 61 66 74 65 72 20 23 69 6e 63 6c e or after #incl
2650: 75 64 69 6e 67 20 3c 76 61 63 61 6c 6c 2e 68 3e uding <vacall.h>
2660: 2e 0a 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 .. */.#ifndef
2670: 5f 5f 56 41 5f 49 4e 54 45 47 45 52 53 0a 23 69 __VA_INTEGERS.#i
2680: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 54 44 43 f defined(__STDC
2690: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
26a0: 5f 47 4e 55 43 5f 5f 29 0a 20 20 5f 5f 56 41 5f _GNUC__). __VA_
26b0: 49 4e 54 45 47 45 52 53 09 09 09 3d 20 5f 5f 56 INTEGERS...= __V
26c0: 41 5f 41 4e 53 49 5f 49 4e 54 45 47 45 52 53 2c A_ANSI_INTEGERS,
26d0: 0a 23 65 6c 73 65 0a 20 20 5f 5f 56 41 5f 49 4e .#else. __VA_IN
26e0: 54 45 47 45 52 53 09 09 09 3d 20 5f 5f 56 41 5f TEGERS...= __VA_
26f0: 54 52 41 44 49 54 49 4f 4e 41 4c 5f 49 4e 54 45 TRADITIONAL_INTE
2700: 47 45 52 53 2c 0a 23 65 6e 64 69 66 0a 23 65 6e GERS,.#endif.#en
2710: 64 69 66 0a 0a 20 20 2f 2a 20 73 74 61 63 6b 20 dif.. /* stack
2720: 63 6c 65 61 6e 75 70 20 70 6f 6c 69 63 79 20 2a cleanup policy *
2730: 2f 0a 20 20 5f 5f 56 41 5f 43 44 45 43 4c 5f 43 /. __VA_CDECL_C
2740: 4c 45 41 4e 55 50 09 09 3d 20 30 2c 20 2f 2a 20 LEANUP..= 0, /*
2750: 63 61 6c 6c 65 72 20 70 6f 70 73 20 61 72 67 73 caller pops args
2760: 20 61 66 74 65 72 20 72 65 74 75 72 6e 20 2a 2f after return */
2770: 0a 20 20 5f 5f 56 41 5f 53 54 44 43 41 4c 4c 5f . __VA_STDCALL_
2780: 43 4c 45 41 4e 55 50 09 09 3d 20 31 3c 3c 39 2c CLEANUP..= 1<<9,
2790: 20 2f 2a 20 63 61 6c 6c 65 65 20 70 6f 70 73 20 /* callee pops
27a0: 61 72 67 73 20 62 65 66 6f 72 65 20 72 65 74 75 args before retu
27b0: 72 6e 20 2a 2f 0a 09 09 09 09 20 20 20 20 20 2f rn */..... /
27c0: 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 * currently only
27d0: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 5f 5f supported on __
27e0: 69 33 38 36 5f 5f 20 2a 2f 0a 23 69 66 6e 64 65 i386__ */.#ifnde
27f0: 66 20 5f 5f 56 41 5f 43 4c 45 41 4e 55 50 0a 20 f __VA_CLEANUP.
2800: 20 5f 5f 56 41 5f 43 4c 45 41 4e 55 50 09 09 09 __VA_CLEANUP...
2810: 3d 20 5f 5f 56 41 5f 43 44 45 43 4c 5f 43 4c 45 = __VA_CDECL_CLE
2820: 41 4e 55 50 2c 0a 23 65 6e 64 69 66 0a 0a 20 20 ANUP,.#endif..
2830: 2f 2a 20 54 68 65 73 65 20 61 72 65 20 66 6f 72 /* These are for
2840: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e internal use on
2850: 6c 79 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 ly */.#if define
2860: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 d(__i386__) || d
2870: 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f 5f 29 efined(__m68k__)
2880: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 || defined(__mi
2890: 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 psn32__) || defi
28a0: 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 20 ned(__mips64__)
28b0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 || defined(__spa
28c0: 72 63 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e rc64__) || defin
28d0: 65 64 28 5f 5f 61 6c 70 68 61 5f 5f 29 20 7c 7c ed(__alpha__) ||
28e0: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f defined(__arm__
28f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 72 ) || defined(__r
2900: 73 36 30 30 30 5f 5f 29 20 7c 7c 20 64 65 66 69 s6000__) || defi
2910: 6e 65 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 ned(__convex__)
2920: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 61 36 || defined(__ia6
2930: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 4__) || defined(
2940: 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 __x86_64__) || d
2950: 65 66 69 6e 65 64 28 5f 5f 73 33 39 30 5f 5f 29 efined(__s390__)
2960: 0a 20 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 . __VA_REGISTER
2970: 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 09 3d _STRUCT_RETURN.=
2980: 20 31 3c 3c 31 30 2c 0a 23 65 6e 64 69 66 0a 23 1<<10,.#endif.#
2990: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 if defined(__mip
29a0: 73 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 s__) && !defined
29b0: 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a 20 20 (__mipsn32__).
29c0: 5f 5f 56 41 5f 46 4c 4f 41 54 5f 31 09 09 09 3d __VA_FLOAT_1...=
29d0: 20 31 3c 3c 31 31 2c 0a 20 20 5f 5f 56 41 5f 46 1<<11,. __VA_F
29e0: 4c 4f 41 54 5f 32 09 09 09 3d 20 31 3c 3c 31 32 LOAT_2...= 1<<12
29f0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 ,.#endif.#if def
2a00: 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f ined(__mipsn32__
2a10: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d ) || defined(__m
2a20: 69 70 73 36 34 5f 5f 29 0a 20 20 5f 5f 56 41 5f ips64__). __VA_
2a30: 52 45 47 49 53 54 45 52 5f 46 4c 4f 41 54 53 54 REGISTER_FLOATST
2a40: 52 55 43 54 5f 52 45 54 55 52 4e 09 3d 20 31 3c RUCT_RETURN.= 1<
2a50: 3c 31 33 2c 0a 20 20 5f 5f 56 41 5f 52 45 47 49 <13,. __VA_REGI
2a60: 53 54 45 52 5f 44 4f 55 42 4c 45 53 54 52 55 43 STER_DOUBLESTRUC
2a70: 54 5f 52 45 54 55 52 4e 09 3d 20 31 3c 3c 31 34 T_RETURN.= 1<<14
2a80: 2c 0a 23 65 6e 64 69 66 0a 0a 20 20 5f 5f 56 41 ,.#endif.. __VA
2a90: 5f 66 6c 61 67 5f 66 6f 72 5f 62 72 6f 6b 65 6e _flag_for_broken
2aa0: 5f 63 6f 6d 70 69 6c 65 72 73 5f 74 68 61 74 5f _compilers_that_
2ab0: 64 6f 6e 74 5f 6c 69 6b 65 5f 74 72 61 69 6c 69 dont_like_traili
2ac0: 6e 67 5f 63 6f 6d 6d 61 73 0a 7d 3b 0a 0a 2f 2a ng_commas.};../*
2ad0: 0a 20 2a 20 44 65 66 69 6e 69 74 69 6f 6e 20 6f . * Definition o
2ae0: 66 20 74 68 65 20 60 76 61 5f 61 6c 69 73 74 27 f the `va_alist'
2af0: 20 74 79 70 65 2e 0a 20 2a 2f 0a 74 79 70 65 64 type.. */.typed
2b00: 65 66 20 73 74 72 75 63 74 0a 7b 0a 20 20 2f 2a ef struct.{. /*
2b10: 20 73 6f 6d 65 20 76 61 5f 2e 2e 2e 20 6d 61 63 some va_... mac
2b20: 72 6f 73 20 6e 65 65 64 20 74 68 65 73 65 20 66 ros need these f
2b30: 6c 61 67 73 20 2a 2f 0a 20 20 69 6e 74 20 20 20 lags */. int
2b40: 20 20 20 20 20 20 20 20 20 66 6c 61 67 73 3b 0a flags;.
2b50: 20 20 2f 2a 20 63 75 72 72 65 6e 74 20 70 6f 69 /* current poi
2b60: 6e 74 65 72 20 69 6e 74 6f 20 74 68 65 20 61 72 nter into the ar
2b70: 67 75 6d 65 6e 74 20 61 72 72 61 79 20 2a 2f 0a gument array */.
2b80: 20 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 unsigned long
2b90: 20 61 70 74 72 3b 0a 20 20 2f 2a 20 73 74 72 75 aptr;. /* stru
2ba0: 63 74 75 72 65 20 72 65 74 75 72 6e 20 70 6f 69 cture return poi
2bb0: 6e 74 65 72 2c 20 72 65 74 75 72 6e 20 74 79 70 nter, return typ
2bc0: 65 2c 20 72 65 74 75 72 6e 20 74 79 70 65 20 73 e, return type s
2bd0: 69 7a 65 20 2a 2f 0a 20 20 76 6f 69 64 2a 20 20 ize */. void*
2be0: 20 20 20 20 20 20 20 20 72 61 64 64 72 3b 0a 20 raddr;.
2bf0: 20 65 6e 75 6d 20 5f 5f 56 41 74 79 70 65 20 20 enum __VAtype
2c00: 72 74 79 70 65 3b 0a 20 20 75 6e 73 69 67 6e 65 rtype;. unsigne
2c10: 64 20 6c 6f 6e 67 20 20 72 73 69 7a 65 3b 0a 23 d long rsize;.#
2c20: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 if defined(__i38
2c30: 36 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 6__) || (defined
2c40: 28 5f 5f 72 73 36 30 30 30 5f 5f 29 20 26 26 20 (__rs6000__) &&
2c50: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f defined(__MACH__
2c60: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 41 ) && defined(__A
2c70: 50 50 4c 45 5f 5f 29 29 0a 20 20 2f 2a 20 46 69 PPLE__)). /* Fi
2c80: 6c 6c 65 72 20 77 6f 72 64 2c 20 6e 65 65 64 65 ller word, neede
2c90: 64 20 69 66 20 74 68 65 20 6e 75 6d 62 65 72 73 d if the numbers
2ca0: 20 6f 66 20 77 6f 72 64 73 20 75 70 20 74 6f 20 of words up to
2cb0: 6e 6f 77 20 69 6e 20 74 68 69 73 20 73 74 72 75 now in this stru
2cc0: 63 74 75 72 65 20 2a 2f 0a 20 20 2f 2a 20 69 73 cture */. /* is
2cd0: 20 6f 64 64 20 28 62 65 63 61 75 73 65 20 6f 6e odd (because on
2ce0: 20 4d 53 56 43 2c 20 61 6c 69 67 6e 6f 66 28 64 MSVC, alignof(d
2cf0: 6f 75 62 6c 65 29 20 3d 20 38 2c 20 6e 6f 72 6d ouble) = 8, norm
2d00: 61 6c 6c 79 20 3d 20 34 3b 20 73 69 6d 69 6c 61 ally = 4; simila
2d10: 72 6c 79 2c 20 20 2a 2f 0a 20 20 2f 2a 20 6f 6e rly, */. /* on
2d20: 20 4d 61 63 4f 53 20 58 2c 20 74 68 65 20 41 70 MacOS X, the Ap
2d30: 70 6c 65 20 63 6f 6d 70 69 6c 65 72 20 68 61 73 ple compiler has
2d40: 20 61 6c 69 67 6e 6f 66 28 64 6f 75 62 6c 65 29 alignof(double)
2d50: 20 3d 20 38 20 77 68 65 72 65 61 73 20 74 68 65 = 8 whereas the
2d60: 20 20 20 20 20 20 2a 2f 0a 20 20 2f 2a 20 73 74 */. /* st
2d70: 61 6e 64 61 72 64 20 47 43 43 20 68 61 73 20 61 andard GCC has a
2d80: 6c 69 67 6e 6f 66 28 64 6f 75 62 6c 65 29 20 3d lignof(double) =
2d90: 20 34 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 4.
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2db0: 20 20 20 20 20 20 2a 2f 0a 20 20 5f 5f 76 61 77 */. __vaw
2dc0: 6f 72 64 20 20 20 20 20 20 20 66 69 6c 6c 65 72 ord filler
2dd0: 31 3b 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 20 74 1;.#endif. /* t
2de0: 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 emporary storage
2df0: 20 66 6f 72 20 72 65 74 75 72 6e 20 76 61 6c 75 for return valu
2e00: 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 e */. union {.
2e10: 20 20 20 63 68 61 72 20 20 20 20 20 20 20 20 20 char
2e20: 20 20 20 20 20 20 20 5f 63 68 61 72 3b 0a 20 20 _char;.
2e30: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 20 20 signed char
2e40: 20 20 20 20 20 20 5f 73 63 68 61 72 3b 0a 20 20 _schar;.
2e50: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 unsigned char
2e60: 20 20 20 20 20 20 5f 75 63 68 61 72 3b 0a 20 20 _uchar;.
2e70: 20 20 73 68 6f 72 74 20 20 20 20 20 20 20 20 20 short
2e80: 20 20 20 20 20 20 5f 73 68 6f 72 74 3b 0a 20 20 _short;.
2e90: 20 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 unsigned short
2ea0: 20 20 20 20 20 20 5f 75 73 68 6f 72 74 3b 0a 20 _ushort;.
2eb0: 20 20 20 69 6e 74 20 20 20 20 20 20 20 20 20 20 int
2ec0: 20 20 20 20 20 20 20 5f 69 6e 74 3b 0a 20 20 20 _int;.
2ed0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 20 20 unsigned int
2ee0: 20 20 20 20 20 5f 75 69 6e 74 3b 0a 20 20 20 20 _uint;.
2ef0: 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20 20 20 long
2f00: 20 20 20 20 5f 6c 6f 6e 67 3b 0a 20 20 20 20 75 _long;. u
2f10: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 20 20 20 nsigned long
2f20: 20 20 20 5f 75 6c 6f 6e 67 3b 0a 23 69 66 20 21 _ulong;.#if !
2f30: 28 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 36 (defined(__mips6
2f40: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 4__) || defined(
2f50: 5f 5f 61 6c 70 68 61 5f 5f 29 29 20 26 26 20 64 __alpha__)) && d
2f60: 65 66 69 6e 65 64 28 48 41 56 45 5f 4c 4f 4e 47 efined(HAVE_LONG
2f70: 4c 4f 4e 47 29 0a 20 20 20 20 6c 6f 6e 67 20 6c LONG). long l
2f80: 6f 6e 67 20 20 20 20 20 20 20 20 20 20 20 5f 6c ong _l
2f90: 6f 6e 67 6c 6f 6e 67 3b 0a 20 20 20 20 75 6e 73 onglong;. uns
2fa0: 69 67 6e 65 64 20 6c 6f 6e 67 20 6c 6f 6e 67 20 igned long long
2fb0: 20 5f 75 6c 6f 6e 67 6c 6f 6e 67 3b 0a 23 65 6e _ulonglong;.#en
2fc0: 64 69 66 0a 20 20 20 20 66 6c 6f 61 74 20 20 20 dif. float
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 6c 6f _flo
2fe0: 61 74 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 20 at;. double
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 64 6f 75 _dou
3000: 62 6c 65 3b 0a 20 20 20 20 76 6f 69 64 2a 20 20 ble;. void*
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 70 74 _pt
3020: 72 3b 0a 20 20 20 20 5f 5f 76 61 77 6f 72 64 20 r;. __vaword
3030: 20 20 20 20 20 20 20 20 20 20 20 5f 77 6f 72 64 _word
3040: 73 5b 32 5d 3b 0a 20 20 7d 20 20 20 20 20 20 20 s[2];. }
3050: 20 20 20 20 20 20 20 74 6d 70 3b 0a 23 69 66 20 tmp;.#if
3060: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f defined(__i386__
3070: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d ) || defined(__m
3080: 36 38 6b 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 68k__) || (defin
3090: 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 ed(__sparc__) &&
30a0: 20 21 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 !defined(__spar
30b0: 63 36 34 5f 5f 29 29 20 7c 7c 20 64 65 66 69 6e c64__)) || defin
30c0: 65 64 28 5f 5f 68 70 70 61 5f 5f 29 20 7c 7c 20 ed(__hppa__) ||
30d0: 64 65 66 69 6e 65 64 28 5f 5f 6d 38 38 6b 5f 5f defined(__m88k__
30e0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 ) || defined(__i
30f0: 61 36 34 5f 5f 29 0a 20 20 76 6f 69 64 2a 20 20 a64__). void*
3100: 20 20 20 20 20 20 20 20 73 74 72 75 63 74 72 61 structra
3110: 64 64 72 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 ddr;.#endif.#if
3120: 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f defined(__mips__
3130: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d ) || defined(__m
3140: 69 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 ipsn32__) || def
3150: 69 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 ined(__mips64__)
3160: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 6c || defined(__al
3170: 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 pha__) || define
3180: 64 28 5f 5f 68 70 70 61 5f 5f 29 0a 20 20 6c 6f d(__hppa__). lo
3190: 6e 67 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d ng mem
31a0: 61 72 67 70 74 72 3b 0a 23 65 6e 64 69 66 0a 23 argptr;.#endif.#
31b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 68 70 70 if defined(__hpp
31c0: 61 5f 5f 29 0a 20 20 6c 6f 6e 67 20 20 20 20 20 a__). long
31d0: 20 20 20 20 20 20 66 61 72 67 5f 6f 66 66 73 65 farg_offse
31e0: 74 3b 0a 20 20 6c 6f 6e 67 20 20 20 20 20 20 20 t;. long
31f0: 20 20 20 20 64 61 72 67 5f 6f 66 66 73 65 74 3b darg_offset;
3200: 0a 20 20 66 6c 6f 61 74 20 20 20 20 20 20 20 20 . float
3210: 20 20 66 61 72 67 5b 34 5d 3b 0a 20 20 64 6f 75 farg[4];. dou
3220: 62 6c 65 20 20 20 20 20 20 20 20 20 64 61 72 67 ble darg
3230: 5b 32 5d 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 [2];.#endif.#if
3240: 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f defined(__mips__
3250: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f ) && !defined(__
3260: 6d 69 70 73 6e 33 32 5f 5f 29 0a 20 20 69 6e 74 mipsn32__). int
3270: 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 75 6d anum
3280: 3b 0a 20 20 66 6c 6f 61 74 20 20 20 20 20 20 20 ;. float
3290: 20 20 20 66 61 72 67 5b 32 5d 3b 0a 20 20 64 6f farg[2];. do
32a0: 75 62 6c 65 20 20 20 20 20 20 20 20 20 64 61 72 uble dar
32b0: 67 5b 32 5d 3b 0a 23 65 6e 64 69 66 0a 23 69 66 g[2];.#endif.#if
32c0: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e defined(__mipsn
32d0: 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 32__) || defined
32e0: 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 0a 20 20 69 (__mips64__). i
32f0: 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 61 6e nt an
3300: 75 6d 3b 0a 20 20 66 6c 6f 61 74 20 20 20 20 20 um;. float
3310: 20 20 20 20 20 66 61 72 67 5b 38 5d 3b 0a 20 20 farg[8];.
3320: 64 6f 75 62 6c 65 20 20 20 20 20 20 20 20 20 64 double d
3330: 61 72 67 5b 38 5d 3b 0a 23 65 6e 64 69 66 0a 23 arg[8];.#endif.#
3340: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 if defined(__spa
3350: 72 63 36 34 5f 5f 29 0a 20 20 69 6e 74 20 20 20 rc64__). int
3360: 20 20 20 20 20 20 20 20 20 61 6e 75 6d 3b 0a 20 anum;.
3370: 20 66 6c 6f 61 74 20 20 20 20 20 20 20 20 20 20 float
3380: 66 61 72 67 5b 31 36 5d 3b 0a 20 20 64 6f 75 62 farg[16];. doub
3390: 6c 65 20 20 20 20 20 20 20 20 20 64 61 72 67 5b le darg[
33a0: 31 36 5d 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 16];.#endif.#if
33b0: 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 defined(__rs6000
33c0: 5f 5f 29 0a 20 20 64 6f 75 62 6c 65 2a 20 20 20 __). double*
33d0: 20 20 20 20 20 6d 65 6d 66 61 72 67 70 74 72 3b memfargptr;
33e0: 0a 20 20 64 6f 75 62 6c 65 20 20 20 20 20 20 20 . double
33f0: 20 20 66 61 72 67 5b 31 33 5d 3b 0a 23 69 66 20 farg[13];.#if
3400: 21 28 64 65 66 69 6e 65 64 28 5f 41 49 58 29 20 !(defined(_AIX)
3410: 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 4d 41 || (defined(__MA
3420: 43 48 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 CH__) && defined
3430: 28 5f 5f 41 50 50 4c 45 5f 5f 29 29 29 0a 20 20 (__APPLE__))).
3440: 5f 5f 76 61 77 6f 72 64 20 20 20 20 20 20 20 72 __vaword r
3450: 65 67 61 72 67 5b 38 5d 3b 0a 20 20 75 6e 73 69 egarg[8];. unsi
3460: 67 6e 65 64 20 6c 6f 6e 67 20 20 73 61 70 74 72 gned long saptr
3470: 3b 0a 20 20 69 6e 74 20 20 20 20 20 20 20 20 20 ;. int
3480: 20 20 20 6f 6e 73 74 61 63 6b 3b 0a 23 65 6e 64 onstack;.#end
3490: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 if.#endif.#if de
34a0: 66 69 6e 65 64 28 5f 5f 73 33 39 30 5f 5f 29 0a fined(__s390__).
34b0: 20 20 66 6c 6f 61 74 2a 20 20 20 20 20 20 20 20 float*
34c0: 20 6d 65 6d 66 61 72 67 70 74 72 3b 0a 20 20 64 memfargptr;. d
34d0: 6f 75 62 6c 65 2a 20 20 20 20 20 20 20 20 6d 65 ouble* me
34e0: 6d 64 61 72 67 70 74 72 3b 0a 20 20 66 6c 6f 61 mdargptr;. floa
34f0: 74 20 20 20 20 20 20 20 20 20 20 66 61 72 67 5b t farg[
3500: 32 5d 3b 0a 20 20 64 6f 75 62 6c 65 20 20 20 20 2];. double
3510: 20 20 20 20 20 64 61 72 67 5b 32 5d 3b 0a 20 20 darg[2];.
3520: 5f 5f 76 61 77 6f 72 64 20 20 20 20 20 20 20 72 __vaword r
3530: 65 67 61 72 67 5b 35 5d 3b 0a 20 20 75 6e 73 69 egarg[5];. unsi
3540: 67 6e 65 64 20 6c 6f 6e 67 20 20 73 61 70 74 72 gned long saptr
3550: 3b 0a 20 20 69 6e 74 20 20 20 20 20 20 20 20 20 ;. int
3560: 20 20 20 6f 6e 73 74 61 63 6b 3b 0a 23 65 6e 64 onstack;.#end
3570: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f if.#if defined(_
3580: 5f 69 61 36 34 5f 5f 29 0a 20 20 5f 5f 76 61 77 _ia64__). __vaw
3590: 6f 72 64 2a 20 20 20 20 20 20 73 61 70 74 72 3b ord* saptr;
35a0: 0a 20 20 64 6f 75 62 6c 65 2a 20 20 20 20 20 20 . double*
35b0: 20 20 6d 65 6d 66 61 72 67 70 74 72 3b 0a 20 20 memfargptr;.
35c0: 64 6f 75 62 6c 65 20 20 20 20 20 20 20 20 20 66 double f
35d0: 61 72 67 5b 38 5d 3b 0a 23 65 6e 64 69 66 0a 23 arg[8];.#endif.#
35e0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 if defined(__x86
35f0: 5f 36 34 5f 5f 29 0a 20 20 64 6f 75 62 6c 65 2a _64__). double*
3600: 20 20 20 20 20 20 20 20 6d 65 6d 66 61 72 67 70 memfargp
3610: 74 72 3b 0a 20 20 64 6f 75 62 6c 65 20 20 20 20 tr;. double
3620: 20 20 20 20 20 66 61 72 67 5b 38 5d 3b 0a 20 20 farg[8];.
3630: 5f 5f 76 61 77 6f 72 64 2a 20 20 20 20 20 20 6d __vaword* m
3640: 65 6d 69 61 72 67 70 74 72 3b 0a 20 20 5f 5f 76 emiargptr;. __v
3650: 61 77 6f 72 64 20 20 20 20 20 20 20 69 61 72 67 aword iarg
3660: 5b 36 5d 3b 0a 23 65 6e 64 69 66 0a 7d 20 5f 5f [6];.#endif.} __
3670: 76 61 5f 61 6c 69 73 74 3b 0a 0a 74 79 70 65 64 va_alist;..typed
3680: 65 66 20 5f 5f 76 61 5f 61 6c 69 73 74 2a 20 76 ef __va_alist* v
3690: 61 5f 61 6c 69 73 74 3b 0a 0a 0a 2f 2a 0a 20 2a a_alist;.../*. *
36a0: 20 44 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 Definition of t
36b0: 68 65 20 76 61 5f 73 74 61 72 74 5f 78 78 78 20 he va_start_xxx
36c0: 6d 61 63 72 6f 73 2e 0a 20 2a 2f 0a 23 64 65 66 macros.. */.#def
36d0: 69 6e 65 20 5f 5f 56 41 5f 53 54 41 52 54 5f 46 ine __VA_START_F
36e0: 4c 41 47 53 20 20 5c 0a 20 20 5f 5f 56 41 5f 53 LAGS \. __VA_S
36f0: 54 52 55 43 54 5f 52 45 54 55 52 4e 20 7c 20 5f TRUCT_RETURN | _
3700: 5f 56 41 5f 46 4c 4f 41 54 5f 52 45 54 55 52 4e _VA_FLOAT_RETURN
3710: 20 7c 20 5f 5f 56 41 5f 53 54 52 55 43 54 5f 41 | __VA_STRUCT_A
3720: 52 47 53 20 7c 20 5f 5f 56 41 5f 46 4c 4f 41 54 RGS | __VA_FLOAT
3730: 5f 41 52 47 53 20 7c 20 5f 5f 56 41 5f 49 4e 54 _ARGS | __VA_INT
3740: 45 47 45 52 53 20 7c 20 5f 5f 56 41 5f 43 4c 45 EGERS | __VA_CLE
3750: 41 4e 55 50 0a 23 64 65 66 69 6e 65 20 5f 5f 76 ANUP.#define __v
3760: 61 5f 73 74 61 72 74 28 4c 49 53 54 2c 52 45 54 a_start(LIST,RET
3770: 54 59 50 45 29 20 20 5c 0a 20 20 28 28 4c 49 53 TYPE) \. ((LIS
3780: 54 29 2d 3e 66 6c 61 67 73 20 3d 20 5f 5f 56 41 T)->flags = __VA
3790: 5f 53 54 41 52 54 5f 46 4c 41 47 53 2c 09 09 09 _START_FLAGS,...
37a0: 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 72 ..\. (LIST)->r
37b0: 74 79 70 65 20 3d 20 28 52 45 54 54 59 50 45 29 type = (RETTYPE)
37c0: 09 09 09 09 09 09 5c 0a 20 20 29 0a 23 64 65 66 ......\. ).#def
37d0: 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 76 6f 69 ine va_start_voi
37e0: 64 28 4c 49 53 54 29 09 20 5f 5f 76 61 5f 73 74 d(LIST). __va_st
37f0: 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 76 6f 69 art(LIST,__VAvoi
3800: 64 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 73 74 d).#define va_st
3810: 61 72 74 5f 63 68 61 72 28 4c 49 53 54 29 09 20 art_char(LIST).
3820: 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 53 54 2c __va_start(LIST,
3830: 5f 5f 56 41 63 68 61 72 29 0a 23 64 65 66 69 6e __VAchar).#defin
3840: 65 20 76 61 5f 73 74 61 72 74 5f 73 63 68 61 72 e va_start_schar
3850: 28 4c 49 53 54 29 09 20 5f 5f 76 61 5f 73 74 61 (LIST). __va_sta
3860: 72 74 28 4c 49 53 54 2c 5f 5f 56 41 73 63 68 61 rt(LIST,__VAscha
3870: 72 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 73 74 r).#define va_st
3880: 61 72 74 5f 75 63 68 61 72 28 4c 49 53 54 29 09 art_uchar(LIST).
3890: 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 53 54 __va_start(LIST
38a0: 2c 5f 5f 56 41 75 63 68 61 72 29 0a 23 64 65 66 ,__VAuchar).#def
38b0: 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 73 68 6f ine va_start_sho
38c0: 72 74 28 4c 49 53 54 29 09 20 5f 5f 76 61 5f 73 rt(LIST). __va_s
38d0: 74 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 73 68 tart(LIST,__VAsh
38e0: 6f 72 74 29 0a 23 64 65 66 69 6e 65 20 76 61 5f ort).#define va_
38f0: 73 74 61 72 74 5f 75 73 68 6f 72 74 28 4c 49 53 start_ushort(LIS
3900: 54 29 09 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c T). __va_start(L
3910: 49 53 54 2c 5f 5f 56 41 75 73 68 6f 72 74 29 0a IST,__VAushort).
3920: 23 64 65 66 69 6e 65 20 76 61 5f 73 74 61 72 74 #define va_start
3930: 5f 69 6e 74 28 4c 49 53 54 29 09 20 5f 5f 76 61 _int(LIST). __va
3940: 5f 73 74 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 _start(LIST,__VA
3950: 69 6e 74 29 0a 23 64 65 66 69 6e 65 20 76 61 5f int).#define va_
3960: 73 74 61 72 74 5f 75 69 6e 74 28 4c 49 53 54 29 start_uint(LIST)
3970: 09 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 53 . __va_start(LIS
3980: 54 2c 5f 5f 56 41 75 69 6e 74 29 0a 23 64 65 66 T,__VAuint).#def
3990: 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 6c 6f 6e ine va_start_lon
39a0: 67 28 4c 49 53 54 29 09 20 5f 5f 76 61 5f 73 74 g(LIST). __va_st
39b0: 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 6c 6f 6e art(LIST,__VAlon
39c0: 67 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 73 74 g).#define va_st
39d0: 61 72 74 5f 75 6c 6f 6e 67 28 4c 49 53 54 29 09 art_ulong(LIST).
39e0: 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 53 54 __va_start(LIST
39f0: 2c 5f 5f 56 41 75 6c 6f 6e 67 29 0a 23 64 65 66 ,__VAulong).#def
3a00: 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 6c 6f 6e ine va_start_lon
3a10: 67 6c 6f 6e 67 28 4c 49 53 54 29 09 20 5f 5f 76 glong(LIST). __v
3a20: 61 5f 73 74 61 72 74 28 4c 49 53 54 2c 5f 5f 56 a_start(LIST,__V
3a30: 41 6c 6f 6e 67 6c 6f 6e 67 29 0a 23 64 65 66 69 Alonglong).#defi
3a40: 6e 65 20 76 61 5f 73 74 61 72 74 5f 75 6c 6f 6e ne va_start_ulon
3a50: 67 6c 6f 6e 67 28 4c 49 53 54 29 20 5f 5f 76 61 glong(LIST) __va
3a60: 5f 73 74 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 _start(LIST,__VA
3a70: 75 6c 6f 6e 67 6c 6f 6e 67 29 0a 23 64 65 66 69 ulonglong).#defi
3a80: 6e 65 20 76 61 5f 73 74 61 72 74 5f 66 6c 6f 61 ne va_start_floa
3a90: 74 28 4c 49 53 54 29 09 20 5f 5f 76 61 5f 73 74 t(LIST). __va_st
3aa0: 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 66 6c 6f art(LIST,__VAflo
3ab0: 61 74 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 73 at).#define va_s
3ac0: 74 61 72 74 5f 64 6f 75 62 6c 65 28 4c 49 53 54 tart_double(LIST
3ad0: 29 09 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 ). __va_start(LI
3ae0: 53 54 2c 5f 5f 56 41 64 6f 75 62 6c 65 29 0a 23 ST,__VAdouble).#
3af0: 64 65 66 69 6e 65 20 76 61 5f 73 74 61 72 74 5f define va_start_
3b00: 70 74 72 28 4c 49 53 54 2c 54 59 50 45 29 09 20 ptr(LIST,TYPE).
3b10: 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 53 54 2c __va_start(LIST,
3b20: 5f 5f 56 41 76 6f 69 64 70 29 0a 0a 2f 2a 0a 20 __VAvoidp)../*.
3b30: 2a 20 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 * va_start_struc
3b40: 74 3a 20 50 72 65 70 61 72 69 6e 67 20 73 74 72 t: Preparing str
3b50: 75 63 74 75 72 65 20 72 65 74 75 72 6e 2e 0a 20 ucture return..
3b60: 2a 2f 0a 23 64 65 66 69 6e 65 20 76 61 5f 73 74 */.#define va_st
3b70: 61 72 74 5f 73 74 72 75 63 74 28 4c 49 53 54 2c art_struct(LIST,
3b80: 54 59 50 45 2c 54 59 50 45 5f 53 50 4c 49 54 54 TYPE,TYPE_SPLITT
3b90: 41 42 4c 45 29 20 20 5c 0a 20 20 5f 76 61 5f 73 ABLE) \. _va_s
3ba0: 74 61 72 74 5f 73 74 72 75 63 74 28 4c 49 53 54 tart_struct(LIST
3bb0: 2c 73 69 7a 65 6f 66 28 54 59 50 45 29 2c 5f 5f ,sizeof(TYPE),__
3bc0: 56 41 5f 61 6c 69 67 6e 6f 66 28 54 59 50 45 29 VA_alignof(TYPE)
3bd0: 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 ,TYPE_SPLITTABLE
3be0: 29 0a 2f 2a 20 5f 76 61 5f 73 74 61 72 74 5f 73 )./* _va_start_s
3bf0: 74 72 75 63 74 28 29 20 69 73 20 6c 69 6b 65 20 truct() is like
3c00: 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 28 va_start_struct(
3c10: 29 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 79 ), except that y
3c20: 6f 75 20 70 61 73 73 0a 20 2a 20 74 68 65 20 74 ou pass. * the t
3c30: 79 70 65 27 73 20 73 69 7a 65 20 61 6e 64 20 61 ype's size and a
3c40: 6c 69 67 6e 6d 65 6e 74 20 69 6e 73 74 65 61 64 lignment instead
3c50: 20 6f 66 20 74 68 65 20 74 79 70 65 20 69 74 73 of the type its
3c60: 65 6c 66 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 elf.. */.#define
3c70: 20 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 _va_start_struc
3c80: 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 t(LIST,TYPE_SIZE
3c90: 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 54 59 50 45 ,TYPE_ALIGN,TYPE
3ca0: 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a _SPLITTABLE) \.
3cb0: 20 20 28 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 (__va_start(LI
3cc0: 53 54 2c 5f 5f 56 41 73 74 72 75 63 74 29 2c 09 ST,__VAstruct),.
3cd0: 09 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 .....\. (LIST)
3ce0: 2d 3e 72 73 69 7a 65 20 3d 20 28 54 59 50 45 5f ->rsize = (TYPE_
3cf0: 53 49 5a 45 29 2c 09 09 09 09 09 09 5c 0a 20 20 SIZE),......\.
3d00: 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 ((LIST)->flags
3d10: 26 20 5f 5f 56 41 5f 53 55 4e 50 52 4f 43 43 5f & __VA_SUNPROCC_
3d20: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 09 09 09 STRUCT_RETURN...
3d30: 09 5c 0a 20 20 20 20 3f 20 5f 5f 76 61 5f 73 74 .\. ? __va_st
3d40: 61 72 74 5f 73 74 72 75 63 74 32 28 4c 49 53 54 art_struct2(LIST
3d50: 29 09 09 09 09 09 09 5c 0a 20 20 20 20 3a 20 28 )......\. : (
3d60: 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 26 20 (LIST)->flags &
3d70: 28 5f 5f 56 41 5f 50 43 43 5f 53 54 52 55 43 54 (__VA_PCC_STRUCT
3d80: 5f 52 45 54 55 52 4e 20 7c 20 5f 5f 56 41 5f 53 _RETURN | __VA_S
3d90: 55 4e 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 UNCC_STRUCT_RETU
3da0: 52 4e 29 20 5c 0a 20 20 20 20 20 20 20 3f 20 28 RN) \. ? (
3db0: 28 54 59 50 45 5f 53 49 5a 45 29 20 3c 3d 20 73 (TYPE_SIZE) <= s
3dc0: 69 7a 65 6f 66 28 5f 5f 76 61 5f 73 74 72 75 63 izeof(__va_struc
3dd0: 74 5f 62 75 66 66 65 72 29 20 7c 7c 20 5f 5f 76 t_buffer) || __v
3de0: 61 5f 65 72 72 6f 72 32 28 54 59 50 45 5f 53 49 a_error2(TYPE_SI
3df0: 5a 45 29 2c 20 5c 0a 20 20 20 20 20 20 20 20 20 ZE), \.
3e00: 20 28 4c 49 53 54 29 2d 3e 72 61 64 64 72 20 3d (LIST)->raddr =
3e10: 20 26 5f 5f 76 61 5f 73 74 72 75 63 74 5f 62 75 &__va_struct_bu
3e20: 66 66 65 72 2c 09 09 09 09 5c 0a 20 20 20 20 20 ffer,....\.
3e30: 20 20 20 20 20 30 09 09 09 09 09 09 09 09 5c 0a 0........\.
3e40: 20 20 20 20 20 20 20 20 20 29 09 09 09 09 09 09 )......
3e50: 09 09 5c 0a 20 20 20 20 20 20 20 3a 20 28 28 28 ..\. : (((
3e60: 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f LIST)->flags & _
3e70: 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 52 55 43 54 _VA_SMALL_STRUCT
3e80: 5f 52 45 54 55 52 4e 29 09 09 09 5c 0a 20 20 20 _RETURN)...\.
3e90: 20 20 20 20 20 20 20 26 26 20 5f 5f 76 61 5f 72 && __va_r
3ea0: 65 67 5f 73 74 72 75 63 74 5f 72 65 74 75 72 6e eg_struct_return
3eb0: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
3ec0: 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 TYPE_SPLITTABLE)
3ed0: 09 5c 0a 20 20 20 20 20 20 20 20 20 20 3f 20 28 .\. ? (
3ee0: 28 4c 49 53 54 29 2d 3e 72 61 64 64 72 20 3d 20 (LIST)->raddr =
3ef0: 26 28 4c 49 53 54 29 2d 3e 74 6d 70 2c 09 09 09 &(LIST)->tmp,...
3f00: 09 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .\.
3f10: 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 __va_start_struc
3f20: 74 31 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a t1(LIST,TYPE_SIZ
3f30: 45 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 54 59 50 E,TYPE_ALIGN,TYP
3f40: 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 5c 0a E_SPLITTABLE) \.
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 29 09 09 09 )...
3f60: 09 09 09 09 09 5c 0a 20 20 20 20 20 20 20 20 20 .....\.
3f70: 20 3a 20 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 : __va_start_st
3f80: 72 75 63 74 32 28 4c 49 53 54 29 09 09 09 09 09 ruct2(LIST).....
3f90: 5c 0a 20 20 29 29 20 20 29 20 20 29 0a 2f 2a 20 \. )) ) )./*
3fa0: 44 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 Determines wheth
3fb0: 65 72 20 61 20 73 74 72 75 63 74 75 72 65 20 69 er a structure i
3fc0: 73 20 72 65 74 75 72 6e 65 64 20 69 6e 20 72 65 s returned in re
3fd0: 67 69 73 74 65 72 73 2c 0a 20 2a 20 64 65 70 65 gisters,. * depe
3fe0: 6e 64 69 6e 67 20 6f 6e 20 69 74 73 20 73 69 7a nding on its siz
3ff0: 65 20 61 6e 64 20 69 74 73 20 77 6f 72 64 2d 73 e and its word-s
4000: 70 6c 69 74 74 61 62 6c 65 20 66 6c 61 67 2e 0a plittable flag..
4010: 20 2a 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64 */.#if (defined
4020: 28 5f 5f 69 33 38 36 5f 5f 29 20 26 26 20 64 65 (__i386__) && de
4030: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 29 0a 23 fined(_WIN32)).#
4040: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 72 65 67 5f define __va_reg_
4050: 73 74 72 75 63 74 5f 72 65 74 75 72 6e 28 4c 49 struct_return(LI
4060: 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 ST,TYPE_SIZE,TYP
4070: 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 5c E_SPLITTABLE) \
4080: 0a 20 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 . ((TYPE_SIZE)
4090: 3d 3d 20 31 20 7c 7c 20 28 54 59 50 45 5f 53 49 == 1 || (TYPE_SI
40a0: 5a 45 29 20 3d 3d 20 32 20 7c 7c 20 28 54 59 50 ZE) == 2 || (TYP
40b0: 45 5f 53 49 5a 45 29 20 3d 3d 20 34 09 09 5c 0a E_SIZE) == 4..\.
40c0: 20 20 20 7c 7c 20 28 28 54 59 50 45 5f 53 49 5a || ((TYPE_SIZ
40d0: 45 29 20 3d 3d 20 38 09 09 09 09 09 09 09 5c 0a E) == 8.......\.
40e0: 20 20 20 20 20 20 20 26 26 20 28 28 28 4c 49 53 && (((LIS
40f0: 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f 5f 56 41 T)->flags & __VA
4100: 5f 4d 53 56 43 5f 53 54 52 55 43 54 5f 52 45 54 _MSVC_STRUCT_RET
4110: 55 52 4e 29 09 09 09 5c 0a 20 20 20 20 20 20 20 URN)...\.
4120: 20 20 20 20 7c 7c 20 28 28 54 59 50 45 5f 53 50 || ((TYPE_SP
4130: 4c 49 54 54 41 42 4c 45 29 09 09 09 09 09 5c 0a LITTABLE).....\.
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 &
4150: 26 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 & ((LIST)->flags
4160: 20 26 20 5f 5f 56 41 5f 47 43 43 5f 53 54 52 55 & __VA_GCC_STRU
4170: 43 54 5f 52 45 54 55 52 4e 29 09 09 5c 0a 20 20 CT_RETURN)..\.
4180: 29 20 20 20 29 20 20 20 29 20 20 20 29 0a 2f 2a ) ) ) )./*
4190: 20 54 75 72 6e 20 6f 6e 20 5f 5f 56 41 5f 52 45 Turn on __VA_RE
41a0: 47 49 53 54 45 52 5f 53 54 52 55 43 54 5f 52 45 GISTER_STRUCT_RE
41b0: 54 55 52 4e 20 69 66 20 5f 5f 56 41 5f 53 4d 41 TURN if __VA_SMA
41c0: 4c 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e LL_STRUCT_RETURN
41d0: 20 77 61 73 20 73 65 74 0a 20 2a 20 61 6e 64 20 was set. * and
41e0: 74 68 65 20 73 74 72 75 63 74 20 77 69 6c 6c 20 the struct will
41f0: 61 63 74 75 61 6c 6c 79 20 62 65 20 72 65 74 75 actually be retu
4200: 72 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 rned in register
4210: 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f s.. */.#define _
4220: 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 _va_start_struct
4230: 31 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 1(LIST,TYPE_SIZE
4240: 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 54 59 50 45 ,TYPE_ALIGN,TYPE
4250: 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a _SPLITTABLE) \.
4260: 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 ((LIST)->flags
4270: 20 7c 3d 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 |= __VA_REGISTE
4280: 52 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 2c R_STRUCT_RETURN,
4290: 20 30 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 0).#endif.#if (
42a0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f defined(__i386__
42b0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 ) && !defined(_W
42c0: 49 4e 33 32 29 29 20 7c 7c 20 64 65 66 69 6e 65 IN32)) || define
42d0: 64 28 5f 5f 6d 36 38 6b 5f 5f 29 20 7c 7c 20 64 d(__m68k__) || d
42e0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 efined(__arm__)
42f0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 || defined(__rs6
4300: 30 30 30 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 000__) || define
4310: 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 7c 7c d(__convex__) ||
4320: 20 64 65 66 69 6e 65 64 28 5f 5f 73 33 39 30 5f defined(__s390_
4330: 5f 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f _).#define __va_
4340: 72 65 67 5f 73 74 72 75 63 74 5f 72 65 74 75 72 reg_struct_retur
4350: 6e 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 n(LIST,TYPE_SIZE
4360: 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 ,TYPE_SPLITTABLE
4370: 29 20 20 5c 0a 20 20 28 28 54 59 50 45 5f 53 49 ) \. ((TYPE_SI
4380: 5a 45 29 20 3d 3d 20 31 20 7c 7c 20 28 54 59 50 ZE) == 1 || (TYP
4390: 45 5f 53 49 5a 45 29 20 3d 3d 20 32 20 7c 7c 20 E_SIZE) == 2 ||
43a0: 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 34 (TYPE_SIZE) == 4
43b0: 09 09 5c 0a 20 20 20 7c 7c 20 28 28 54 59 50 45 ..\. || ((TYPE
43c0: 5f 53 49 5a 45 29 20 3d 3d 20 38 20 26 26 20 28 _SIZE) == 8 && (
43d0: 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 TYPE_SPLITTABLE)
43e0: 09 09 09 09 5c 0a 20 20 20 20 20 20 20 26 26 20 ....\. &&
43f0: 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 26 ((LIST)->flags &
4400: 20 5f 5f 56 41 5f 47 43 43 5f 53 54 52 55 43 54 __VA_GCC_STRUCT
4410: 5f 52 45 54 55 52 4e 29 09 09 09 5c 0a 20 20 29 _RETURN)...\. )
4420: 20 20 20 29 0a 2f 2a 20 54 75 72 6e 20 6f 6e 20 )./* Turn on
4430: 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 5f 53 54 __VA_REGISTER_ST
4440: 52 55 43 54 5f 52 45 54 55 52 4e 20 69 66 20 5f RUCT_RETURN if _
4450: 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 52 55 43 54 _VA_SMALL_STRUCT
4460: 5f 52 45 54 55 52 4e 20 77 61 73 20 73 65 74 0a _RETURN was set.
4470: 20 2a 20 61 6e 64 20 74 68 65 20 73 74 72 75 63 * and the struc
4480: 74 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 t will actually
4490: 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 72 be returned in r
44a0: 65 67 69 73 74 65 72 73 2e 0a 20 2a 2f 0a 23 64 egisters.. */.#d
44b0: 65 66 69 6e 65 20 5f 5f 76 61 5f 73 74 61 72 74 efine __va_start
44c0: 5f 73 74 72 75 63 74 31 28 4c 49 53 54 2c 54 59 _struct1(LIST,TY
44d0: 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 PE_SIZE,TYPE_ALI
44e0: 47 4e 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 42 GN,TYPE_SPLITTAB
44f0: 4c 45 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 LE) \. ((LIST)
4500: 2d 3e 66 6c 61 67 73 20 7c 3d 20 5f 5f 56 41 5f ->flags |= __VA_
4510: 52 45 47 49 53 54 45 52 5f 53 54 52 55 43 54 5f REGISTER_STRUCT_
4520: 52 45 54 55 52 4e 2c 20 30 29 0a 23 65 6e 64 69 RETURN, 0).#endi
4530: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
4540: 61 6c 70 68 61 5f 5f 29 0a 23 64 65 66 69 6e 65 alpha__).#define
4550: 20 5f 5f 76 61 5f 72 65 67 5f 73 74 72 75 63 74 __va_reg_struct
4560: 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 54 59 50 _return(LIST,TYP
4570: 45 5f 53 49 5a 45 2c 54 59 50 45 5f 53 50 4c 49 E_SIZE,TYPE_SPLI
4580: 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 28 28 54 TTABLE) \. ((T
4590: 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 31 20 7c YPE_SIZE) == 1 |
45a0: 7c 20 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d | (TYPE_SIZE) ==
45b0: 20 32 20 7c 7c 20 28 54 59 50 45 5f 53 49 5a 45 2 || (TYPE_SIZE
45c0: 29 20 3d 3d 20 34 20 7c 7c 20 28 54 59 50 45 5f ) == 4 || (TYPE_
45d0: 53 49 5a 45 29 20 3d 3d 20 38 09 5c 0a 20 20 20 SIZE) == 8.\.
45e0: 7c 7c 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 || ((TYPE_SIZE)
45f0: 3d 3d 20 31 36 20 26 26 20 28 54 59 50 45 5f 53 == 16 && (TYPE_S
4600: 50 4c 49 54 54 41 42 4c 45 29 09 09 09 09 5c 0a PLITTABLE)....\.
4610: 20 20 20 20 20 20 20 26 26 20 28 28 4c 49 53 54 && ((LIST
4620: 29 2d 3e 66 6c 61 67 73 20 26 20 5f 5f 56 41 5f )->flags & __VA_
4630: 47 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 52 GCC_STRUCT_RETUR
4640: 4e 29 09 09 09 5c 0a 20 20 29 20 20 20 29 0a 2f N)...\. ) )./
4650: 2a 20 54 75 72 6e 20 6f 6e 20 5f 5f 56 41 5f 52 * Turn on __VA_R
4660: 45 47 49 53 54 45 52 5f 53 54 52 55 43 54 5f 52 EGISTER_STRUCT_R
4670: 45 54 55 52 4e 20 69 66 20 5f 5f 56 41 5f 53 4d ETURN if __VA_SM
4680: 41 4c 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 52 ALL_STRUCT_RETUR
4690: 4e 20 77 61 73 20 73 65 74 0a 20 2a 20 61 6e 64 N was set. * and
46a0: 20 74 68 65 20 73 74 72 75 63 74 20 77 69 6c 6c the struct will
46b0: 20 61 63 74 75 61 6c 6c 79 20 62 65 20 72 65 74 actually be ret
46c0: 75 72 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 urned in registe
46d0: 72 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 rs.. */.#define
46e0: 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 __va_start_struc
46f0: 74 31 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a t1(LIST,TYPE_SIZ
4700: 45 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 54 59 50 E,TYPE_ALIGN,TYP
4710: 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 5c E_SPLITTABLE) \
4720: 0a 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 . ((LIST)->flag
4730: 73 20 7c 3d 20 5f 5f 56 41 5f 52 45 47 49 53 54 s |= __VA_REGIST
4740: 45 52 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e ER_STRUCT_RETURN
4750: 2c 20 30 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 , 0).#endif.#if
4760: 64 65 66 69 6e 65 64 28 5f 5f 68 70 70 61 5f 5f defined(__hppa__
4770: 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 72 ).#define __va_r
4780: 65 67 5f 73 74 72 75 63 74 5f 72 65 74 75 72 6e eg_struct_return
4790: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
47a0: 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 TYPE_SPLITTABLE)
47b0: 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 2d 3e 66 \. ((LIST)->f
47c0: 6c 61 67 73 20 26 20 5f 5f 56 41 5f 4f 4c 44 47 lags & __VA_OLDG
47d0: 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e CC_STRUCT_RETURN
47e0: 09 09 09 09 5c 0a 20 20 20 3f 20 28 28 54 59 50 ....\. ? ((TYP
47f0: 45 5f 53 49 5a 45 29 20 3d 3d 20 31 20 7c 7c 20 E_SIZE) == 1 ||
4800: 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 32 (TYPE_SIZE) == 2
4810: 20 7c 7c 20 28 54 59 50 45 5f 53 49 5a 45 29 20 || (TYPE_SIZE)
4820: 3d 3d 20 34 29 09 09 5c 0a 20 20 20 3a 20 28 28 == 4)..\. : ((
4830: 54 59 50 45 5f 53 49 5a 45 29 20 3c 3d 20 38 29 TYPE_SIZE) <= 8)
4840: 09 09 09 09 09 09 09 5c 0a 20 20 29 0a 2f 2a 20 .......\. )./*
4850: 54 65 73 74 20 62 6f 74 68 20 5f 5f 56 41 5f 4f Test both __VA_O
4860: 4c 44 47 43 43 5f 53 54 52 55 43 54 5f 52 45 54 LDGCC_STRUCT_RET
4870: 55 52 4e 20 61 6e 64 20 5f 5f 56 41 5f 53 4d 41 URN and __VA_SMA
4880: 4c 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e LL_STRUCT_RETURN
4890: 20 61 74 20 72 75 6e 20 74 69 6d 65 2e 20 2a 2f at run time. */
48a0: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 73 74 .#define __va_st
48b0: 61 72 74 5f 73 74 72 75 63 74 31 28 4c 49 53 54 art_struct1(LIST
48c0: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
48d0: 41 4c 49 47 4e 2c 54 59 50 45 5f 53 50 4c 49 54 ALIGN,TYPE_SPLIT
48e0: 54 41 42 4c 45 29 20 20 5c 0a 20 20 30 0a 23 65 TABLE) \. 0.#e
48f0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
4900: 28 5f 5f 6d 69 70 73 5f 5f 29 20 26 26 20 21 64 (__mips__) && !d
4910: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 efined(__mipsn32
4920: 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 __) || (defined(
4930: 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 __sparc__) && !d
4940: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 efined(__sparc64
4950: 5f 5f 29 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 __)) || defined(
4960: 5f 5f 6d 38 38 6b 5f 5f 29 0a 23 64 65 66 69 6e __m88k__).#defin
4970: 65 20 5f 5f 76 61 5f 72 65 67 5f 73 74 72 75 63 e __va_reg_struc
4980: 74 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 54 59 t_return(LIST,TY
4990: 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 53 50 4c PE_SIZE,TYPE_SPL
49a0: 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 28 28 ITTABLE) \. ((
49b0: 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 31 20 TYPE_SIZE) == 1
49c0: 7c 7c 20 28 54 59 50 45 5f 53 49 5a 45 29 20 3d || (TYPE_SIZE) =
49d0: 3d 20 32 20 7c 7c 20 28 54 59 50 45 5f 53 49 5a = 2 || (TYPE_SIZ
49e0: 45 29 20 3d 3d 20 34 29 0a 2f 2a 20 54 65 73 74 E) == 4)./* Test
49f0: 20 5f 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 52 55 __VA_SMALL_STRU
4a00: 43 54 5f 52 45 54 55 52 4e 20 69 6e 73 74 65 61 CT_RETURN instea
4a10: 64 20 6f 66 20 5f 5f 56 41 5f 52 45 47 49 53 54 d of __VA_REGIST
4a20: 45 52 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e ER_STRUCT_RETURN
4a30: 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 . */.#if defined
4a40: 28 5f 5f 6d 69 70 73 5f 5f 29 20 26 26 20 21 64 (__mips__) && !d
4a50: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 efined(__mipsn32
4a60: 5f 5f 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 __).#define __va
4a70: 5f 73 74 61 72 74 5f 73 74 72 75 63 74 31 28 4c _start_struct1(L
4a80: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
4a90: 50 45 5f 41 4c 49 47 4e 2c 54 59 50 45 5f 53 50 PE_ALIGN,TYPE_SP
4aa0: 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 28 LITTABLE) \. (
4ab0: 28 4c 49 53 54 29 2d 3e 61 6e 75 6d 2b 2b 2c 09 (LIST)->anum++,.
4ac0: 09 09 09 09 09 09 5c 0a 20 20 20 30 09 09 09 09 ......\. 0....
4ad0: 09 09 09 09 09 5c 0a 20 20 29 0a 23 65 6c 73 65 .....\. ).#else
4ae0: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 73 74 .#define __va_st
4af0: 61 72 74 5f 73 74 72 75 63 74 31 28 4c 49 53 54 art_struct1(LIST
4b00: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
4b10: 41 4c 49 47 4e 2c 54 59 50 45 5f 53 50 4c 49 54 ALIGN,TYPE_SPLIT
4b20: 54 41 42 4c 45 29 20 20 5c 0a 20 20 30 0a 23 65 TABLE) \. 0.#e
4b30: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 ndif.#endif.#if
4b40: 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 defined(__mipsn3
4b50: 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 2__) || defined(
4b60: 5f 5f 6d 69 70 73 36 34 5f 5f 29 0a 23 64 65 66 __mips64__).#def
4b70: 69 6e 65 20 5f 5f 76 61 5f 72 65 67 5f 73 74 72 ine __va_reg_str
4b80: 75 63 74 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c uct_return(LIST,
4b90: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 53 TYPE_SIZE,TYPE_S
4ba0: 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 PLITTABLE) \.
4bb0: 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 26 ((LIST)->flags &
4bc0: 20 5f 5f 56 41 5f 47 43 43 5f 53 54 52 55 43 54 __VA_GCC_STRUCT
4bd0: 5f 52 45 54 55 52 4e 09 09 09 09 5c 0a 20 20 20 _RETURN....\.
4be0: 3f 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 3d ? ((TYPE_SIZE) =
4bf0: 3d 20 31 20 7c 7c 20 28 54 59 50 45 5f 53 49 5a = 1 || (TYPE_SIZ
4c00: 45 29 20 3d 3d 20 32 20 7c 7c 20 28 54 59 50 45 E) == 2 || (TYPE
4c10: 5f 53 49 5a 45 29 20 3d 3d 20 34 20 7c 7c 20 28 _SIZE) == 4 || (
4c20: 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 38 29 TYPE_SIZE) == 8)
4c30: 20 5c 0a 20 20 20 3a 20 28 28 54 59 50 45 5f 53 \. : ((TYPE_S
4c40: 49 5a 45 29 20 3c 3d 20 31 36 29 09 09 09 09 09 IZE) <= 16).....
4c50: 09 5c 0a 20 20 29 0a 2f 2a 20 54 75 72 6e 20 6f .\. )./* Turn o
4c60: 6e 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 5f n __VA_REGISTER_
4c70: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 69 66 STRUCT_RETURN if
4c80: 20 5f 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 52 55 __VA_SMALL_STRU
4c90: 43 54 5f 52 45 54 55 52 4e 20 77 61 73 20 73 65 CT_RETURN was se
4ca0: 74 0a 20 2a 20 61 6e 64 20 74 68 65 20 73 74 72 t. * and the str
4cb0: 75 63 74 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c uct will actuall
4cc0: 79 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e y be returned in
4cd0: 20 72 65 67 69 73 74 65 72 73 2e 20 41 6c 73 6f registers. Also
4ce0: 20 74 75 72 6e 20 6f 6e 0a 20 2a 20 5f 5f 56 41 turn on. * __VA
4cf0: 5f 52 45 47 49 53 54 45 52 5f 46 4c 4f 41 54 53 _REGISTER_FLOATS
4d00: 54 52 55 43 54 5f 52 45 54 55 52 4e 20 6f 72 20 TRUCT_RETURN or
4d10: 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 5f 44 4f __VA_REGISTER_DO
4d20: 55 42 4c 45 53 54 52 55 43 54 5f 52 45 54 55 52 UBLESTRUCT_RETUR
4d30: 4e 20 69 66 0a 20 2a 20 74 68 65 20 73 74 72 75 N if. * the stru
4d40: 63 74 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 ct will be retur
4d50: 6e 65 64 20 69 6e 20 66 6c 6f 61 74 69 6e 67 2d ned in floating-
4d60: 70 6f 69 6e 74 20 72 65 67 69 73 74 65 72 73 2e point registers.
4d70: 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 . */.#define __v
4d80: 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 31 28 a_start_struct1(
4d90: 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 LIST,TYPE_SIZE,T
4da0: 59 50 45 5f 41 4c 49 47 4e 2c 54 59 50 45 5f 53 YPE_ALIGN,TYPE_S
4db0: 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 PLITTABLE) \.
4dc0: 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 7c ((LIST)->flags |
4dd0: 3d 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 5f = __VA_REGISTER_
4de0: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 2c 09 09 STRUCT_RETURN,..
4df0: 09 09 5c 0a 20 20 20 28 54 59 50 45 5f 41 4c 49 ..\. (TYPE_ALI
4e00: 47 4e 29 20 3d 3d 20 73 69 7a 65 6f 66 28 66 6c GN) == sizeof(fl
4e10: 6f 61 74 29 20 26 26 20 28 54 59 50 45 5f 53 50 oat) && (TYPE_SP
4e20: 4c 49 54 54 41 42 4c 45 29 09 09 09 09 5c 0a 20 LITTABLE)....\.
4e30: 20 20 20 26 26 20 28 28 54 59 50 45 5f 53 49 5a && ((TYPE_SIZ
4e40: 45 29 20 3d 3d 20 73 69 7a 65 6f 66 28 66 6c 6f E) == sizeof(flo
4e50: 61 74 29 20 7c 7c 20 28 54 59 50 45 5f 53 49 5a at) || (TYPE_SIZ
4e60: 45 29 20 3d 3d 20 32 2a 73 69 7a 65 6f 66 28 66 E) == 2*sizeof(f
4e70: 6c 6f 61 74 29 29 09 09 5c 0a 20 20 20 20 26 26 loat))..\. &&
4e80: 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 ((LIST)->flags
4e90: 7c 3d 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 |= __VA_REGISTER
4ea0: 5f 46 4c 4f 41 54 53 54 52 55 43 54 5f 52 45 54 _FLOATSTRUCT_RET
4eb0: 55 52 4e 29 2c 09 09 09 5c 0a 20 20 20 28 54 59 URN),...\. (TY
4ec0: 50 45 5f 41 4c 49 47 4e 29 20 3d 3d 20 73 69 7a PE_ALIGN) == siz
4ed0: 65 6f 66 28 64 6f 75 62 6c 65 29 20 26 26 20 28 eof(double) && (
4ee0: 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 TYPE_SPLITTABLE)
4ef0: 09 09 09 09 5c 0a 20 20 20 20 26 26 20 28 28 54 ....\. && ((T
4f00: 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 73 69 7a YPE_SIZE) == siz
4f10: 65 6f 66 28 64 6f 75 62 6c 65 29 20 7c 7c 20 28 eof(double) || (
4f20: 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 32 2a TYPE_SIZE) == 2*
4f30: 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 29 09 sizeof(double)).
4f40: 5c 0a 20 20 20 20 26 26 20 28 28 4c 49 53 54 29 \. && ((LIST)
4f50: 2d 3e 66 6c 61 67 73 20 7c 3d 20 5f 5f 56 41 5f ->flags |= __VA_
4f60: 52 45 47 49 53 54 45 52 5f 44 4f 55 42 4c 45 53 REGISTER_DOUBLES
4f70: 54 52 55 43 54 5f 52 45 54 55 52 4e 29 2c 09 09 TRUCT_RETURN),..
4f80: 09 5c 0a 20 20 20 30 29 0a 23 65 6e 64 69 66 0a .\. 0).#endif.
4f90: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 #if defined(__sp
4fa0: 61 72 63 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 arc64__) || defi
4fb0: 6e 65 64 28 5f 5f 69 61 36 34 5f 5f 29 0a 23 64 ned(__ia64__).#d
4fc0: 65 66 69 6e 65 20 5f 5f 76 61 5f 72 65 67 5f 73 efine __va_reg_s
4fd0: 74 72 75 63 74 5f 72 65 74 75 72 6e 28 4c 49 53 truct_return(LIS
4fe0: 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 T,TYPE_SIZE,TYPE
4ff0: 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a _SPLITTABLE) \.
5000: 20 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 3c ((TYPE_SIZE) <
5010: 3d 20 33 32 29 0a 2f 2a 20 54 75 72 6e 20 6f 6e = 32)./* Turn on
5020: 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 5f 53 __VA_REGISTER_S
5030: 54 52 55 43 54 5f 52 45 54 55 52 4e 20 69 66 20 TRUCT_RETURN if
5040: 5f 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 52 55 43 __VA_SMALL_STRUC
5050: 54 5f 52 45 54 55 52 4e 20 77 61 73 20 73 65 74 T_RETURN was set
5060: 0a 20 2a 20 61 6e 64 20 74 68 65 20 73 74 72 75 . * and the stru
5070: 63 74 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 ct will actually
5080: 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 be returned in
5090: 72 65 67 69 73 74 65 72 73 2e 0a 20 2a 2f 0a 23 registers.. */.#
50a0: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 73 74 61 72 define __va_star
50b0: 74 5f 73 74 72 75 63 74 31 28 4c 49 53 54 2c 54 t_struct1(LIST,T
50c0: 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c YPE_SIZE,TYPE_AL
50d0: 49 47 4e 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 IGN,TYPE_SPLITTA
50e0: 42 4c 45 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 BLE) \. ((LIST
50f0: 29 2d 3e 66 6c 61 67 73 20 7c 3d 20 5f 5f 56 41 )->flags |= __VA
5100: 5f 52 45 47 49 53 54 45 52 5f 53 54 52 55 43 54 _REGISTER_STRUCT
5110: 5f 52 45 54 55 52 4e 2c 09 09 09 09 5c 0a 20 20 _RETURN,....\.
5120: 20 30 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 0).#endif.#if d
5130: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f efined(__x86_64_
5140: 5f 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f _).#define __va_
5150: 72 65 67 5f 73 74 72 75 63 74 5f 72 65 74 75 72 reg_struct_retur
5160: 6e 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 n(LIST,TYPE_SIZE
5170: 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 ,TYPE_SPLITTABLE
5180: 29 20 20 5c 0a 20 20 28 28 54 59 50 45 5f 53 49 ) \. ((TYPE_SI
5190: 5a 45 29 20 3c 3d 20 31 36 29 0a 2f 2a 20 54 75 ZE) <= 16)./* Tu
51a0: 72 6e 20 6f 6e 20 5f 5f 56 41 5f 52 45 47 49 53 rn on __VA_REGIS
51b0: 54 45 52 5f 53 54 52 55 43 54 5f 52 45 54 55 52 TER_STRUCT_RETUR
51c0: 4e 20 69 66 20 5f 5f 56 41 5f 53 4d 41 4c 4c 5f N if __VA_SMALL_
51d0: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 77 61 STRUCT_RETURN wa
51e0: 73 20 73 65 74 0a 20 2a 20 61 6e 64 20 74 68 65 s set. * and the
51f0: 20 73 74 72 75 63 74 20 77 69 6c 6c 20 61 63 74 struct will act
5200: 75 61 6c 6c 79 20 62 65 20 72 65 74 75 72 6e 65 ually be returne
5210: 64 20 69 6e 20 72 65 67 69 73 74 65 72 73 2e 0a d in registers..
5220: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 */.#define __va
5230: 5f 73 74 61 72 74 5f 73 74 72 75 63 74 31 28 4c _start_struct1(L
5240: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
5250: 50 45 5f 41 4c 49 47 4e 2c 54 59 50 45 5f 53 50 PE_ALIGN,TYPE_SP
5260: 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 28 LITTABLE) \. (
5270: 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 7c 3d (LIST)->flags |=
5280: 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 5f 53 __VA_REGISTER_S
5290: 54 52 55 43 54 5f 52 45 54 55 52 4e 2c 09 09 09 TRUCT_RETURN,...
52a0: 09 5c 0a 20 20 20 30 29 0a 23 65 6e 64 69 66 0a .\. 0).#endif.
52b0: 2f 2a 0a 20 2a 20 50 72 65 70 61 72 69 6e 67 20 /*. * Preparing
52c0: 73 74 72 75 63 74 75 72 65 20 72 65 74 75 72 6e structure return
52d0: 20 69 6e 20 6d 65 6d 6f 72 79 2e 0a 20 2a 2f 0a in memory.. */.
52e0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 #if defined(__i3
52f0: 38 36 5f 5f 29 0a 2f 2a 20 52 65 74 75 72 6e 20 86__)./* Return
5300: 73 74 72 75 63 74 75 72 65 20 70 6f 69 6e 74 65 structure pointe
5310: 72 20 69 73 20 70 61 73 73 65 64 20 69 6e 20 61 r is passed in a
5320: 20 73 70 65 63 69 61 6c 20 72 65 67 69 73 74 65 special registe
5330: 72 20 6f 72 20 61 73 20 66 69 72 73 74 20 61 72 r or as first ar
5340: 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f g. */.#define __
5350: 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 32 va_start_struct2
5360: 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 4c 49 (LIST) \. ((LI
5370: 53 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f 5f 56 ST)->flags & __V
5380: 41 5f 4e 45 58 54 47 43 43 5f 53 54 52 55 43 54 A_NEXTGCC_STRUCT
5390: 5f 52 45 54 55 52 4e 09 09 09 09 5c 0a 20 20 20 _RETURN....\.
53a0: 3f 20 28 28 4c 49 53 54 29 2d 3e 72 61 64 64 72 ? ((LIST)->raddr
53b0: 20 3d 20 28 4c 49 53 54 29 2d 3e 73 74 72 75 63 = (LIST)->struc
53c0: 74 72 61 64 64 72 2c 20 30 29 09 20 2f 2a 20 73 traddr, 0). /* s
53d0: 70 65 63 69 61 6c 20 72 65 67 69 73 74 65 72 20 pecial register
53e0: 2a 2f 09 5c 0a 20 20 20 3a 20 28 28 4c 49 53 54 */.\. : ((LIST
53f0: 29 2d 3e 72 61 64 64 72 20 3d 20 2a 28 76 6f 69 )->raddr = *(voi
5400: 64 2a 20 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 d* *)((LIST)->ap
5410: 74 72 29 2c 09 09 2f 2a 20 66 69 72 73 74 20 61 tr),../* first a
5420: 72 67 20 2a 2f 09 5c 0a 20 20 20 20 20 20 28 4c rg */.\. (L
5430: 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 IST)->aptr += si
5440: 7a 65 6f 66 28 76 6f 69 64 2a 29 2c 09 09 09 09 zeof(void*),....
5450: 09 5c 0a 20 20 20 20 20 20 30 09 09 09 09 09 09 .\. 0......
5460: 09 09 09 5c 0a 20 20 29 20 20 29 0a 23 65 6e 64 ...\. ) ).#end
5470: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f if.#if defined(_
5480: 5f 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 _alpha__) || def
5490: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 7c 7c ined(__arm__) ||
54a0: 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 defined(__rs600
54b0: 30 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 0__) || defined(
54c0: 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 20 7c 7c 20 __convex__) ||
54d0: 64 65 66 69 6e 65 64 28 5f 5f 73 33 39 30 5f 5f defined(__s390__
54e0: 29 0a 2f 2a 20 52 65 74 75 72 6e 20 73 74 72 75 )./* Return stru
54f0: 63 74 75 72 65 20 70 6f 69 6e 74 65 72 20 69 73 cture pointer is
5500: 20 70 61 73 73 65 64 20 61 73 20 66 69 72 73 74 passed as first
5510: 20 61 72 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 arg. */.#define
5520: 20 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 __va_start_stru
5530: 63 74 32 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 ct2(LIST) \. (
5540: 28 4c 49 53 54 29 2d 3e 72 61 64 64 72 20 3d 20 (LIST)->raddr =
5550: 2a 28 76 6f 69 64 2a 20 2a 29 28 28 4c 49 53 54 *(void* *)((LIST
5560: 29 2d 3e 61 70 74 72 29 2c 09 09 09 09 5c 0a 20 )->aptr),....\.
5570: 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b (LIST)->aptr +
5580: 3d 20 73 69 7a 65 6f 66 28 76 6f 69 64 2a 29 2c = sizeof(void*),
5590: 09 09 09 09 09 5c 0a 20 20 20 30 09 09 09 09 09 .....\. 0.....
55a0: 09 09 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 ....\. ).#endif
55b0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d .#if defined(__m
55c0: 69 70 73 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 ips__) || define
55d0: 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 20 7c d(__mipsn32__) |
55e0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 | defined(__mips
55f0: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 64__) || defined
5600: 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a 2f 2a (__sparc64__)./*
5610: 20 52 65 74 75 72 6e 20 73 74 72 75 63 74 75 72 Return structur
5620: 65 20 70 6f 69 6e 74 65 72 20 69 73 20 70 61 73 e pointer is pas
5630: 73 65 64 20 61 73 20 66 69 72 73 74 20 61 72 67 sed as first arg
5640: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 . */.#define __v
5650: 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 32 28 a_start_struct2(
5660: 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 LIST) \. ((LIS
5670: 54 29 2d 3e 72 61 64 64 72 20 3d 20 2a 28 76 6f T)->raddr = *(vo
5680: 69 64 2a 20 2a 29 28 28 4c 49 53 54 29 2d 3e 61 id* *)((LIST)->a
5690: 70 74 72 29 2c 09 09 09 09 5c 0a 20 20 20 28 4c ptr),....\. (L
56a0: 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 IST)->aptr += si
56b0: 7a 65 6f 66 28 76 6f 69 64 2a 29 2c 09 09 09 09 zeof(void*),....
56c0: 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 6e .\. (LIST)->an
56d0: 75 6d 2b 2b 2c 09 09 09 09 09 09 09 5c 0a 20 20 um++,.......\.
56e0: 20 30 09 09 09 09 09 09 09 09 09 5c 0a 20 20 29 0.........\. )
56f0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 .#endif.#if defi
5700: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a ned(__x86_64__).
5710: 2f 2a 20 52 65 74 75 72 6e 20 73 74 72 75 63 74 /* Return struct
5720: 75 72 65 20 70 6f 69 6e 74 65 72 20 69 73 20 70 ure pointer is p
5730: 61 73 73 65 64 20 61 73 20 66 69 72 73 74 20 61 assed as first a
5740: 72 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f rg. */.#define _
5750: 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 _va_start_struct
5760: 32 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 4c 2(LIST) \. ((L
5770: 49 53 54 29 2d 3e 72 61 64 64 72 20 3d 20 28 76 IST)->raddr = (v
5780: 6f 69 64 20 2a 29 28 2a 28 4c 49 53 54 29 2d 3e oid *)(*(LIST)->
5790: 6d 65 6d 69 61 72 67 70 74 72 2b 2b 29 2c 09 09 memiargptr++),..
57a0: 09 5c 0a 20 20 20 30 09 09 09 09 09 09 09 09 09 .\. 0.........
57b0: 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 \. ).#endif.#if
57c0: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f defined(__m68k_
57d0: 5f 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f _) || (defined(_
57e0: 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 65 _sparc__) && !de
57f0: 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f fined(__sparc64_
5800: 5f 29 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f _)) || defined(_
5810: 5f 68 70 70 61 5f 5f 29 20 7c 7c 20 64 65 66 69 _hppa__) || defi
5820: 6e 65 64 28 5f 5f 6d 38 38 6b 5f 5f 29 20 7c 7c ned(__m88k__) ||
5830: 20 64 65 66 69 6e 65 64 28 5f 5f 69 61 36 34 5f defined(__ia64_
5840: 5f 29 0a 2f 2a 20 52 65 74 75 72 6e 20 73 74 72 _)./* Return str
5850: 75 63 74 75 72 65 20 70 6f 69 6e 74 65 72 20 69 ucture pointer i
5860: 73 20 70 61 73 73 65 64 20 69 6e 20 61 20 73 70 s passed in a sp
5870: 65 63 69 61 6c 20 72 65 67 69 73 74 65 72 2e 20 ecial register.
5880: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f */.#define __va_
5890: 73 74 61 72 74 5f 73 74 72 75 63 74 32 28 4c 49 start_struct2(LI
58a0: 53 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 ST) \. ((LIST)
58b0: 2d 3e 72 61 64 64 72 20 3d 20 28 4c 49 53 54 29 ->raddr = (LIST)
58c0: 2d 3e 73 74 72 75 63 74 72 61 64 64 72 2c 20 30 ->structraddr, 0
58d0: 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 20 2a ).#endif.../*. *
58e0: 20 44 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 Definition of t
58f0: 68 65 20 76 61 5f 61 72 67 5f 78 78 78 20 6d 61 he va_arg_xxx ma
5900: 63 72 6f 73 2e 0a 20 2a 2f 0a 0a 2f 2a 20 50 61 cros.. */../* Pa
5910: 64 64 69 6e 67 20 6f 66 20 6e 6f 6e 2d 73 74 72 dding of non-str
5920: 75 63 74 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a uct arguments. *
5930: 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 /.#define __va_a
5940: 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 5a 45 rgsize(TYPE_SIZE
5950: 29 20 20 5c 0a 20 20 28 28 28 54 59 50 45 5f 53 ) \. (((TYPE_S
5960: 49 5a 45 29 20 2b 20 73 69 7a 65 6f 66 28 5f 5f IZE) + sizeof(__
5970: 76 61 77 6f 72 64 29 2d 31 29 20 26 20 2d 28 6c vaword)-1) & -(l
5980: 6f 6e 67 29 73 69 7a 65 6f 66 28 5f 5f 76 61 77 ong)sizeof(__vaw
5990: 6f 72 64 29 29 0a 23 69 66 20 64 65 66 69 6e 65 ord)).#if define
59a0: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 d(__i386__) || d
59b0: 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f 5f 29 efined(__m68k__)
59c0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 || defined(__mi
59d0: 70 73 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 ps__) && !define
59e0: 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 20 7c d(__mipsn32__) |
59f0: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 | (defined(__spa
5a00: 72 63 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 rc__) && !define
5a10: 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 29 20 d(__sparc64__))
5a20: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 6c 70 || defined(__alp
5a30: 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 ha__) || defined
5a40: 28 5f 5f 61 72 6d 5f 5f 29 20 7c 7c 20 28 64 65 (__arm__) || (de
5a50: 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f 5f fined(__rs6000__
5a60: 29 20 26 26 20 28 64 65 66 69 6e 65 64 28 5f 41 ) && (defined(_A
5a70: 49 58 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 IX) || (defined(
5a80: 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 20 64 65 66 __MACH__) && def
5a90: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 29 ined(__APPLE__))
5aa0: 29 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f )) || defined(__
5ab0: 6d 38 38 6b 5f 5f 29 20 7c 7c 20 64 65 66 69 6e m88k__) || defin
5ac0: 65 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 7c ed(__convex__) |
5ad0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 61 36 34 | defined(__ia64
5ae0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
5af0: 5f 78 38 36 5f 36 34 5f 5f 29 0a 2f 2a 20 61 72 _x86_64__)./* ar
5b00: 67 73 20 67 72 6f 77 20 75 70 20 2a 2f 0a 2f 2a gs grow up */./*
5b10: 20 73 6d 61 6c 6c 20 73 74 72 75 63 74 75 72 65 small structure
5b20: 73 20 3c 20 31 20 77 6f 72 64 20 61 72 65 20 61 s < 1 word are a
5b30: 64 6a 75 73 74 65 64 20 64 65 70 65 6e 64 69 6e djusted dependin
5b40: 67 20 6f 6e 20 63 6f 6d 70 69 6c 65 72 20 2a 2f g on compiler */
5b50: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 .#define __va_ar
5b60: 67 5f 6c 65 66 74 61 64 6a 75 73 74 65 64 28 4c g_leftadjusted(L
5b70: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
5b80: 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 PE_ALIGN) \. (
5b90: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 (LIST)->aptr +=
5ba0: 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 50 __va_argsize(TYP
5bb0: 45 5f 53 49 5a 45 29 2c 09 09 09 09 5c 0a 20 20 E_SIZE),....\.
5bc0: 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 (LIST)->aptr -
5bd0: 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 50 __va_argsize(TYP
5be0: 45 5f 53 49 5a 45 29 09 09 09 09 5c 0a 20 20 29 E_SIZE)....\. )
5bf0: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 .#define __va_ar
5c00: 67 5f 72 69 67 68 74 61 64 6a 75 73 74 65 64 28 g_rightadjusted(
5c10: 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 LIST,TYPE_SIZE,T
5c20: 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 YPE_ALIGN) \.
5c30: 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d ((LIST)->aptr +=
5c40: 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 __va_argsize(TY
5c50: 50 45 5f 53 49 5a 45 29 2c 09 09 09 09 5c 0a 20 PE_SIZE),....\.
5c60: 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d (LIST)->aptr -
5c70: 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 3c 20 ((TYPE_SIZE) <
5c80: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
5c90: 09 09 09 5c 0a 09 09 20 20 20 3f 20 28 54 59 50 ...\... ? (TYP
5ca0: 45 5f 53 49 5a 45 29 09 09 09 09 09 5c 0a 09 09 E_SIZE).....\...
5cb0: 20 20 20 3a 20 5f 5f 76 61 5f 61 72 67 73 69 7a : __va_argsiz
5cc0: 65 28 54 59 50 45 5f 53 49 5a 45 29 09 09 09 09 e(TYPE_SIZE)....
5cd0: 5c 0a 09 09 20 20 29 09 09 09 09 09 09 09 5c 0a \... ).......\.
5ce0: 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 ).#endif.#if d
5cf0: 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f efined(__rs6000_
5d00: 5f 29 20 26 26 20 21 28 64 65 66 69 6e 65 64 28 _) && !(defined(
5d10: 5f 41 49 58 29 20 7c 7c 20 28 64 65 66 69 6e 65 _AIX) || (define
5d20: 64 28 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 20 64 d(__MACH__) && d
5d30: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f efined(__APPLE__
5d40: 29 29 29 0a 2f 2a 20 61 72 67 73 20 67 72 6f 77 )))./* args grow
5d50: 20 75 70 20 2a 2f 0a 2f 2a 20 73 6d 61 6c 6c 20 up */./* small
5d60: 73 74 72 75 63 74 75 72 65 73 20 3c 20 31 20 77 structures < 1 w
5d70: 6f 72 64 20 61 72 65 20 61 64 6a 75 73 74 65 64 ord are adjusted
5d80: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f depending on co
5d90: 6d 70 69 6c 65 72 20 2a 2f 0a 2f 2a 20 41 6c 73 mpiler */./* Als
5da0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 73 o make sure we s
5db0: 77 69 74 63 68 20 74 6f 20 74 68 65 20 73 74 61 witch to the sta
5dc0: 63 6b 20 70 6f 69 6e 74 65 72 20 61 66 74 65 72 ck pointer after
5dd0: 20 38 20 61 72 67 73 20 2a 2f 0a 23 64 65 66 69 8 args */.#defi
5de0: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 6c 65 66 74 ne __va_arg_left
5df0: 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 adjusted(LIST,TY
5e00: 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 PE_SIZE,TYPE_ALI
5e10: 47 4e 29 20 20 5c 0a 20 20 28 28 28 28 4c 49 53 GN) \. ((((LIS
5e20: 54 29 2d 3e 6f 6e 73 74 61 63 6b 20 3d 3d 20 30 T)->onstack == 0
5e30: 20 26 26 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 && (LIST)->aptr
5e40: 20 3e 3d 20 28 6c 6f 6e 67 29 26 28 4c 49 53 54 >= (long)&(LIST
5e50: 29 2d 3e 72 65 67 61 72 67 5b 38 5d 29 09 5c 0a )->regarg[8]).\.
5e60: 20 20 20 20 3f 20 28 28 4c 49 53 54 29 2d 3e 6f ? ((LIST)->o
5e70: 6e 73 74 61 63 6b 3d 31 2c 20 28 4c 49 53 54 29 nstack=1, (LIST)
5e80: 2d 3e 61 70 74 72 20 3d 20 28 4c 49 53 54 29 2d ->aptr = (LIST)-
5e90: 3e 73 61 70 74 72 29 20 3a 20 30 29 2c 09 09 5c >saptr) : 0),..\
5ea0: 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 . (LIST)->aptr
5eb0: 20 2b 3d 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 += __va_argsize
5ec0: 28 54 59 50 45 5f 53 49 5a 45 29 2c 09 09 09 09 (TYPE_SIZE),....
5ed0: 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 \. (LIST)->apt
5ee0: 72 20 2d 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 r - __va_argsize
5ef0: 28 54 59 50 45 5f 53 49 5a 45 29 09 09 09 09 5c (TYPE_SIZE)....\
5f00: 0a 20 20 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 . ).#define __v
5f10: 61 5f 61 72 67 5f 72 69 67 68 74 61 64 6a 75 73 a_arg_rightadjus
5f20: 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 ted(LIST,TYPE_SI
5f30: 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 ZE,TYPE_ALIGN)
5f40: 5c 0a 20 20 28 28 28 28 4c 49 53 54 29 2d 3e 6f \. ((((LIST)->o
5f50: 6e 73 74 61 63 6b 20 3d 3d 20 30 20 26 26 20 28 nstack == 0 && (
5f60: 4c 49 53 54 29 2d 3e 61 70 74 72 20 3e 3d 20 28 LIST)->aptr >= (
5f70: 6c 6f 6e 67 29 26 28 4c 49 53 54 29 2d 3e 72 65 long)&(LIST)->re
5f80: 67 61 72 67 5b 38 5d 29 09 5c 0a 20 20 20 20 3f garg[8]).\. ?
5f90: 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 ((LIST)->onstac
5fa0: 6b 3d 31 2c 20 28 4c 49 53 54 29 2d 3e 61 70 74 k=1, (LIST)->apt
5fb0: 72 20 3d 20 28 4c 49 53 54 29 2d 3e 73 61 70 74 r = (LIST)->sapt
5fc0: 72 29 20 3a 20 30 29 2c 09 09 5c 0a 20 20 20 28 r) : 0),..\. (
5fd0: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 5f LIST)->aptr += _
5fe0: 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 50 45 _va_argsize(TYPE
5ff0: 5f 53 49 5a 45 29 2c 09 09 09 09 5c 0a 20 20 20 _SIZE),....\.
6000: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 28 (LIST)->aptr - (
6010: 28 54 59 50 45 5f 53 49 5a 45 29 20 3c 20 73 69 (TYPE_SIZE) < si
6020: 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 09 09 zeof(__vaword)..
6030: 09 5c 0a 09 09 20 20 20 3f 20 28 54 59 50 45 5f .\... ? (TYPE_
6040: 53 49 5a 45 29 09 09 09 09 09 5c 0a 09 09 20 20 SIZE).....\...
6050: 20 3a 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 : __va_argsize(
6060: 54 59 50 45 5f 53 49 5a 45 29 09 09 09 09 5c 0a TYPE_SIZE)....\.
6070: 09 09 20 20 29 09 09 09 09 09 09 09 5c 0a 20 20 .. ).......\.
6080: 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 ).#endif.#if def
6090: 69 6e 65 64 28 5f 5f 73 33 39 30 5f 5f 29 0a 2f ined(__s390__)./
60a0: 2a 20 61 72 67 73 20 67 72 6f 77 20 75 70 20 2a * args grow up *
60b0: 2f 0a 2f 2a 20 73 6d 61 6c 6c 20 73 74 72 75 63 /./* small struc
60c0: 74 75 72 65 73 20 3c 20 31 20 77 6f 72 64 20 61 tures < 1 word a
60d0: 72 65 20 61 64 6a 75 73 74 65 64 20 64 65 70 65 re adjusted depe
60e0: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 65 nding on compile
60f0: 72 20 2a 2f 0a 2f 2a 20 41 6c 73 6f 20 6d 61 6b r */./* Also mak
6100: 65 20 73 75 72 65 20 77 65 20 73 77 69 74 63 68 e sure we switch
6110: 20 74 6f 20 74 68 65 20 73 74 61 63 6b 20 70 6f to the stack po
6120: 69 6e 74 65 72 20 61 66 74 65 72 20 35 20 61 72 inter after 5 ar
6130: 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f gs */.#define __
6140: 76 61 5f 61 72 67 5f 6c 65 66 74 61 64 6a 75 73 va_arg_leftadjus
6150: 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 ted(LIST,TYPE_SI
6160: 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 ZE,TYPE_ALIGN)
6170: 5c 0a 20 20 28 28 28 28 4c 49 53 54 29 2d 3e 6f \. ((((LIST)->o
6180: 6e 73 74 61 63 6b 20 3d 3d 20 30 20 26 26 20 28 nstack == 0 && (
6190: 4c 49 53 54 29 2d 3e 61 70 74 72 20 3e 3d 20 28 LIST)->aptr >= (
61a0: 6c 6f 6e 67 29 26 28 4c 49 53 54 29 2d 3e 72 65 long)&(LIST)->re
61b0: 67 61 72 67 5b 35 5d 29 09 5c 0a 20 20 20 20 3f garg[5]).\. ?
61c0: 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 ((LIST)->onstac
61d0: 6b 3d 31 2c 20 28 4c 49 53 54 29 2d 3e 61 70 74 k=1, (LIST)->apt
61e0: 72 20 3d 20 28 4c 49 53 54 29 2d 3e 73 61 70 74 r = (LIST)->sapt
61f0: 72 29 20 3a 20 30 29 2c 09 09 5c 0a 20 20 20 28 r) : 0),..\. (
6200: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 5f LIST)->aptr += _
6210: 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 50 45 _va_argsize(TYPE
6220: 5f 53 49 5a 45 29 2c 09 09 09 09 5c 0a 20 20 20 _SIZE),....\.
6230: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 5f (LIST)->aptr - _
6240: 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 50 45 _va_argsize(TYPE
6250: 5f 53 49 5a 45 29 09 09 09 09 5c 0a 20 20 29 0a _SIZE)....\. ).
6260: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 #define __va_arg
6270: 5f 72 69 67 68 74 61 64 6a 75 73 74 65 64 28 4c _rightadjusted(L
6280: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
6290: 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 PE_ALIGN) \. (
62a0: 28 28 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 ((((LIST)->onsta
62b0: 63 6b 20 3d 3d 20 30 20 26 26 20 28 28 4c 49 53 ck == 0 && ((LIS
62c0: 54 29 2d 3e 61 70 74 72 20 3e 3d 20 28 6c 6f 6e T)->aptr >= (lon
62d0: 67 29 26 28 4c 49 53 54 29 2d 3e 72 65 67 61 72 g)&(LIST)->regar
62e0: 67 5b 35 5d 29 29 20 5c 0a 20 20 20 7c 7c 20 28 g[5])) \. || (
62f0: 28 54 59 50 45 5f 53 49 5a 45 29 20 3e 20 73 69 (TYPE_SIZE) > si
6300: 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 20 26 zeof(__vaword) &
6310: 26 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3e & (LIST)->aptr >
6320: 3d 20 28 6c 6f 6e 67 29 26 28 4c 49 53 54 29 2d = (long)&(LIST)-
6330: 3e 72 65 67 61 72 67 5b 34 5d 29 29 20 5c 0a 20 >regarg[4])) \.
6340: 20 20 20 3f 20 28 28 4c 49 53 54 29 2d 3e 6f 6e ? ((LIST)->on
6350: 73 74 61 63 6b 3d 31 2c 20 28 4c 49 53 54 29 2d stack=1, (LIST)-
6360: 3e 61 70 74 72 20 3d 20 28 4c 49 53 54 29 2d 3e >aptr = (LIST)->
6370: 73 61 70 74 72 29 20 3a 20 30 29 2c 09 09 5c 0a saptr) : 0),..\.
6380: 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 (LIST)->aptr
6390: 2b 3d 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 += __va_argsize(
63a0: 54 59 50 45 5f 53 49 5a 45 29 2c 09 09 09 09 5c TYPE_SIZE),....\
63b0: 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 . (LIST)->aptr
63c0: 20 2d 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 - ((TYPE_SIZE)
63d0: 3c 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 < sizeof(__vawor
63e0: 64 29 09 09 09 5c 0a 09 09 20 20 20 3f 20 28 54 d)...\... ? (T
63f0: 59 50 45 5f 53 49 5a 45 29 09 09 09 09 09 5c 0a YPE_SIZE).....\.
6400: 09 09 20 20 20 3a 20 5f 5f 76 61 5f 61 72 67 73 .. : __va_args
6410: 69 7a 65 28 54 59 50 45 5f 53 49 5a 45 29 09 09 ize(TYPE_SIZE)..
6420: 09 09 5c 0a 09 09 20 20 29 09 09 09 09 09 09 09 ..\... ).......
6430: 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 \. ).#endif.#if
6440: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e defined(__mipsn
6450: 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 32__) || defined
6460: 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 20 7c 7c 20 (__mips64__) ||
6470: 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 defined(__sparc6
6480: 34 5f 5f 29 0a 2f 2a 20 61 72 67 73 20 67 72 6f 4__)./* args gro
6490: 77 20 75 70 20 2a 2f 0a 2f 2a 20 73 6d 61 6c 6c w up */./* small
64a0: 20 73 74 72 75 63 74 75 72 65 73 20 3c 20 31 20 structures < 1
64b0: 77 6f 72 64 20 61 72 65 20 61 64 6a 75 73 74 65 word are adjuste
64c0: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 d depending on c
64d0: 6f 6d 70 69 6c 65 72 20 2a 2f 0a 23 64 65 66 69 ompiler */.#defi
64e0: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 6c 65 66 74 ne __va_arg_left
64f0: 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 adjusted(LIST,TY
6500: 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 PE_SIZE,TYPE_ALI
6510: 47 4e 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 GN) \. ((LIST)
6520: 2d 3e 61 6e 75 6d 20 2b 3d 20 5f 5f 76 61 5f 61 ->anum += __va_a
6530: 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 5a 45 rgsize(TYPE_SIZE
6540: 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 )/sizeof(__vawor
6550: 64 29 2c 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 d),..\. (LIST)
6560: 2d 3e 61 70 74 72 20 2b 3d 20 5f 5f 76 61 5f 61 ->aptr += __va_a
6570: 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 5a 45 rgsize(TYPE_SIZE
6580: 29 2c 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 ),....\. (LIST
6590: 29 2d 3e 61 70 74 72 20 2d 20 5f 5f 76 61 5f 61 )->aptr - __va_a
65a0: 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 5a 45 rgsize(TYPE_SIZE
65b0: 29 09 09 09 09 5c 0a 20 20 29 0a 23 64 65 66 69 )....\. ).#defi
65c0: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 72 69 67 68 ne __va_arg_righ
65d0: 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 tadjusted(LIST,T
65e0: 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c YPE_SIZE,TYPE_AL
65f0: 49 47 4e 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 IGN) \. ((LIST
6600: 29 2d 3e 61 6e 75 6d 20 2b 3d 20 5f 5f 76 61 5f )->anum += __va_
6610: 61 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 5a argsize(TYPE_SIZ
6620: 45 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f E)/sizeof(__vawo
6630: 72 64 29 2c 09 09 5c 0a 20 20 20 28 4c 49 53 54 rd),..\. (LIST
6640: 29 2d 3e 61 70 74 72 20 2b 3d 20 5f 5f 76 61 5f )->aptr += __va_
6650: 61 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 5a argsize(TYPE_SIZ
6660: 45 29 2c 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 E),....\. (LIS
6670: 54 29 2d 3e 61 70 74 72 20 2d 20 28 28 54 59 50 T)->aptr - ((TYP
6680: 45 5f 53 49 5a 45 29 20 3c 20 73 69 7a 65 6f 66 E_SIZE) < sizeof
6690: 28 5f 5f 76 61 77 6f 72 64 29 09 09 09 5c 0a 09 (__vaword)...\..
66a0: 09 20 20 20 3f 20 28 54 59 50 45 5f 53 49 5a 45 . ? (TYPE_SIZE
66b0: 29 09 09 09 09 09 5c 0a 09 09 20 20 20 3a 20 5f ).....\... : _
66c0: 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 50 45 _va_argsize(TYPE
66d0: 5f 53 49 5a 45 29 09 09 09 09 5c 0a 09 09 20 20 _SIZE)....\...
66e0: 29 09 09 09 09 09 09 09 5c 0a 20 20 29 0a 23 65 ).......\. ).#e
66f0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
6700: 28 5f 5f 68 70 70 61 5f 5f 29 0a 2f 2a 20 61 72 (__hppa__)./* ar
6710: 67 73 20 67 72 6f 77 20 64 6f 77 6e 20 2a 2f 0a gs grow down */.
6720: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 #define __va_arg
6730: 5f 6c 65 66 74 61 64 6a 75 73 74 65 64 28 4c 49 _leftadjusted(LI
6740: 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 ST,TYPE_SIZE,TYP
6750: 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 28 E_ALIGN) \. ((
6760: 4c 49 53 54 29 2d 3e 61 70 74 72 20 3d 20 28 4c LIST)->aptr = (L
6770: 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 5f 5f 76 IST)->aptr - __v
6780: 61 5f 61 72 67 73 69 7a 65 28 54 59 50 45 5f 53 a_argsize(TYPE_S
6790: 49 5a 45 29 2c 09 09 5c 0a 20 20 20 28 28 54 59 IZE),..\. ((TY
67a0: 50 45 5f 53 49 5a 45 29 20 3e 20 34 20 26 26 20 PE_SIZE) > 4 &&
67b0: 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 26 3d ((LIST)->aptr &=
67c0: 20 2d 38 29 29 2c 09 09 09 09 5c 0a 20 20 20 28 -8)),....\. (
67d0: 4c 49 53 54 29 2d 3e 61 70 74 72 09 09 09 09 09 LIST)->aptr.....
67e0: 09 09 09 5c 0a 20 20 29 0a 23 64 65 66 69 6e 65 ...\. ).#define
67f0: 20 5f 5f 76 61 5f 61 72 67 5f 72 69 67 68 74 61 __va_arg_righta
6800: 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 djusted(LIST,TYP
6810: 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 E_SIZE,TYPE_ALIG
6820: 4e 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 2d N) \. ((LIST)-
6830: 3e 61 70 74 72 20 3d 20 28 4c 49 53 54 29 2d 3e >aptr = (LIST)->
6840: 61 70 74 72 20 2d 20 5f 5f 76 61 5f 61 72 67 73 aptr - __va_args
6850: 69 7a 65 28 54 59 50 45 5f 53 49 5a 45 29 2c 09 ize(TYPE_SIZE),.
6860: 09 5c 0a 20 20 20 28 28 54 59 50 45 5f 53 49 5a .\. ((TYPE_SIZ
6870: 45 29 20 3e 20 34 20 26 26 20 28 28 4c 49 53 54 E) > 4 && ((LIST
6880: 29 2d 3e 61 70 74 72 20 26 3d 20 2d 38 29 29 2c )->aptr &= -8)),
6890: 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d ....\. (LIST)-
68a0: 3e 61 70 74 72 20 2b 20 28 28 2d 28 54 59 50 45 >aptr + ((-(TYPE
68b0: 5f 53 49 5a 45 29 29 20 26 20 33 29 09 09 09 09 _SIZE)) & 3)....
68c0: 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 .\. ).#endif.#i
68d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 f defined(__i386
68e0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
68f0: 5f 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 _alpha__) || def
6900: 69 6e 65 64 28 5f 5f 69 61 36 34 5f 5f 29 0a 2f ined(__ia64__)./
6910: 2a 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 * little endian
6920: 2d 3e 20 73 6d 61 6c 6c 20 61 72 67 73 20 3c 20 -> small args <
6930: 31 20 77 6f 72 64 20 61 72 65 20 61 64 6a 75 73 1 word are adjus
6940: 74 65 64 20 74 6f 20 74 68 65 20 6c 65 66 74 20 ted to the left
6950: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f */.#define __va_
6960: 61 72 67 5f 61 64 6a 75 73 74 65 64 28 4c 49 53 arg_adjusted(LIS
6970: 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 T,TYPE_SIZE,TYPE
6980: 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 5f 5f 76 _ALIGN) \. __v
6990: 61 5f 61 72 67 5f 6c 65 66 74 61 64 6a 75 73 74 a_arg_leftadjust
69a0: 65 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a ed(LIST,TYPE_SIZ
69b0: 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 0a 23 65 E,TYPE_ALIGN).#e
69c0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
69d0: 28 5f 5f 6d 36 38 6b 5f 5f 29 20 7c 7c 20 64 65 (__m68k__) || de
69e0: 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f fined(__mipsn32_
69f0: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
6a00: 6d 69 70 73 36 34 5f 5f 29 20 7c 7c 20 64 65 66 mips64__) || def
6a10: 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 ined(__sparc__)
6a20: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 || defined(__spa
6a30: 72 63 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e rc64__) || defin
6a40: 65 64 28 5f 5f 68 70 70 61 5f 5f 29 20 7c 7c 20 ed(__hppa__) ||
6a50: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 defined(__arm__)
6a60: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 || defined(__rs
6a70: 36 30 30 30 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 6000__) || defin
6a80: 65 64 28 5f 5f 6d 38 38 6b 5f 5f 29 20 7c 7c 20 ed(__m88k__) ||
6a90: 64 65 66 69 6e 65 64 28 5f 5f 63 6f 6e 76 65 78 defined(__convex
6aa0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
6ab0: 5f 73 33 39 30 5f 5f 29 0a 2f 2a 20 62 69 67 20 _s390__)./* big
6ac0: 65 6e 64 69 61 6e 20 2d 3e 20 73 6d 61 6c 6c 20 endian -> small
6ad0: 61 72 67 73 20 3c 20 31 20 77 6f 72 64 20 61 72 args < 1 word ar
6ae0: 65 20 61 64 6a 75 73 74 65 64 20 74 6f 20 74 68 e adjusted to th
6af0: 65 20 72 69 67 68 74 20 2a 2f 0a 23 64 65 66 69 e right */.#defi
6b00: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 61 64 6a 75 ne __va_arg_adju
6b10: 73 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 sted(LIST,TYPE_S
6b20: 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 IZE,TYPE_ALIGN)
6b30: 20 5c 0a 20 20 5f 5f 76 61 5f 61 72 67 5f 72 69 \. __va_arg_ri
6b40: 67 68 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 ghtadjusted(LIST
6b50: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
6b60: 41 4c 49 47 4e 29 0a 23 65 6e 64 69 66 0a 23 69 ALIGN).#endif.#i
6b70: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 f defined(__mips
6b80: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 __) && !defined(
6b90: 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a 2f 2a 20 __mipsn32__)./*
6ba0: 62 69 67 20 65 6e 64 69 61 6e 20 2d 3e 20 73 6d big endian -> sm
6bb0: 61 6c 6c 20 61 72 67 73 20 3c 20 31 20 77 6f 72 all args < 1 wor
6bc0: 64 20 61 72 65 20 61 64 6a 75 73 74 65 64 20 74 d are adjusted t
6bd0: 6f 20 74 68 65 20 72 69 67 68 74 20 2a 2f 0a 23 o the right */.#
6be0: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f define __va_arg_
6bf0: 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 adjusted(LIST,TY
6c00: 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 PE_SIZE,TYPE_ALI
6c10: 47 4e 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 GN) \. ((LIST)
6c20: 2d 3e 61 6e 75 6d 2b 2b 2c 20 5f 5f 76 61 5f 61 ->anum++, __va_a
6c30: 72 67 5f 72 69 67 68 74 61 64 6a 75 73 74 65 64 rg_rightadjusted
6c40: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
6c50: 54 59 50 45 5f 41 4c 49 47 4e 29 29 0a 23 65 6e TYPE_ALIGN)).#en
6c60: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
6c70: 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 2f 2a 20 74 __x86_64__)./* t
6c80: 68 65 20 66 69 72 73 74 20 36 20 61 72 67 75 6d he first 6 argum
6c90: 65 6e 74 20 77 6f 72 64 73 20 61 72 65 20 70 61 ent words are pa
6ca0: 73 73 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 ssed in register
6cb0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 s */.#define __v
6cc0: 61 5f 61 72 67 5f 61 64 6a 75 73 74 65 64 28 4c a_arg_adjusted(L
6cd0: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
6ce0: 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 PE_ALIGN) \. (
6cf0: 28 4c 49 53 54 29 2d 3e 6d 65 6d 69 61 72 67 70 (LIST)->memiargp
6d00: 74 72 20 2b 20 28 28 54 59 50 45 5f 53 49 5a 45 tr + ((TYPE_SIZE
6d10: 29 20 2b 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 ) + sizeof(__vaw
6d20: 6f 72 64 29 2d 31 29 20 2f 20 73 69 7a 65 6f 66 ord)-1) / sizeof
6d30: 28 5f 5f 76 61 77 6f 72 64 29 20 3c 3d 20 26 28 (__vaword) <= &(
6d40: 4c 49 53 54 29 2d 3e 69 61 72 67 5b 36 5d 20 5c LIST)->iarg[6] \
6d50: 0a 20 20 20 3f 20 28 28 4c 49 53 54 29 2d 3e 6d . ? ((LIST)->m
6d60: 65 6d 69 61 72 67 70 74 72 20 2b 3d 20 28 28 54 emiargptr += ((T
6d70: 59 50 45 5f 53 49 5a 45 29 20 2b 20 73 69 7a 65 YPE_SIZE) + size
6d80: 6f 66 28 5f 5f 76 61 77 6f 72 64 29 2d 31 29 20 of(__vaword)-1)
6d90: 2f 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 / sizeof(__vawor
6da0: 64 29 2c 20 5c 0a 20 20 20 20 20 20 28 4c 49 53 d), \. (LIS
6db0: 54 29 2d 3e 6d 65 6d 69 61 72 67 70 74 72 20 2d T)->memiargptr -
6dc0: 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 2b 20 ((TYPE_SIZE) +
6dd0: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
6de0: 2d 31 29 20 2f 20 73 69 7a 65 6f 66 28 5f 5f 76 -1) / sizeof(__v
6df0: 61 77 6f 72 64 29 20 5c 0a 20 20 20 20 20 29 09 aword) \. ).
6e00: 09 09 09 09 09 09 09 09 5c 0a 20 20 20 3a 20 28 ........\. : (
6e10: 76 6f 69 64 2a 29 5f 5f 76 61 5f 61 72 67 5f 6c void*)__va_arg_l
6e20: 65 66 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 eftadjusted(LIST
6e30: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
6e40: 41 4c 49 47 4e 29 09 09 5c 0a 20 20 29 0a 23 65 ALIGN)..\. ).#e
6e50: 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 5f 5f 76 ndif.#define __v
6e60: 61 5f 61 72 67 28 4c 49 53 54 2c 54 59 50 45 29 a_arg(LIST,TYPE)
6e70: 20 20 5c 0a 20 20 2a 28 54 59 50 45 2a 29 5f 5f \. *(TYPE*)__
6e80: 76 61 5f 61 72 67 5f 61 64 6a 75 73 74 65 64 28 va_arg_adjusted(
6e90: 4c 49 53 54 2c 73 69 7a 65 6f 66 28 54 59 50 45 LIST,sizeof(TYPE
6ea0: 29 2c 5f 5f 56 41 5f 61 6c 69 67 6e 6f 66 28 54 ),__VA_alignof(T
6eb0: 59 50 45 29 29 0a 0a 2f 2a 20 49 6e 74 65 67 65 YPE))../* Intege
6ec0: 72 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a r arguments. */.
6ed0: 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f .#define va_arg_
6ee0: 63 68 61 72 28 4c 49 53 54 29 09 5f 5f 76 61 5f char(LIST).__va_
6ef0: 61 72 67 28 4c 49 53 54 2c 63 68 61 72 29 0a 23 arg(LIST,char).#
6f00: 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 73 63 define va_arg_sc
6f10: 68 61 72 28 4c 49 53 54 29 09 5f 5f 76 61 5f 61 har(LIST).__va_a
6f20: 72 67 28 4c 49 53 54 2c 73 69 67 6e 65 64 20 63 rg(LIST,signed c
6f30: 68 61 72 29 0a 23 64 65 66 69 6e 65 20 76 61 5f har).#define va_
6f40: 61 72 67 5f 75 63 68 61 72 28 4c 49 53 54 29 09 arg_uchar(LIST).
6f50: 5f 5f 76 61 5f 61 72 67 28 4c 49 53 54 2c 75 6e __va_arg(LIST,un
6f60: 73 69 67 6e 65 64 20 63 68 61 72 29 0a 23 64 65 signed char).#de
6f70: 66 69 6e 65 20 76 61 5f 61 72 67 5f 73 68 6f 72 fine va_arg_shor
6f80: 74 28 4c 49 53 54 29 09 5f 5f 76 61 5f 61 72 67 t(LIST).__va_arg
6f90: 28 4c 49 53 54 2c 73 68 6f 72 74 29 0a 23 64 65 (LIST,short).#de
6fa0: 66 69 6e 65 20 76 61 5f 61 72 67 5f 75 73 68 6f fine va_arg_usho
6fb0: 72 74 28 4c 49 53 54 29 09 5f 5f 76 61 5f 61 72 rt(LIST).__va_ar
6fc0: 67 28 4c 49 53 54 2c 75 6e 73 69 67 6e 65 64 20 g(LIST,unsigned
6fd0: 73 68 6f 72 74 29 0a 23 64 65 66 69 6e 65 20 76 short).#define v
6fe0: 61 5f 61 72 67 5f 69 6e 74 28 4c 49 53 54 29 09 a_arg_int(LIST).
6ff0: 5f 5f 76 61 5f 61 72 67 28 4c 49 53 54 2c 69 6e __va_arg(LIST,in
7000: 74 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 t).#define va_ar
7010: 67 5f 75 69 6e 74 28 4c 49 53 54 29 09 5f 5f 76 g_uint(LIST).__v
7020: 61 5f 61 72 67 28 4c 49 53 54 2c 75 6e 73 69 67 a_arg(LIST,unsig
7030: 6e 65 64 20 69 6e 74 29 0a 23 64 65 66 69 6e 65 ned int).#define
7040: 20 76 61 5f 61 72 67 5f 6c 6f 6e 67 28 4c 49 53 va_arg_long(LIS
7050: 54 29 09 5f 5f 76 61 5f 61 72 67 28 4c 49 53 54 T).__va_arg(LIST
7060: 2c 6c 6f 6e 67 29 0a 23 64 65 66 69 6e 65 20 76 ,long).#define v
7070: 61 5f 61 72 67 5f 75 6c 6f 6e 67 28 4c 49 53 54 a_arg_ulong(LIST
7080: 29 09 5f 5f 76 61 5f 61 72 67 28 4c 49 53 54 2c ).__va_arg(LIST,
7090: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 0a 0a unsigned long)..
70a0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 #if defined(__mi
70b0: 70 73 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e ps64__) || defin
70c0: 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 20 ed(__sparc64__)
70d0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 6c 70 || defined(__alp
70e0: 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 ha__) || defined
70f0: 28 5f 5f 69 61 36 34 5f 5f 29 20 7c 7c 20 64 65 (__ia64__) || de
7100: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f fined(__x86_64__
7110: 29 0a 2f 2a 20 60 6c 6f 6e 67 20 6c 6f 6e 67 27 )./* `long long'
7120: 20 61 6e 64 20 60 6c 6f 6e 67 27 20 61 72 65 20 and `long' are
7130: 69 64 65 6e 74 69 63 61 6c 2e 20 2a 2f 0a 23 64 identical. */.#d
7140: 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 6c 6f 6e efine va_arg_lon
7150: 67 6c 6f 6e 67 09 09 76 61 5f 61 72 67 5f 6c 6f glong..va_arg_lo
7160: 6e 67 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 ng.#define va_ar
7170: 67 5f 75 6c 6f 6e 67 6c 6f 6e 67 09 76 61 5f 61 g_ulonglong.va_a
7180: 72 67 5f 75 6c 6f 6e 67 0a 23 65 6c 69 66 20 64 rg_ulong.#elif d
7190: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 efined(__mipsn32
71a0: 5f 5f 29 0a 2f 2a 20 60 6c 6f 6e 67 20 6c 6f 6e __)./* `long lon
71b0: 67 27 20 66 69 74 73 20 69 6e 20 5f 5f 76 61 77 g' fits in __vaw
71c0: 6f 72 64 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 ord. */.#define
71d0: 76 61 5f 61 72 67 5f 6c 6f 6e 67 6c 6f 6e 67 28 va_arg_longlong(
71e0: 4c 49 53 54 29 09 5f 5f 76 61 5f 61 72 67 28 4c LIST).__va_arg(L
71f0: 49 53 54 2c 6c 6f 6e 67 20 6c 6f 6e 67 29 0a 23 IST,long long).#
7200: 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 75 6c define va_arg_ul
7210: 6f 6e 67 6c 6f 6e 67 28 4c 49 53 54 29 09 5f 5f onglong(LIST).__
7220: 76 61 5f 61 72 67 28 4c 49 53 54 2c 75 6e 73 69 va_arg(LIST,unsi
7230: 67 6e 65 64 20 6c 6f 6e 67 20 6c 6f 6e 67 29 0a gned long long).
7240: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 5f #elif defined(__
7250: 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e i386__) || defin
7260: 65 64 28 5f 5f 6d 36 38 6b 5f 5f 29 20 7c 7c 20 ed(__m68k__) ||
7270: 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f defined(__mips__
7280: 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f ) || (defined(__
7290: 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 65 66 sparc__) && !def
72a0: 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f ined(__sparc64__
72b0: 29 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f )) || defined(__
72c0: 68 70 70 61 5f 5f 29 20 7c 7c 20 64 65 66 69 6e hppa__) || defin
72d0: 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 7c 7c 20 64 ed(__arm__) || d
72e0: 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f efined(__rs6000_
72f0: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
7300: 6d 38 38 6b 5f 5f 29 20 7c 7c 20 64 65 66 69 6e m88k__) || defin
7310: 65 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 7c ed(__convex__) |
7320: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 33 39 30 | defined(__s390
7330: 5f 5f 29 0a 2f 2a 20 60 6c 6f 6e 67 20 6c 6f 6e __)./* `long lon
7340: 67 27 73 20 61 72 65 20 70 61 73 73 65 64 20 65 g's are passed e
7350: 6d 62 65 64 64 65 64 20 6f 6e 20 74 68 65 20 61 mbedded on the a
7360: 72 67 20 73 74 61 63 6b 2e 20 2a 2f 0a 23 64 65 rg stack. */.#de
7370: 66 69 6e 65 20 76 61 5f 61 72 67 5f 6c 6f 6e 67 fine va_arg_long
7380: 6c 6f 6e 67 28 4c 49 53 54 29 09 5f 5f 76 61 5f long(LIST).__va_
7390: 61 72 67 5f 6c 6f 6e 67 6c 6f 6e 67 28 4c 49 53 arg_longlong(LIS
73a0: 54 2c 6c 6f 6e 67 20 6c 6f 6e 67 29 0a 23 64 65 T,long long).#de
73b0: 66 69 6e 65 20 76 61 5f 61 72 67 5f 75 6c 6f 6e fine va_arg_ulon
73c0: 67 6c 6f 6e 67 28 4c 49 53 54 29 09 5f 5f 76 61 glong(LIST).__va
73d0: 5f 61 72 67 5f 6c 6f 6e 67 6c 6f 6e 67 28 4c 49 _arg_longlong(LI
73e0: 53 54 2c 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ST,unsigned long
73f0: 20 6c 6f 6e 67 29 0a 23 69 66 20 64 65 66 69 6e long).#if defin
7400: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 ed(__i386__) ||
7410: 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f 5f defined(__m68k__
7420: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 ) || defined(__a
7430: 72 6d 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 65 rm__) || (define
7440: 64 28 5f 5f 72 73 36 30 30 30 5f 5f 29 20 26 26 d(__rs6000__) &&
7450: 20 28 64 65 66 69 6e 65 64 28 5f 41 49 58 29 20 (defined(_AIX)
7460: 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 4d 41 || (defined(__MA
7470: 43 48 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 CH__) && defined
7480: 28 5f 5f 41 50 50 4c 45 5f 5f 29 29 29 29 20 7c (__APPLE__)))) |
7490: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 63 6f 6e 76 | defined(__conv
74a0: 65 78 5f 5f 29 0a 2f 2a 20 60 6c 6f 6e 67 20 6c ex__)./* `long l
74b0: 6f 6e 67 27 73 20 61 72 65 20 28 61 74 20 6d 6f ong's are (at mo
74c0: 73 74 29 20 77 6f 72 64 2d 61 6c 69 67 6e 65 64 st) word-aligned
74d0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 . */.#define __v
74e0: 61 5f 61 72 67 5f 6c 6f 6e 67 6c 6f 6e 67 28 4c a_arg_longlong(L
74f0: 49 53 54 2c 54 59 50 45 29 09 5f 5f 76 61 5f 61 IST,TYPE).__va_a
7500: 72 67 28 4c 49 53 54 2c 54 59 50 45 29 0a 23 65 rg(LIST,TYPE).#e
7510: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
7520: 28 5f 5f 6d 69 70 73 5f 5f 29 20 7c 7c 20 28 64 (__mips__) || (d
7530: 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f efined(__rs6000_
7540: 5f 29 20 26 26 20 21 28 64 65 66 69 6e 65 64 28 _) && !(defined(
7550: 5f 41 49 58 29 20 7c 7c 20 28 64 65 66 69 6e 65 _AIX) || (define
7560: 64 28 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 20 64 d(__MACH__) && d
7570: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f efined(__APPLE__
7580: 29 29 29 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 )))) || defined(
7590: 5f 5f 6d 38 38 6b 5f 5f 29 0a 2f 2a 20 60 6c 6f __m88k__)./* `lo
75a0: 6e 67 20 6c 6f 6e 67 27 73 20 68 61 76 65 20 61 ng long's have a
75b0: 6c 69 67 6e 6d 65 6e 74 20 38 2e 20 2a 2f 0a 23 lignment 8. */.#
75c0: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f define __va_arg_
75d0: 6c 6f 6e 67 6c 6f 6e 67 28 4c 49 53 54 2c 54 59 longlong(LIST,TY
75e0: 50 45 29 09 09 09 09 09 5c 0a 20 20 28 28 4c 49 PE).....\. ((LI
75f0: 53 54 29 2d 3e 61 70 74 72 20 3d 20 28 28 28 4c ST)->aptr = (((L
7600: 49 53 54 29 2d 3e 61 70 74 72 2b 5f 5f 56 41 5f IST)->aptr+__VA_
7610: 61 6c 69 67 6e 6f 66 28 54 59 50 45 29 2d 31 29 alignof(TYPE)-1)
7620: 20 26 20 2d 28 6c 6f 6e 67 29 5f 5f 56 41 5f 61 & -(long)__VA_a
7630: 6c 69 67 6e 6f 66 28 54 59 50 45 29 29 2c 20 5c lignof(TYPE)), \
7640: 0a 20 20 20 5f 5f 76 61 5f 61 72 67 28 4c 49 53 . __va_arg(LIS
7650: 54 2c 54 59 50 45 29 29 0a 23 65 6e 64 69 66 0a T,TYPE)).#endif.
7660: 23 69 66 20 28 64 65 66 69 6e 65 64 28 5f 5f 73 #if (defined(__s
7670: 70 61 72 63 5f 5f 29 20 26 26 20 21 64 65 66 69 parc__) && !defi
7680: 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 ned(__sparc64__)
7690: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 ) || defined(__s
76a0: 33 39 30 5f 5f 29 0a 2f 2a 20 57 69 74 68 69 6e 390__)./* Within
76b0: 20 74 68 65 20 61 72 67 20 73 74 61 63 6b 2c 20 the arg stack,
76c0: 74 68 65 20 61 6c 69 67 6e 6d 65 6e 74 20 69 73 the alignment is
76d0: 20 6f 6e 6c 79 20 34 2c 20 6e 6f 74 20 38 2e 20 only 4, not 8.
76e0: 2a 2f 0a 2f 2a 20 42 65 77 61 72 65 20 61 67 61 */./* Beware aga
76f0: 69 6e 73 74 20 75 6e 61 6c 69 67 6e 65 64 20 61 inst unaligned a
7700: 63 63 65 73 73 65 73 21 20 2a 2f 0a 23 64 65 66 ccesses! */.#def
7710: 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 6c 6f 6e ine __va_arg_lon
7720: 67 6c 6f 6e 67 28 4c 49 53 54 2c 54 59 50 45 29 glong(LIST,TYPE)
7730: 09 09 09 09 09 5c 0a 20 20 28 28 4c 49 53 54 29 .....\. ((LIST)
7740: 2d 3e 74 6d 70 2e 5f 77 6f 72 64 73 5b 30 5d 20 ->tmp._words[0]
7750: 3d 20 28 28 5f 5f 76 61 77 6f 72 64 2a 29 28 28 = ((__vaword*)((
7760: 4c 49 53 54 29 2d 3e 61 70 74 72 29 29 5b 30 5d LIST)->aptr))[0]
7770: 2c 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e ,..\. (LIST)->
7780: 74 6d 70 2e 5f 77 6f 72 64 73 5b 31 5d 20 3d 20 tmp._words[1] =
7790: 28 28 5f 5f 76 61 77 6f 72 64 2a 29 28 28 4c 49 ((__vaword*)((LI
77a0: 53 54 29 2d 3e 61 70 74 72 29 29 5b 31 5d 2c 09 ST)->aptr))[1],.
77b0: 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 .\. (LIST)->ap
77c0: 74 72 20 2b 3d 20 73 69 7a 65 6f 66 28 54 59 50 tr += sizeof(TYP
77d0: 45 29 2c 09 09 09 09 09 5c 0a 20 20 20 28 54 59 E),.....\. (TY
77e0: 50 45 29 28 28 4c 49 53 54 29 2d 3e 74 6d 70 2e PE)((LIST)->tmp.
77f0: 5f 6c 6f 6e 67 6c 6f 6e 67 29 09 09 09 09 09 5c _longlong).....\
7800: 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 . ).#endif.#if
7810: 64 65 66 69 6e 65 64 28 5f 5f 68 70 70 61 5f 5f defined(__hppa__
7820: 29 0a 2f 2a 20 60 6c 6f 6e 67 20 6c 6f 6e 67 27 )./* `long long'
7830: 73 20 68 61 76 65 20 61 6c 69 67 6e 6d 65 6e 74 s have alignment
7840: 20 38 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 8. */.#define _
7850: 5f 76 61 5f 61 72 67 5f 6c 6f 6e 67 6c 6f 6e 67 _va_arg_longlong
7860: 28 4c 49 53 54 2c 54 59 50 45 29 09 09 09 09 09 (LIST,TYPE).....
7870: 5c 0a 20 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 \. ((LIST)->apt
7880: 72 20 3d 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 r = ((LIST)->apt
7890: 72 20 26 20 2d 28 6c 6f 6e 67 29 5f 5f 56 41 5f r & -(long)__VA_
78a0: 61 6c 69 67 6e 6f 66 28 54 59 50 45 29 29 2c 09 alignof(TYPE)),.
78b0: 09 5c 0a 20 20 20 5f 5f 76 61 5f 61 72 67 28 4c .\. __va_arg(L
78c0: 49 53 54 2c 54 59 50 45 29 29 0a 23 65 6e 64 69 IST,TYPE)).#endi
78d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 46 6c 6f f.#endif../* Flo
78e0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 61 72 67 75 ating point argu
78f0: 6d 65 6e 74 73 2e 20 2a 2f 0a 0a 23 64 65 66 69 ments. */..#defi
7900: 6e 65 20 76 61 5f 61 72 67 5f 66 6c 6f 61 74 28 ne va_arg_float(
7910: 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 LIST) \. ((LIS
7920: 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f 5f 56 41 T)->flags & __VA
7930: 5f 54 52 41 44 49 54 49 4f 4e 41 4c 5f 46 4c 4f _TRADITIONAL_FLO
7940: 41 54 5f 41 52 47 53 09 09 09 09 5c 0a 20 20 20 AT_ARGS....\.
7950: 3f 20 28 66 6c 6f 61 74 29 76 61 5f 61 72 67 5f ? (float)va_arg_
7960: 64 6f 75 62 6c 65 28 4c 49 53 54 29 09 09 09 09 double(LIST)....
7970: 09 09 5c 0a 20 20 20 3a 20 5f 5f 76 61 5f 61 72 ..\. : __va_ar
7980: 67 5f 66 6c 6f 61 74 28 4c 49 53 54 29 09 09 09 g_float(LIST)...
7990: 09 09 09 5c 0a 20 20 29 0a 0a 23 69 66 20 64 65 ...\. )..#if de
79a0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 fined(__i386__)
79b0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 || defined(__m68
79c0: 6b 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 k__) || defined(
79d0: 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 __mipsn32__) ||
79e0: 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 36 34 defined(__mips64
79f0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
7a00: 5f 73 70 61 72 63 5f 5f 29 20 7c 7c 20 64 65 66 _sparc__) || def
7a10: 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f ined(__sparc64__
7a20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 ) || defined(__a
7a30: 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 6e lpha__) || defin
7a40: 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 7c 7c 20 64 ed(__arm__) || d
7a50: 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f efined(__rs6000_
7a60: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
7a70: 63 6f 6e 76 65 78 5f 5f 29 20 7c 7c 20 64 65 66 convex__) || def
7a80: 69 6e 65 64 28 5f 5f 69 61 36 34 5f 5f 29 20 7c ined(__ia64__) |
7a90: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f | defined(__x86_
7aa0: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 64__) || defined
7ab0: 28 5f 5f 73 33 39 30 5f 5f 29 0a 23 64 65 66 69 (__s390__).#defi
7ac0: 6e 65 20 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f ne __va_align_do
7ad0: 75 62 6c 65 28 4c 49 53 54 29 0a 23 65 6e 64 69 uble(LIST).#endi
7ae0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
7af0: 6d 69 70 73 5f 5f 29 20 26 26 20 21 64 65 66 69 mips__) && !defi
7b00: 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 ned(__mipsn32__)
7b10: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 38 || defined(__m8
7b20: 38 6b 5f 5f 29 0a 2f 2a 20 5f 5f 56 41 5f 61 6c 8k__)./* __VA_al
7b30: 69 67 6e 6f 66 28 64 6f 75 62 6c 65 29 20 3e 20 ignof(double) >
7b40: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
7b50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 */.#define __va
7b60: 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 _align_double(LI
7b70: 53 54 29 20 20 5c 0a 20 20 28 4c 49 53 54 29 2d ST) \. (LIST)-
7b80: 3e 61 70 74 72 20 3d 20 28 28 4c 49 53 54 29 2d >aptr = ((LIST)-
7b90: 3e 61 70 74 72 20 2b 20 73 69 7a 65 6f 66 28 64 >aptr + sizeof(d
7ba0: 6f 75 62 6c 65 29 2d 31 29 20 26 20 2d 28 6c 6f ouble)-1) & -(lo
7bb0: 6e 67 29 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 ng)sizeof(double
7bc0: 29 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 ),.#endif.#if de
7bd0: 66 69 6e 65 64 28 5f 5f 68 70 70 61 5f 5f 29 0a fined(__hppa__).
7be0: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 6c 69 #define __va_ali
7bf0: 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 20 gn_double(LIST)
7c00: 20 5c 0a 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 \. (LIST)->apt
7c10: 72 20 3d 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 r = (LIST)->aptr
7c20: 20 26 20 2d 28 6c 6f 6e 67 29 73 69 7a 65 6f 66 & -(long)sizeof
7c30: 28 64 6f 75 62 6c 65 29 2c 0a 23 65 6e 64 69 66 (double),.#endif
7c40: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f ..#if defined(__
7c50: 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 65 66 sparc__) && !def
7c60: 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f ined(__sparc64__
7c70: 29 0a 2f 2a 20 42 65 77 61 72 65 20 61 67 61 69 )./* Beware agai
7c80: 6e 73 74 20 75 6e 61 6c 69 67 6e 65 64 20 60 64 nst unaligned `d
7c90: 6f 75 62 6c 65 27 20 61 63 63 65 73 73 65 73 21 ouble' accesses!
7ca0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 */.#define va_a
7cb0: 72 67 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 20 rg_double(LIST)
7cc0: 20 5c 0a 20 20 28 5f 5f 76 61 5f 61 6c 69 67 6e \. (__va_align
7cd0: 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 09 09 09 _double(LIST)...
7ce0: 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e ...\. (LIST)->
7cf0: 74 6d 70 2e 5f 77 6f 72 64 73 5b 30 5d 20 3d 20 tmp._words[0] =
7d00: 28 28 5f 5f 76 61 77 6f 72 64 2a 29 28 28 4c 49 ((__vaword*)((LI
7d10: 53 54 29 2d 3e 61 70 74 72 29 29 5b 30 5d 2c 09 ST)->aptr))[0],.
7d20: 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 74 6d .\. (LIST)->tm
7d30: 70 2e 5f 77 6f 72 64 73 5b 31 5d 20 3d 20 28 28 p._words[1] = ((
7d40: 5f 5f 76 61 77 6f 72 64 2a 29 28 28 4c 49 53 54 __vaword*)((LIST
7d50: 29 2d 3e 61 70 74 72 29 29 5b 31 5d 2c 09 09 5c )->aptr))[1],..\
7d60: 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 . (LIST)->aptr
7d70: 20 2b 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c += sizeof(doubl
7d80: 65 29 2c 09 09 09 09 09 5c 0a 20 20 20 28 4c 49 e),.....\. (LI
7d90: 53 54 29 2d 3e 74 6d 70 2e 5f 64 6f 75 62 6c 65 ST)->tmp._double
7da0: 09 09 09 09 09 09 09 5c 0a 20 20 29 0a 23 65 6e .......\. ).#en
7db0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
7dc0: 5f 5f 61 6c 70 68 61 5f 5f 29 0a 2f 2a 20 54 68 __alpha__)./* Th
7dd0: 65 20 66 69 72 73 74 20 36 20 66 6c 6f 61 74 69 e first 6 floati
7de0: 6e 67 20 70 6f 69 6e 74 20 72 65 67 69 73 74 65 ng point registe
7df0: 72 73 20 68 61 76 65 20 62 65 65 6e 20 73 74 6f rs have been sto
7e00: 72 65 64 20 69 6e 20 61 6e 6f 74 68 65 72 20 70 red in another p
7e10: 6c 61 63 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 lace. */.#define
7e20: 20 76 61 5f 61 72 67 5f 64 6f 75 62 6c 65 28 4c va_arg_double(L
7e30: 49 53 54 29 20 20 5c 0a 20 20 28 28 28 4c 49 53 IST) \. (((LIS
7e40: 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 7a 65 T)->aptr += size
7e50: 6f 66 28 64 6f 75 62 6c 65 29 29 20 3c 3d 20 28 of(double)) <= (
7e60: 4c 49 53 54 29 2d 3e 6d 65 6d 61 72 67 70 74 72 LIST)->memargptr
7e70: 09 09 5c 0a 20 20 20 3f 20 2a 28 64 6f 75 62 6c ..\. ? *(doubl
7e80: 65 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 e*)((LIST)->aptr
7e90: 20 2d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 - sizeof(double
7ea0: 29 20 2d 20 36 2a 73 69 7a 65 6f 66 28 64 6f 75 ) - 6*sizeof(dou
7eb0: 62 6c 65 29 29 09 5c 0a 20 20 20 3a 20 2a 28 64 ble)).\. : *(d
7ec0: 6f 75 62 6c 65 2a 29 28 28 4c 49 53 54 29 2d 3e ouble*)((LIST)->
7ed0: 61 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 64 6f aptr - sizeof(do
7ee0: 75 62 6c 65 29 29 09 09 09 09 5c 0a 20 20 29 0a uble))....\. ).
7ef0: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 #define __va_arg
7f00: 5f 66 6c 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a _float(LIST) \.
7f10: 20 20 28 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 (((LIST)->aptr
7f20: 20 2b 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c += sizeof(doubl
7f30: 65 29 29 20 3c 3d 20 28 4c 49 53 54 29 2d 3e 6d e)) <= (LIST)->m
7f40: 65 6d 61 72 67 70 74 72 09 09 5c 0a 20 20 20 3f emargptr..\. ?
7f50: 20 2f 2a 20 54 68 65 20 66 69 72 73 74 20 36 20 /* The first 6
7f60: 61 72 67 73 20 68 61 76 65 20 62 65 65 6e 20 70 args have been p
7f70: 75 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 62 ut into memory b
7f80: 79 20 22 73 74 74 22 20 69 6e 73 74 72 75 63 74 y "stt" instruct
7f90: 69 6f 6e 73 20 2a 2f 5c 0a 20 20 20 20 20 2f 2a ions */\. /*
7fa0: 20 28 73 65 65 20 76 61 63 61 6c 6c 2d 61 6c 70 (see vacall-alp
7fb0: 68 61 2e 73 21 29 2e 20 54 68 65 72 65 66 6f 72 ha.s!). Therefor
7fc0: 65 20 6c 6f 61 64 20 74 68 65 6d 20 61 73 20 64 e load them as d
7fd0: 6f 75 62 6c 65 73 2e 20 2a 2f 09 5c 0a 20 20 20 oubles. */.\.
7fe0: 20 20 2f 2a 20 57 68 65 6e 20 76 69 65 77 65 64 /* When viewed
7ff0: 20 61 73 20 66 6c 6f 61 74 73 2c 20 74 68 65 20 as floats, the
8000: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 74 68 value will be th
8010: 65 20 63 6f 72 72 65 63 74 20 6f 6e 65 2e 20 2a e correct one. *
8020: 2f 09 5c 0a 20 20 20 20 20 28 66 6c 6f 61 74 29 /.\. (float)
8030: 2a 28 64 6f 75 62 6c 65 2a 29 28 28 4c 49 53 54 *(double*)((LIST
8040: 29 2d 3e 61 70 74 72 20 2d 20 73 69 7a 65 6f 66 )->aptr - sizeof
8050: 28 64 6f 75 62 6c 65 29 20 2d 20 36 2a 73 69 7a (double) - 6*siz
8060: 65 6f 66 28 64 6f 75 62 6c 65 29 29 20 5c 0a 20 eof(double)) \.
8070: 20 20 3a 20 2f 2a 20 54 68 65 73 65 20 61 72 67 : /* These arg
8080: 73 20 68 61 76 65 20 62 65 65 6e 20 70 75 74 20 s have been put
8090: 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 62 79 20 22 into memory by "
80a0: 73 74 73 22 20 69 6e 73 74 72 75 63 74 69 6f 6e sts" instruction
80b0: 73 2c 20 2a 2f 09 5c 0a 20 20 20 20 20 2f 2a 20 s, */.\. /*
80c0: 74 68 65 72 65 66 6f 72 65 20 6c 6f 61 64 20 74 therefore load t
80d0: 68 65 6d 20 61 73 20 66 6c 6f 61 74 73 2e 20 2a hem as floats. *
80e0: 2f 09 09 09 09 5c 0a 20 20 20 20 20 2a 28 66 6c /....\. *(fl
80f0: 6f 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 oat*)((LIST)->ap
8100: 74 72 20 2d 20 73 69 7a 65 6f 66 28 64 6f 75 62 tr - sizeof(doub
8110: 6c 65 29 29 09 09 09 09 5c 0a 20 20 29 0a 23 65 le))....\. ).#e
8120: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
8130: 28 5f 5f 68 70 70 61 5f 5f 29 0a 2f 2a 20 54 68 (__hppa__)./* Th
8140: 65 20 66 69 72 73 74 20 34 20 66 6c 6f 61 74 20 e first 4 float
8150: 72 65 67 69 73 74 65 72 73 20 61 6e 64 20 74 68 registers and th
8160: 65 20 66 69 72 73 74 20 32 20 64 6f 75 62 6c 65 e first 2 double
8170: 20 72 65 67 69 73 74 65 72 73 20 61 72 65 20 73 registers are s
8180: 74 6f 72 65 64 0a 20 2a 20 65 6c 73 65 77 68 65 tored. * elsewhe
8190: 72 65 2e 0a 20 2a 2f 0a 23 69 66 20 31 20 2f 2a re.. */.#if 1 /*
81a0: 20 67 63 63 2d 32 2e 35 2e 32 20 70 61 73 73 65 gcc-2.5.2 passe
81b0: 73 20 74 68 65 73 65 20 61 72 67 73 20 69 6e 20 s these args in
81c0: 67 65 6e 65 72 61 6c 20 72 65 67 69 73 74 65 72 general register
81d0: 73 21 20 41 20 62 75 67 2c 20 49 20 74 68 69 6e s! A bug, I thin
81e0: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f k. */.#define __
81f0: 76 61 5f 61 72 67 5f 66 6c 6f 61 74 28 4c 49 53 va_arg_float(LIS
8200: 54 29 20 20 5c 0a 20 20 28 2a 28 66 6c 6f 61 74 T) \. (*(float
8210: 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 *)((LIST)->aptr
8220: 2d 3d 20 73 69 7a 65 6f 66 28 66 6c 6f 61 74 29 -= sizeof(float)
8230: 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 )).#define va_ar
8240: 67 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 20 20 g_double(LIST)
8250: 5c 0a 20 20 28 5f 5f 76 61 5f 61 6c 69 67 6e 5f \. (__va_align_
8260: 64 6f 75 62 6c 65 28 4c 49 53 54 29 09 09 09 09 double(LIST)....
8270: 09 09 5c 0a 20 20 20 2a 28 64 6f 75 62 6c 65 2a ..\. *(double*
8280: 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d )((LIST)->aptr -
8290: 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 = sizeof(double)
82a0: 29 09 09 09 09 5c 0a 20 20 29 0a 23 65 6c 73 65 )....\. ).#else
82b0: 20 2f 2a 20 74 68 69 73 20 77 6f 75 6c 64 20 62 /* this would b
82c0: 65 20 63 6f 72 72 65 63 74 20 69 66 20 74 68 65 e correct if the
82d0: 20 61 72 67 73 20 77 65 72 65 20 70 61 73 73 65 args were passe
82e0: 64 20 69 6e 20 66 6c 6f 61 74 20 72 65 67 69 73 d in float regis
82f0: 74 65 72 73 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 ters. */.#define
8300: 20 5f 5f 76 61 5f 61 72 67 5f 66 6c 6f 61 74 28 __va_arg_float(
8310: 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 28 4c 49 LIST) \. (((LI
8320: 53 54 29 2d 3e 61 70 74 72 20 2d 3d 20 73 69 7a ST)->aptr -= siz
8330: 65 6f 66 28 66 6c 6f 61 74 29 29 20 3e 3d 20 28 eof(float)) >= (
8340: 4c 49 53 54 29 2d 3e 6d 65 6d 61 72 67 70 74 72 LIST)->memargptr
8350: 09 09 09 5c 0a 20 20 20 3f 20 2f 2a 20 54 68 65 ...\. ? /* The
8360: 20 66 69 72 73 74 20 34 20 66 6c 6f 61 74 20 61 first 4 float a
8370: 72 67 73 20 61 72 65 20 73 74 6f 72 65 64 20 73 rgs are stored s
8380: 65 70 61 72 61 74 65 6c 79 2e 20 2a 2f 09 09 5c eparately. */..\
8390: 0a 20 20 20 20 20 2a 28 66 6c 6f 61 74 2a 29 28 . *(float*)(
83a0: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 20 28 (LIST)->aptr + (
83b0: 4c 49 53 54 29 2d 3e 66 61 72 67 5f 6f 66 66 73 LIST)->farg_offs
83c0: 65 74 29 09 09 09 5c 0a 20 20 20 3a 20 2a 28 66 et)...\. : *(f
83d0: 6c 6f 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e 61 loat*)((LIST)->a
83e0: 70 74 72 29 09 09 09 09 09 09 5c 0a 20 20 29 0a ptr)......\. ).
83f0: 23 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 64 #define va_arg_d
8400: 6f 75 62 6c 65 28 4c 49 53 54 29 20 20 5c 0a 20 ouble(LIST) \.
8410: 20 28 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 (__va_align_dou
8420: 62 6c 65 28 4c 49 53 54 29 09 09 09 09 09 09 5c ble(LIST)......\
8430: 0a 20 20 20 28 28 28 4c 49 53 54 29 2d 3e 61 70 . (((LIST)->ap
8440: 74 72 20 2d 3d 20 73 69 7a 65 6f 66 28 64 6f 75 tr -= sizeof(dou
8450: 62 6c 65 29 29 20 3e 3d 20 28 4c 49 53 54 29 2d ble)) >= (LIST)-
8460: 3e 6d 65 6d 61 72 67 70 74 72 09 09 5c 0a 20 20 >memargptr..\.
8470: 20 20 3f 20 2f 2a 20 54 68 65 20 66 69 72 73 74 ? /* The first
8480: 20 32 20 64 6f 75 62 6c 65 20 61 72 67 73 20 61 2 double args a
8490: 72 65 20 73 74 6f 72 65 64 20 73 65 70 61 72 61 re stored separa
84a0: 74 65 6c 79 2e 20 2a 2f 09 09 5c 0a 20 20 20 20 tely. */..\.
84b0: 20 20 2a 28 64 6f 75 62 6c 65 2a 29 28 28 4c 49 *(double*)((LI
84c0: 53 54 29 2d 3e 61 70 74 72 20 2b 20 28 4c 49 53 ST)->aptr + (LIS
84d0: 54 29 2d 3e 64 61 72 67 5f 6f 66 66 73 65 74 29 T)->darg_offset)
84e0: 09 09 09 5c 0a 20 20 20 20 3a 20 2a 28 64 6f 75 ...\. : *(dou
84f0: 62 6c 65 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 ble*)((LIST)->ap
8500: 74 72 29 09 09 09 09 09 09 5c 0a 20 20 29 29 0a tr)......\. )).
8510: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 #endif.#endif.#i
8520: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 f defined(__mips
8530: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 __) && !defined(
8540: 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a 2f 2a 20 __mipsn32__)./*
8550: 54 68 65 20 66 69 72 73 74 20 30 2c 31 2c 32 20 The first 0,1,2
8560: 72 65 67 69 73 74 65 72 73 20 61 72 65 20 73 74 registers are st
8570: 6f 72 65 64 20 65 6c 73 65 77 68 65 72 65 20 69 ored elsewhere i
8580: 66 20 74 68 65 79 20 61 72 65 20 66 6c 6f 61 74 f they are float
8590: 69 6e 67 2d 70 6f 69 6e 74 0a 20 2a 20 70 61 72 ing-point. * par
85a0: 61 6d 65 74 65 72 73 2e 0a 20 2a 2f 0a 23 64 65 ameters.. */.#de
85b0: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 66 6c fine __va_arg_fl
85c0: 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 oat(LIST) \. (
85d0: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 (LIST)->aptr +=
85e0: 73 69 7a 65 6f 66 28 66 6c 6f 61 74 29 2c 09 09 sizeof(float),..
85f0: 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e ...\. (LIST)->
8600: 61 6e 75 6d 2b 2b 2c 09 09 09 09 09 09 09 5c 0a anum++,.......\.
8610: 20 20 20 28 28 4c 49 53 54 29 2d 3e 61 6e 75 6d ((LIST)->anum
8620: 20 3d 3d 20 31 09 09 09 09 09 09 09 5c 0a 20 20 == 1.......\.
8630: 20 20 3f 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 ? ((LIST)->fla
8640: 67 73 20 7c 3d 20 5f 5f 56 41 5f 46 4c 4f 41 54 gs |= __VA_FLOAT
8650: 5f 31 2c 20 28 4c 49 53 54 29 2d 3e 66 61 72 67 _1, (LIST)->farg
8660: 5b 30 5d 29 09 09 09 5c 0a 20 20 20 20 3a 20 28 [0])...\. : (
8670: 28 4c 49 53 54 29 2d 3e 61 6e 75 6d 20 3d 3d 20 (LIST)->anum ==
8680: 32 20 26 26 20 28 28 4c 49 53 54 29 2d 3e 66 6c 2 && ((LIST)->fl
8690: 61 67 73 20 26 20 5f 5f 56 41 5f 46 4c 4f 41 54 ags & __VA_FLOAT
86a0: 5f 31 29 09 09 5c 0a 20 20 20 20 20 20 20 3f 20 _1)..\. ?
86b0: 28 2f 2a 20 28 4c 49 53 54 29 2d 3e 66 6c 61 67 (/* (LIST)->flag
86c0: 73 20 7c 3d 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f s |= __VA_FLOAT_
86d0: 32 2c 20 2a 2f 20 28 4c 49 53 54 29 2d 3e 66 61 2, */ (LIST)->fa
86e0: 72 67 5b 31 5d 29 09 09 5c 0a 20 20 20 20 20 20 rg[1])..\.
86f0: 20 3a 20 2a 28 66 6c 6f 61 74 2a 29 28 28 4c 49 : *(float*)((LI
8700: 53 54 29 2d 3e 61 70 74 72 20 2d 20 73 69 7a 65 ST)->aptr - size
8710: 6f 66 28 66 6c 6f 61 74 29 29 09 09 09 5c 0a 20 of(float))...\.
8720: 20 29 29 20 20 29 0a 23 64 65 66 69 6e 65 20 76 )) ).#define v
8730: 61 5f 61 72 67 5f 64 6f 75 62 6c 65 28 4c 49 53 a_arg_double(LIS
8740: 54 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 61 6c T) \. (__va_al
8750: 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 ign_double(LIST)
8760: 09 09 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 ......\. (LIST
8770: 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 7a 65 6f )->aptr += sizeo
8780: 66 28 64 6f 75 62 6c 65 29 2c 09 09 09 09 09 5c f(double),.....\
8790: 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 6e 75 6d . (LIST)->anum
87a0: 2b 2b 2c 09 09 09 09 09 09 09 5c 0a 20 20 20 28 ++,.......\. (
87b0: 28 4c 49 53 54 29 2d 3e 61 6e 75 6d 20 3d 3d 20 (LIST)->anum ==
87c0: 31 09 09 09 09 09 09 09 5c 0a 20 20 20 20 3f 20 1.......\. ?
87d0: 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 7c ((LIST)->flags |
87e0: 3d 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 31 2c 20 = __VA_FLOAT_1,
87f0: 28 4c 49 53 54 29 2d 3e 64 61 72 67 5b 30 5d 29 (LIST)->darg[0])
8800: 09 09 09 5c 0a 20 20 20 20 3a 20 28 28 4c 49 53 ...\. : ((LIS
8810: 54 29 2d 3e 61 6e 75 6d 20 3d 3d 20 32 20 26 26 T)->anum == 2 &&
8820: 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 ((LIST)->flags
8830: 26 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 31 29 09 & __VA_FLOAT_1).
8840: 09 5c 0a 20 20 20 20 20 20 20 3f 20 28 2f 2a 20 .\. ? (/*
8850: 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 7c 3d (LIST)->flags |=
8860: 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 32 2c 20 2a __VA_FLOAT_2, *
8870: 2f 20 28 4c 49 53 54 29 2d 3e 64 61 72 67 5b 31 / (LIST)->darg[1
8880: 5d 29 09 09 5c 0a 20 20 20 20 20 20 20 3a 20 2a ])..\. : *
8890: 28 64 6f 75 62 6c 65 2a 29 28 28 4c 49 53 54 29 (double*)((LIST)
88a0: 2d 3e 61 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 ->aptr - sizeof(
88b0: 64 6f 75 62 6c 65 29 29 09 09 09 5c 0a 20 20 29 double))...\. )
88c0: 29 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 ) ).#endif.#if
88d0: 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 defined(__mipsn3
88e0: 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 2__) || defined(
88f0: 5f 5f 6d 69 70 73 36 34 5f 5f 29 0a 2f 2a 20 54 __mips64__)./* T
8900: 68 65 20 66 69 72 73 74 20 30 2c 2e 2e 2c 38 20 he first 0,..,8
8910: 72 65 67 69 73 74 65 72 73 20 61 72 65 20 73 74 registers are st
8920: 6f 72 65 64 20 65 6c 73 65 77 68 65 72 65 20 69 ored elsewhere i
8930: 66 20 74 68 65 79 20 61 72 65 20 66 6c 6f 61 74 f they are float
8940: 69 6e 67 2d 70 6f 69 6e 74 0a 20 2a 20 70 61 72 ing-point. * par
8950: 61 6d 65 74 65 72 73 2e 0a 20 2a 2f 0a 23 64 65 ameters.. */.#de
8960: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 66 6c fine __va_arg_fl
8970: 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 oat(LIST) \. (
8980: 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c __va_align_doubl
8990: 65 28 4c 49 53 54 29 09 09 09 09 09 09 5c 0a 20 e(LIST)......\.
89a0: 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b (LIST)->aptr +
89b0: 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 = sizeof(double)
89c0: 2c 09 09 09 09 09 5c 0a 20 20 20 28 2b 2b 28 4c ,.....\. (++(L
89d0: 49 53 54 29 2d 3e 61 6e 75 6d 20 3c 3d 20 38 09 IST)->anum <= 8.
89e0: 09 09 09 09 09 09 5c 0a 20 20 20 20 3f 20 28 4c ......\. ? (L
89f0: 49 53 54 29 2d 3e 66 61 72 67 5b 28 4c 49 53 54 IST)->farg[(LIST
8a00: 29 2d 3e 61 6e 75 6d 20 2d 20 31 5d 09 09 09 09 )->anum - 1]....
8a10: 09 5c 0a 20 20 20 20 3a 20 2a 28 66 6c 6f 61 74 .\. : *(float
8a20: 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 *)((LIST)->aptr
8a30: 2d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 - sizeof(double)
8a40: 29 09 09 09 09 5c 0a 20 20 29 29 0a 23 64 65 66 )....\. )).#def
8a50: 69 6e 65 20 76 61 5f 61 72 67 5f 64 6f 75 62 6c ine va_arg_doubl
8a60: 65 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 5f 5f e(LIST) \. (__
8a70: 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 va_align_double(
8a80: 4c 49 53 54 29 09 09 09 09 09 09 5c 0a 20 20 20 LIST)......\.
8a90: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 (LIST)->aptr +=
8aa0: 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 2c 09 sizeof(double),.
8ab0: 09 09 09 09 5c 0a 20 20 20 28 2b 2b 28 4c 49 53 ....\. (++(LIS
8ac0: 54 29 2d 3e 61 6e 75 6d 20 3c 3d 20 38 09 09 09 T)->anum <= 8...
8ad0: 09 09 09 09 5c 0a 20 20 20 20 3f 20 28 4c 49 53 ....\. ? (LIS
8ae0: 54 29 2d 3e 64 61 72 67 5b 28 4c 49 53 54 29 2d T)->darg[(LIST)-
8af0: 3e 61 6e 75 6d 20 2d 20 31 5d 09 09 09 09 09 5c >anum - 1].....\
8b00: 0a 20 20 20 20 3a 20 2a 28 64 6f 75 62 6c 65 2a . : *(double*
8b10: 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d )((LIST)->aptr -
8b20: 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 29 sizeof(double))
8b30: 09 09 09 09 5c 0a 20 20 29 29 0a 23 65 6e 64 69 ....\. )).#endi
8b40: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
8b50: 73 70 61 72 63 36 34 5f 5f 29 0a 2f 2a 20 54 68 sparc64__)./* Th
8b60: 65 20 66 69 72 73 74 20 30 2c 2e 2e 2c 31 36 20 e first 0,..,16
8b70: 72 65 67 69 73 74 65 72 73 20 61 72 65 20 73 74 registers are st
8b80: 6f 72 65 64 20 65 6c 73 65 77 68 65 72 65 20 69 ored elsewhere i
8b90: 66 20 74 68 65 79 20 61 72 65 20 66 6c 6f 61 74 f they are float
8ba0: 69 6e 67 2d 70 6f 69 6e 74 0a 20 2a 20 70 61 72 ing-point. * par
8bb0: 61 6d 65 74 65 72 73 2e 0a 20 2a 2f 0a 23 64 65 ameters.. */.#de
8bc0: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 66 6c fine __va_arg_fl
8bd0: 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 oat(LIST) \. (
8be0: 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c __va_align_doubl
8bf0: 65 28 4c 49 53 54 29 09 09 09 09 09 09 5c 0a 20 e(LIST)......\.
8c00: 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b (LIST)->aptr +
8c10: 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 = sizeof(double)
8c20: 2c 09 09 09 09 09 5c 0a 20 20 20 28 2b 2b 28 4c ,.....\. (++(L
8c30: 49 53 54 29 2d 3e 61 6e 75 6d 20 3c 3d 20 31 36 IST)->anum <= 16
8c40: 09 09 09 09 09 09 5c 0a 20 20 20 20 3f 20 28 4c ......\. ? (L
8c50: 49 53 54 29 2d 3e 66 61 72 67 5b 28 4c 49 53 54 IST)->farg[(LIST
8c60: 29 2d 3e 61 6e 75 6d 20 2d 20 31 5d 09 09 09 09 )->anum - 1]....
8c70: 09 5c 0a 20 20 20 20 3a 20 2a 28 66 6c 6f 61 74 .\. : *(float
8c80: 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 *)((LIST)->aptr
8c90: 2d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 - sizeof(double)
8ca0: 29 09 09 09 09 5c 0a 20 20 29 29 0a 23 64 65 66 )....\. )).#def
8cb0: 69 6e 65 20 76 61 5f 61 72 67 5f 64 6f 75 62 6c ine va_arg_doubl
8cc0: 65 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 5f 5f e(LIST) \. (__
8cd0: 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 va_align_double(
8ce0: 4c 49 53 54 29 09 09 09 09 09 09 5c 0a 20 20 20 LIST)......\.
8cf0: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 (LIST)->aptr +=
8d00: 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 2c 09 sizeof(double),.
8d10: 09 09 09 09 5c 0a 20 20 20 28 2b 2b 28 4c 49 53 ....\. (++(LIS
8d20: 54 29 2d 3e 61 6e 75 6d 20 3c 3d 20 31 36 09 09 T)->anum <= 16..
8d30: 09 09 09 09 5c 0a 20 20 20 20 3f 20 28 4c 49 53 ....\. ? (LIS
8d40: 54 29 2d 3e 64 61 72 67 5b 28 4c 49 53 54 29 2d T)->darg[(LIST)-
8d50: 3e 61 6e 75 6d 20 2d 20 31 5d 09 09 09 09 09 5c >anum - 1].....\
8d60: 0a 20 20 20 20 3a 20 2a 28 64 6f 75 62 6c 65 2a . : *(double*
8d70: 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d )((LIST)->aptr -
8d80: 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 29 sizeof(double))
8d90: 09 09 09 09 5c 0a 20 20 29 29 0a 23 65 6e 64 69 ....\. )).#endi
8da0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
8db0: 72 73 36 30 30 30 5f 5f 29 20 26 26 20 28 64 65 rs6000__) && (de
8dc0: 66 69 6e 65 64 28 5f 41 49 58 29 20 7c 7c 20 28 fined(_AIX) || (
8dd0: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f defined(__MACH__
8de0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 41 ) && defined(__A
8df0: 50 50 4c 45 5f 5f 29 29 29 0a 2f 2a 20 54 68 65 PPLE__)))./* The
8e00: 20 66 69 72 73 74 20 31 33 20 66 6c 6f 61 74 69 first 13 floati
8e10: 6e 67 2d 70 6f 69 6e 74 20 61 72 67 73 20 68 61 ng-point args ha
8e20: 76 65 20 62 65 65 6e 20 73 74 6f 72 65 64 20 65 ve been stored e
8e30: 6c 73 65 77 68 65 72 65 2e 20 2a 2f 0a 23 64 65 lsewhere. */.#de
8e40: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 66 6c fine __va_arg_fl
8e50: 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 oat(LIST) \. (
8e60: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 (LIST)->aptr +=
8e70: 73 69 7a 65 6f 66 28 66 6c 6f 61 74 29 2c 09 09 sizeof(float),..
8e80: 09 09 09 5c 0a 20 20 20 28 28 4c 49 53 54 29 2d ...\. ((LIST)-
8e90: 3e 6d 65 6d 66 61 72 67 70 74 72 20 3c 20 26 28 >memfargptr < &(
8ea0: 4c 49 53 54 29 2d 3e 66 61 72 67 5b 31 33 5d 09 LIST)->farg[13].
8eb0: 09 09 09 5c 0a 20 20 20 20 3f 20 28 66 6c 6f 61 ...\. ? (floa
8ec0: 74 29 20 2a 28 28 4c 49 53 54 29 2d 3e 6d 65 6d t) *((LIST)->mem
8ed0: 66 61 72 67 70 74 72 2b 2b 29 09 09 09 09 09 5c fargptr++).....\
8ee0: 0a 20 20 20 20 3a 20 2a 28 66 6c 6f 61 74 2a 29 . : *(float*)
8ef0: 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 ((LIST)->aptr -
8f00: 73 69 7a 65 6f 66 28 66 6c 6f 61 74 29 29 09 09 sizeof(float))..
8f10: 09 09 5c 0a 20 20 29 29 0a 23 64 65 66 69 6e 65 ..\. )).#define
8f20: 20 76 61 5f 61 72 67 5f 64 6f 75 62 6c 65 28 4c va_arg_double(L
8f30: 49 53 54 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f IST) \. (__va_
8f40: 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 align_double(LIS
8f50: 54 29 09 09 09 09 09 09 5c 0a 20 20 20 28 4c 49 T)......\. (LI
8f60: 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 7a ST)->aptr += siz
8f70: 65 6f 66 28 64 6f 75 62 6c 65 29 2c 09 09 09 09 eof(double),....
8f80: 09 5c 0a 20 20 20 28 28 4c 49 53 54 29 2d 3e 6d .\. ((LIST)->m
8f90: 65 6d 66 61 72 67 70 74 72 20 3c 20 26 28 4c 49 emfargptr < &(LI
8fa0: 53 54 29 2d 3e 66 61 72 67 5b 31 33 5d 09 09 09 ST)->farg[13]...
8fb0: 09 5c 0a 20 20 20 20 3f 20 2a 28 28 4c 49 53 54 .\. ? *((LIST
8fc0: 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 2b 2b 29 )->memfargptr++)
8fd0: 09 09 09 09 09 09 5c 0a 20 20 20 20 3a 20 2a 28 ......\. : *(
8fe0: 64 6f 75 62 6c 65 2a 29 28 28 4c 49 53 54 29 2d double*)((LIST)-
8ff0: 3e 61 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 64 >aptr - sizeof(d
9000: 6f 75 62 6c 65 29 29 09 09 09 09 5c 0a 20 20 29 ouble))....\. )
9010: 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 ).#endif.#if def
9020: 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f 5f 29 ined(__rs6000__)
9030: 20 26 26 20 21 28 64 65 66 69 6e 65 64 28 5f 41 && !(defined(_A
9040: 49 58 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 IX) || (defined(
9050: 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 20 64 65 66 __MACH__) && def
9060: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 29 ined(__APPLE__))
9070: 29 0a 2f 2a 20 54 68 65 20 66 69 72 73 74 20 38 )./* The first 8
9080: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 floating-point
9090: 61 72 67 73 20 68 61 76 65 20 62 65 65 6e 20 73 args have been s
90a0: 74 6f 72 65 64 20 65 6c 73 65 77 68 65 72 65 2e tored elsewhere.
90b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 */.#define __va
90c0: 5f 61 72 67 5f 66 6c 6f 61 74 28 4c 49 53 54 29 _arg_float(LIST)
90d0: 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 2d 3e 6d \. ((LIST)->m
90e0: 65 6d 66 61 72 67 70 74 72 20 3c 20 26 28 4c 49 emfargptr < &(LI
90f0: 53 54 29 2d 3e 66 61 72 67 5b 38 5d 09 09 09 09 ST)->farg[8]....
9100: 5c 0a 20 20 20 3f 20 28 66 6c 6f 61 74 29 20 2a \. ? (float) *
9110: 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 72 67 ((LIST)->memfarg
9120: 70 74 72 2b 2b 29 09 09 09 09 09 5c 0a 20 20 20 ptr++).....\.
9130: 3a 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 : ((LIST)->aptr
9140: 3d 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 = ((LIST)->onsta
9150: 63 6b 20 3d 3d 20 30 20 20 20 20 20 20 20 20 20 ck == 0
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9170: 20 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20 20 \.
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3f 20 ?
9190: 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b ((LIST)->onstack
91a0: 3d 31 2c 20 28 4c 49 53 54 29 2d 3e 73 61 70 74 =1, (LIST)->sapt
91b0: 72 29 20 20 20 20 20 20 20 20 20 20 20 20 20 5c r) \
91c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
91d0: 20 20 20 20 20 20 20 20 3a 20 28 4c 49 53 54 29 : (LIST)
91e0: 2d 3e 61 70 74 72 20 20 20 20 20 20 20 20 20 20 ->aptr
91f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9200: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 \.
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9220: 20 29 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 ),
9230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9250: 20 20 20 5c 0a 20 20 20 20 20 20 28 4c 49 53 54 \. (LIST
9260: 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 7a 65 6f )->aptr += sizeo
9270: 66 28 66 6c 6f 61 74 29 2c 09 09 09 09 09 5c 0a f(float),.....\.
9280: 20 20 20 20 20 20 2a 28 66 6c 6f 61 74 2a 29 28 *(float*)(
9290: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 73 (LIST)->aptr - s
92a0: 69 7a 65 6f 66 28 66 6c 6f 61 74 29 29 09 09 09 izeof(float))...
92b0: 09 5c 0a 20 20 29 29 0a 23 64 65 66 69 6e 65 20 .\. )).#define
92c0: 76 61 5f 61 72 67 5f 64 6f 75 62 6c 65 28 4c 49 va_arg_double(LI
92d0: 53 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 ST) \. ((LIST)
92e0: 2d 3e 6d 65 6d 66 61 72 67 70 74 72 20 3c 20 26 ->memfargptr < &
92f0: 28 4c 49 53 54 29 2d 3e 66 61 72 67 5b 38 5d 09 (LIST)->farg[8].
9300: 09 09 09 5c 0a 20 20 20 20 3f 20 2a 28 28 4c 49 ...\. ? *((LI
9310: 53 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 2b ST)->memfargptr+
9320: 2b 29 09 09 09 09 09 09 5c 0a 20 20 20 20 3a 20 +)......\. :
9330: 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3d 20 ((LIST)->aptr =
9340: 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b ((LIST)->onstack
9350: 20 3d 3d 20 30 20 20 20 20 20 20 20 20 20 20 20 == 0
9360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9370: 20 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.
9380: 20 20 20 20 20 20 20 20 20 20 20 3f 20 28 28 4c ? ((L
9390: 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b 3d 31 2c IST)->onstack=1,
93a0: 20 28 4c 49 53 54 29 2d 3e 73 61 70 74 72 29 20 (LIST)->saptr)
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 \.
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93d0: 20 20 20 20 20 3a 20 28 4c 49 53 54 29 2d 3e 61 : (LIST)->a
93e0: 70 74 72 20 20 20 20 20 20 20 20 20 20 20 20 20 ptr
93f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9400: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20 \.
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 2c ),
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9450: 5c 0a 20 20 20 20 20 20 20 5f 5f 76 61 5f 61 6c \. __va_al
9460: 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 ign_double(LIST)
9470: 09 09 09 09 09 09 5c 0a 20 20 20 20 20 20 20 28 ......\. (
9480: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 LIST)->aptr += s
9490: 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 2c 09 09 izeof(double),..
94a0: 09 09 09 5c 0a 20 20 20 20 20 20 20 2a 28 64 6f ...\. *(do
94b0: 75 62 6c 65 2a 29 28 28 4c 49 53 54 29 2d 3e 61 uble*)((LIST)->a
94c0: 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 64 6f 75 ptr - sizeof(dou
94d0: 62 6c 65 29 29 09 09 09 5c 0a 20 20 29 29 0a 23 ble))...\. )).#
94e0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
94f0: 64 28 5f 5f 73 33 39 30 5f 5f 29 0a 2f 2a 20 54 d(__s390__)./* T
9500: 68 65 20 66 69 72 73 74 20 32 20 66 6c 6f 61 74 he first 2 float
9510: 69 6e 67 2d 70 6f 69 6e 74 20 61 72 67 73 20 68 ing-point args h
9520: 61 76 65 20 62 65 65 6e 20 73 74 6f 72 65 64 20 ave been stored
9530: 65 6c 73 65 77 68 65 72 65 2e 20 2a 2f 0a 23 64 elsewhere. */.#d
9540: 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 66 efine __va_arg_f
9550: 6c 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 20 loat(LIST) \.
9560: 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 72 67 ((LIST)->memfarg
9570: 70 74 72 20 3c 20 26 28 4c 49 53 54 29 2d 3e 66 ptr < &(LIST)->f
9580: 61 72 67 5b 32 5d 09 09 09 09 5c 0a 20 20 20 3f arg[2]....\. ?
9590: 20 28 4c 49 53 54 29 2d 3e 6d 65 6d 64 61 72 67 (LIST)->memdarg
95a0: 70 74 72 2b 2b 2c 20 28 66 6c 6f 61 74 29 20 2a ptr++, (float) *
95b0: 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 72 67 ((LIST)->memfarg
95c0: 70 74 72 2b 2b 29 09 09 5c 0a 20 20 20 3a 20 28 ptr++)..\. : (
95d0: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3d 20 28 (LIST)->aptr = (
95e0: 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b 20 (LIST)->onstack
95f0: 3d 3d 20 30 20 20 20 20 20 20 20 20 20 20 20 20 == 0
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9610: 20 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.
9620: 20 20 20 20 20 20 20 20 20 20 20 3f 20 28 28 4c ? ((L
9630: 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b 3d 31 2c IST)->onstack=1,
9640: 20 28 4c 49 53 54 29 2d 3e 73 61 70 74 72 29 20 (LIST)->saptr)
9650: 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 \.
9660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9670: 20 20 20 20 20 3a 20 28 4c 49 53 54 29 2d 3e 61 : (LIST)->a
9680: 70 74 72 20 20 20 20 20 20 20 20 20 20 20 20 20 ptr
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
96a0: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20 \.
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 2c ),
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
96f0: 5c 0a 20 20 20 20 20 20 28 4c 49 53 54 29 2d 3e \. (LIST)->
9700: 61 70 74 72 20 2b 3d 20 73 69 7a 65 6f 66 28 66 aptr += sizeof(f
9710: 6c 6f 61 74 29 2c 09 09 09 09 09 5c 0a 20 20 20 loat),.....\.
9720: 20 20 20 2a 28 66 6c 6f 61 74 2a 29 28 28 4c 49 *(float*)((LI
9730: 53 54 29 2d 3e 61 70 74 72 20 2d 20 73 69 7a 65 ST)->aptr - size
9740: 6f 66 28 66 6c 6f 61 74 29 29 09 09 09 09 5c 0a of(float))....\.
9750: 20 20 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f )).#define va_
9760: 61 72 67 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 arg_double(LIST)
9770: 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 2d 3e 6d \. ((LIST)->m
9780: 65 6d 64 61 72 67 70 74 72 20 3c 20 26 28 4c 49 emdargptr < &(LI
9790: 53 54 29 2d 3e 64 61 72 67 5b 32 5d 09 09 09 09 ST)->darg[2]....
97a0: 5c 0a 20 20 20 20 3f 20 28 4c 49 53 54 29 2d 3e \. ? (LIST)->
97b0: 6d 65 6d 66 61 72 67 70 74 72 2b 2b 2c 20 2a 28 memfargptr++, *(
97c0: 28 4c 49 53 54 29 2d 3e 6d 65 6d 64 61 72 67 70 (LIST)->memdargp
97d0: 74 72 2b 2b 29 09 09 09 5c 0a 20 20 20 20 3a 20 tr++)...\. :
97e0: 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3d 20 ((LIST)->aptr =
97f0: 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b ((LIST)->onstack
9800: 20 3d 3d 20 30 20 20 20 20 20 20 20 20 20 20 20 == 0
9810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9820: 20 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.
9830: 20 20 20 20 20 20 20 20 20 20 20 3f 20 28 28 4c ? ((L
9840: 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b 3d 31 2c IST)->onstack=1,
9850: 20 28 4c 49 53 54 29 2d 3e 73 61 70 74 72 29 20 (LIST)->saptr)
9860: 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 \.
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9880: 20 20 20 20 20 3a 20 28 4c 49 53 54 29 2d 3e 61 : (LIST)->a
9890: 70 74 72 20 20 20 20 20 20 20 20 20 20 20 20 20 ptr
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
98b0: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20 \.
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 2c ),
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9900: 5c 0a 20 20 20 20 20 20 20 5f 5f 76 61 5f 61 6c \. __va_al
9910: 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 ign_double(LIST)
9920: 09 09 09 09 09 09 5c 0a 20 20 20 20 20 20 20 28 ......\. (
9930: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 LIST)->aptr += s
9940: 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 2c 09 09 izeof(double),..
9950: 09 09 09 5c 0a 20 20 20 20 20 20 20 2a 28 64 6f ...\. *(do
9960: 75 62 6c 65 2a 29 28 28 4c 49 53 54 29 2d 3e 61 uble*)((LIST)->a
9970: 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 64 6f 75 ptr - sizeof(dou
9980: 62 6c 65 29 29 09 09 09 5c 0a 20 20 29 29 0a 23 ble))...\. )).#
9990: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
99a0: 64 28 5f 5f 69 61 36 34 5f 5f 29 0a 2f 2a 20 54 d(__ia64__)./* T
99b0: 68 65 20 66 69 72 73 74 20 38 20 66 6c 6f 61 74 he first 8 float
99c0: 69 6e 67 2d 70 6f 69 6e 74 20 61 72 67 73 20 68 ing-point args h
99d0: 61 76 65 20 62 65 65 6e 20 73 74 6f 72 65 64 20 ave been stored
99e0: 65 6c 73 65 77 68 65 72 65 2e 20 2a 2f 0a 23 64 elsewhere. */.#d
99f0: 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 66 efine __va_arg_f
9a00: 6c 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 20 loat(LIST) \.
9a10: 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d ((LIST)->aptr +=
9a20: 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 sizeof(__vaword
9a30: 29 2c 09 09 09 09 09 5c 0a 20 20 20 28 28 4c 49 ),.....\. ((LI
9a40: 53 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 20 ST)->memfargptr
9a50: 3c 20 26 28 4c 49 53 54 29 2d 3e 66 61 72 67 5b < &(LIST)->farg[
9a60: 38 5d 09 09 09 09 5c 0a 20 20 20 20 3f 20 28 66 8]....\. ? (f
9a70: 6c 6f 61 74 29 20 2a 28 28 4c 49 53 54 29 2d 3e loat) *((LIST)->
9a80: 6d 65 6d 66 61 72 67 70 74 72 2b 2b 29 09 09 09 memfargptr++)...
9a90: 09 09 5c 0a 20 20 20 20 3a 20 2a 28 66 6c 6f 61 ..\. : *(floa
9aa0: 74 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 t*)((LIST)->aptr
9ab0: 20 2d 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f - sizeof(__vawo
9ac0: 72 64 29 29 09 09 09 5c 0a 20 20 29 29 0a 23 64 rd))...\. )).#d
9ad0: 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 64 6f 75 efine va_arg_dou
9ae0: 62 6c 65 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 ble(LIST) \. (
9af0: 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c __va_align_doubl
9b00: 65 28 4c 49 53 54 29 09 09 09 09 09 09 5c 0a 20 e(LIST)......\.
9b10: 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b (LIST)->aptr +
9b20: 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 = sizeof(double)
9b30: 2c 09 09 09 09 09 5c 0a 20 20 20 28 28 4c 49 53 ,.....\. ((LIS
9b40: 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 20 3c T)->memfargptr <
9b50: 20 26 28 4c 49 53 54 29 2d 3e 66 61 72 67 5b 38 &(LIST)->farg[8
9b60: 5d 09 09 09 09 5c 0a 20 20 20 20 3f 20 2a 28 28 ]....\. ? *((
9b70: 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 LIST)->memfargpt
9b80: 72 2b 2b 29 09 09 09 09 09 09 5c 0a 20 20 20 20 r++)......\.
9b90: 3a 20 2a 28 64 6f 75 62 6c 65 2a 29 28 28 4c 49 : *(double*)((LI
9ba0: 53 54 29 2d 3e 61 70 74 72 20 2d 20 73 69 7a 65 ST)->aptr - size
9bb0: 6f 66 28 64 6f 75 62 6c 65 29 29 09 09 09 09 5c of(double))....\
9bc0: 0a 20 20 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 . )).#endif.#if
9bd0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 defined(__x86_6
9be0: 34 5f 5f 29 0a 2f 2a 20 54 68 65 20 66 69 72 73 4__)./* The firs
9bf0: 74 20 38 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 t 8 floating-poi
9c00: 6e 74 20 61 72 67 73 20 68 61 76 65 20 62 65 65 nt args have bee
9c10: 6e 20 73 74 6f 72 65 64 20 65 6c 73 65 77 68 65 n stored elsewhe
9c20: 72 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f re. */.#define _
9c30: 5f 76 61 5f 61 72 67 5f 66 6c 6f 61 74 28 4c 49 _va_arg_float(LI
9c40: 53 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 ST) \. ((LIST)
9c50: 2d 3e 6d 65 6d 66 61 72 67 70 74 72 20 3c 20 26 ->memfargptr < &
9c60: 28 4c 49 53 54 29 2d 3e 66 61 72 67 5b 38 5d 09 (LIST)->farg[8].
9c70: 09 09 09 5c 0a 20 20 20 3f 20 28 28 4c 49 53 54 ...\. ? ((LIST
9c80: 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 2b 2b 2c )->memfargptr++,
9c90: 09 09 09 09 09 09 5c 0a 20 20 20 20 20 20 2a 28 ......\. *(
9ca0: 66 6c 6f 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e float*)((LIST)->
9cb0: 6d 65 6d 66 61 72 67 70 74 72 20 2d 20 31 29 09 memfargptr - 1).
9cc0: 09 09 09 09 5c 0a 20 20 20 20 20 29 09 09 09 09 ....\. )....
9cd0: 09 09 09 09 09 5c 0a 20 20 20 3a 20 28 28 4c 49 .....\. : ((LI
9ce0: 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 7a ST)->aptr += siz
9cf0: 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 2c 09 09 eof(__vaword),..
9d00: 09 09 09 5c 0a 20 20 20 20 20 20 2a 28 66 6c 6f ...\. *(flo
9d10: 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 at*)((LIST)->apt
9d20: 72 20 2d 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 r - sizeof(__vaw
9d30: 6f 72 64 29 29 09 09 09 5c 0a 20 20 29 20 20 29 ord))...\. ) )
9d40: 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f .#define va_arg_
9d50: 64 6f 75 62 6c 65 28 4c 49 53 54 29 20 20 5c 0a double(LIST) \.
9d60: 20 20 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 ((LIST)->memfa
9d70: 72 67 70 74 72 20 3c 20 26 28 4c 49 53 54 29 2d rgptr < &(LIST)-
9d80: 3e 66 61 72 67 5b 38 5d 09 09 09 09 5c 0a 20 20 >farg[8]....\.
9d90: 20 3f 20 2a 28 4c 49 53 54 29 2d 3e 6d 65 6d 66 ? *(LIST)->memf
9da0: 61 72 67 70 74 72 2b 2b 09 09 09 09 09 09 5c 0a argptr++......\.
9db0: 20 20 20 3a 20 28 28 4c 49 53 54 29 2d 3e 61 70 : ((LIST)->ap
9dc0: 74 72 20 2b 3d 20 73 69 7a 65 6f 66 28 5f 5f 76 tr += sizeof(__v
9dd0: 61 77 6f 72 64 29 2c 09 09 09 09 09 5c 0a 20 20 aword),.....\.
9de0: 20 20 20 20 2a 28 64 6f 75 62 6c 65 2a 29 28 28 *(double*)((
9df0: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 73 69 LIST)->aptr - si
9e00: 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 29 09 zeof(__vaword)).
9e10: 09 09 5c 0a 20 20 29 20 20 29 0a 23 65 6e 64 69 ..\. ) ).#endi
9e20: 66 0a 23 69 66 6e 64 65 66 20 5f 5f 76 61 5f 61 f.#ifndef __va_a
9e30: 72 67 5f 66 6c 6f 61 74 0a 23 64 65 66 69 6e 65 rg_float.#define
9e40: 20 5f 5f 76 61 5f 61 72 67 5f 66 6c 6f 61 74 28 __va_arg_float(
9e50: 4c 49 53 54 29 09 5f 5f 76 61 5f 61 72 67 28 4c LIST).__va_arg(L
9e60: 49 53 54 2c 66 6c 6f 61 74 29 0a 23 65 6e 64 69 IST,float).#endi
9e70: 66 0a 23 69 66 6e 64 65 66 20 76 61 5f 61 72 67 f.#ifndef va_arg
9e80: 5f 64 6f 75 62 6c 65 0a 23 64 65 66 69 6e 65 20 _double.#define
9e90: 76 61 5f 61 72 67 5f 64 6f 75 62 6c 65 28 4c 49 va_arg_double(LI
9ea0: 53 54 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 61 ST) \. (__va_a
9eb0: 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 54 lign_double(LIST
9ec0: 29 20 5f 5f 76 61 5f 61 72 67 28 4c 49 53 54 2c ) __va_arg(LIST,
9ed0: 64 6f 75 62 6c 65 29 29 0a 23 65 6e 64 69 66 0a double)).#endif.
9ee0: 0a 2f 2a 20 50 6f 69 6e 74 65 72 20 61 72 67 75 ./* Pointer argu
9ef0: 6d 65 6e 74 73 2e 20 2a 2f 0a 23 64 65 66 69 6e ments. */.#defin
9f00: 65 20 76 61 5f 61 72 67 5f 70 74 72 28 4c 49 53 e va_arg_ptr(LIS
9f10: 54 2c 54 59 50 45 29 09 5f 5f 76 61 5f 61 72 67 T,TYPE).__va_arg
9f20: 28 4c 49 53 54 2c 54 59 50 45 29 0a 0a 2f 2a 20 (LIST,TYPE)../*
9f30: 53 74 72 75 63 74 75 72 65 20 61 72 67 75 6d 65 Structure argume
9f40: 6e 74 73 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 nts. */.#define
9f50: 76 61 5f 61 72 67 5f 73 74 72 75 63 74 28 4c 49 va_arg_struct(LI
9f60: 53 54 2c 54 59 50 45 29 20 20 5c 0a 20 20 2a 28 ST,TYPE) \. *(
9f70: 54 59 50 45 2a 29 5f 5f 76 61 5f 61 72 67 5f 73 TYPE*)__va_arg_s
9f80: 74 72 75 63 74 28 4c 49 53 54 2c 73 69 7a 65 6f truct(LIST,sizeo
9f90: 66 28 54 59 50 45 29 2c 5f 5f 56 41 5f 61 6c 69 f(TYPE),__VA_ali
9fa0: 67 6e 6f 66 28 54 59 50 45 29 29 0a 2f 2a 20 5f gnof(TYPE))./* _
9fb0: 76 61 5f 61 72 67 5f 73 74 72 75 63 74 28 29 20 va_arg_struct()
9fc0: 69 73 20 6c 69 6b 65 20 76 61 5f 61 72 67 5f 73 is like va_arg_s
9fd0: 74 72 75 63 74 28 29 2c 20 65 78 63 65 70 74 20 truct(), except
9fe0: 74 68 61 74 20 79 6f 75 20 70 61 73 73 20 74 68 that you pass th
9ff0: 65 20 74 79 70 65 27 73 0a 20 2a 20 73 69 7a 65 e type's. * size
a000: 20 61 6e 64 20 61 6c 69 67 6e 6d 65 6e 74 20 69 and alignment i
a010: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 79 nstead of the ty
a020: 70 65 20 61 6e 64 20 67 65 74 20 74 68 65 20 76 pe and get the v
a030: 61 6c 75 65 27 73 20 61 64 64 72 65 73 73 20 69 alue's address i
a040: 6e 73 74 65 61 64 0a 20 2a 20 6f 66 20 74 68 65 nstead. * of the
a050: 20 76 61 6c 75 65 20 69 74 73 65 6c 66 2e 0a 20 value itself..
a060: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 76 61 5f 61 */.#define _va_a
a070: 72 67 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 rg_struct(LIST,T
a080: 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c YPE_SIZE,TYPE_AL
a090: 49 47 4e 29 20 20 5c 0a 20 20 28 76 6f 69 64 2a IGN) \. (void*
a0a0: 29 5f 5f 76 61 5f 61 72 67 5f 73 74 72 75 63 74 )__va_arg_struct
a0b0: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
a0c0: 54 59 50 45 5f 41 4c 49 47 4e 29 0a 2f 2a 20 53 TYPE_ALIGN)./* S
a0d0: 74 72 75 63 74 75 72 65 20 61 72 67 75 6d 65 6e tructure argumen
a0e0: 74 20 61 6c 69 67 6e 6d 65 6e 74 2e 20 2a 2f 0a t alignment. */.
a0f0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 #if defined(__i3
a100: 38 36 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 86__) && defined
a110: 28 5f 4d 53 43 5f 56 45 52 29 0a 2f 2a 20 49 6e (_MSC_VER)./* In
a120: 20 4d 53 56 43 2c 20 64 6f 75 62 6c 65 73 20 69 MSVC, doubles i
a130: 6e 73 69 64 65 20 73 74 72 75 63 74 75 72 65 73 nside structures
a140: 20 68 61 76 65 20 61 6c 69 67 6e 6d 65 6e 74 20 have alignment
a150: 38 2c 20 69 2e 65 2e 0a 20 2a 20 5f 5f 56 41 5f 8, i.e.. * __VA_
a160: 61 6c 69 67 6e 6f 66 28 64 6f 75 62 6c 65 29 20 alignof(double)
a170: 3d 20 38 2c 20 62 75 74 20 64 6f 75 62 6c 65 73 = 8, but doubles
a180: 20 28 61 6e 64 20 61 6c 73 6f 20 73 74 72 75 63 (and also struc
a190: 74 75 72 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 tures containing
a1a0: 0a 20 2a 20 64 6f 75 62 6c 65 73 29 20 61 72 65 . * doubles) are
a1b0: 20 70 61 73 73 65 64 20 6f 6e 20 74 68 65 20 73 passed on the s
a1c0: 74 61 63 6b 20 77 69 74 68 20 61 6c 69 67 6e 6d tack with alignm
a1d0: 65 6e 74 20 34 2e 20 4c 6f 6f 6b 73 20 72 65 61 ent 4. Looks rea
a1e0: 6c 6c 79 20 77 65 69 72 64 2e 0a 20 2a 2f 0a 23 lly weird.. */.#
a1f0: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 73 74 72 75 define __va_stru
a200: 63 74 5f 61 6c 69 67 6e 6d 65 6e 74 28 54 59 50 ct_alignment(TYP
a210: 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 28 E_ALIGN) \. ((
a220: 54 59 50 45 5f 41 4c 49 47 4e 29 20 3c 3d 20 34 TYPE_ALIGN) <= 4
a230: 20 3f 20 28 54 59 50 45 5f 41 4c 49 47 4e 29 20 ? (TYPE_ALIGN)
a240: 3a 20 34 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 : 4).#else.#defi
a250: 6e 65 20 5f 5f 76 61 5f 73 74 72 75 63 74 5f 61 ne __va_struct_a
a260: 6c 69 67 6e 6d 65 6e 74 28 54 59 50 45 5f 41 4c lignment(TYPE_AL
a270: 49 47 4e 29 20 20 5c 0a 20 20 28 54 59 50 45 5f IGN) \. (TYPE_
a280: 41 4c 49 47 4e 29 0a 23 65 6e 64 69 66 0a 23 64 ALIGN).#endif.#d
a290: 65 66 69 6e 65 20 5f 5f 76 61 5f 61 6c 69 67 6e efine __va_align
a2a0: 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 _struct(LIST,TYP
a2b0: 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 E_SIZE,TYPE_ALIG
a2c0: 4e 29 20 20 5c 0a 20 20 28 4c 49 53 54 29 2d 3e N) \. (LIST)->
a2d0: 61 70 74 72 20 3d 20 28 28 4c 49 53 54 29 2d 3e aptr = ((LIST)->
a2e0: 61 70 74 72 20 2b 20 5f 5f 76 61 5f 73 74 72 75 aptr + __va_stru
a2f0: 63 74 5f 61 6c 69 67 6e 6d 65 6e 74 28 54 59 50 ct_alignment(TYP
a300: 45 5f 41 4c 49 47 4e 29 2d 31 29 20 26 20 2d 28 E_ALIGN)-1) & -(
a310: 6c 6f 6e 67 29 5f 5f 76 61 5f 73 74 72 75 63 74 long)__va_struct
a320: 5f 61 6c 69 67 6e 6d 65 6e 74 28 54 59 50 45 5f _alignment(TYPE_
a330: 41 4c 49 47 4e 29 2c 0a 23 69 66 20 64 65 66 69 ALIGN),.#if defi
a340: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c ned(__i386__) ||
a350: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f defined(__m68k_
a360: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
a370: 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 alpha__) || defi
a380: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 7c 7c 20 ned(__arm__) ||
a390: 64 65 66 69 6e 65 64 28 5f 5f 6d 38 38 6b 5f 5f defined(__m88k__
a3a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 63 ) || defined(__c
a3b0: 6f 6e 76 65 78 5f 5f 29 20 7c 7c 20 64 65 66 69 onvex__) || defi
a3c0: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a ned(__x86_64__).
a3d0: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 #define __va_arg
a3e0: 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 _struct(LIST,TYP
a3f0: 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 E_SIZE,TYPE_ALIG
a400: 4e 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 61 6c N) \. (__va_al
a410: 69 67 6e 5f 73 74 72 75 63 74 28 4c 49 53 54 2c ign_struct(LIST,
a420: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 TYPE_SIZE,TYPE_A
a430: 4c 49 47 4e 29 09 09 09 09 5c 0a 20 20 20 5f 5f LIGN)....\. __
a440: 76 61 5f 61 72 67 5f 61 64 6a 75 73 74 65 64 28 va_arg_adjusted(
a450: 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 LIST,TYPE_SIZE,T
a460: 59 50 45 5f 41 4c 49 47 4e 29 09 09 09 09 5c 0a YPE_ALIGN)....\.
a470: 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 ).#endif.#if d
a480: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 efined(__mips__)
a490: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 6d && !defined(__m
a4a0: 69 70 73 6e 33 32 5f 5f 29 0a 2f 2a 20 73 6d 61 ipsn32__)./* sma
a4b0: 6c 6c 20 73 74 72 75 63 74 75 72 65 73 20 3c 20 ll structures <
a4c0: 31 20 77 6f 72 64 20 61 72 65 20 61 64 6a 75 73 1 word are adjus
a4d0: 74 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e ted depending on
a4e0: 20 63 6f 6d 70 69 6c 65 72 20 2a 2f 0a 23 64 65 compiler */.#de
a4f0: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 73 74 fine __va_arg_st
a500: 72 75 63 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 ruct(LIST,TYPE_S
a510: 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 IZE,TYPE_ALIGN)
a520: 20 5c 0a 20 20 28 5f 5f 76 61 5f 61 6c 69 67 6e \. (__va_align
a530: 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 _struct(LIST,TYP
a540: 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 E_SIZE,TYPE_ALIG
a550: 4e 29 09 09 09 09 5c 0a 20 20 20 28 28 4c 49 53 N)....\. ((LIS
a560: 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f 5f 56 41 T)->flags & __VA
a570: 5f 53 47 49 43 43 5f 53 54 52 55 43 54 5f 41 52 _SGICC_STRUCT_AR
a580: 47 53 09 09 09 09 5c 0a 20 20 20 20 3f 20 2f 2a GS....\. ? /*
a590: 20 53 47 49 20 4d 49 50 53 20 63 63 20 70 61 73 SGI MIPS cc pas
a5a0: 73 65 73 20 73 6d 61 6c 6c 20 73 74 72 75 63 74 ses small struct
a5b0: 75 72 65 73 20 6c 65 66 74 2d 61 64 6a 75 73 74 ures left-adjust
a5c0: 65 64 2c 20 61 6c 74 68 6f 75 67 68 20 62 69 67 ed, although big
a5d0: 2d 65 6e 64 69 61 6e 21 20 2a 2f 5c 0a 20 20 20 -endian! */\.
a5e0: 20 20 20 5f 5f 76 61 5f 61 72 67 5f 6c 65 66 74 __va_arg_left
a5f0: 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 adjusted(LIST,TY
a600: 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 PE_SIZE,TYPE_ALI
a610: 47 4e 29 09 09 09 5c 0a 20 20 20 20 3a 20 2f 2a GN)...\. : /*
a620: 20 53 47 49 20 4d 49 50 53 20 67 63 63 20 70 61 SGI MIPS gcc pa
a630: 73 73 65 73 20 73 6d 61 6c 6c 20 73 74 72 75 63 sses small struc
a640: 74 75 72 65 73 20 77 69 74 68 69 6e 20 74 68 65 tures within the
a650: 20 66 69 72 73 74 20 66 6f 75 72 20 77 6f 72 64 first four word
a660: 73 20 6c 65 66 74 2d 09 20 20 20 5c 0a 20 20 20 s left-. \.
a670: 20 20 20 20 2a 20 61 64 6a 75 73 74 65 64 2c 20 * adjusted,
a680: 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 for compatibilit
a690: 79 20 77 69 74 68 20 63 63 2e 20 42 75 74 20 73 y with cc. But s
a6a0: 74 72 75 63 74 75 72 65 73 20 69 6e 20 6d 65 6d tructures in mem
a6b0: 6f 72 79 20 61 72 65 20 70 61 73 73 65 64 20 20 ory are passed
a6c0: 5c 0a 20 20 20 20 20 20 20 2a 20 72 69 67 68 74 \. * right
a6d0: 2d 61 64 6a 75 73 74 65 64 21 21 20 53 65 65 20 -adjusted!! See
a6e0: 67 63 63 2d 32 2e 36 2e 33 2f 63 6f 6e 66 69 67 gcc-2.6.3/config
a6f0: 2f 6d 69 70 73 2f 6d 69 70 73 2e 63 3a 66 75 6e /mips/mips.c:fun
a700: 63 74 69 6f 6e 5f 61 72 67 28 29 2e 09 20 20 20 ction_arg()..
a710: 5c 0a 20 20 20 20 20 20 20 2a 2f 09 09 09 09 09 \. */.....
a720: 09 09 09 09 20 20 20 5c 0a 20 20 20 20 20 20 28 .... \. (
a730: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3c 20 28 (LIST)->aptr < (
a740: 4c 49 53 54 29 2d 3e 6d 65 6d 61 72 67 70 74 72 LIST)->memargptr
a750: 09 09 09 09 09 5c 0a 20 20 20 20 20 20 20 3f 20 .....\. ?
a760: 5f 5f 76 61 5f 61 72 67 5f 6c 65 66 74 61 64 6a __va_arg_leftadj
a770: 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f usted(LIST,TYPE_
a780: 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 SIZE,TYPE_ALIGN)
a790: 09 09 5c 0a 20 20 20 20 20 20 20 3a 20 5f 5f 76 ..\. : __v
a7a0: 61 5f 61 72 67 5f 72 69 67 68 74 61 64 6a 75 73 a_arg_rightadjus
a7b0: 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 ted(LIST,TYPE_SI
a7c0: 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 09 09 ZE,TYPE_ALIGN)..
a7d0: 5c 0a 20 20 29 29 20 20 29 0a 23 65 6e 64 69 66 \. )) ).#endif
a7e0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d .#if defined(__m
a7f0: 69 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 ipsn32__) || def
a800: 69 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 ined(__mips64__)
a810: 0a 2f 2a 20 73 6d 61 6c 6c 20 73 74 72 75 63 74 ./* small struct
a820: 75 72 65 73 20 3c 20 31 20 77 6f 72 64 20 61 72 ures < 1 word ar
a830: 65 20 61 64 6a 75 73 74 65 64 20 64 65 70 65 6e e adjusted depen
a840: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 65 72 ding on compiler
a850: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 */.#define __va
a860: 5f 61 72 67 5f 73 74 72 75 63 74 28 4c 49 53 54 _arg_struct(LIST
a870: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
a880: 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 5f 5f 76 ALIGN) \. (__v
a890: 61 5f 61 6c 69 67 6e 5f 73 74 72 75 63 74 28 4c a_align_struct(L
a8a0: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
a8b0: 50 45 5f 41 4c 49 47 4e 29 09 09 09 09 5c 0a 20 PE_ALIGN)....\.
a8c0: 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 ((LIST)->flags
a8d0: 20 26 20 5f 5f 56 41 5f 53 47 49 43 43 5f 53 54 & __VA_SGICC_ST
a8e0: 52 55 43 54 5f 41 52 47 53 09 09 09 09 5c 0a 20 RUCT_ARGS....\.
a8f0: 20 20 20 3f 20 2f 2a 20 53 47 49 20 4d 49 50 53 ? /* SGI MIPS
a900: 20 63 63 20 70 61 73 73 65 73 20 73 6d 61 6c 6c cc passes small
a910: 20 73 74 72 75 63 74 75 72 65 73 20 6c 65 66 74 structures left
a920: 2d 61 64 6a 75 73 74 65 64 2c 20 61 6c 74 68 6f -adjusted, altho
a930: 75 67 68 20 62 69 67 2d 65 6e 64 69 61 6e 21 20 ugh big-endian!
a940: 2a 2f 5c 0a 20 20 20 20 20 20 5f 5f 76 61 5f 61 */\. __va_a
a950: 72 67 5f 6c 65 66 74 61 64 6a 75 73 74 65 64 28 rg_leftadjusted(
a960: 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 LIST,TYPE_SIZE,T
a970: 59 50 45 5f 41 4c 49 47 4e 29 09 09 09 5c 0a 20 YPE_ALIGN)...\.
a980: 20 20 20 3a 20 2f 2a 20 53 47 49 20 4d 49 50 53 : /* SGI MIPS
a990: 20 67 63 63 20 70 61 73 73 65 73 20 73 6d 61 6c gcc passes smal
a9a0: 6c 20 73 74 72 75 63 74 75 72 65 73 20 72 69 67 l structures rig
a9b0: 68 74 2d 61 64 6a 75 73 74 65 64 2e 20 2a 2f 09 ht-adjusted. */.
a9c0: 5c 0a 20 20 20 20 20 20 5f 5f 76 61 5f 61 72 67 \. __va_arg
a9d0: 5f 72 69 67 68 74 61 64 6a 75 73 74 65 64 28 4c _rightadjusted(L
a9e0: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
a9f0: 50 45 5f 41 4c 49 47 4e 29 09 09 09 5c 0a 20 20 PE_ALIGN)...\.
aa00: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 )).#endif.#if de
aa10: 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f 5f fined(__rs6000__
aa20: 29 20 26 26 20 28 64 65 66 69 6e 65 64 28 5f 41 ) && (defined(_A
aa30: 49 58 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 IX) || (defined(
aa40: 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 20 64 65 66 __MACH__) && def
aa50: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 29 ined(__APPLE__))
aa60: 29 0a 2f 2a 20 73 6d 61 6c 6c 20 73 74 72 75 63 )./* small struc
aa70: 74 75 72 65 73 20 3c 20 31 20 77 6f 72 64 20 61 tures < 1 word a
aa80: 72 65 20 61 64 6a 75 73 74 65 64 20 64 65 70 65 re adjusted depe
aa90: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 65 nding on compile
aaa0: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 r */.#define __v
aab0: 61 5f 61 72 67 5f 73 74 72 75 63 74 28 4c 49 53 a_arg_struct(LIS
aac0: 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 T,TYPE_SIZE,TYPE
aad0: 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 5f 5f _ALIGN) \. (__
aae0: 76 61 5f 61 6c 69 67 6e 5f 73 74 72 75 63 74 28 va_align_struct(
aaf0: 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 LIST,TYPE_SIZE,T
ab00: 59 50 45 5f 41 4c 49 47 4e 29 09 09 09 09 5c 0a YPE_ALIGN)....\.
ab10: 20 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 ((LIST)->flag
ab20: 73 20 26 20 5f 5f 56 41 5f 41 49 58 43 43 5f 53 s & __VA_AIXCC_S
ab30: 54 52 55 43 54 5f 41 52 47 53 09 09 09 09 5c 0a TRUCT_ARGS....\.
ab40: 20 20 20 20 3f 20 2f 2a 20 41 49 58 20 63 63 20 ? /* AIX cc
ab50: 61 6e 64 20 78 6c 63 20 70 61 73 73 20 73 6d 61 and xlc pass sma
ab60: 6c 6c 20 73 74 72 75 63 74 75 72 65 73 20 6c 65 ll structures le
ab70: 66 74 2d 61 64 6a 75 73 74 65 64 2c 20 61 6c 74 ft-adjusted, alt
ab80: 68 6f 75 67 68 20 62 69 67 2d 65 6e 64 69 61 6e hough big-endian
ab90: 21 20 2a 2f 5c 0a 20 20 20 20 20 20 5f 5f 76 61 ! */\. __va
aba0: 5f 61 72 67 5f 6c 65 66 74 61 64 6a 75 73 74 65 _arg_leftadjuste
abb0: 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 d(LIST,TYPE_SIZE
abc0: 2c 54 59 50 45 5f 41 4c 49 47 4e 29 09 09 09 5c ,TYPE_ALIGN)...\
abd0: 0a 20 20 20 20 3a 20 2f 2a 20 67 63 63 20 70 61 . : /* gcc pa
abe0: 73 73 65 73 20 73 6d 61 6c 6c 20 73 74 72 75 63 sses small struc
abf0: 74 75 72 65 73 20 72 69 67 68 74 2d 61 64 6a 75 tures right-adju
ac00: 73 74 65 64 2e 20 2a 2f 09 09 09 5c 0a 20 20 20 sted. */...\.
ac10: 20 20 20 5f 5f 76 61 5f 61 72 67 5f 72 69 67 68 __va_arg_righ
ac20: 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 tadjusted(LIST,T
ac30: 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c YPE_SIZE,TYPE_AL
ac40: 49 47 4e 29 09 09 09 5c 0a 20 20 29 29 0a 23 65 IGN)...\. )).#e
ac50: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
ac60: 28 5f 5f 72 73 36 30 30 30 5f 5f 29 20 26 26 20 (__rs6000__) &&
ac70: 21 28 64 65 66 69 6e 65 64 28 5f 41 49 58 29 20 !(defined(_AIX)
ac80: 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 4d 41 || (defined(__MA
ac90: 43 48 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 CH__) && defined
aca0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 29 29 0a 2f 2a (__APPLE__)))./*
acb0: 20 53 74 72 75 63 74 75 72 65 73 20 61 72 65 20 Structures are
acc0: 70 61 73 73 65 64 20 61 73 20 70 6f 69 6e 74 65 passed as pointe
acd0: 72 73 20 74 6f 20 63 61 6c 6c 65 72 2d 6d 61 64 rs to caller-mad
ace0: 65 20 6c 6f 63 61 6c 20 63 6f 70 69 65 73 2e 20 e local copies.
acf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f */.#define __va_
ad00: 61 72 67 5f 73 74 72 75 63 74 28 4c 49 53 54 2c arg_struct(LIST,
ad10: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 TYPE_SIZE,TYPE_A
ad20: 4c 49 47 4e 29 20 20 5c 0a 20 20 76 61 5f 61 72 LIGN) \. va_ar
ad30: 67 5f 70 74 72 28 4c 49 53 54 2c 76 6f 69 64 2a g_ptr(LIST,void*
ad40: 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 ).#endif.#if def
ad50: 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 ined(__sparc__)
ad60: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 73 70 && !defined(__sp
ad70: 61 72 63 36 34 5f 5f 29 0a 2f 2a 20 53 74 72 75 arc64__)./* Stru
ad80: 63 74 75 72 65 73 20 61 72 65 20 70 61 73 73 65 ctures are passe
ad90: 64 20 61 73 20 70 6f 69 6e 74 65 72 73 20 74 6f d as pointers to
ada0: 20 63 61 6c 6c 65 72 2d 6d 61 64 65 20 6c 6f 63 caller-made loc
adb0: 61 6c 20 63 6f 70 69 65 73 2e 20 2a 2f 0a 23 64 al copies. */.#d
adc0: 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 73 efine __va_arg_s
add0: 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 45 5f truct(LIST,TYPE_
ade0: 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 SIZE,TYPE_ALIGN)
adf0: 20 20 5c 0a 20 20 76 61 5f 61 72 67 5f 70 74 72 \. va_arg_ptr
ae00: 28 4c 49 53 54 2c 76 6f 69 64 2a 29 0a 23 65 6e (LIST,void*).#en
ae10: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
ae20: 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a 2f 2a 20 __sparc64__)./*
ae30: 53 6d 61 6c 6c 20 73 74 72 75 63 74 75 72 65 73 Small structures
ae40: 20 61 72 65 20 70 61 73 73 65 64 20 6c 65 66 74 are passed left
ae50: 2d 61 64 6a 75 73 74 65 64 2c 20 61 6c 74 68 6f -adjusted, altho
ae60: 75 67 68 20 62 69 67 2d 65 6e 64 69 61 6e 21 20 ugh big-endian!
ae70: 2a 2f 0a 2f 2a 20 42 69 67 20 73 74 72 75 63 74 */./* Big struct
ae80: 75 72 65 73 20 61 72 65 20 70 61 73 73 65 64 20 ures are passed
ae90: 61 73 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 as pointers to c
aea0: 61 6c 6c 65 72 2d 6d 61 64 65 20 6c 6f 63 61 6c aller-made local
aeb0: 20 63 6f 70 69 65 73 2e 20 2a 2f 0a 23 64 65 66 copies. */.#def
aec0: 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 73 74 72 ine __va_arg_str
aed0: 75 63 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 uct(LIST,TYPE_SI
aee0: 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 ZE,TYPE_ALIGN)
aef0: 5c 0a 20 20 28 28 54 59 50 45 5f 53 49 5a 45 29 \. ((TYPE_SIZE)
af00: 20 3c 3d 20 31 36 09 09 09 09 09 09 09 5c 0a 20 <= 16.......\.
af10: 20 20 3f 20 28 5f 5f 76 61 5f 61 6c 69 67 6e 5f ? (__va_align_
af20: 73 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 45 struct(LIST,TYPE
af30: 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e _SIZE,TYPE_ALIGN
af40: 29 09 09 09 5c 0a 20 20 20 20 20 20 5f 5f 76 61 )...\. __va
af50: 5f 61 72 67 5f 6c 65 66 74 61 64 6a 75 73 74 65 _arg_leftadjuste
af60: 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 d(LIST,TYPE_SIZE
af70: 2c 54 59 50 45 5f 41 4c 49 47 4e 29 29 09 09 09 ,TYPE_ALIGN))...
af80: 5c 0a 20 20 20 3a 20 76 61 5f 61 72 67 5f 70 74 \. : va_arg_pt
af90: 72 28 4c 49 53 54 2c 76 6f 69 64 2a 29 09 09 09 r(LIST,void*)...
afa0: 09 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a ...\. ).#endif.
afb0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 33 #if defined(__s3
afc0: 39 30 5f 5f 29 0a 2f 2a 20 53 74 72 75 63 74 75 90__)./* Structu
afd0: 72 65 73 20 3c 3d 20 38 20 62 79 74 65 73 20 61 res <= 8 bytes a
afe0: 72 65 20 70 61 73 73 65 64 20 61 73 20 65 6d 62 re passed as emb
aff0: 65 64 64 65 64 20 63 6f 70 69 65 73 20 6f 6e 20 edded copies on
b000: 74 68 65 20 61 72 67 20 73 74 61 63 6b 2e 0a 20 the arg stack..
b010: 2a 20 42 69 67 20 73 74 72 75 63 74 75 72 65 73 * Big structures
b020: 20 61 72 65 20 70 61 73 73 65 64 20 61 73 20 70 are passed as p
b030: 6f 69 6e 74 65 72 73 20 74 6f 20 63 61 6c 6c 65 ointers to calle
b040: 72 2d 6d 61 64 65 20 6c 6f 63 61 6c 20 63 6f 70 r-made local cop
b050: 69 65 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 ies.. */.#define
b060: 20 5f 5f 76 61 5f 61 72 67 5f 73 74 72 75 63 74 __va_arg_struct
b070: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
b080: 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 TYPE_ALIGN) \.
b090: 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 21 3d ((TYPE_SIZE) !=
b0a0: 20 31 20 26 26 20 28 54 59 50 45 5f 53 49 5a 45 1 && (TYPE_SIZE
b0b0: 29 20 21 3d 20 32 20 26 26 20 28 54 59 50 45 5f ) != 2 && (TYPE_
b0c0: 53 49 5a 45 29 20 21 3d 20 34 20 26 26 20 28 54 SIZE) != 4 && (T
b0d0: 59 50 45 5f 53 49 5a 45 29 20 21 3d 20 38 20 5c YPE_SIZE) != 8 \
b0e0: 0a 20 20 20 3f 20 76 61 5f 61 72 67 5f 70 74 72 . ? va_arg_ptr
b0f0: 28 4c 49 53 54 2c 76 6f 69 64 2a 29 09 09 09 09 (LIST,void*)....
b100: 09 09 5c 0a 20 20 20 3a 20 28 76 6f 69 64 2a 29 ..\. : (void*)
b110: 5f 5f 76 61 5f 61 72 67 5f 72 69 67 68 74 61 64 __va_arg_rightad
b120: 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 45 justed(LIST,TYPE
b130: 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e _SIZE,TYPE_ALIGN
b140: 29 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a )..\. ).#endif.
b150: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 68 70 #if defined(__hp
b160: 70 61 5f 5f 29 0a 2f 2a 20 53 74 72 75 63 74 75 pa__)./* Structu
b170: 72 65 73 20 3c 3d 20 38 20 62 79 74 65 73 20 61 res <= 8 bytes a
b180: 72 65 20 70 61 73 73 65 64 20 61 73 20 65 6d 62 re passed as emb
b190: 65 64 64 65 64 20 63 6f 70 69 65 73 20 6f 6e 20 edded copies on
b1a0: 74 68 65 20 61 72 67 20 73 74 61 63 6b 2e 0a 20 the arg stack..
b1b0: 2a 20 42 69 67 20 73 74 72 75 63 74 75 72 65 73 * Big structures
b1c0: 20 61 72 65 20 70 61 73 73 65 64 20 61 73 20 70 are passed as p
b1d0: 6f 69 6e 74 65 72 73 20 74 6f 20 63 61 6c 6c 65 ointers to calle
b1e0: 72 2d 6d 61 64 65 20 6c 6f 63 61 6c 20 63 6f 70 r-made local cop
b1f0: 69 65 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 ies.. */.#define
b200: 20 5f 5f 76 61 5f 61 72 67 5f 73 74 72 75 63 74 __va_arg_struct
b210: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
b220: 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 TYPE_ALIGN) \.
b230: 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 3e 20 ((TYPE_SIZE) >
b240: 38 09 09 09 09 09 09 09 5c 0a 20 20 20 3f 20 76 8.......\. ? v
b250: 61 5f 61 72 67 5f 70 74 72 28 4c 49 53 54 2c 76 a_arg_ptr(LIST,v
b260: 6f 69 64 2a 29 09 09 09 09 09 09 5c 0a 20 20 20 oid*)......\.
b270: 3a 20 2f 2a 20 46 49 58 4d 45 3a 20 67 63 63 2d : /* FIXME: gcc-
b280: 32 2e 36 2e 33 20 70 61 73 73 65 73 20 73 74 72 2.6.3 passes str
b290: 75 63 74 75 72 65 73 20 3c 3d 20 34 20 62 79 74 uctures <= 4 byt
b2a0: 65 73 20 69 6e 20 6d 65 6d 6f 72 79 20 6c 65 66 es in memory lef
b2b0: 74 2d 61 64 6a 75 73 74 65 64 21 20 3f 3f 20 2a t-adjusted! ?? *
b2c0: 2f 5c 0a 20 20 20 20 20 28 76 6f 69 64 2a 29 5f /\. (void*)_
b2d0: 5f 76 61 5f 61 72 67 5f 72 69 67 68 74 61 64 6a _va_arg_rightadj
b2e0: 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f usted(LIST,TYPE_
b2f0: 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 SIZE,TYPE_ALIGN)
b300: 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 ..\. ).#endif.#
b310: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 61 36 if defined(__ia6
b320: 34 5f 5f 29 0a 2f 2a 20 54 79 70 65 73 20 6c 61 4__)./* Types la
b330: 72 67 65 72 20 74 68 61 6e 20 61 20 77 6f 72 64 rger than a word
b340: 20 68 61 76 65 20 32 2d 77 6f 72 64 20 61 6c 69 have 2-word ali
b350: 67 6e 6d 65 6e 74 2e 20 2a 2f 0a 23 64 65 66 69 gnment. */.#defi
b360: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 73 74 72 75 ne __va_arg_stru
b370: 63 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a ct(LIST,TYPE_SIZ
b380: 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c E,TYPE_ALIGN) \
b390: 0a 20 20 28 5f 5f 76 61 5f 61 6c 69 67 6e 5f 73 . (__va_align_s
b3a0: 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 45 5f truct(LIST,TYPE_
b3b0: 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 SIZE,TYPE_ALIGN)
b3c0: 09 09 09 09 5c 0a 20 20 20 28 28 54 59 50 45 5f ....\. ((TYPE_
b3d0: 53 49 5a 45 29 20 3e 20 73 69 7a 65 6f 66 28 5f SIZE) > sizeof(_
b3e0: 5f 76 61 77 6f 72 64 29 20 26 26 20 28 28 28 5f _vaword) && (((_
b3f0: 5f 76 61 77 6f 72 64 2a 29 28 4c 49 53 54 29 2d _vaword*)(LIST)-
b400: 3e 61 70 74 72 20 2d 20 28 4c 49 53 54 29 2d 3e >aptr - (LIST)->
b410: 73 61 70 74 72 29 20 26 20 31 29 20 3f 20 28 4c saptr) & 1) ? (L
b420: 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 IST)->aptr += si
b430: 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 20 3a zeof(__vaword) :
b440: 20 30 29 2c 20 5c 0a 20 20 20 5f 5f 76 61 5f 61 0), \. __va_a
b450: 72 67 5f 61 64 6a 75 73 74 65 64 28 4c 49 53 54 rg_adjusted(LIST
b460: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
b470: 41 4c 49 47 4e 29 09 09 09 09 5c 0a 20 20 29 0a ALIGN)....\. ).
b480: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 20 2a 20 44 #endif.../*. * D
b490: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65 efinition of the
b4a0: 20 76 61 5f 72 65 74 75 72 6e 5f 78 78 78 20 6d va_return_xxx m
b4b0: 61 63 72 6f 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 acros.. */.#defi
b4c0: 6e 65 20 5f 5f 76 61 5f 72 65 74 75 72 6e 28 4c ne __va_return(L
b4d0: 49 53 54 2c 52 45 54 54 59 50 45 29 20 20 5c 0a IST,RETTYPE) \.
b4e0: 20 20 28 28 28 4c 49 53 54 29 2d 3e 72 74 79 70 (((LIST)->rtyp
b4f0: 65 20 3d 3d 20 28 52 45 54 54 59 50 45 29 29 20 e == (RETTYPE))
b500: 7c 7c 20 5f 5f 76 61 5f 65 72 72 6f 72 31 28 28 || __va_error1((
b510: 4c 49 53 54 29 2d 3e 72 74 79 70 65 2c 52 45 54 LIST)->rtype,RET
b520: 54 59 50 45 29 29 0a 23 64 65 66 69 6e 65 20 76 TYPE)).#define v
b530: 61 5f 72 65 74 75 72 6e 5f 76 6f 69 64 28 4c 49 a_return_void(LI
b540: 53 54 29 20 20 5c 0a 20 20 5f 5f 76 61 5f 72 65 ST) \. __va_re
b550: 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 76 6f turn(LIST,__VAvo
b560: 69 64 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 id).#define va_r
b570: 65 74 75 72 6e 5f 63 68 61 72 28 4c 49 53 54 2c eturn_char(LIST,
b580: 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f VAL) \. (__va_
b590: 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 return(LIST,__VA
b5a0: 63 68 61 72 29 2c 20 28 4c 49 53 54 29 2d 3e 74 char), (LIST)->t
b5b0: 6d 70 2e 5f 63 68 61 72 20 3d 20 28 56 41 4c 29 mp._char = (VAL)
b5c0: 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 65 74 ).#define va_ret
b5d0: 75 72 6e 5f 73 63 68 61 72 28 4c 49 53 54 2c 56 urn_schar(LIST,V
b5e0: 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 72 AL) \. (__va_r
b5f0: 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 73 eturn(LIST,__VAs
b600: 63 68 61 72 29 2c 20 28 4c 49 53 54 29 2d 3e 74 char), (LIST)->t
b610: 6d 70 2e 5f 73 63 68 61 72 20 3d 20 28 56 41 4c mp._schar = (VAL
b620: 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 65 )).#define va_re
b630: 74 75 72 6e 5f 75 63 68 61 72 28 4c 49 53 54 2c turn_uchar(LIST,
b640: 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f VAL) \. (__va_
b650: 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 return(LIST,__VA
b660: 75 63 68 61 72 29 2c 20 28 4c 49 53 54 29 2d 3e uchar), (LIST)->
b670: 74 6d 70 2e 5f 75 63 68 61 72 20 3d 20 28 56 41 tmp._uchar = (VA
b680: 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 L)).#define va_r
b690: 65 74 75 72 6e 5f 73 68 6f 72 74 28 4c 49 53 54 eturn_short(LIST
b6a0: 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 ,VAL) \. (__va
b6b0: 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 _return(LIST,__V
b6c0: 41 73 68 6f 72 74 29 2c 20 28 4c 49 53 54 29 2d Ashort), (LIST)-
b6d0: 3e 74 6d 70 2e 5f 73 68 6f 72 74 20 3d 20 28 56 >tmp._short = (V
b6e0: 41 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f AL)).#define va_
b6f0: 72 65 74 75 72 6e 5f 75 73 68 6f 72 74 28 4c 49 return_ushort(LI
b700: 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f ST,VAL) \. (__
b710: 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f va_return(LIST,_
b720: 5f 56 41 75 73 68 6f 72 74 29 2c 20 28 4c 49 53 _VAushort), (LIS
b730: 54 29 2d 3e 74 6d 70 2e 5f 75 73 68 6f 72 74 20 T)->tmp._ushort
b740: 3d 20 28 56 41 4c 29 29 0a 23 64 65 66 69 6e 65 = (VAL)).#define
b750: 20 76 61 5f 72 65 74 75 72 6e 5f 69 6e 74 28 4c va_return_int(L
b760: 49 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f IST,VAL) \. (_
b770: 5f 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c _va_return(LIST,
b780: 5f 5f 56 41 69 6e 74 29 2c 20 28 4c 49 53 54 29 __VAint), (LIST)
b790: 2d 3e 74 6d 70 2e 5f 69 6e 74 20 3d 20 28 56 41 ->tmp._int = (VA
b7a0: 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 L)).#define va_r
b7b0: 65 74 75 72 6e 5f 75 69 6e 74 28 4c 49 53 54 2c eturn_uint(LIST,
b7c0: 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f VAL) \. (__va_
b7d0: 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 return(LIST,__VA
b7e0: 75 69 6e 74 29 2c 20 28 4c 49 53 54 29 2d 3e 74 uint), (LIST)->t
b7f0: 6d 70 2e 5f 75 69 6e 74 20 3d 20 28 56 41 4c 29 mp._uint = (VAL)
b800: 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 65 74 ).#define va_ret
b810: 75 72 6e 5f 6c 6f 6e 67 28 4c 49 53 54 2c 56 41 urn_long(LIST,VA
b820: 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 72 65 L) \. (__va_re
b830: 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 6c 6f turn(LIST,__VAlo
b840: 6e 67 29 2c 20 28 4c 49 53 54 29 2d 3e 74 6d 70 ng), (LIST)->tmp
b850: 2e 5f 6c 6f 6e 67 20 3d 20 28 56 41 4c 29 29 0a ._long = (VAL)).
b860: 23 64 65 66 69 6e 65 20 76 61 5f 72 65 74 75 72 #define va_retur
b870: 6e 5f 75 6c 6f 6e 67 28 4c 49 53 54 2c 56 41 4c n_ulong(LIST,VAL
b880: 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 72 65 74 ) \. (__va_ret
b890: 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 75 6c 6f urn(LIST,__VAulo
b8a0: 6e 67 29 2c 20 28 4c 49 53 54 29 2d 3e 74 6d 70 ng), (LIST)->tmp
b8b0: 2e 5f 75 6c 6f 6e 67 20 3d 20 28 56 41 4c 29 29 ._ulong = (VAL))
b8c0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d .#if defined(__m
b8d0: 69 70 73 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 ips64__) || defi
b8e0: 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 ned(__sparc64__)
b8f0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 6c || defined(__al
b900: 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 pha__) || define
b910: 64 28 5f 5f 69 61 36 34 5f 5f 29 20 7c 7c 20 64 d(__ia64__) || d
b920: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f efined(__x86_64_
b930: 5f 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 65 _).#define va_re
b940: 74 75 72 6e 5f 6c 6f 6e 67 6c 6f 6e 67 28 4c 49 turn_longlong(LI
b950: 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f ST,VAL) \. (__
b960: 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f va_return(LIST,_
b970: 5f 56 41 6c 6f 6e 67 6c 6f 6e 67 29 2c 20 28 4c _VAlonglong), (L
b980: 49 53 54 29 2d 3e 74 6d 70 2e 5f 6c 6f 6e 67 20 IST)->tmp._long
b990: 3d 20 28 56 41 4c 29 29 0a 23 64 65 66 69 6e 65 = (VAL)).#define
b9a0: 20 76 61 5f 72 65 74 75 72 6e 5f 75 6c 6f 6e 67 va_return_ulong
b9b0: 6c 6f 6e 67 28 4c 49 53 54 2c 56 41 4c 29 20 20 long(LIST,VAL)
b9c0: 5c 0a 20 20 28 5f 5f 76 61 5f 72 65 74 75 72 6e \. (__va_return
b9d0: 28 4c 49 53 54 2c 5f 5f 56 41 75 6c 6f 6e 67 6c (LIST,__VAulongl
b9e0: 6f 6e 67 29 2c 20 28 4c 49 53 54 29 2d 3e 74 6d ong), (LIST)->tm
b9f0: 70 2e 5f 75 6c 6f 6e 67 20 3d 20 28 56 41 4c 29 p._ulong = (VAL)
ba00: 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 ).#else.#define
ba10: 76 61 5f 72 65 74 75 72 6e 5f 6c 6f 6e 67 6c 6f va_return_longlo
ba20: 6e 67 28 4c 49 53 54 2c 56 41 4c 29 20 20 5c 0a ng(LIST,VAL) \.
ba30: 20 20 28 5f 5f 76 61 5f 72 65 74 75 72 6e 28 4c (__va_return(L
ba40: 49 53 54 2c 5f 5f 56 41 6c 6f 6e 67 6c 6f 6e 67 IST,__VAlonglong
ba50: 29 2c 20 28 4c 49 53 54 29 2d 3e 74 6d 70 2e 5f ), (LIST)->tmp._
ba60: 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 28 56 41 4c 29 longlong = (VAL)
ba70: 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 65 74 ).#define va_ret
ba80: 75 72 6e 5f 75 6c 6f 6e 67 6c 6f 6e 67 28 4c 49 urn_ulonglong(LI
ba90: 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f ST,VAL) \. (__
baa0: 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f va_return(LIST,_
bab0: 5f 56 41 75 6c 6f 6e 67 6c 6f 6e 67 29 2c 20 28 _VAulonglong), (
bac0: 4c 49 53 54 29 2d 3e 74 6d 70 2e 5f 75 6c 6f 6e LIST)->tmp._ulon
bad0: 67 6c 6f 6e 67 20 3d 20 28 56 41 4c 29 29 0a 23 glong = (VAL)).#
bae0: 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 76 61 endif.#define va
baf0: 5f 72 65 74 75 72 6e 5f 66 6c 6f 61 74 28 4c 49 _return_float(LI
bb00: 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f ST,VAL) \. (__
bb10: 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f va_return(LIST,_
bb20: 5f 56 41 66 6c 6f 61 74 29 2c 20 28 4c 49 53 54 _VAfloat), (LIST
bb30: 29 2d 3e 74 6d 70 2e 5f 66 6c 6f 61 74 20 3d 20 )->tmp._float =
bb40: 28 56 41 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 (VAL)).#define v
bb50: 61 5f 72 65 74 75 72 6e 5f 64 6f 75 62 6c 65 28 a_return_double(
bb60: 4c 49 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 LIST,VAL) \. (
bb70: 5f 5f 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 __va_return(LIST
bb80: 2c 5f 5f 56 41 64 6f 75 62 6c 65 29 2c 20 28 4c ,__VAdouble), (L
bb90: 49 53 54 29 2d 3e 74 6d 70 2e 5f 64 6f 75 62 6c IST)->tmp._doubl
bba0: 65 20 3d 20 28 56 41 4c 29 29 0a 23 64 65 66 69 e = (VAL)).#defi
bbb0: 6e 65 20 76 61 5f 72 65 74 75 72 6e 5f 70 74 72 ne va_return_ptr
bbc0: 28 4c 49 53 54 2c 54 59 50 45 2c 56 41 4c 29 20 (LIST,TYPE,VAL)
bbd0: 20 5c 0a 20 20 28 5f 5f 76 61 5f 72 65 74 75 72 \. (__va_retur
bbe0: 6e 28 4c 49 53 54 2c 5f 5f 56 41 76 6f 69 64 70 n(LIST,__VAvoidp
bbf0: 29 2c 20 28 4c 49 53 54 29 2d 3e 74 6d 70 2e 5f ), (LIST)->tmp._
bc00: 70 74 72 20 3d 20 28 76 6f 69 64 2a 29 28 54 59 ptr = (void*)(TY
bc10: 50 45 29 28 56 41 4c 29 29 0a 23 64 65 66 69 6e PE)(VAL)).#defin
bc20: 65 20 76 61 5f 72 65 74 75 72 6e 5f 73 74 72 75 e va_return_stru
bc30: 63 74 28 4c 49 53 54 2c 54 59 50 45 2c 56 41 4c ct(LIST,TYPE,VAL
bc40: 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 72 65 74 ) \. (__va_ret
bc50: 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 73 74 72 urn(LIST,__VAstr
bc60: 75 63 74 29 2c 20 2a 28 54 59 50 45 2a 29 28 28 uct), *(TYPE*)((
bc70: 4c 49 53 54 29 2d 3e 72 61 64 64 72 29 20 3d 20 LIST)->raddr) =
bc80: 28 56 41 4c 29 29 0a 23 64 65 66 69 6e 65 20 5f (VAL)).#define _
bc90: 76 61 5f 72 65 74 75 72 6e 5f 73 74 72 75 63 74 va_return_struct
bca0: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
bcb0: 54 59 50 45 5f 41 4c 49 47 4e 2c 56 41 4c 5f 41 TYPE_ALIGN,VAL_A
bcc0: 44 44 52 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f DDR) \. (__va_
bcd0: 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 return(LIST,__VA
bce0: 73 74 72 75 63 74 29 2c 09 09 09 09 09 5c 0a 20 struct),.....\.
bcf0: 20 20 5f 5f 73 74 72 75 63 74 63 70 79 28 28 76 __structcpy((v
bd00: 6f 69 64 2a 29 28 28 4c 49 53 54 29 2d 3e 72 61 oid*)((LIST)->ra
bd10: 64 64 72 29 2c 56 41 4c 5f 41 44 44 52 2c 54 59 ddr),VAL_ADDR,TY
bd20: 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 PE_SIZE,TYPE_ALI
bd30: 47 4e 29 09 5c 0a 20 20 29 0a 0a 0a 2f 2a 20 44 GN).\. ).../* D
bd40: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 etermine whether
bd50: 20 61 20 73 74 72 75 63 74 20 74 79 70 65 20 69 a struct type i
bd60: 73 20 77 6f 72 64 2d 73 70 6c 69 74 74 61 62 6c s word-splittabl
bd70: 65 2c 20 69 2e 65 2e 20 77 68 65 74 68 65 72 20 e, i.e. whether
bd80: 65 61 63 68 20 6f 66 0a 20 2a 20 69 74 73 20 63 each of. * its c
bd90: 6f 6d 70 6f 6e 65 6e 74 73 20 66 69 74 20 69 6e omponents fit in
bda0: 74 6f 20 61 20 72 65 67 69 73 74 65 72 2e 0a 20 to a register..
bdb0: 2a 20 54 68 65 20 65 6e 74 69 72 65 20 63 6f 6d * The entire com
bdc0: 70 75 74 61 74 69 6f 6e 20 69 73 20 64 6f 6e 65 putation is done
bdd0: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 at compile time
bde0: 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 76 61 .. */.#define va
bdf0: 5f 77 6f 72 64 5f 73 70 6c 69 74 74 61 62 6c 65 _word_splittable
be00: 5f 31 28 73 6c 6f 74 31 29 20 20 5c 0a 20 20 28 _1(slot1) \. (
be10: 5f 5f 76 61 5f 6f 66 66 73 65 74 31 28 73 6c 6f __va_offset1(slo
be20: 74 31 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 t1)/sizeof(__vaw
be30: 6f 72 64 29 20 3d 3d 20 28 5f 5f 76 61 5f 6f 66 ord) == (__va_of
be40: 66 73 65 74 31 28 73 6c 6f 74 31 29 2b 73 69 7a fset1(slot1)+siz
be50: 65 6f 66 28 73 6c 6f 74 31 29 2d 31 29 2f 73 69 eof(slot1)-1)/si
be60: 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 29 0a zeof(__vaword)).
be70: 23 64 65 66 69 6e 65 20 76 61 5f 77 6f 72 64 5f #define va_word_
be80: 73 70 6c 69 74 74 61 62 6c 65 5f 32 28 73 6c 6f splittable_2(slo
be90: 74 31 2c 73 6c 6f 74 32 29 20 20 5c 0a 20 20 28 t1,slot2) \. (
bea0: 28 5f 5f 76 61 5f 6f 66 66 73 65 74 31 28 73 6c (__va_offset1(sl
beb0: 6f 74 31 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 ot1)/sizeof(__va
bec0: 77 6f 72 64 29 20 3d 3d 20 28 5f 5f 76 61 5f 6f word) == (__va_o
bed0: 66 66 73 65 74 31 28 73 6c 6f 74 31 29 2b 73 69 ffset1(slot1)+si
bee0: 7a 65 6f 66 28 73 6c 6f 74 31 29 2d 31 29 2f 73 zeof(slot1)-1)/s
bef0: 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 29 izeof(__vaword))
bf00: 20 5c 0a 20 20 20 26 26 20 28 5f 5f 76 61 5f 6f \. && (__va_o
bf10: 66 66 73 65 74 32 28 73 6c 6f 74 31 2c 73 6c 6f ffset2(slot1,slo
bf20: 74 32 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 t2)/sizeof(__vaw
bf30: 6f 72 64 29 20 3d 3d 20 28 5f 5f 76 61 5f 6f 66 ord) == (__va_of
bf40: 66 73 65 74 32 28 73 6c 6f 74 31 2c 73 6c 6f 74 fset2(slot1,slot
bf50: 32 29 2b 73 69 7a 65 6f 66 28 73 6c 6f 74 32 29 2)+sizeof(slot2)
bf60: 2d 31 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 -1)/sizeof(__vaw
bf70: 6f 72 64 29 29 20 5c 0a 20 20 29 0a 23 64 65 66 ord)) \. ).#def
bf80: 69 6e 65 20 76 61 5f 77 6f 72 64 5f 73 70 6c 69 ine va_word_spli
bf90: 74 74 61 62 6c 65 5f 33 28 73 6c 6f 74 31 2c 73 ttable_3(slot1,s
bfa0: 6c 6f 74 32 2c 73 6c 6f 74 33 29 20 20 5c 0a 20 lot2,slot3) \.
bfb0: 20 28 28 5f 5f 76 61 5f 6f 66 66 73 65 74 31 28 ((__va_offset1(
bfc0: 73 6c 6f 74 31 29 2f 73 69 7a 65 6f 66 28 5f 5f slot1)/sizeof(__
bfd0: 76 61 77 6f 72 64 29 20 3d 3d 20 28 5f 5f 76 61 vaword) == (__va
bfe0: 5f 6f 66 66 73 65 74 31 28 73 6c 6f 74 31 29 2b _offset1(slot1)+
bff0: 73 69 7a 65 6f 66 28 73 6c 6f 74 31 29 2d 31 29 sizeof(slot1)-1)
c000: 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 /sizeof(__vaword
c010: 29 29 20 5c 0a 20 20 20 26 26 20 28 5f 5f 76 61 )) \. && (__va
c020: 5f 6f 66 66 73 65 74 32 28 73 6c 6f 74 31 2c 73 _offset2(slot1,s
c030: 6c 6f 74 32 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 lot2)/sizeof(__v
c040: 61 77 6f 72 64 29 20 3d 3d 20 28 5f 5f 76 61 5f aword) == (__va_
c050: 6f 66 66 73 65 74 32 28 73 6c 6f 74 31 2c 73 6c offset2(slot1,sl
c060: 6f 74 32 29 2b 73 69 7a 65 6f 66 28 73 6c 6f 74 ot2)+sizeof(slot
c070: 32 29 2d 31 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 2)-1)/sizeof(__v
c080: 61 77 6f 72 64 29 29 20 5c 0a 20 20 20 26 26 20 aword)) \. &&
c090: 28 5f 5f 76 61 5f 6f 66 66 73 65 74 33 28 73 6c (__va_offset3(sl
c0a0: 6f 74 31 2c 73 6c 6f 74 32 2c 73 6c 6f 74 33 29 ot1,slot2,slot3)
c0b0: 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 /sizeof(__vaword
c0c0: 29 20 3d 3d 20 28 5f 5f 76 61 5f 6f 66 66 73 65 ) == (__va_offse
c0d0: 74 33 28 73 6c 6f 74 31 2c 73 6c 6f 74 32 2c 73 t3(slot1,slot2,s
c0e0: 6c 6f 74 33 29 2b 73 69 7a 65 6f 66 28 73 6c 6f lot3)+sizeof(slo
c0f0: 74 33 29 2d 31 29 2f 73 69 7a 65 6f 66 28 5f 5f t3)-1)/sizeof(__
c100: 76 61 77 6f 72 64 29 29 20 5c 0a 20 20 29 0a 23 vaword)) \. ).#
c110: 64 65 66 69 6e 65 20 76 61 5f 77 6f 72 64 5f 73 define va_word_s
c120: 70 6c 69 74 74 61 62 6c 65 5f 34 28 73 6c 6f 74 plittable_4(slot
c130: 31 2c 73 6c 6f 74 32 2c 73 6c 6f 74 33 2c 73 6c 1,slot2,slot3,sl
c140: 6f 74 34 29 20 20 5c 0a 20 20 28 28 5f 5f 76 61 ot4) \. ((__va
c150: 5f 6f 66 66 73 65 74 31 28 73 6c 6f 74 31 29 2f _offset1(slot1)/
c160: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
c170: 20 3d 3d 20 28 5f 5f 76 61 5f 6f 66 66 73 65 74 == (__va_offset
c180: 31 28 73 6c 6f 74 31 29 2b 73 69 7a 65 6f 66 28 1(slot1)+sizeof(
c190: 73 6c 6f 74 31 29 2d 31 29 2f 73 69 7a 65 6f 66 slot1)-1)/sizeof
c1a0: 28 5f 5f 76 61 77 6f 72 64 29 29 20 5c 0a 20 20 (__vaword)) \.
c1b0: 20 26 26 20 28 5f 5f 76 61 5f 6f 66 66 73 65 74 && (__va_offset
c1c0: 32 28 73 6c 6f 74 31 2c 73 6c 6f 74 32 29 2f 73 2(slot1,slot2)/s
c1d0: 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 20 izeof(__vaword)
c1e0: 3d 3d 20 28 5f 5f 76 61 5f 6f 66 66 73 65 74 32 == (__va_offset2
c1f0: 28 73 6c 6f 74 31 2c 73 6c 6f 74 32 29 2b 73 69 (slot1,slot2)+si
c200: 7a 65 6f 66 28 73 6c 6f 74 32 29 2d 31 29 2f 73 zeof(slot2)-1)/s
c210: 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 29 izeof(__vaword))
c220: 20 5c 0a 20 20 20 26 26 20 28 5f 5f 76 61 5f 6f \. && (__va_o
c230: 66 66 73 65 74 33 28 73 6c 6f 74 31 2c 73 6c 6f ffset3(slot1,slo
c240: 74 32 2c 73 6c 6f 74 33 29 2f 73 69 7a 65 6f 66 t2,slot3)/sizeof
c250: 28 5f 5f 76 61 77 6f 72 64 29 20 3d 3d 20 28 5f (__vaword) == (_
c260: 5f 76 61 5f 6f 66 66 73 65 74 33 28 73 6c 6f 74 _va_offset3(slot
c270: 31 2c 73 6c 6f 74 32 2c 73 6c 6f 74 33 29 2b 73 1,slot2,slot3)+s
c280: 69 7a 65 6f 66 28 73 6c 6f 74 33 29 2d 31 29 2f izeof(slot3)-1)/
c290: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
c2a0: 29 20 5c 0a 20 20 20 26 26 20 28 5f 5f 76 61 5f ) \. && (__va_
c2b0: 6f 66 66 73 65 74 34 28 73 6c 6f 74 31 2c 73 6c offset4(slot1,sl
c2c0: 6f 74 32 2c 73 6c 6f 74 33 2c 73 6c 6f 74 34 29 ot2,slot3,slot4)
c2d0: 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 /sizeof(__vaword
c2e0: 29 20 3d 3d 20 28 5f 5f 76 61 5f 6f 66 66 73 65 ) == (__va_offse
c2f0: 74 34 28 73 6c 6f 74 31 2c 73 6c 6f 74 32 2c 73 t4(slot1,slot2,s
c300: 6c 6f 74 33 2c 73 6c 6f 74 34 29 2b 73 69 7a 65 lot3,slot4)+size
c310: 6f 66 28 73 6c 6f 74 34 29 2d 31 29 2f 73 69 7a of(slot4)-1)/siz
c320: 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 29 20 5c eof(__vaword)) \
c330: 0a 20 20 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 . ).#define __v
c340: 61 5f 6f 66 66 73 65 74 31 28 73 6c 6f 74 31 29 a_offset1(slot1)
c350: 20 20 5c 0a 20 20 30 0a 23 64 65 66 69 6e 65 20 \. 0.#define
c360: 5f 5f 76 61 5f 6f 66 66 73 65 74 32 28 73 6c 6f __va_offset2(slo
c370: 74 31 2c 73 6c 6f 74 32 29 20 20 5c 0a 20 20 28 t1,slot2) \. (
c380: 28 5f 5f 76 61 5f 6f 66 66 73 65 74 31 28 73 6c (__va_offset1(sl
c390: 6f 74 31 29 2b 73 69 7a 65 6f 66 28 73 6c 6f 74 ot1)+sizeof(slot
c3a0: 31 29 2b 5f 5f 56 41 5f 61 6c 69 67 6e 6f 66 28 1)+__VA_alignof(
c3b0: 73 6c 6f 74 32 29 2d 31 29 20 26 20 2d 28 6c 6f slot2)-1) & -(lo
c3c0: 6e 67 29 5f 5f 56 41 5f 61 6c 69 67 6e 6f 66 28 ng)__VA_alignof(
c3d0: 73 6c 6f 74 32 29 29 0a 23 64 65 66 69 6e 65 20 slot2)).#define
c3e0: 5f 5f 76 61 5f 6f 66 66 73 65 74 33 28 73 6c 6f __va_offset3(slo
c3f0: 74 31 2c 73 6c 6f 74 32 2c 73 6c 6f 74 33 29 20 t1,slot2,slot3)
c400: 20 5c 0a 20 20 28 28 5f 5f 76 61 5f 6f 66 66 73 \. ((__va_offs
c410: 65 74 32 28 73 6c 6f 74 31 2c 73 6c 6f 74 32 29 et2(slot1,slot2)
c420: 2b 73 69 7a 65 6f 66 28 73 6c 6f 74 32 29 2b 5f +sizeof(slot2)+_
c430: 5f 56 41 5f 61 6c 69 67 6e 6f 66 28 73 6c 6f 74 _VA_alignof(slot
c440: 33 29 2d 31 29 20 26 20 2d 28 6c 6f 6e 67 29 5f 3)-1) & -(long)_
c450: 5f 56 41 5f 61 6c 69 67 6e 6f 66 28 73 6c 6f 74 _VA_alignof(slot
c460: 33 29 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 3)).#define __va
c470: 5f 6f 66 66 73 65 74 34 28 73 6c 6f 74 31 2c 73 _offset4(slot1,s
c480: 6c 6f 74 32 2c 73 6c 6f 74 33 2c 73 6c 6f 74 34 lot2,slot3,slot4
c490: 29 20 20 5c 0a 20 20 28 28 5f 5f 76 61 5f 6f 66 ) \. ((__va_of
c4a0: 66 73 65 74 33 28 73 6c 6f 74 31 2c 73 6c 6f 74 fset3(slot1,slot
c4b0: 32 2c 73 6c 6f 74 33 29 2b 73 69 7a 65 6f 66 28 2,slot3)+sizeof(
c4c0: 73 6c 6f 74 33 29 2b 5f 5f 56 41 5f 61 6c 69 67 slot3)+__VA_alig
c4d0: 6e 6f 66 28 73 6c 6f 74 34 29 2d 31 29 20 26 20 nof(slot4)-1) &
c4e0: 2d 28 6c 6f 6e 67 29 5f 5f 56 41 5f 61 6c 69 67 -(long)__VA_alig
c4f0: 6e 6f 66 28 73 6c 6f 74 34 29 29 0a 0a 0a 2f 2a nof(slot4)).../*
c500: 0a 20 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 . * Miscellaneou
c510: 73 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 0a s declarations..
c520: 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 63 70 6c */.#ifdef __cpl
c530: 75 73 70 6c 75 73 0a 65 78 74 65 72 6e 20 22 43 usplus.extern "C
c540: 22 20 76 6f 69 64 20 28 2a 76 61 63 61 6c 6c 29 " void (*vacall)
c550: 20 28 29 3b 20 2f 2a 20 74 68 65 20 72 65 74 75 (); /* the retu
c560: 72 6e 20 74 79 70 65 20 69 73 20 76 61 72 69 61 rn type is varia
c570: 62 6c 65 2c 20 6e 6f 74 20 76 6f 69 64 21 20 2a ble, not void! *
c580: 2f 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20 76 /.#else.extern v
c590: 6f 69 64 20 28 2a 76 61 63 61 6c 6c 29 20 28 29 oid (*vacall) ()
c5a0: 3b 20 2f 2a 20 74 68 65 20 72 65 74 75 72 6e 20 ; /* the return
c5b0: 74 79 70 65 20 69 73 20 76 61 72 69 61 62 6c 65 type is variable
c5c0: 2c 20 6e 6f 74 20 76 6f 69 64 21 20 2a 2f 0a 23 , not void! */.#
c5d0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
c5e0: 64 28 5f 5f 53 54 44 43 5f 5f 29 20 7c 7c 20 64 d(__STDC__) || d
c5f0: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 efined(__GNUC__)
c600: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 63 70 || defined(__cp
c610: 6c 75 73 70 6c 75 73 29 0a 65 78 74 65 72 6e 20 lusplus).extern
c620: 76 6f 69 64 20 28 2a 20 76 61 63 61 6c 6c 5f 66 void (* vacall_f
c630: 75 6e 63 74 69 6f 6e 29 20 28 76 61 5f 61 6c 69 unction) (va_ali
c640: 73 74 29 3b 0a 65 78 74 65 72 6e 20 69 6e 74 20 st);.extern int
c650: 5f 5f 76 61 5f 65 72 72 6f 72 31 20 28 65 6e 75 __va_error1 (enu
c660: 6d 20 5f 5f 56 41 74 79 70 65 2c 20 65 6e 75 6d m __VAtype, enum
c670: 20 5f 5f 56 41 74 79 70 65 29 3b 0a 65 78 74 65 __VAtype);.exte
c680: 72 6e 20 69 6e 74 20 5f 5f 76 61 5f 65 72 72 6f rn int __va_erro
c690: 72 32 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 r2 (unsigned int
c6a0: 29 3b 0a 65 78 74 65 72 6e 20 76 6f 69 64 20 5f );.extern void _
c6b0: 5f 73 74 72 75 63 74 63 70 79 20 28 76 6f 69 64 _structcpy (void
c6c0: 2a 20 64 65 73 74 2c 20 76 6f 69 64 2a 20 73 72 * dest, void* sr
c6d0: 63 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 c, unsigned long
c6e0: 20 73 69 7a 65 2c 20 75 6e 73 69 67 6e 65 64 20 size, unsigned
c6f0: 6c 6f 6e 67 20 61 6c 69 67 6e 6d 65 6e 74 29 3b long alignment);
c700: 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20 76 6f .#else.extern vo
c710: 69 64 20 28 2a 20 76 61 63 61 6c 6c 5f 66 75 6e id (* vacall_fun
c720: 63 74 69 6f 6e 29 20 28 29 3b 0a 65 78 74 65 72 ction) ();.exter
c730: 6e 20 69 6e 74 20 5f 5f 76 61 5f 65 72 72 6f 72 n int __va_error
c740: 31 20 28 29 3b 0a 65 78 74 65 72 6e 20 69 6e 74 1 ();.extern int
c750: 20 5f 5f 76 61 5f 65 72 72 6f 72 32 20 28 29 3b __va_error2 ();
c760: 0a 65 78 74 65 72 6e 20 76 6f 69 64 20 5f 5f 73 .extern void __s
c770: 74 72 75 63 74 63 70 79 20 28 29 3b 0a 23 65 6e tructcpy ();.#en
c780: 64 69 66 0a 74 79 70 65 64 65 66 20 75 6e 69 6f dif.typedef unio
c790: 6e 20 7b 20 5f 5f 76 61 77 6f 72 64 20 72 6f 6f n { __vaword roo
c7a0: 6d 5b 5f 5f 56 41 5f 41 4c 49 53 54 5f 57 4f 52 m[__VA_ALIST_WOR
c7b0: 44 53 5d 3b 20 64 6f 75 62 6c 65 20 61 6c 69 67 DS]; double alig
c7c0: 6e 3b 20 7d 20 5f 5f 76 61 5f 73 74 72 75 63 74 n; } __va_struct
c7d0: 5f 62 75 66 66 65 72 5f 74 3b 0a 65 78 74 65 72 _buffer_t;.exter
c7e0: 6e 20 5f 5f 76 61 5f 73 74 72 75 63 74 5f 62 75 n __va_struct_bu
c7f0: 66 66 65 72 5f 74 20 5f 5f 76 61 5f 73 74 72 75 ffer_t __va_stru
c800: 63 74 5f 62 75 66 66 65 72 3b 0a 0a 0a 23 65 6e ct_buffer;...#en
c810: 64 69 66 20 2f 2a 20 5f 56 41 43 41 4c 4c 5f 48 dif /* _VACALL_H
c820: 20 2a 2f 0a */.