0000: 23 69 66 6e 64 65 66 20 5f 56 41 43 41 4c 4c 5f #ifndef _VACALL_
0010: 48 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 H
0020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0030: 2f 2a 2d 2a 2d 20 43 20 2d 2a 2d 2a 2f 0a 23 64 /*-*- C -*-*/.#d
0040: 65 66 69 6e 65 20 5f 56 41 43 41 4c 4c 5f 48 0a efine _VACALL_H.
0050: 0a 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 ./*. * Copyright
0060: 20 31 39 39 35 2d 32 30 30 34 20 42 72 75 6e 6f 1995-2004 Bruno
0070: 20 48 61 69 62 6c 65 2c 20 3c 62 72 75 6e 6f 40 Haible, <bruno@
0080: 63 6c 69 73 70 2e 6f 72 67 3e 0a 20 2a 0a 20 2a clisp.org>. *. *
0090: 20 54 68 69 73 20 69 73 20 66 72 65 65 20 73 6f This is free so
00a0: 66 74 77 61 72 65 20 64 69 73 74 72 69 62 75 74 ftware distribut
00b0: 65 64 20 75 6e 64 65 72 20 74 68 65 20 47 4e 55 ed under the GNU
00c0: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 General Public
00d0: 4c 69 63 65 6e 63 65 0a 20 2a 20 64 65 73 63 72 Licence. * descr
00e0: 69 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 ibed in the file
00f0: 20 43 4f 50 59 49 4e 47 2e 20 43 6f 6e 74 61 63 COPYING. Contac
0100: 74 20 74 68 65 20 61 75 74 68 6f 72 20 69 66 20 t the author if
0110: 79 6f 75 20 64 6f 6e 27 74 20 68 61 76 65 20 74 you don't have t
0120: 68 69 73 0a 20 2a 20 6f 72 20 63 61 6e 27 74 20 his. * or can't
0130: 6c 69 76 65 20 77 69 74 68 20 69 74 2e 20 54 68 live with it. Th
0140: 65 72 65 20 69 73 20 41 42 53 4f 4c 55 54 45 4c ere is ABSOLUTEL
0150: 59 20 4e 4f 20 57 41 52 52 41 4e 54 59 2c 20 65 Y NO WARRANTY, e
0160: 78 70 6c 69 63 69 74 20 6f 72 20 69 6d 70 6c 69 xplicit or impli
0170: 65 64 2c 0a 20 2a 20 6f 6e 20 74 68 69 73 20 73 ed,. * on this s
0180: 6f 66 74 77 61 72 65 2e 0a 20 2a 2f 0a 0a 0a 2f oftware.. */.../
0190: 2a 20 54 68 65 73 65 20 64 65 66 69 6e 69 74 69 * These definiti
01a0: 6f 6e 73 20 61 72 65 20 61 64 6a 75 73 74 65 64 ons are adjusted
01b0: 20 62 79 20 60 63 6f 6e 66 69 67 75 72 65 27 20 by `configure'
01c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 2a automatically. *
01d0: 2f 0a 0a 2f 2a 20 43 50 55 20 2a 2f 0a 23 69 66 /../* CPU */.#if
01e0: 6e 64 65 66 20 5f 5f 69 33 38 36 5f 5f 0a 23 75 ndef __i386__.#u
01f0: 6e 64 65 66 20 5f 5f 69 33 38 36 5f 5f 0a 23 65 ndef __i386__.#e
0200: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 5f 5f 6d ndif.#ifndef __m
0210: 36 38 6b 5f 5f 0a 23 75 6e 64 65 66 20 5f 5f 6d 68k__.#undef __m
0220: 36 38 6b 5f 5f 0a 23 65 6e 64 69 66 0a 23 69 66 68k__.#endif.#if
0230: 6e 64 65 66 20 5f 5f 6d 69 70 73 5f 5f 0a 23 75 ndef __mips__.#u
0240: 6e 64 65 66 20 5f 5f 6d 69 70 73 5f 5f 0a 23 65 ndef __mips__.#e
0250: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 5f 5f 6d ndif.#ifndef __m
0260: 69 70 73 6e 33 32 5f 5f 0a 23 75 6e 64 65 66 20 ipsn32__.#undef
0270: 5f 5f 6d 69 70 73 6e 33 32 5f 5f 0a 23 65 6e 64 __mipsn32__.#end
0280: 69 66 0a 23 69 66 6e 64 65 66 20 5f 5f 6d 69 70 if.#ifndef __mip
0290: 73 36 34 5f 5f 0a 23 75 6e 64 65 66 20 5f 5f 6d s64__.#undef __m
02a0: 69 70 73 36 34 5f 5f 0a 23 65 6e 64 69 66 0a 23 ips64__.#endif.#
02b0: 69 66 6e 64 65 66 20 5f 5f 73 70 61 72 63 5f 5f ifndef __sparc__
02c0: 0a 23 75 6e 64 65 66 20 5f 5f 73 70 61 72 63 5f .#undef __sparc_
02d0: 5f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 _.#endif.#ifndef
02e0: 20 5f 5f 73 70 61 72 63 36 34 5f 5f 0a 23 75 6e __sparc64__.#un
02f0: 64 65 66 20 5f 5f 73 70 61 72 63 36 34 5f 5f 0a def __sparc64__.
0300: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 5f #endif.#ifndef _
0310: 5f 61 6c 70 68 61 5f 5f 0a 23 75 6e 64 65 66 20 _alpha__.#undef
0320: 5f 5f 61 6c 70 68 61 5f 5f 0a 23 65 6e 64 69 66 __alpha__.#endif
0330: 0a 23 69 66 6e 64 65 66 20 5f 5f 68 70 70 61 5f .#ifndef __hppa_
0340: 5f 0a 23 75 6e 64 65 66 20 5f 5f 68 70 70 61 5f _.#undef __hppa_
0350: 5f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 _.#endif.#ifndef
0360: 20 5f 5f 61 72 6d 5f 5f 0a 23 75 6e 64 65 66 20 __arm__.#undef
0370: 5f 5f 61 72 6d 5f 5f 0a 23 65 6e 64 69 66 0a 23 __arm__.#endif.#
0380: 69 66 6e 64 65 66 20 5f 5f 72 73 36 30 30 30 5f ifndef __rs6000_
0390: 5f 0a 23 75 6e 64 65 66 20 5f 5f 72 73 36 30 30 _.#undef __rs600
03a0: 30 5f 5f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 0__.#endif.#ifnd
03b0: 65 66 20 5f 5f 73 33 39 30 5f 5f 0a 23 75 6e 64 ef __s390__.#und
03c0: 65 66 20 5f 5f 73 33 39 30 5f 5f 0a 23 65 6e 64 ef __s390__.#end
03d0: 69 66 0a 23 69 66 6e 64 65 66 20 5f 5f 6d 38 38 if.#ifndef __m88
03e0: 6b 5f 5f 0a 23 75 6e 64 65 66 20 5f 5f 6d 38 38 k__.#undef __m88
03f0: 6b 5f 5f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 k__.#endif.#ifnd
0400: 65 66 20 5f 5f 63 6f 6e 76 65 78 5f 5f 0a 23 75 ef __convex__.#u
0410: 6e 64 65 66 20 5f 5f 63 6f 6e 76 65 78 5f 5f 0a ndef __convex__.
0420: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 5f #endif.#ifndef _
0430: 5f 69 61 36 34 5f 5f 0a 23 75 6e 64 65 66 20 5f _ia64__.#undef _
0440: 5f 69 61 36 34 5f 5f 0a 23 65 6e 64 69 66 0a 23 _ia64__.#endif.#
0450: 69 66 6e 64 65 66 20 5f 5f 78 38 36 5f 36 34 5f ifndef __x86_64_
0460: 5f 0a 23 75 6e 64 65 66 20 5f 5f 78 38 36 5f 36 _.#undef __x86_6
0470: 34 5f 5f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 43 4__.#endif../* C
0480: 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f alling conventio
0490: 6e 20 2a 2f 0a 2f 2a 20 44 65 66 69 6e 65 20 69 n */./* Define i
04a0: 66 20 75 73 69 6e 67 20 70 63 63 20 6e 6f 6e 2d f using pcc non-
04b0: 72 65 65 6e 74 72 61 6e 74 20 73 74 72 75 63 74 reentrant struct
04c0: 20 72 65 74 75 72 6e 20 63 6f 6e 76 65 6e 74 69 return conventi
04d0: 6f 6e 20 2a 2f 0a 23 75 6e 64 65 66 20 5f 5f 50 on */.#undef __P
04e0: 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e CC_STRUCT_RETURN
04f0: 5f 5f 0a 2f 2a 20 44 65 66 69 6e 65 20 69 66 20 __./* Define if
0500: 73 6d 61 6c 6c 20 73 74 72 75 63 74 73 20 61 72 small structs ar
0510: 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 72 65 e returned in re
0520: 67 69 73 74 65 72 73 20 2a 2f 0a 23 75 6e 64 65 gisters */.#unde
0530: 66 20 5f 5f 53 4d 41 4c 4c 5f 53 54 52 55 43 54 f __SMALL_STRUCT
0540: 5f 52 45 54 55 52 4e 5f 5f 0a 2f 2a 20 44 65 66 _RETURN__./* Def
0550: 69 6e 65 20 69 66 20 66 6c 6f 61 74 69 6e 67 2d ine if floating-
0560: 70 6f 69 6e 74 20 72 65 73 75 6c 74 73 20 61 72 point results ar
0570: 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 74 68 e returned in th
0580: 65 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74 e integer regist
0590: 65 72 73 20 2a 2f 0a 23 75 6e 64 65 66 20 5f 5f ers */.#undef __
05a0: 49 52 45 47 5f 46 4c 4f 41 54 5f 52 45 54 55 52 IREG_FLOAT_RETUR
05b0: 4e 5f 5f 0a 0a 2f 2a 20 43 4c 5f 4c 4f 4e 47 4c N__../* CL_LONGL
05c0: 4f 4e 47 20 2a 2f 0a 2f 2a 20 44 65 66 69 6e 65 ONG */./* Define
05d0: 20 69 66 20 79 6f 75 72 20 63 6f 6d 70 69 6c 65 if your compile
05e0: 72 20 73 75 70 70 6f 72 74 73 20 74 68 65 20 60 r supports the `
05f0: 6c 6f 6e 67 20 6c 6f 6e 67 27 20 74 79 70 65 2e long long' type.
0600: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 48 41 56 45 */.#ifndef HAVE
0610: 5f 4c 4f 4e 47 4c 4f 4e 47 0a 23 75 6e 64 65 66 _LONGLONG.#undef
0620: 20 48 41 56 45 5f 4c 4f 4e 47 4c 4f 4e 47 0a 23 HAVE_LONGLONG.#
0630: 65 6e 64 69 66 0a 0a 2f 2a 20 41 43 5f 43 5f 43 endif../* AC_C_C
0640: 48 41 52 5f 55 4e 53 49 47 4e 45 44 20 2a 2f 0a HAR_UNSIGNED */.
0650: 23 69 66 6e 64 65 66 20 5f 5f 43 48 41 52 5f 55 #ifndef __CHAR_U
0660: 4e 53 49 47 4e 45 44 5f 5f 0a 23 75 6e 64 65 66 NSIGNED__.#undef
0670: 20 5f 5f 43 48 41 52 5f 55 4e 53 49 47 4e 45 44 __CHAR_UNSIGNED
0680: 5f 5f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 45 6e __.#endif../* En
0690: 64 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e 73 d of definitions
06a0: 20 61 64 6a 75 73 74 65 64 20 62 79 20 60 63 6f adjusted by `co
06b0: 6e 66 69 67 75 72 65 27 2e 20 2a 2f 0a 0a 0a 2f nfigure'. */.../
06c0: 2a 20 4d 61 78 20 23 20 77 6f 72 64 73 20 69 6e * Max # words in
06d0: 20 61 72 67 75 6d 65 6e 74 2d 6c 69 73 74 20 61 argument-list a
06e0: 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 73 74 72 nd temporary str
06f0: 75 63 74 75 72 65 20 73 74 6f 72 61 67 65 2e 0a ucture storage..
0700: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 5f 56 41 */.#ifndef __VA
0710: 5f 41 4c 49 53 54 5f 57 4f 52 44 53 0a 23 64 65 _ALIST_WORDS.#de
0720: 66 69 6e 65 20 5f 5f 56 41 5f 41 4c 49 53 54 5f fine __VA_ALIST_
0730: 57 4f 52 44 53 20 20 32 35 36 0a 23 65 6e 64 69 WORDS 256.#endi
0740: 66 0a 0a 2f 2a 20 54 68 65 20 60 73 69 67 6e 65 f../* The `signe
0750: 64 27 20 6b 65 79 77 6f 72 64 2e 0a 20 2a 2f 0a d' keyword.. */.
0760: 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 53 #if !defined(__S
0770: 54 44 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e TDC__) && !defin
0780: 65 64 28 5f 5f 43 48 41 52 5f 55 4e 53 49 47 4e ed(__CHAR_UNSIGN
0790: 45 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 ED__) && !define
07a0: 64 28 73 69 67 6e 65 64 29 0a 23 64 65 66 69 6e d(signed).#defin
07b0: 65 20 73 69 67 6e 65 64 0a 23 65 6e 64 69 66 0a e signed.#endif.
07c0: 0a 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 ./* Determine th
07d0: 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 66 20 61 e alignment of a
07e0: 20 74 79 70 65 20 61 74 20 63 6f 6d 70 69 6c 65 type at compile
07f0: 20 74 69 6d 65 2e 0a 20 2a 2f 0a 23 69 66 20 64 time.. */.#if d
0800: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 efined(__GNUC__)
0810: 0a 23 64 65 66 69 6e 65 20 5f 5f 56 41 5f 61 6c .#define __VA_al
0820: 69 67 6e 6f 66 20 5f 5f 61 6c 69 67 6e 6f 66 5f ignof __alignof_
0830: 5f 0a 23 65 6c 73 65 0a 23 69 66 20 64 65 66 69 _.#else.#if defi
0840: 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 7c 7c ned(__mips__) ||
0850: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e defined(__mipsn
0860: 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 32__) || defined
0870: 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 20 2f 2a 20 (__mips64__) /*
0880: 53 47 49 20 63 6f 6d 70 69 6c 65 72 20 2a 2f 0a SGI compiler */.
0890: 23 64 65 66 69 6e 65 20 5f 5f 56 41 5f 61 6c 69 #define __VA_ali
08a0: 67 6e 6f 66 20 5f 5f 62 75 69 6c 74 69 6e 5f 61 gnof __builtin_a
08b0: 6c 69 67 6e 6f 66 0a 23 65 6c 73 65 0a 23 64 65 lignof.#else.#de
08c0: 66 69 6e 65 20 5f 5f 56 41 5f 6f 66 66 73 65 74 fine __VA_offset
08d0: 6f 66 28 74 79 70 65 2c 69 64 65 6e 74 29 20 20 of(type,ident)
08e0: 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 ((unsigned long)
08f0: 26 28 28 28 74 79 70 65 2a 29 30 29 2d 3e 69 64 &(((type*)0)->id
0900: 65 6e 74 29 29 0a 23 64 65 66 69 6e 65 20 5f 5f ent)).#define __
0910: 56 41 5f 61 6c 69 67 6e 6f 66 28 74 79 70 65 29 VA_alignof(type)
0920: 20 20 5f 5f 56 41 5f 6f 66 66 73 65 74 6f 66 28 __VA_offsetof(
0930: 73 74 72 75 63 74 20 7b 20 63 68 61 72 20 5f 5f struct { char __
0940: 73 6c 6f 74 31 3b 20 74 79 70 65 20 5f 5f 73 6c slot1; type __sl
0950: 6f 74 32 3b 20 7d 2c 20 5f 5f 73 6c 6f 74 32 29 ot2; }, __slot2)
0960: 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a .#endif.#endif..
0970: 2f 2a 20 43 20 62 75 69 6c 74 69 6e 20 74 79 70 /* C builtin typ
0980: 65 73 2e 0a 20 2a 2f 0a 23 69 66 20 64 65 66 69 es.. */.#if defi
0990: 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 ned(__mipsn32__)
09a0: 0a 74 79 70 65 64 65 66 20 6c 6f 6e 67 20 6c 6f .typedef long lo
09b0: 6e 67 20 5f 5f 76 61 77 6f 72 64 3b 0a 23 65 6c ng __vaword;.#el
09c0: 73 65 0a 74 79 70 65 64 65 66 20 6c 6f 6e 67 20 se.typedef long
09d0: 5f 5f 76 61 77 6f 72 64 3b 0a 23 65 6e 64 69 66 __vaword;.#endif
09e0: 0a 0a 65 6e 75 6d 20 5f 5f 56 41 74 79 70 65 0a ..enum __VAtype.
09f0: 7b 0a 20 20 5f 5f 56 41 76 6f 69 64 2c 0a 20 20 {. __VAvoid,.
0a00: 5f 5f 56 41 63 68 61 72 2c 0a 20 20 5f 5f 56 41 __VAchar,. __VA
0a10: 73 63 68 61 72 2c 0a 20 20 5f 5f 56 41 75 63 68 schar,. __VAuch
0a20: 61 72 2c 0a 20 20 5f 5f 56 41 73 68 6f 72 74 2c ar,. __VAshort,
0a30: 0a 20 20 5f 5f 56 41 75 73 68 6f 72 74 2c 0a 20 . __VAushort,.
0a40: 20 5f 5f 56 41 69 6e 74 2c 0a 20 20 5f 5f 56 41 __VAint,. __VA
0a50: 75 69 6e 74 2c 0a 20 20 5f 5f 56 41 6c 6f 6e 67 uint,. __VAlong
0a60: 2c 0a 20 20 5f 5f 56 41 75 6c 6f 6e 67 2c 0a 20 ,. __VAulong,.
0a70: 20 5f 5f 56 41 6c 6f 6e 67 6c 6f 6e 67 2c 0a 20 __VAlonglong,.
0a80: 20 5f 5f 56 41 75 6c 6f 6e 67 6c 6f 6e 67 2c 0a __VAulonglong,.
0a90: 20 20 5f 5f 56 41 66 6c 6f 61 74 2c 0a 20 20 5f __VAfloat,. _
0aa0: 5f 56 41 64 6f 75 62 6c 65 2c 0a 20 20 5f 5f 56 _VAdouble,. __V
0ab0: 41 76 6f 69 64 70 2c 0a 20 20 5f 5f 56 41 73 74 Avoidp,. __VAst
0ac0: 72 75 63 74 0a 7d 3b 0a 0a 65 6e 75 6d 20 5f 5f ruct.};..enum __
0ad0: 56 41 5f 61 6c 69 73 74 5f 66 6c 61 67 73 0a 7b VA_alist_flags.{
0ae0: 0a 0a 20 20 2f 2a 20 68 6f 77 20 74 6f 20 72 65 .. /* how to re
0af0: 74 75 72 6e 20 73 74 72 75 63 74 73 20 2a 2f 0a turn structs */.
0b00: 20 20 2f 2a 20 54 68 65 72 65 20 61 72 65 20 62 /* There are b
0b10: 61 73 69 63 61 6c 6c 79 20 33 20 77 61 79 73 20 asically 3 ways
0b20: 74 6f 20 72 65 74 75 72 6e 20 73 74 72 75 63 74 to return struct
0b30: 73 3a 0a 20 20 20 2a 20 61 2e 20 54 68 65 20 63 s:. * a. The c
0b40: 61 6c 6c 65 64 20 66 75 6e 63 74 69 6f 6e 20 72 alled function r
0b50: 65 74 75 72 6e 73 20 61 20 70 6f 69 6e 74 65 72 eturns a pointer
0b60: 20 74 6f 20 73 74 61 74 69 63 20 64 61 74 61 2e to static data.
0b70: 20 4e 6f 74 20 72 65 65 6e 74 72 61 6e 74 2e 0a Not reentrant..
0b80: 20 20 20 2a 20 62 2e 20 54 68 65 20 63 61 6c 6c * b. The call
0b90: 65 72 20 70 61 73 73 65 73 20 74 68 65 20 72 65 er passes the re
0ba0: 74 75 72 6e 20 73 74 72 75 63 74 75 72 65 20 61 turn structure a
0bb0: 64 64 72 65 73 73 20 69 6e 20 61 20 64 65 64 69 ddress in a dedi
0bc0: 63 61 74 65 64 20 72 65 67 69 73 74 65 72 0a 20 cated register.
0bd0: 20 20 2a 20 20 20 20 6f 72 20 61 73 20 61 20 66 * or as a f
0be0: 69 72 73 74 20 28 6f 72 20 6c 61 73 74 29 2c 20 irst (or last),
0bf0: 69 6e 76 69 73 69 62 6c 65 20 61 72 67 75 6d 65 invisible argume
0c00: 6e 74 2e 20 54 68 65 20 63 61 6c 6c 65 64 20 66 nt. The called f
0c10: 75 6e 63 74 69 6f 6e 20 73 74 6f 72 65 73 0a 20 unction stores.
0c20: 20 20 2a 20 20 20 20 69 74 73 20 72 65 73 75 6c * its resul
0c30: 74 20 74 68 65 72 65 2e 0a 20 20 20 2a 20 63 2e t there.. * c.
0c40: 20 4c 69 6b 65 20 62 2c 20 61 6e 64 20 74 68 65 Like b, and the
0c50: 20 63 61 6c 6c 65 64 20 66 75 6e 63 74 69 6f 6e called function
0c60: 20 61 6c 73 6f 20 72 65 74 75 72 6e 73 20 74 68 also returns th
0c70: 65 20 72 65 74 75 72 6e 20 73 74 72 75 63 74 75 e return structu
0c80: 72 65 0a 20 20 20 2a 20 20 20 20 61 64 64 72 65 re. * addre
0c90: 73 73 20 69 6e 20 74 68 65 20 72 65 74 75 72 6e ss in the return
0ca0: 20 76 61 6c 75 65 20 72 65 67 69 73 74 65 72 2e value register.
0cb0: 20 28 54 68 69 73 20 69 73 20 6e 6f 74 20 76 65 (This is not ve
0cc0: 72 79 20 64 69 73 74 69 6e 67 75 69 73 68 61 62 ry distinguishab
0cd0: 6c 65 0a 20 20 20 2a 20 20 20 20 66 72 6f 6d 20 le. * from
0ce0: 62 2e 29 0a 20 20 20 2a 20 49 6e 64 65 70 65 6e b.). * Indepen
0cf0: 64 65 6e 74 6c 79 20 6f 66 20 74 68 69 73 2c 0a dently of this,.
0d00: 20 20 20 2a 20 72 2e 20 73 6d 61 6c 6c 20 73 74 * r. small st
0d10: 72 75 63 74 75 72 65 73 20 28 3c 3d 20 34 20 6f ructures (<= 4 o
0d20: 72 20 3c 3d 20 38 20 62 79 74 65 73 29 20 6d 61 r <= 8 bytes) ma
0d30: 79 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e y be returned in
0d40: 20 74 68 65 20 72 65 74 75 72 6e 0a 20 20 20 2a the return. *
0d50: 20 20 20 20 76 61 6c 75 65 20 72 65 67 69 73 74 value regist
0d60: 65 72 28 73 29 2c 20 6f 72 0a 20 20 20 2a 20 6d er(s), or. * m
0d70: 2e 20 65 76 65 6e 20 73 6d 61 6c 6c 20 73 74 72 . even small str
0d80: 75 63 74 75 72 65 73 20 61 72 65 20 70 61 73 73 uctures are pass
0d90: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 2e 0a 20 20 ed in memory..
0da0: 20 2a 2f 0a 20 20 2f 2a 20 67 63 63 2d 32 2e 36 */. /* gcc-2.6
0db0: 2e 33 20 65 6d 70 6c 6f 79 73 20 74 68 65 20 66 .3 employs the f
0dc0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 61 74 65 67 ollowing strateg
0dd0: 79 3a 0a 20 20 20 2a 20 20 20 2d 20 49 66 20 50 y:. * - If P
0de0: 43 43 5f 53 54 41 54 49 43 5f 53 54 52 55 43 54 CC_STATIC_STRUCT
0df0: 5f 52 45 54 55 52 4e 20 69 73 20 64 65 66 69 6e _RETURN is defin
0e00: 65 64 20 69 6e 20 74 68 65 20 6d 61 63 68 69 6e ed in the machin
0e10: 65 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 20 20 e description.
0e20: 20 2a 20 20 20 20 20 69 74 20 75 73 65 73 20 6d * it uses m
0e30: 65 74 68 6f 64 20 61 2c 20 65 6c 73 65 20 6d 65 ethod a, else me
0e40: 74 68 6f 64 20 63 2e 0a 20 20 20 2a 20 20 20 2d thod c.. * -
0e50: 20 49 66 20 66 6c 61 67 5f 70 63 63 5f 73 74 72 If flag_pcc_str
0e60: 75 63 74 5f 72 65 74 75 72 6e 20 69 73 20 73 65 uct_return is se
0e70: 74 20 28 65 69 74 68 65 72 20 62 79 20 2d 66 70 t (either by -fp
0e80: 63 63 2d 73 74 72 75 63 74 2d 72 65 74 75 72 6e cc-struct-return
0e90: 20 6f 72 20 69 66 0a 20 20 20 2a 20 20 20 20 20 or if. *
0ea0: 44 45 46 41 55 4c 54 5f 50 43 43 5f 53 54 52 55 DEFAULT_PCC_STRU
0eb0: 43 54 5f 52 45 54 55 52 4e 20 69 73 20 64 65 66 CT_RETURN is def
0ec0: 69 6e 65 64 20 74 6f 20 31 20 69 6e 20 74 68 65 ined to 1 in the
0ed0: 20 6d 61 63 68 69 6e 65 20 64 65 73 63 72 69 70 machine descrip
0ee0: 74 69 6f 6e 29 0a 20 20 20 2a 20 20 20 20 20 69 tion). * i
0ef0: 74 20 75 73 65 73 20 6d 65 74 68 6f 64 20 6d 2c t uses method m,
0f00: 20 65 6c 73 65 20 28 65 69 74 68 65 72 20 62 79 else (either by
0f10: 20 2d 66 72 65 67 2d 73 74 72 75 63 74 2d 72 65 -freg-struct-re
0f20: 74 75 72 6e 20 6f 72 20 69 66 0a 20 20 20 2a 20 turn or if. *
0f30: 20 20 20 20 44 45 46 41 55 4c 54 5f 50 43 43 5f DEFAULT_PCC_
0f40: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 69 73 STRUCT_RETURN is
0f50: 20 64 65 66 69 6e 65 64 20 74 6f 20 30 20 69 6e defined to 0 in
0f60: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 64 65 73 the machine des
0f70: 63 72 69 70 74 69 6f 6e 29 0a 20 20 20 2a 20 20 cription). *
0f80: 20 20 20 6d 65 74 68 6f 64 20 72 2e 0a 20 20 20 method r..
0f90: 2a 2f 0a 20 20 5f 5f 56 41 5f 50 43 43 5f 53 54 */. __VA_PCC_ST
0fa0: 52 55 43 54 5f 52 45 54 55 52 4e 09 3d 20 31 3c RUCT_RETURN.= 1<
0fb0: 3c 30 2c 09 2f 2a 20 61 3a 20 6e 65 65 64 20 74 <0,./* a: need t
0fc0: 6f 20 63 6f 70 79 20 74 68 65 20 73 74 72 75 63 o copy the struc
0fd0: 74 20 2a 2f 0a 20 20 5f 5f 56 41 5f 53 4d 41 4c t */. __VA_SMAL
0fe0: 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 09 L_STRUCT_RETURN.
0ff0: 3d 20 31 3c 3c 31 2c 09 2f 2a 20 72 3a 20 73 70 = 1<<1,./* r: sp
1000: 65 63 69 61 6c 20 63 61 73 65 20 66 6f 72 20 73 ecial case for s
1010: 6d 61 6c 6c 20 73 74 72 75 63 74 73 20 2a 2f 0a mall structs */.
1020: 20 20 5f 5f 56 41 5f 47 43 43 5f 53 54 52 55 43 __VA_GCC_STRUC
1030: 54 5f 52 45 54 55 52 4e 09 3d 20 31 3c 3c 32 2c T_RETURN.= 1<<2,
1040: 09 2f 2a 20 63 6f 6e 73 69 64 65 72 20 38 20 62 ./* consider 8 b
1050: 79 74 65 20 73 74 72 75 63 74 73 20 61 73 20 73 yte structs as s
1060: 6d 61 6c 6c 20 2a 2f 0a 23 69 66 20 64 65 66 69 mall */.#if defi
1070: 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 26 ned(__sparc__) &
1080: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 & !defined(__spa
1090: 72 63 36 34 5f 5f 29 0a 20 20 5f 5f 56 41 5f 53 rc64__). __VA_S
10a0: 55 4e 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 UNCC_STRUCT_RETU
10b0: 52 4e 09 3d 20 31 3c 3c 33 2c 0a 20 20 5f 5f 56 RN.= 1<<3,. __V
10c0: 41 5f 53 55 4e 50 52 4f 43 43 5f 53 54 52 55 43 A_SUNPROCC_STRUC
10d0: 54 5f 52 45 54 55 52 4e 09 3d 20 31 3c 3c 34 2c T_RETURN.= 1<<4,
10e0: 0a 23 65 6c 73 65 0a 20 20 5f 5f 56 41 5f 53 55 .#else. __VA_SU
10f0: 4e 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 52 NCC_STRUCT_RETUR
1100: 4e 09 3d 20 30 2c 0a 20 20 5f 5f 56 41 5f 53 55 N.= 0,. __VA_SU
1110: 4e 50 52 4f 43 43 5f 53 54 52 55 43 54 5f 52 45 NPROCC_STRUCT_RE
1120: 54 55 52 4e 09 3d 20 30 2c 0a 23 65 6e 64 69 66 TURN.= 0,.#endif
1130: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 .#if defined(__i
1140: 33 38 36 5f 5f 29 0a 20 20 5f 5f 56 41 5f 4e 45 386__). __VA_NE
1150: 58 54 47 43 43 5f 53 54 52 55 43 54 5f 52 45 54 XTGCC_STRUCT_RET
1160: 55 52 4e 09 3d 20 31 3c 3c 33 2c 0a 20 20 5f 5f URN.= 1<<3,. __
1170: 56 41 5f 4d 53 56 43 5f 53 54 52 55 43 54 5f 52 VA_MSVC_STRUCT_R
1180: 45 54 55 52 4e 09 3d 20 31 3c 3c 34 2c 0a 23 65 ETURN.= 1<<4,.#e
1190: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
11a0: 28 5f 5f 68 70 70 61 5f 5f 29 0a 20 20 5f 5f 56 (__hppa__). __V
11b0: 41 5f 4f 4c 44 47 43 43 5f 53 54 52 55 43 54 5f A_OLDGCC_STRUCT_
11c0: 52 45 54 55 52 4e 09 3d 20 31 3c 3c 33 2c 0a 23 RETURN.= 1<<3,.#
11d0: 65 6e 64 69 66 0a 20 20 2f 2a 20 74 68 65 20 64 endif. /* the d
11e0: 65 66 61 75 6c 74 20 77 61 79 20 74 6f 20 72 65 efault way to re
11f0: 74 75 72 6e 20 73 74 72 75 63 74 73 20 2a 2f 0a turn structs */.
1200: 20 20 2f 2a 20 54 68 69 73 20 63 68 6f 69 63 65 /* This choice
1210: 20 68 65 72 65 20 69 73 20 62 61 73 65 64 20 6f here is based o
1220: 6e 20 74 68 65 20 61 73 73 75 6d 70 74 69 6f 6e n the assumption
1230: 20 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 that the functi
1240: 6f 6e 20 79 6f 75 20 61 72 65 0a 20 20 20 2a 20 on you are. *
1250: 67 6f 69 6e 67 20 74 6f 20 63 61 6c 6c 20 68 61 going to call ha
1260: 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 s been compiled
1270: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 63 6f with the same co
1280: 6d 70 69 6c 65 72 20 79 6f 75 20 61 72 65 20 75 mpiler you are u
1290: 73 69 6e 67 20 74 6f 0a 20 20 20 2a 20 69 6e 63 sing to. * inc
12a0: 6c 75 64 65 20 74 68 69 73 20 66 69 6c 65 2e 0a lude this file..
12b0: 20 20 20 2a 20 49 66 20 79 6f 75 20 77 61 6e 74 * If you want
12c0: 20 74 6f 20 63 61 6c 6c 20 66 75 6e 63 74 69 6f to call functio
12d0: 6e 73 20 77 69 74 68 20 61 6e 6f 74 68 65 72 20 ns with another
12e0: 73 74 72 75 63 74 20 72 65 74 75 72 6e 69 6e 67 struct returning
12f0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 2c 0a 20 20 20 convention,.
1300: 2a 20 6a 75 73 74 20 20 23 64 65 66 69 6e 65 20 * just #define
1310: 5f 5f 56 41 5f 53 54 52 55 43 54 5f 52 45 54 55 __VA_STRUCT_RETU
1320: 52 4e 20 2e 2e 2e 0a 20 20 20 2a 20 62 65 66 6f RN .... * befo
1330: 72 65 20 6f 72 20 61 66 74 65 72 20 23 69 6e 63 re or after #inc
1340: 6c 75 64 69 6e 67 20 3c 76 61 63 61 6c 6c 2e 68 luding <vacall.h
1350: 3e 2e 0a 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 >.. */.#ifndef
1360: 20 5f 5f 56 41 5f 53 54 52 55 43 54 5f 52 45 54 __VA_STRUCT_RET
1370: 55 52 4e 0a 20 20 5f 5f 56 41 5f 53 54 52 55 43 URN. __VA_STRUC
1380: 54 5f 52 45 54 55 52 4e 09 09 3d 0a 23 69 66 20 T_RETURN..=.#if
1390: 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f defined(__sparc_
13a0: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f _) && !defined(_
13b0: 5f 73 70 61 72 63 36 34 5f 5f 29 20 26 26 20 64 _sparc64__) && d
13c0: 65 66 69 6e 65 64 28 73 75 6e 29 20 26 26 20 64 efined(sun) && d
13d0: 65 66 69 6e 65 64 28 5f 5f 53 55 4e 50 52 4f 5f efined(__SUNPRO_
13e0: 43 29 20 2f 2a 20 53 55 4e 57 73 70 72 6f 20 63 C) /* SUNWspro c
13f0: 63 20 2a 2f 0a 09 09 09 09 20 20 5f 5f 56 41 5f c */..... __VA_
1400: 53 55 4e 50 52 4f 43 43 5f 53 54 52 55 43 54 5f SUNPROCC_STRUCT_
1410: 52 45 54 55 52 4e 2c 0a 23 65 6c 73 65 0a 23 69 RETURN,.#else.#i
1420: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 43 43 5f f defined(__PCC_
1430: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 5f 5f 29 STRUCT_RETURN__)
1440: 20 2f 2a 20 64 65 66 69 6e 65 64 20 74 68 72 6f /* defined thro
1450: 75 67 68 20 63 6f 6e 66 69 67 75 72 65 2c 20 73 ugh configure, s
1460: 65 65 20 61 62 6f 76 65 20 2a 2f 0a 09 09 09 09 ee above */.....
1470: 20 20 5f 5f 56 41 5f 50 43 43 5f 53 54 52 55 43 __VA_PCC_STRUC
1480: 54 5f 52 45 54 55 52 4e 20 7c 0a 23 69 66 20 64 T_RETURN |.#if d
1490: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f efined(__sparc__
14a0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f ) && !defined(__
14b0: 73 70 61 72 63 36 34 5f 5f 29 20 26 26 20 64 65 sparc64__) && de
14c0: 66 69 6e 65 64 28 73 75 6e 29 20 26 26 20 21 28 fined(sun) && !(
14d0: 64 65 66 69 6e 65 64 28 5f 5f 53 54 44 43 5f 5f defined(__STDC__
14e0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 47 ) || defined(__G
14f0: 4e 55 43 5f 5f 29 29 20 2f 2a 20 73 75 6e 20 63 NUC__)) /* sun c
1500: 63 20 2a 2f 0a 20 20 09 09 09 09 20 20 5f 5f 56 c */. .... __V
1510: 41 5f 53 55 4e 43 43 5f 53 54 52 55 43 54 5f 52 A_SUNCC_STRUCT_R
1520: 45 54 55 52 4e 2c 0a 23 65 6c 73 65 0a 20 20 09 ETURN,.#else. .
1530: 09 09 09 20 20 30 2c 0a 23 65 6e 64 69 66 0a 23 ... 0,.#endif.#
1540: 65 6c 73 65 0a 23 69 66 20 64 65 66 69 6e 65 64 else.#if defined
1550: 28 5f 5f 53 4d 41 4c 4c 5f 53 54 52 55 43 54 5f (__SMALL_STRUCT_
1560: 52 45 54 55 52 4e 5f 5f 29 20 7c 7c 20 64 65 66 RETURN__) || def
1570: 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f ined(__mipsn32__
1580: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d ) || defined(__m
1590: 69 70 73 36 34 5f 5f 29 20 2f 2a 20 64 65 66 69 ips64__) /* defi
15a0: 6e 65 64 20 74 68 72 6f 75 67 68 20 63 6f 6e 66 ned through conf
15b0: 69 67 75 72 65 2c 20 73 65 65 20 61 62 6f 76 65 igure, see above
15c0: 20 2a 2f 0a 09 09 09 09 20 20 5f 5f 56 41 5f 53 */..... __VA_S
15d0: 4d 41 4c 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 MALL_STRUCT_RETU
15e0: 52 4e 20 7c 0a 23 65 6e 64 69 66 0a 23 69 66 20 RN |.#endif.#if
15f0: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f defined(__GNUC__
1600: 29 0a 09 09 09 09 20 20 5f 5f 56 41 5f 47 43 43 )..... __VA_GCC
1610: 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 7c _STRUCT_RETURN |
1620: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 .#endif.#if defi
1630: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 26 26 ned(__i386__) &&
1640: 20 64 65 66 69 6e 65 64 28 4e 65 58 54 29 20 26 defined(NeXT) &
1650: 26 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 & defined(__GNUC
1660: 5f 5f 29 20 2f 2a 20 4e 65 58 54 20 67 63 63 2d __) /* NeXT gcc-
1670: 32 2e 35 2e 38 20 2a 2f 0a 09 09 09 09 20 20 5f 2.5.8 */..... _
1680: 5f 56 41 5f 4e 45 58 54 47 43 43 5f 53 54 52 55 _VA_NEXTGCC_STRU
1690: 43 54 5f 52 45 54 55 52 4e 20 7c 0a 23 65 6e 64 CT_RETURN |.#end
16a0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f if.#if defined(_
16b0: 5f 69 33 38 36 5f 5f 29 20 26 26 20 64 65 66 69 _i386__) && defi
16c0: 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 2f 2a ned(_MSC_VER) /*
16d0: 20 4d 53 56 43 20 34 2e 30 20 2a 2f 0a 09 09 09 MSVC 4.0 */....
16e0: 09 20 20 5f 5f 56 41 5f 4d 53 56 43 5f 53 54 52 . __VA_MSVC_STR
16f0: 55 43 54 5f 52 45 54 55 52 4e 20 7c 0a 23 65 6e UCT_RETURN |.#en
1700: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
1710: 5f 5f 68 70 70 61 5f 5f 29 20 26 26 20 64 65 66 __hppa__) && def
1720: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 ined(__GNUC__) &
1730: 26 20 28 5f 5f 47 4e 55 43 5f 5f 20 3c 20 33 29 & (__GNUC__ < 3)
1740: 20 26 26 20 28 5f 5f 47 4e 55 43 5f 4d 49 4e 4f && (__GNUC_MINO
1750: 52 5f 5f 20 3c 20 37 29 0a 09 09 09 09 20 20 5f R__ < 7)..... _
1760: 5f 56 41 5f 4f 4c 44 47 43 43 5f 53 54 52 55 43 _VA_OLDGCC_STRUC
1770: 54 5f 52 45 54 55 52 4e 20 7c 0a 23 65 6e 64 69 T_RETURN |.#endi
1780: 66 0a 20 20 09 09 09 09 20 20 30 2c 0a 23 65 6e f. .... 0,.#en
1790: 64 69 66 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 dif.#endif.#endi
17a0: 66 0a 0a 20 20 2f 2a 20 68 6f 77 20 74 6f 20 72 f.. /* how to r
17b0: 65 74 75 72 6e 20 66 6c 6f 61 74 73 20 2a 2f 0a eturn floats */.
17c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 #if defined(__m6
17d0: 38 6b 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 65 8k__) || (define
17e0: 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 d(__sparc__) &&
17f0: 21 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 !defined(__sparc
1800: 36 34 5f 5f 29 29 0a 20 20 5f 5f 56 41 5f 53 55 64__)). __VA_SU
1810: 4e 43 43 5f 46 4c 4f 41 54 5f 52 45 54 55 52 4e NCC_FLOAT_RETURN
1820: 09 3d 20 31 3c 3c 35 2c 0a 23 65 6e 64 69 66 0a .= 1<<5,.#endif.
1830: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 #if defined(__m6
1840: 38 6b 5f 5f 29 0a 20 20 5f 5f 56 41 5f 46 52 45 8k__). __VA_FRE
1850: 47 5f 46 4c 4f 41 54 5f 52 45 54 55 52 4e 09 3d G_FLOAT_RETURN.=
1860: 20 31 3c 3c 36 2c 0a 23 65 6e 64 69 66 0a 20 20 1<<6,.#endif.
1870: 2f 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 77 /* the default w
1880: 61 79 20 74 6f 20 72 65 74 75 72 6e 20 66 6c 6f ay to return flo
1890: 61 74 73 20 2a 2f 0a 20 20 2f 2a 20 54 68 69 73 ats */. /* This
18a0: 20 63 68 6f 69 63 65 20 68 65 72 65 20 69 73 20 choice here is
18b0: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 61 73 73 based on the ass
18c0: 75 6d 70 74 69 6f 6e 20 74 68 61 74 20 74 68 65 umption that the
18d0: 20 66 75 6e 63 74 69 6f 6e 20 79 6f 75 20 61 72 function you ar
18e0: 65 0a 20 20 20 2a 20 67 6f 69 6e 67 20 74 6f 20 e. * going to
18f0: 63 61 6c 6c 20 68 61 73 20 62 65 65 6e 20 63 6f call has been co
1900: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 mpiled with the
1910: 73 61 6d 65 20 63 6f 6d 70 69 6c 65 72 20 79 6f same compiler yo
1920: 75 20 61 72 65 20 75 73 69 6e 67 20 74 6f 0a 20 u are using to.
1930: 20 20 2a 20 69 6e 63 6c 75 64 65 20 74 68 69 73 * include this
1940: 20 66 69 6c 65 2e 0a 20 20 20 2a 20 49 66 20 79 file.. * If y
1950: 6f 75 20 77 61 6e 74 20 74 6f 20 63 61 6c 6c 20 ou want to call
1960: 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 61 functions with a
1970: 6e 6f 74 68 65 72 20 66 6c 6f 61 74 20 72 65 74 nother float ret
1980: 75 72 6e 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f urning conventio
1990: 6e 2c 0a 20 20 20 2a 20 6a 75 73 74 20 20 23 64 n,. * just #d
19a0: 65 66 69 6e 65 20 5f 5f 56 41 5f 46 4c 4f 41 54 efine __VA_FLOAT
19b0: 5f 52 45 54 55 52 4e 20 2e 2e 2e 0a 20 20 20 2a _RETURN .... *
19c0: 20 62 65 66 6f 72 65 20 6f 72 20 61 66 74 65 72 before or after
19d0: 20 23 69 6e 63 6c 75 64 69 6e 67 20 3c 76 61 63 #including <vac
19e0: 61 6c 6c 2e 68 3e 2e 0a 20 20 20 2a 2f 0a 23 69 all.h>.. */.#i
19f0: 66 6e 64 65 66 20 5f 5f 56 41 5f 46 4c 4f 41 54 fndef __VA_FLOAT
1a00: 5f 52 45 54 55 52 4e 0a 23 69 66 20 28 64 65 66 _RETURN.#if (def
1a10: 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f 5f 29 20 7c ined(__m68k__) |
1a20: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 | (defined(__spa
1a30: 72 63 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 rc__) && !define
1a40: 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 29 29 d(__sparc64__)))
1a50: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 && !defined(__G
1a60: 4e 55 43 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 NUC__) && define
1a70: 64 28 73 75 6e 29 20 26 26 20 21 64 65 66 69 6e d(sun) && !defin
1a80: 65 64 28 5f 5f 53 55 4e 50 52 4f 5f 43 29 20 20 ed(__SUNPRO_C)
1a90: 2f 2a 20 73 75 6e 20 63 63 20 2a 2f 0a 20 20 5f /* sun cc */. _
1aa0: 5f 56 41 5f 46 4c 4f 41 54 5f 52 45 54 55 52 4e _VA_FLOAT_RETURN
1ab0: 09 09 3d 20 5f 5f 56 41 5f 53 55 4e 43 43 5f 46 ..= __VA_SUNCC_F
1ac0: 4c 4f 41 54 5f 52 45 54 55 52 4e 2c 0a 23 65 6c LOAT_RETURN,.#el
1ad0: 69 66 20 28 64 65 66 69 6e 65 64 28 5f 5f 6d 36 if (defined(__m6
1ae0: 38 6b 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 8k__) && !define
1af0: 64 28 5f 5f 49 52 45 47 5f 46 4c 4f 41 54 5f 52 d(__IREG_FLOAT_R
1b00: 45 54 55 52 4e 5f 5f 29 29 0a 20 20 5f 5f 56 41 ETURN__)). __VA
1b10: 5f 46 4c 4f 41 54 5f 52 45 54 55 52 4e 09 09 3d _FLOAT_RETURN..=
1b20: 20 5f 5f 56 41 5f 46 52 45 47 5f 46 4c 4f 41 54 __VA_FREG_FLOAT
1b30: 5f 52 45 54 55 52 4e 2c 0a 23 65 6c 73 65 0a 20 _RETURN,.#else.
1b40: 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 52 45 54 55 __VA_FLOAT_RETU
1b50: 52 4e 09 09 3d 20 30 2c 0a 23 65 6e 64 69 66 0a RN..= 0,.#endif.
1b60: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 68 6f 77 #endif.. /* how
1b70: 20 74 6f 20 70 61 73 73 20 73 74 72 75 63 74 73 to pass structs
1b80: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 */.#if defined(
1b90: 5f 5f 6d 69 70 73 5f 5f 29 20 7c 7c 20 64 65 66 __mips__) || def
1ba0: 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f ined(__mipsn32__
1bb0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d ) || defined(__m
1bc0: 69 70 73 36 34 5f 5f 29 0a 20 20 5f 5f 56 41 5f ips64__). __VA_
1bd0: 53 47 49 43 43 5f 53 54 52 55 43 54 5f 41 52 47 SGICC_STRUCT_ARG
1be0: 53 09 3d 20 31 3c 3c 37 2c 0a 23 65 6e 64 69 66 S.= 1<<7,.#endif
1bf0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 72 .#if defined(__r
1c00: 73 36 30 30 30 5f 5f 29 0a 20 20 5f 5f 56 41 5f s6000__). __VA_
1c10: 41 49 58 43 43 5f 53 54 52 55 43 54 5f 41 52 47 AIXCC_STRUCT_ARG
1c20: 53 09 3d 20 31 3c 3c 37 2c 0a 23 65 6e 64 69 66 S.= 1<<7,.#endif
1c30: 0a 20 20 2f 2a 20 74 68 65 20 64 65 66 61 75 6c . /* the defaul
1c40: 74 20 77 61 79 20 74 6f 20 70 61 73 73 20 66 6c t way to pass fl
1c50: 6f 61 74 73 20 2a 2f 0a 20 20 2f 2a 20 54 68 69 oats */. /* Thi
1c60: 73 20 63 68 6f 69 63 65 20 68 65 72 65 20 69 73 s choice here is
1c70: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 61 73 based on the as
1c80: 73 75 6d 70 74 69 6f 6e 20 74 68 61 74 20 74 68 sumption that th
1c90: 65 20 66 75 6e 63 74 69 6f 6e 20 79 6f 75 20 61 e function you a
1ca0: 72 65 0a 20 20 20 2a 20 67 6f 69 6e 67 20 74 6f re. * going to
1cb0: 20 63 61 6c 6c 20 68 61 73 20 62 65 65 6e 20 63 call has been c
1cc0: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 ompiled with the
1cd0: 20 73 61 6d 65 20 63 6f 6d 70 69 6c 65 72 20 79 same compiler y
1ce0: 6f 75 20 61 72 65 20 75 73 69 6e 67 20 74 6f 0a ou are using to.
1cf0: 20 20 20 2a 20 69 6e 63 6c 75 64 65 20 74 68 69 * include thi
1d00: 73 20 66 69 6c 65 2e 0a 20 20 20 2a 20 49 66 20 s file.. * If
1d10: 79 6f 75 20 77 61 6e 74 20 74 6f 20 63 61 6c 6c you want to call
1d20: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 functions with
1d30: 61 6e 6f 74 68 65 72 20 66 6c 6f 61 74 20 70 61 another float pa
1d40: 73 73 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e ssing convention
1d50: 2c 0a 20 20 20 2a 20 6a 75 73 74 20 20 23 64 65 ,. * just #de
1d60: 66 69 6e 65 20 5f 5f 56 41 5f 53 54 52 55 43 54 fine __VA_STRUCT
1d70: 5f 41 52 47 53 20 2e 2e 2e 0a 20 20 20 2a 20 62 _ARGS .... * b
1d80: 65 66 6f 72 65 20 6f 72 20 61 66 74 65 72 20 23 efore or after #
1d90: 69 6e 63 6c 75 64 69 6e 67 20 3c 76 61 63 61 6c including <vacal
1da0: 6c 2e 68 3e 2e 0a 20 20 20 2a 2f 0a 23 69 66 6e l.h>.. */.#ifn
1db0: 64 65 66 20 5f 5f 56 41 5f 53 54 52 55 43 54 5f def __VA_STRUCT_
1dc0: 41 52 47 53 0a 23 69 66 20 28 64 65 66 69 6e 65 ARGS.#if (define
1dd0: 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 7c 7c 20 64 d(__mips__) || d
1de0: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 efined(__mipsn32
1df0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
1e00: 5f 6d 69 70 73 36 34 5f 5f 29 29 20 26 26 20 21 _mips64__)) && !
1e10: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f defined(__GNUC__
1e20: 29 20 2f 2a 20 53 47 49 20 6d 69 70 73 20 63 63 ) /* SGI mips cc
1e30: 20 2a 2f 0a 20 20 5f 5f 56 41 5f 53 54 52 55 43 */. __VA_STRUC
1e40: 54 5f 41 52 47 53 09 09 3d 20 5f 5f 56 41 5f 53 T_ARGS..= __VA_S
1e50: 47 49 43 43 5f 53 54 52 55 43 54 5f 41 52 47 53 GICC_STRUCT_ARGS
1e60: 2c 0a 23 65 6c 73 65 0a 23 69 66 20 64 65 66 69 ,.#else.#if defi
1e70: 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f 5f 29 20 ned(__rs6000__)
1e80: 26 26 20 64 65 66 69 6e 65 64 28 5f 41 49 58 29 && defined(_AIX)
1e90: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 && !defined(__G
1ea0: 4e 55 43 5f 5f 29 20 2f 2a 20 41 49 58 20 63 63 NUC__) /* AIX cc
1eb0: 2c 20 78 6c 63 20 2a 2f 0a 20 20 5f 5f 56 41 5f , xlc */. __VA_
1ec0: 53 54 52 55 43 54 5f 41 52 47 53 09 09 3d 20 5f STRUCT_ARGS..= _
1ed0: 5f 56 41 5f 41 49 58 43 43 5f 53 54 52 55 43 54 _VA_AIXCC_STRUCT
1ee0: 5f 41 52 47 53 2c 0a 23 65 6c 73 65 0a 20 20 5f _ARGS,.#else. _
1ef0: 5f 56 41 5f 53 54 52 55 43 54 5f 41 52 47 53 09 _VA_STRUCT_ARGS.
1f00: 09 3d 20 30 2c 0a 23 65 6e 64 69 66 0a 23 65 6e .= 0,.#endif.#en
1f10: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a dif.#endif.. /*
1f20: 20 68 6f 77 20 74 6f 20 70 61 73 73 20 66 6c 6f how to pass flo
1f30: 61 74 73 20 2a 2f 0a 20 20 2f 2a 20 41 4e 53 49 ats */. /* ANSI
1f40: 20 43 20 63 6f 6d 70 69 6c 65 72 73 20 61 6e 64 C compilers and
1f50: 20 47 4e 55 20 67 63 63 20 70 61 73 73 20 66 6c GNU gcc pass fl
1f60: 6f 61 74 73 20 61 73 20 66 6c 6f 61 74 73 2e 0a oats as floats..
1f70: 20 20 20 2a 20 4b 26 52 20 43 20 63 6f 6d 70 69 * K&R C compi
1f80: 6c 65 72 73 20 70 61 73 73 20 66 6c 6f 61 74 73 lers pass floats
1f90: 20 61 73 20 64 6f 75 62 6c 65 73 2e 0a 20 20 20 as doubles..
1fa0: 2a 20 28 45 78 63 65 70 74 20 73 6f 6d 65 20 63 * (Except some c
1fb0: 6f 6d 70 69 6c 65 72 73 20 6c 69 6b 65 20 53 47 ompilers like SG
1fc0: 49 20 4d 49 50 53 20 22 63 63 22 20 61 6e 64 20 I MIPS "cc" and
1fd0: 22 63 63 20 2d 63 63 6b 72 22 20 69 66 20 61 20 "cc -cckr" if a
1fe0: 70 72 6f 74 6f 74 79 70 65 20 69 73 0a 20 20 20 prototype is.
1ff0: 2a 20 6b 6e 6f 77 6e 20 66 6f 72 20 74 68 65 20 * known for the
2000: 63 61 6c 6c 65 64 20 66 75 6e 63 74 69 6f 6e 73 called functions
2010: 2e 20 42 75 74 20 74 6f 20 63 6f 6d 70 69 6c 65 . But to compile
2020: 20 61 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 a program with
2030: 70 72 6f 74 6f 74 79 70 65 73 2c 0a 20 20 20 2a prototypes,. *
2040: 20 22 63 63 20 2d 61 6e 73 69 22 20 69 73 20 62 "cc -ansi" is b
2050: 65 74 74 65 72 20 61 6e 79 77 61 79 2e 0a 20 20 etter anyway..
2060: 20 2a 2f 0a 20 20 5f 5f 56 41 5f 41 4e 53 49 5f */. __VA_ANSI_
2070: 46 4c 4f 41 54 5f 41 52 47 53 09 09 3d 20 30 2c FLOAT_ARGS..= 0,
2080: 20 20 20 20 2f 2a 20 70 61 73 73 20 66 6c 6f 61 /* pass floa
2090: 74 73 20 61 73 20 66 6c 6f 61 74 73 20 2a 2f 0a ts as floats */.
20a0: 20 20 5f 5f 56 41 5f 54 52 41 44 49 54 49 4f 4e __VA_TRADITION
20b0: 41 4c 5f 46 4c 4f 41 54 5f 41 52 47 53 09 3d 20 AL_FLOAT_ARGS.=
20c0: 31 3c 3c 38 2c 20 2f 2a 20 70 61 73 73 20 66 6c 1<<8, /* pass fl
20d0: 6f 61 74 73 20 61 73 20 64 6f 75 62 6c 65 73 20 oats as doubles
20e0: 2a 2f 0a 20 20 2f 2a 20 74 68 65 20 64 65 66 61 */. /* the defa
20f0: 75 6c 74 20 77 61 79 20 74 6f 20 70 61 73 73 20 ult way to pass
2100: 66 6c 6f 61 74 73 20 2a 2f 0a 20 20 2f 2a 20 54 floats */. /* T
2110: 68 69 73 20 63 68 6f 69 63 65 20 68 65 72 65 20 his choice here
2120: 69 73 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 is based on the
2130: 61 73 73 75 6d 70 74 69 6f 6e 20 74 68 61 74 20 assumption that
2140: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 79 6f 75 the function you
2150: 20 61 72 65 0a 20 20 20 2a 20 67 6f 69 6e 67 20 are. * going
2160: 74 6f 20 63 61 6c 6c 20 68 61 73 20 62 65 65 6e to call has been
2170: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 compiled with t
2180: 68 65 20 73 61 6d 65 20 63 6f 6d 70 69 6c 65 72 he same compiler
2190: 20 79 6f 75 20 61 72 65 20 75 73 69 6e 67 20 74 you are using t
21a0: 6f 0a 20 20 20 2a 20 69 6e 63 6c 75 64 65 20 74 o. * include t
21b0: 68 69 73 20 66 69 6c 65 2e 0a 20 20 20 2a 20 49 his file.. * I
21c0: 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 63 61 f you want to ca
21d0: 6c 6c 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 ll functions wit
21e0: 68 20 61 6e 6f 74 68 65 72 20 66 6c 6f 61 74 20 h another float
21f0: 70 61 73 73 69 6e 67 20 63 6f 6e 76 65 6e 74 69 passing conventi
2200: 6f 6e 2c 0a 20 20 20 2a 20 6a 75 73 74 20 20 23 on,. * just #
2210: 64 65 66 69 6e 65 20 5f 5f 56 41 5f 46 4c 4f 41 define __VA_FLOA
2220: 54 5f 41 52 47 53 20 2e 2e 2e 0a 20 20 20 2a 20 T_ARGS .... *
2230: 62 65 66 6f 72 65 20 6f 72 20 61 66 74 65 72 20 before or after
2240: 23 69 6e 63 6c 75 64 69 6e 67 20 3c 76 61 63 61 #including <vaca
2250: 6c 6c 2e 68 3e 2e 0a 20 20 20 2a 2f 0a 23 69 66 ll.h>.. */.#if
2260: 6e 64 65 66 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f ndef __VA_FLOAT_
2270: 41 52 47 53 0a 23 69 66 20 64 65 66 69 6e 65 64 ARGS.#if defined
2280: 28 5f 5f 53 54 44 43 5f 5f 29 20 7c 7c 20 64 65 (__STDC__) || de
2290: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 fined(__GNUC__)
22a0: 2f 2a 20 77 68 61 74 20 61 62 6f 75 74 20 68 70 /* what about hp
22b0: 70 61 20 22 63 63 20 2d 41 61 22 20 3f 3f 20 2a pa "cc -Aa" ?? *
22c0: 2f 0a 20 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 41 /. __VA_FLOAT_A
22d0: 52 47 53 09 09 3d 20 5f 5f 56 41 5f 41 4e 53 49 RGS..= __VA_ANSI
22e0: 5f 46 4c 4f 41 54 5f 41 52 47 53 2c 0a 23 65 6c _FLOAT_ARGS,.#el
22f0: 73 65 0a 20 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f se. __VA_FLOAT_
2300: 41 52 47 53 09 09 3d 20 5f 5f 56 41 5f 54 52 41 ARGS..= __VA_TRA
2310: 44 49 54 49 4f 4e 41 4c 5f 46 4c 4f 41 54 5f 41 DITIONAL_FLOAT_A
2320: 52 47 53 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 RGS,.#endif.#end
2330: 69 66 0a 0a 20 20 2f 2a 20 68 6f 77 20 74 6f 20 if.. /* how to
2340: 70 61 73 73 20 61 6e 64 20 72 65 74 75 72 6e 20 pass and return
2350: 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 20 61 72 small integer ar
2360: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 5f 5f 56 guments */. __V
2370: 41 5f 41 4e 53 49 5f 49 4e 54 45 47 45 52 53 09 A_ANSI_INTEGERS.
2380: 09 3d 20 30 2c 20 2f 2a 20 6e 6f 20 70 72 6f 6d .= 0, /* no prom
2390: 6f 74 69 6f 6e 73 20 2a 2f 0a 20 20 5f 5f 56 41 otions */. __VA
23a0: 5f 54 52 41 44 49 54 49 4f 4e 41 4c 5f 49 4e 54 _TRADITIONAL_INT
23b0: 45 47 45 52 53 09 3d 20 30 2c 20 2f 2a 20 70 72 EGERS.= 0, /* pr
23c0: 6f 6d 6f 74 65 20 5b 75 5d 63 68 61 72 2c 20 5b omote [u]char, [
23d0: 75 5d 73 68 6f 72 74 20 74 6f 20 5b 75 5d 69 6e u]short to [u]in
23e0: 74 20 2a 2f 0a 20 20 2f 2a 20 46 6f 72 74 75 6e t */. /* Fortun
23f0: 61 74 65 6c 79 20 74 68 65 73 65 20 74 77 6f 20 ately these two
2400: 6d 65 74 68 6f 64 73 20 61 72 65 20 63 6f 6d 70 methods are comp
2410: 61 74 69 62 6c 65 2e 20 4f 75 72 20 6d 61 63 72 atible. Our macr
2420: 6f 73 20 77 6f 72 6b 20 77 69 74 68 20 62 6f 74 os work with bot
2430: 68 2e 20 2a 2f 0a 20 20 2f 2a 20 74 68 65 20 64 h. */. /* the d
2440: 65 66 61 75 6c 74 20 77 61 79 20 74 6f 20 70 61 efault way to pa
2450: 73 73 20 61 6e 64 20 72 65 74 75 72 6e 20 73 6d ss and return sm
2460: 61 6c 6c 20 69 6e 74 65 67 65 72 20 61 72 67 75 all integer argu
2470: 6d 65 6e 74 73 20 2a 2f 0a 20 20 2f 2a 20 54 68 ments */. /* Th
2480: 69 73 20 63 68 6f 69 63 65 20 68 65 72 65 20 69 is choice here i
2490: 73 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 61 s based on the a
24a0: 73 73 75 6d 70 74 69 6f 6e 20 74 68 61 74 20 74 ssumption that t
24b0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 79 6f 75 20 he function you
24c0: 61 72 65 0a 20 20 20 2a 20 67 6f 69 6e 67 20 74 are. * going t
24d0: 6f 20 63 61 6c 6c 20 68 61 73 20 62 65 65 6e 20 o call has been
24e0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 compiled with th
24f0: 65 20 73 61 6d 65 20 63 6f 6d 70 69 6c 65 72 20 e same compiler
2500: 79 6f 75 20 61 72 65 20 75 73 69 6e 67 20 74 6f you are using to
2510: 0a 20 20 20 2a 20 69 6e 63 6c 75 64 65 20 74 68 . * include th
2520: 69 73 20 66 69 6c 65 2e 0a 20 20 20 2a 20 49 66 is file.. * If
2530: 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 63 61 6c you want to cal
2540: 6c 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 l functions with
2550: 20 61 6e 6f 74 68 65 72 20 66 6c 6f 61 74 20 70 another float p
2560: 61 73 73 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f assing conventio
2570: 6e 2c 0a 20 20 20 2a 20 6a 75 73 74 20 20 23 64 n,. * just #d
2580: 65 66 69 6e 65 20 5f 5f 56 41 5f 49 4e 54 45 47 efine __VA_INTEG
2590: 45 52 53 20 2e 2e 2e 0a 20 20 20 2a 20 62 65 66 ERS .... * bef
25a0: 6f 72 65 20 6f 72 20 61 66 74 65 72 20 23 69 6e ore or after #in
25b0: 63 6c 75 64 69 6e 67 20 3c 76 61 63 61 6c 6c 2e cluding <vacall.
25c0: 68 3e 2e 0a 20 20 20 2a 2f 0a 23 69 66 6e 64 65 h>.. */.#ifnde
25d0: 66 20 5f 5f 56 41 5f 49 4e 54 45 47 45 52 53 0a f __VA_INTEGERS.
25e0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 54 #if defined(__ST
25f0: 44 43 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 DC__) || defined
2600: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 20 20 5f 5f 56 (__GNUC__). __V
2610: 41 5f 49 4e 54 45 47 45 52 53 09 09 09 3d 20 5f A_INTEGERS...= _
2620: 5f 56 41 5f 41 4e 53 49 5f 49 4e 54 45 47 45 52 _VA_ANSI_INTEGER
2630: 53 2c 0a 23 65 6c 73 65 0a 20 20 5f 5f 56 41 5f S,.#else. __VA_
2640: 49 4e 54 45 47 45 52 53 09 09 09 3d 20 5f 5f 56 INTEGERS...= __V
2650: 41 5f 54 52 41 44 49 54 49 4f 4e 41 4c 5f 49 4e A_TRADITIONAL_IN
2660: 54 45 47 45 52 53 2c 0a 23 65 6e 64 69 66 0a 23 TEGERS,.#endif.#
2670: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 73 74 61 63 endif.. /* stac
2680: 6b 20 63 6c 65 61 6e 75 70 20 70 6f 6c 69 63 79 k cleanup policy
2690: 20 2a 2f 0a 20 20 5f 5f 56 41 5f 43 44 45 43 4c */. __VA_CDECL
26a0: 5f 43 4c 45 41 4e 55 50 09 09 3d 20 30 2c 20 2f _CLEANUP..= 0, /
26b0: 2a 20 63 61 6c 6c 65 72 20 70 6f 70 73 20 61 72 * caller pops ar
26c0: 67 73 20 61 66 74 65 72 20 72 65 74 75 72 6e 20 gs after return
26d0: 2a 2f 0a 20 20 5f 5f 56 41 5f 53 54 44 43 41 4c */. __VA_STDCAL
26e0: 4c 5f 43 4c 45 41 4e 55 50 09 09 3d 20 31 3c 3c L_CLEANUP..= 1<<
26f0: 39 2c 20 2f 2a 20 63 61 6c 6c 65 65 20 70 6f 70 9, /* callee pop
2700: 73 20 61 72 67 73 20 62 65 66 6f 72 65 20 72 65 s args before re
2710: 74 75 72 6e 20 2a 2f 0a 09 09 09 09 20 20 20 20 turn */.....
2720: 20 2f 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e /* currently on
2730: 6c 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 ly supported on
2740: 5f 5f 69 33 38 36 5f 5f 20 2a 2f 0a 23 69 66 6e __i386__ */.#ifn
2750: 64 65 66 20 5f 5f 56 41 5f 43 4c 45 41 4e 55 50 def __VA_CLEANUP
2760: 0a 20 20 5f 5f 56 41 5f 43 4c 45 41 4e 55 50 09 . __VA_CLEANUP.
2770: 09 09 3d 20 5f 5f 56 41 5f 43 44 45 43 4c 5f 43 ..= __VA_CDECL_C
2780: 4c 45 41 4e 55 50 2c 0a 23 65 6e 64 69 66 0a 0a LEANUP,.#endif..
2790: 20 20 2f 2a 20 54 68 65 73 65 20 61 72 65 20 66 /* These are f
27a0: 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 or internal use
27b0: 6f 6e 6c 79 20 2a 2f 0a 23 69 66 20 64 65 66 69 only */.#if defi
27c0: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c ned(__i386__) ||
27d0: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f defined(__m68k_
27e0: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
27f0: 6d 69 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 mipsn32__) || de
2800: 66 69 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f 5f fined(__mips64__
2810: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 ) || defined(__s
2820: 70 61 72 63 36 34 5f 5f 29 20 7c 7c 20 64 65 66 parc64__) || def
2830: 69 6e 65 64 28 5f 5f 61 6c 70 68 61 5f 5f 29 20 ined(__alpha__)
2840: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d || defined(__arm
2850: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
2860: 5f 72 73 36 30 30 30 5f 5f 29 20 7c 7c 20 64 65 _rs6000__) || de
2870: 66 69 6e 65 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f fined(__convex__
2880: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 ) || defined(__i
2890: 61 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 a64__) || define
28a0: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c d(__x86_64__) ||
28b0: 20 64 65 66 69 6e 65 64 28 5f 5f 73 33 39 30 5f defined(__s390_
28c0: 5f 29 0a 20 20 5f 5f 56 41 5f 52 45 47 49 53 54 _). __VA_REGIST
28d0: 45 52 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e ER_STRUCT_RETURN
28e0: 09 3d 20 31 3c 3c 31 30 2c 0a 23 65 6e 64 69 66 .= 1<<10,.#endif
28f0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d .#if defined(__m
2900: 69 70 73 5f 5f 29 20 26 26 20 21 64 65 66 69 6e ips__) && !defin
2910: 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a ed(__mipsn32__).
2920: 20 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 31 09 09 __VA_FLOAT_1..
2930: 09 3d 20 31 3c 3c 31 31 2c 0a 20 20 5f 5f 56 41 .= 1<<11,. __VA
2940: 5f 46 4c 4f 41 54 5f 32 09 09 09 3d 20 31 3c 3c _FLOAT_2...= 1<<
2950: 31 32 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 12,.#endif.#if d
2960: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 efined(__mipsn32
2970: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
2980: 5f 6d 69 70 73 36 34 5f 5f 29 0a 20 20 5f 5f 56 _mips64__). __V
2990: 41 5f 52 45 47 49 53 54 45 52 5f 46 4c 4f 41 54 A_REGISTER_FLOAT
29a0: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 09 3d 20 STRUCT_RETURN.=
29b0: 31 3c 3c 31 33 2c 0a 20 20 5f 5f 56 41 5f 52 45 1<<13,. __VA_RE
29c0: 47 49 53 54 45 52 5f 44 4f 55 42 4c 45 53 54 52 GISTER_DOUBLESTR
29d0: 55 43 54 5f 52 45 54 55 52 4e 09 3d 20 31 3c 3c UCT_RETURN.= 1<<
29e0: 31 34 2c 0a 23 65 6e 64 69 66 0a 0a 20 20 5f 5f 14,.#endif.. __
29f0: 56 41 5f 66 6c 61 67 5f 66 6f 72 5f 62 72 6f 6b VA_flag_for_brok
2a00: 65 6e 5f 63 6f 6d 70 69 6c 65 72 73 5f 74 68 61 en_compilers_tha
2a10: 74 5f 64 6f 6e 74 5f 6c 69 6b 65 5f 74 72 61 69 t_dont_like_trai
2a20: 6c 69 6e 67 5f 63 6f 6d 6d 61 73 0a 7d 3b 0a 0a ling_commas.};..
2a30: 2f 2a 0a 20 2a 20 44 65 66 69 6e 69 74 69 6f 6e /*. * Definition
2a40: 20 6f 66 20 74 68 65 20 60 76 61 5f 61 6c 69 73 of the `va_alis
2a50: 74 27 20 74 79 70 65 2e 0a 20 2a 2f 0a 74 79 70 t' type.. */.typ
2a60: 65 64 65 66 20 73 74 72 75 63 74 0a 7b 0a 20 20 edef struct.{.
2a70: 2f 2a 20 73 6f 6d 65 20 76 61 5f 2e 2e 2e 20 6d /* some va_... m
2a80: 61 63 72 6f 73 20 6e 65 65 64 20 74 68 65 73 65 acros need these
2a90: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 69 6e 74 20 flags */. int
2aa0: 20 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73 flags
2ab0: 3b 0a 20 20 2f 2a 20 63 75 72 72 65 6e 74 20 70 ;. /* current p
2ac0: 6f 69 6e 74 65 72 20 69 6e 74 6f 20 74 68 65 20 ointer into the
2ad0: 61 72 67 75 6d 65 6e 74 20 61 72 72 61 79 20 2a argument array *
2ae0: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e /. unsigned lon
2af0: 67 20 20 61 70 74 72 3b 0a 20 20 2f 2a 20 73 74 g aptr;. /* st
2b00: 72 75 63 74 75 72 65 20 72 65 74 75 72 6e 20 70 ructure return p
2b10: 6f 69 6e 74 65 72 2c 20 72 65 74 75 72 6e 20 74 ointer, return t
2b20: 79 70 65 2c 20 72 65 74 75 72 6e 20 74 79 70 65 ype, return type
2b30: 20 73 69 7a 65 20 2a 2f 0a 20 20 76 6f 69 64 2a size */. void*
2b40: 20 20 20 20 20 20 20 20 20 20 72 61 64 64 72 3b raddr;
2b50: 0a 20 20 65 6e 75 6d 20 5f 5f 56 41 74 79 70 65 . enum __VAtype
2b60: 20 20 72 74 79 70 65 3b 0a 20 20 75 6e 73 69 67 rtype;. unsig
2b70: 6e 65 64 20 6c 6f 6e 67 20 20 72 73 69 7a 65 3b ned long rsize;
2b80: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 .#if defined(__i
2b90: 33 38 36 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 386__) || (defin
2ba0: 65 64 28 5f 5f 72 73 36 30 30 30 5f 5f 29 20 26 ed(__rs6000__) &
2bb0: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 & defined(__MACH
2bc0: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f __) && defined(_
2bd0: 5f 41 50 50 4c 45 5f 5f 29 29 0a 20 20 2f 2a 20 _APPLE__)). /*
2be0: 46 69 6c 6c 65 72 20 77 6f 72 64 2c 20 6e 65 65 Filler word, nee
2bf0: 64 65 64 20 69 66 20 74 68 65 20 6e 75 6d 62 65 ded if the numbe
2c00: 72 73 20 6f 66 20 77 6f 72 64 73 20 75 70 20 74 rs of words up t
2c10: 6f 20 6e 6f 77 20 69 6e 20 74 68 69 73 20 73 74 o now in this st
2c20: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 2f 2a 20 ructure */. /*
2c30: 69 73 20 6f 64 64 20 28 62 65 63 61 75 73 65 20 is odd (because
2c40: 6f 6e 20 4d 53 56 43 2c 20 61 6c 69 67 6e 6f 66 on MSVC, alignof
2c50: 28 64 6f 75 62 6c 65 29 20 3d 20 38 2c 20 6e 6f (double) = 8, no
2c60: 72 6d 61 6c 6c 79 20 3d 20 34 3b 20 73 69 6d 69 rmally = 4; simi
2c70: 6c 61 72 6c 79 2c 20 20 2a 2f 0a 20 20 2f 2a 20 larly, */. /*
2c80: 6f 6e 20 4d 61 63 4f 53 20 58 2c 20 74 68 65 20 on MacOS X, the
2c90: 41 70 70 6c 65 20 63 6f 6d 70 69 6c 65 72 20 68 Apple compiler h
2ca0: 61 73 20 61 6c 69 67 6e 6f 66 28 64 6f 75 62 6c as alignof(doubl
2cb0: 65 29 20 3d 20 38 20 77 68 65 72 65 61 73 20 74 e) = 8 whereas t
2cc0: 68 65 20 20 20 20 20 20 2a 2f 0a 20 20 2f 2a 20 he */. /*
2cd0: 73 74 61 6e 64 61 72 64 20 47 43 43 20 68 61 73 standard GCC has
2ce0: 20 61 6c 69 67 6e 6f 66 28 64 6f 75 62 6c 65 29 alignof(double)
2cf0: 20 3d 20 34 2e 20 20 20 20 20 20 20 20 20 20 20 = 4.
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d10: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 5f 5f 76 */. __v
2d20: 61 77 6f 72 64 20 20 20 20 20 20 20 66 69 6c 6c aword fill
2d30: 65 72 31 3b 0a 23 65 6e 64 69 66 0a 20 20 2f 2a er1;.#endif. /*
2d40: 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 temporary stora
2d50: 67 65 20 66 6f 72 20 72 65 74 75 72 6e 20 76 61 ge for return va
2d60: 6c 75 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b lue */. union {
2d70: 0a 20 20 20 20 63 68 61 72 20 20 20 20 20 20 20 . char
2d80: 20 20 20 20 20 20 20 20 20 5f 63 68 61 72 3b 0a _char;.
2d90: 20 20 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 signed char
2da0: 20 20 20 20 20 20 20 20 5f 73 63 68 61 72 3b 0a _schar;.
2db0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 unsigned cha
2dc0: 72 20 20 20 20 20 20 20 5f 75 63 68 61 72 3b 0a r _uchar;.
2dd0: 20 20 20 20 73 68 6f 72 74 20 20 20 20 20 20 20 short
2de0: 20 20 20 20 20 20 20 20 5f 73 68 6f 72 74 3b 0a _short;.
2df0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 73 68 6f unsigned sho
2e00: 72 74 20 20 20 20 20 20 5f 75 73 68 6f 72 74 3b rt _ushort;
2e10: 0a 20 20 20 20 69 6e 74 20 20 20 20 20 20 20 20 . int
2e20: 20 20 20 20 20 20 20 20 20 5f 69 6e 74 3b 0a 20 _int;.
2e30: 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 unsigned int
2e40: 20 20 20 20 20 20 20 5f 75 69 6e 74 3b 0a 20 20 _uint;.
2e50: 20 20 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20 long
2e60: 20 20 20 20 20 20 5f 6c 6f 6e 67 3b 0a 20 20 20 _long;.
2e70: 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 20 unsigned long
2e80: 20 20 20 20 20 5f 75 6c 6f 6e 67 3b 0a 23 69 66 _ulong;.#if
2e90: 20 21 28 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 !(defined(__mip
2ea0: 73 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 s64__) || define
2eb0: 64 28 5f 5f 61 6c 70 68 61 5f 5f 29 29 20 26 26 d(__alpha__)) &&
2ec0: 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 4c 4f defined(HAVE_LO
2ed0: 4e 47 4c 4f 4e 47 29 0a 20 20 20 20 6c 6f 6e 67 NGLONG). long
2ee0: 20 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20 20 long
2ef0: 5f 6c 6f 6e 67 6c 6f 6e 67 3b 0a 20 20 20 20 75 _longlong;. u
2f00: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6c 6f 6e nsigned long lon
2f10: 67 20 20 5f 75 6c 6f 6e 67 6c 6f 6e 67 3b 0a 23 g _ulonglong;.#
2f20: 65 6e 64 69 66 0a 20 20 20 20 66 6c 6f 61 74 20 endif. float
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 _f
2f40: 6c 6f 61 74 3b 0a 20 20 20 20 64 6f 75 62 6c 65 loat;. double
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 64 _d
2f60: 6f 75 62 6c 65 3b 0a 20 20 20 20 76 6f 69 64 2a ouble;. void*
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f _
2f80: 70 74 72 3b 0a 20 20 20 20 5f 5f 76 61 77 6f 72 ptr;. __vawor
2f90: 64 20 20 20 20 20 20 20 20 20 20 20 20 5f 77 6f d _wo
2fa0: 72 64 73 5b 32 5d 3b 0a 20 20 7d 20 20 20 20 20 rds[2];. }
2fb0: 20 20 20 20 20 20 20 20 20 74 6d 70 3b 0a 23 69 tmp;.#i
2fc0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 f defined(__i386
2fd0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
2fe0: 5f 6d 36 38 6b 5f 5f 29 20 7c 7c 20 28 64 65 66 _m68k__) || (def
2ff0: 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 ined(__sparc__)
3000: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 73 70 && !defined(__sp
3010: 61 72 63 36 34 5f 5f 29 29 20 7c 7c 20 64 65 66 arc64__)) || def
3020: 69 6e 65 64 28 5f 5f 68 70 70 61 5f 5f 29 20 7c ined(__hppa__) |
3030: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 38 38 6b | defined(__m88k
3040: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
3050: 5f 69 61 36 34 5f 5f 29 0a 20 20 76 6f 69 64 2a _ia64__). void*
3060: 20 20 20 20 20 20 20 20 20 20 73 74 72 75 63 74 struct
3070: 72 61 64 64 72 3b 0a 23 65 6e 64 69 66 0a 23 69 raddr;.#endif.#i
3080: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 f defined(__mips
3090: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
30a0: 5f 6d 69 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 _mipsn32__) || d
30b0: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f efined(__mips64_
30c0: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
30d0: 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 alpha__) || defi
30e0: 6e 65 64 28 5f 5f 68 70 70 61 5f 5f 29 0a 20 20 ned(__hppa__).
30f0: 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20 20 6d long m
3100: 65 6d 61 72 67 70 74 72 3b 0a 23 65 6e 64 69 66 emargptr;.#endif
3110: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 68 .#if defined(__h
3120: 70 70 61 5f 5f 29 0a 20 20 6c 6f 6e 67 20 20 20 ppa__). long
3130: 20 20 20 20 20 20 20 20 66 61 72 67 5f 6f 66 66 farg_off
3140: 73 65 74 3b 0a 20 20 6c 6f 6e 67 20 20 20 20 20 set;. long
3150: 20 20 20 20 20 20 64 61 72 67 5f 6f 66 66 73 65 darg_offse
3160: 74 3b 0a 20 20 66 6c 6f 61 74 20 20 20 20 20 20 t;. float
3170: 20 20 20 20 66 61 72 67 5b 34 5d 3b 0a 20 20 64 farg[4];. d
3180: 6f 75 62 6c 65 20 20 20 20 20 20 20 20 20 64 61 ouble da
3190: 72 67 5b 32 5d 3b 0a 23 65 6e 64 69 66 0a 23 69 rg[2];.#endif.#i
31a0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 f defined(__mips
31b0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 __) && !defined(
31c0: 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a 20 20 69 __mipsn32__). i
31d0: 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 61 6e nt an
31e0: 75 6d 3b 0a 20 20 66 6c 6f 61 74 20 20 20 20 20 um;. float
31f0: 20 20 20 20 20 66 61 72 67 5b 32 5d 3b 0a 20 20 farg[2];.
3200: 64 6f 75 62 6c 65 20 20 20 20 20 20 20 20 20 64 double d
3210: 61 72 67 5b 32 5d 3b 0a 23 65 6e 64 69 66 0a 23 arg[2];.#endif.#
3220: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 if defined(__mip
3230: 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e sn32__) || defin
3240: 65 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 0a 20 ed(__mips64__).
3250: 20 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 int
3260: 61 6e 75 6d 3b 0a 20 20 66 6c 6f 61 74 20 20 20 anum;. float
3270: 20 20 20 20 20 20 20 66 61 72 67 5b 38 5d 3b 0a farg[8];.
3280: 20 20 64 6f 75 62 6c 65 20 20 20 20 20 20 20 20 double
3290: 20 64 61 72 67 5b 38 5d 3b 0a 23 65 6e 64 69 66 darg[8];.#endif
32a0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 .#if defined(__s
32b0: 70 61 72 63 36 34 5f 5f 29 0a 20 20 69 6e 74 20 parc64__). int
32c0: 20 20 20 20 20 20 20 20 20 20 20 61 6e 75 6d 3b anum;
32d0: 0a 20 20 66 6c 6f 61 74 20 20 20 20 20 20 20 20 . float
32e0: 20 20 66 61 72 67 5b 31 36 5d 3b 0a 20 20 64 6f farg[16];. do
32f0: 75 62 6c 65 20 20 20 20 20 20 20 20 20 64 61 72 uble dar
3300: 67 5b 31 36 5d 3b 0a 23 65 6e 64 69 66 0a 23 69 g[16];.#endif.#i
3310: 66 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 f defined(__rs60
3320: 30 30 5f 5f 29 0a 20 20 64 6f 75 62 6c 65 2a 20 00__). double*
3330: 20 20 20 20 20 20 20 6d 65 6d 66 61 72 67 70 74 memfargpt
3340: 72 3b 0a 20 20 64 6f 75 62 6c 65 20 20 20 20 20 r;. double
3350: 20 20 20 20 66 61 72 67 5b 31 33 5d 3b 0a 23 69 farg[13];.#i
3360: 66 20 21 28 64 65 66 69 6e 65 64 28 5f 41 49 58 f !(defined(_AIX
3370: 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f ) || (defined(__
3380: 4d 41 43 48 5f 5f 29 20 26 26 20 64 65 66 69 6e MACH__) && defin
3390: 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 29 29 0a ed(__APPLE__))).
33a0: 20 20 5f 5f 76 61 77 6f 72 64 20 20 20 20 20 20 __vaword
33b0: 20 72 65 67 61 72 67 5b 38 5d 3b 0a 20 20 75 6e regarg[8];. un
33c0: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 20 73 61 70 signed long sap
33d0: 74 72 3b 0a 20 20 69 6e 74 20 20 20 20 20 20 20 tr;. int
33e0: 20 20 20 20 20 6f 6e 73 74 61 63 6b 3b 0a 23 65 onstack;.#e
33f0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 ndif.#endif.#if
3400: 64 65 66 69 6e 65 64 28 5f 5f 73 33 39 30 5f 5f defined(__s390__
3410: 29 0a 20 20 66 6c 6f 61 74 2a 20 20 20 20 20 20 ). float*
3420: 20 20 20 6d 65 6d 66 61 72 67 70 74 72 3b 0a 20 memfargptr;.
3430: 20 64 6f 75 62 6c 65 2a 20 20 20 20 20 20 20 20 double*
3440: 6d 65 6d 64 61 72 67 70 74 72 3b 0a 20 20 66 6c memdargptr;. fl
3450: 6f 61 74 20 20 20 20 20 20 20 20 20 20 66 61 72 oat far
3460: 67 5b 32 5d 3b 0a 20 20 64 6f 75 62 6c 65 20 20 g[2];. double
3470: 20 20 20 20 20 20 20 64 61 72 67 5b 32 5d 3b 0a darg[2];.
3480: 20 20 5f 5f 76 61 77 6f 72 64 20 20 20 20 20 20 __vaword
3490: 20 72 65 67 61 72 67 5b 35 5d 3b 0a 20 20 75 6e regarg[5];. un
34a0: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 20 73 61 70 signed long sap
34b0: 74 72 3b 0a 20 20 69 6e 74 20 20 20 20 20 20 20 tr;. int
34c0: 20 20 20 20 20 6f 6e 73 74 61 63 6b 3b 0a 23 65 onstack;.#e
34d0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
34e0: 28 5f 5f 69 61 36 34 5f 5f 29 0a 20 20 5f 5f 76 (__ia64__). __v
34f0: 61 77 6f 72 64 2a 20 20 20 20 20 20 73 61 70 74 aword* sapt
3500: 72 3b 0a 20 20 64 6f 75 62 6c 65 2a 20 20 20 20 r;. double*
3510: 20 20 20 20 6d 65 6d 66 61 72 67 70 74 72 3b 0a memfargptr;.
3520: 20 20 64 6f 75 62 6c 65 20 20 20 20 20 20 20 20 double
3530: 20 66 61 72 67 5b 38 5d 3b 0a 23 65 6e 64 69 66 farg[8];.#endif
3540: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 78 .#if defined(__x
3550: 38 36 5f 36 34 5f 5f 29 0a 20 20 64 6f 75 62 6c 86_64__). doubl
3560: 65 2a 20 20 20 20 20 20 20 20 6d 65 6d 66 61 72 e* memfar
3570: 67 70 74 72 3b 0a 20 20 64 6f 75 62 6c 65 20 20 gptr;. double
3580: 20 20 20 20 20 20 20 66 61 72 67 5b 38 5d 3b 0a farg[8];.
3590: 20 20 5f 5f 76 61 77 6f 72 64 2a 20 20 20 20 20 __vaword*
35a0: 20 6d 65 6d 69 61 72 67 70 74 72 3b 0a 20 20 5f memiargptr;. _
35b0: 5f 76 61 77 6f 72 64 20 20 20 20 20 20 20 69 61 _vaword ia
35c0: 72 67 5b 36 5d 3b 0a 23 65 6e 64 69 66 0a 7d 20 rg[6];.#endif.}
35d0: 5f 5f 76 61 5f 61 6c 69 73 74 3b 0a 0a 74 79 70 __va_alist;..typ
35e0: 65 64 65 66 20 5f 5f 76 61 5f 61 6c 69 73 74 2a edef __va_alist*
35f0: 20 76 61 5f 61 6c 69 73 74 3b 0a 0a 0a 2f 2a 0a va_alist;.../*.
3600: 20 2a 20 44 65 66 69 6e 69 74 69 6f 6e 20 6f 66 * Definition of
3610: 20 74 68 65 20 76 61 5f 73 74 61 72 74 5f 78 78 the va_start_xx
3620: 78 20 6d 61 63 72 6f 73 2e 0a 20 2a 2f 0a 23 64 x macros.. */.#d
3630: 65 66 69 6e 65 20 5f 5f 56 41 5f 53 54 41 52 54 efine __VA_START
3640: 5f 46 4c 41 47 53 20 20 5c 0a 20 20 5f 5f 56 41 _FLAGS \. __VA
3650: 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 7c _STRUCT_RETURN |
3660: 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 52 45 54 55 __VA_FLOAT_RETU
3670: 52 4e 20 7c 20 5f 5f 56 41 5f 53 54 52 55 43 54 RN | __VA_STRUCT
3680: 5f 41 52 47 53 20 7c 20 5f 5f 56 41 5f 46 4c 4f _ARGS | __VA_FLO
3690: 41 54 5f 41 52 47 53 20 7c 20 5f 5f 56 41 5f 49 AT_ARGS | __VA_I
36a0: 4e 54 45 47 45 52 53 20 7c 20 5f 5f 56 41 5f 43 NTEGERS | __VA_C
36b0: 4c 45 41 4e 55 50 0a 23 64 65 66 69 6e 65 20 5f LEANUP.#define _
36c0: 5f 76 61 5f 73 74 61 72 74 28 4c 49 53 54 2c 52 _va_start(LIST,R
36d0: 45 54 54 59 50 45 29 20 20 5c 0a 20 20 28 28 4c ETTYPE) \. ((L
36e0: 49 53 54 29 2d 3e 66 6c 61 67 73 20 3d 20 5f 5f IST)->flags = __
36f0: 56 41 5f 53 54 41 52 54 5f 46 4c 41 47 53 2c 09 VA_START_FLAGS,.
3700: 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d ....\. (LIST)-
3710: 3e 72 74 79 70 65 20 3d 20 28 52 45 54 54 59 50 >rtype = (RETTYP
3720: 45 29 09 09 09 09 09 09 5c 0a 20 20 29 0a 23 64 E)......\. ).#d
3730: 65 66 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 76 efine va_start_v
3740: 6f 69 64 28 4c 49 53 54 29 09 20 5f 5f 76 61 5f oid(LIST). __va_
3750: 73 74 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 76 start(LIST,__VAv
3760: 6f 69 64 29 0a 23 64 65 66 69 6e 65 20 76 61 5f oid).#define va_
3770: 73 74 61 72 74 5f 63 68 61 72 28 4c 49 53 54 29 start_char(LIST)
3780: 09 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 53 . __va_start(LIS
3790: 54 2c 5f 5f 56 41 63 68 61 72 29 0a 23 64 65 66 T,__VAchar).#def
37a0: 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 73 63 68 ine va_start_sch
37b0: 61 72 28 4c 49 53 54 29 09 20 5f 5f 76 61 5f 73 ar(LIST). __va_s
37c0: 74 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 73 63 tart(LIST,__VAsc
37d0: 68 61 72 29 0a 23 64 65 66 69 6e 65 20 76 61 5f har).#define va_
37e0: 73 74 61 72 74 5f 75 63 68 61 72 28 4c 49 53 54 start_uchar(LIST
37f0: 29 09 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 ). __va_start(LI
3800: 53 54 2c 5f 5f 56 41 75 63 68 61 72 29 0a 23 64 ST,__VAuchar).#d
3810: 65 66 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 73 efine va_start_s
3820: 68 6f 72 74 28 4c 49 53 54 29 09 20 5f 5f 76 61 hort(LIST). __va
3830: 5f 73 74 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 _start(LIST,__VA
3840: 73 68 6f 72 74 29 0a 23 64 65 66 69 6e 65 20 76 short).#define v
3850: 61 5f 73 74 61 72 74 5f 75 73 68 6f 72 74 28 4c a_start_ushort(L
3860: 49 53 54 29 09 20 5f 5f 76 61 5f 73 74 61 72 74 IST). __va_start
3870: 28 4c 49 53 54 2c 5f 5f 56 41 75 73 68 6f 72 74 (LIST,__VAushort
3880: 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 73 74 61 ).#define va_sta
3890: 72 74 5f 69 6e 74 28 4c 49 53 54 29 09 20 5f 5f rt_int(LIST). __
38a0: 76 61 5f 73 74 61 72 74 28 4c 49 53 54 2c 5f 5f va_start(LIST,__
38b0: 56 41 69 6e 74 29 0a 23 64 65 66 69 6e 65 20 76 VAint).#define v
38c0: 61 5f 73 74 61 72 74 5f 75 69 6e 74 28 4c 49 53 a_start_uint(LIS
38d0: 54 29 09 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c T). __va_start(L
38e0: 49 53 54 2c 5f 5f 56 41 75 69 6e 74 29 0a 23 64 IST,__VAuint).#d
38f0: 65 66 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 6c efine va_start_l
3900: 6f 6e 67 28 4c 49 53 54 29 09 20 5f 5f 76 61 5f ong(LIST). __va_
3910: 73 74 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 6c start(LIST,__VAl
3920: 6f 6e 67 29 0a 23 64 65 66 69 6e 65 20 76 61 5f ong).#define va_
3930: 73 74 61 72 74 5f 75 6c 6f 6e 67 28 4c 49 53 54 start_ulong(LIST
3940: 29 09 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 ). __va_start(LI
3950: 53 54 2c 5f 5f 56 41 75 6c 6f 6e 67 29 0a 23 64 ST,__VAulong).#d
3960: 65 66 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 6c efine va_start_l
3970: 6f 6e 67 6c 6f 6e 67 28 4c 49 53 54 29 09 20 5f onglong(LIST). _
3980: 5f 76 61 5f 73 74 61 72 74 28 4c 49 53 54 2c 5f _va_start(LIST,_
3990: 5f 56 41 6c 6f 6e 67 6c 6f 6e 67 29 0a 23 64 65 _VAlonglong).#de
39a0: 66 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 75 6c fine va_start_ul
39b0: 6f 6e 67 6c 6f 6e 67 28 4c 49 53 54 29 20 5f 5f onglong(LIST) __
39c0: 76 61 5f 73 74 61 72 74 28 4c 49 53 54 2c 5f 5f va_start(LIST,__
39d0: 56 41 75 6c 6f 6e 67 6c 6f 6e 67 29 0a 23 64 65 VAulonglong).#de
39e0: 66 69 6e 65 20 76 61 5f 73 74 61 72 74 5f 66 6c fine va_start_fl
39f0: 6f 61 74 28 4c 49 53 54 29 09 20 5f 5f 76 61 5f oat(LIST). __va_
3a00: 73 74 61 72 74 28 4c 49 53 54 2c 5f 5f 56 41 66 start(LIST,__VAf
3a10: 6c 6f 61 74 29 0a 23 64 65 66 69 6e 65 20 76 61 loat).#define va
3a20: 5f 73 74 61 72 74 5f 64 6f 75 62 6c 65 28 4c 49 _start_double(LI
3a30: 53 54 29 09 20 5f 5f 76 61 5f 73 74 61 72 74 28 ST). __va_start(
3a40: 4c 49 53 54 2c 5f 5f 56 41 64 6f 75 62 6c 65 29 LIST,__VAdouble)
3a50: 0a 23 64 65 66 69 6e 65 20 76 61 5f 73 74 61 72 .#define va_star
3a60: 74 5f 70 74 72 28 4c 49 53 54 2c 54 59 50 45 29 t_ptr(LIST,TYPE)
3a70: 09 20 5f 5f 76 61 5f 73 74 61 72 74 28 4c 49 53 . __va_start(LIS
3a80: 54 2c 5f 5f 56 41 76 6f 69 64 70 29 0a 0a 2f 2a T,__VAvoidp)../*
3a90: 0a 20 2a 20 76 61 5f 73 74 61 72 74 5f 73 74 72 . * va_start_str
3aa0: 75 63 74 3a 20 50 72 65 70 61 72 69 6e 67 20 73 uct: Preparing s
3ab0: 74 72 75 63 74 75 72 65 20 72 65 74 75 72 6e 2e tructure return.
3ac0: 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 76 61 5f . */.#define va_
3ad0: 73 74 61 72 74 5f 73 74 72 75 63 74 28 4c 49 53 start_struct(LIS
3ae0: 54 2c 54 59 50 45 2c 54 59 50 45 5f 53 50 4c 49 T,TYPE,TYPE_SPLI
3af0: 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 5f 76 61 TTABLE) \. _va
3b00: 5f 73 74 61 72 74 5f 73 74 72 75 63 74 28 4c 49 _start_struct(LI
3b10: 53 54 2c 73 69 7a 65 6f 66 28 54 59 50 45 29 2c ST,sizeof(TYPE),
3b20: 5f 5f 56 41 5f 61 6c 69 67 6e 6f 66 28 54 59 50 __VA_alignof(TYP
3b30: 45 29 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 42 E),TYPE_SPLITTAB
3b40: 4c 45 29 0a 2f 2a 20 5f 76 61 5f 73 74 61 72 74 LE)./* _va_start
3b50: 5f 73 74 72 75 63 74 28 29 20 69 73 20 6c 69 6b _struct() is lik
3b60: 65 20 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 e va_start_struc
3b70: 74 28 29 2c 20 65 78 63 65 70 74 20 74 68 61 74 t(), except that
3b80: 20 79 6f 75 20 70 61 73 73 0a 20 2a 20 74 68 65 you pass. * the
3b90: 20 74 79 70 65 27 73 20 73 69 7a 65 20 61 6e 64 type's size and
3ba0: 20 61 6c 69 67 6e 6d 65 6e 74 20 69 6e 73 74 65 alignment inste
3bb0: 61 64 20 6f 66 20 74 68 65 20 74 79 70 65 20 69 ad of the type i
3bc0: 74 73 65 6c 66 2e 0a 20 2a 2f 0a 23 64 65 66 69 tself.. */.#defi
3bd0: 6e 65 20 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 ne _va_start_str
3be0: 75 63 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 uct(LIST,TYPE_SI
3bf0: 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 54 59 ZE,TYPE_ALIGN,TY
3c00: 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 PE_SPLITTABLE)
3c10: 5c 0a 20 20 28 5f 5f 76 61 5f 73 74 61 72 74 28 \. (__va_start(
3c20: 4c 49 53 54 2c 5f 5f 56 41 73 74 72 75 63 74 29 LIST,__VAstruct)
3c30: 2c 09 09 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 ,......\. (LIS
3c40: 54 29 2d 3e 72 73 69 7a 65 20 3d 20 28 54 59 50 T)->rsize = (TYP
3c50: 45 5f 53 49 5a 45 29 2c 09 09 09 09 09 09 5c 0a E_SIZE),......\.
3c60: 20 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 ((LIST)->flag
3c70: 73 20 26 20 5f 5f 56 41 5f 53 55 4e 50 52 4f 43 s & __VA_SUNPROC
3c80: 43 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 09 C_STRUCT_RETURN.
3c90: 09 09 09 5c 0a 20 20 20 20 3f 20 5f 5f 76 61 5f ...\. ? __va_
3ca0: 73 74 61 72 74 5f 73 74 72 75 63 74 32 28 4c 49 start_struct2(LI
3cb0: 53 54 29 09 09 09 09 09 09 5c 0a 20 20 20 20 3a ST)......\. :
3cc0: 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 ((LIST)->flags
3cd0: 26 20 28 5f 5f 56 41 5f 50 43 43 5f 53 54 52 55 & (__VA_PCC_STRU
3ce0: 43 54 5f 52 45 54 55 52 4e 20 7c 20 5f 5f 56 41 CT_RETURN | __VA
3cf0: 5f 53 55 4e 43 43 5f 53 54 52 55 43 54 5f 52 45 _SUNCC_STRUCT_RE
3d00: 54 55 52 4e 29 20 5c 0a 20 20 20 20 20 20 20 3f TURN) \. ?
3d10: 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 3c 3d ((TYPE_SIZE) <=
3d20: 20 73 69 7a 65 6f 66 28 5f 5f 76 61 5f 73 74 72 sizeof(__va_str
3d30: 75 63 74 5f 62 75 66 66 65 72 29 20 7c 7c 20 5f uct_buffer) || _
3d40: 5f 76 61 5f 65 72 72 6f 72 32 28 54 59 50 45 5f _va_error2(TYPE_
3d50: 53 49 5a 45 29 2c 20 5c 0a 20 20 20 20 20 20 20 SIZE), \.
3d60: 20 20 20 28 4c 49 53 54 29 2d 3e 72 61 64 64 72 (LIST)->raddr
3d70: 20 3d 20 26 5f 5f 76 61 5f 73 74 72 75 63 74 5f = &__va_struct_
3d80: 62 75 66 66 65 72 2c 09 09 09 09 5c 0a 20 20 20 buffer,....\.
3d90: 20 20 20 20 20 20 20 30 09 09 09 09 09 09 09 09 0........
3da0: 5c 0a 20 20 20 20 20 20 20 20 20 29 09 09 09 09 \. )....
3db0: 09 09 09 09 5c 0a 20 20 20 20 20 20 20 3a 20 28 ....\. : (
3dc0: 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 26 ((LIST)->flags &
3dd0: 20 5f 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 52 55 __VA_SMALL_STRU
3de0: 43 54 5f 52 45 54 55 52 4e 29 09 09 09 5c 0a 20 CT_RETURN)...\.
3df0: 20 20 20 20 20 20 20 20 20 26 26 20 5f 5f 76 61 && __va
3e00: 5f 72 65 67 5f 73 74 72 75 63 74 5f 72 65 74 75 _reg_struct_retu
3e10: 72 6e 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a rn(LIST,TYPE_SIZ
3e20: 45 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c E,TYPE_SPLITTABL
3e30: 45 29 09 5c 0a 20 20 20 20 20 20 20 20 20 20 3f E).\. ?
3e40: 20 28 28 4c 49 53 54 29 2d 3e 72 61 64 64 72 20 ((LIST)->raddr
3e50: 3d 20 26 28 4c 49 53 54 29 2d 3e 74 6d 70 2c 09 = &(LIST)->tmp,.
3e60: 09 09 09 5c 0a 20 20 20 20 20 20 20 20 20 20 20 ...\.
3e70: 20 20 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 __va_start_str
3e80: 75 63 74 31 28 4c 49 53 54 2c 54 59 50 45 5f 53 uct1(LIST,TYPE_S
3e90: 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 54 IZE,TYPE_ALIGN,T
3ea0: 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 YPE_SPLITTABLE)
3eb0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 09 \. ).
3ec0: 09 09 09 09 09 09 09 5c 0a 20 20 20 20 20 20 20 .......\.
3ed0: 20 20 20 3a 20 5f 5f 76 61 5f 73 74 61 72 74 5f : __va_start_
3ee0: 73 74 72 75 63 74 32 28 4c 49 53 54 29 09 09 09 struct2(LIST)...
3ef0: 09 09 5c 0a 20 20 29 29 20 20 29 20 20 29 0a 2f ..\. )) ) )./
3f00: 2a 20 44 65 74 65 72 6d 69 6e 65 73 20 77 68 65 * Determines whe
3f10: 74 68 65 72 20 61 20 73 74 72 75 63 74 75 72 65 ther a structure
3f20: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 6e 20 is returned in
3f30: 72 65 67 69 73 74 65 72 73 2c 0a 20 2a 20 64 65 registers,. * de
3f40: 70 65 6e 64 69 6e 67 20 6f 6e 20 69 74 73 20 73 pending on its s
3f50: 69 7a 65 20 61 6e 64 20 69 74 73 20 77 6f 72 64 ize and its word
3f60: 2d 73 70 6c 69 74 74 61 62 6c 65 20 66 6c 61 67 -splittable flag
3f70: 2e 0a 20 2a 2f 0a 23 69 66 20 28 64 65 66 69 6e .. */.#if (defin
3f80: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 26 26 20 ed(__i386__) &&
3f90: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 29 defined(_WIN32))
3fa0: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 72 65 .#define __va_re
3fb0: 67 5f 73 74 72 75 63 74 5f 72 65 74 75 72 6e 28 g_struct_return(
3fc0: 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 LIST,TYPE_SIZE,T
3fd0: 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 YPE_SPLITTABLE)
3fe0: 20 5c 0a 20 20 28 28 54 59 50 45 5f 53 49 5a 45 \. ((TYPE_SIZE
3ff0: 29 20 3d 3d 20 31 20 7c 7c 20 28 54 59 50 45 5f ) == 1 || (TYPE_
4000: 53 49 5a 45 29 20 3d 3d 20 32 20 7c 7c 20 28 54 SIZE) == 2 || (T
4010: 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 34 09 09 YPE_SIZE) == 4..
4020: 5c 0a 20 20 20 7c 7c 20 28 28 54 59 50 45 5f 53 \. || ((TYPE_S
4030: 49 5a 45 29 20 3d 3d 20 38 09 09 09 09 09 09 09 IZE) == 8.......
4040: 5c 0a 20 20 20 20 20 20 20 26 26 20 28 28 28 4c \. && (((L
4050: 49 53 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f 5f IST)->flags & __
4060: 56 41 5f 4d 53 56 43 5f 53 54 52 55 43 54 5f 52 VA_MSVC_STRUCT_R
4070: 45 54 55 52 4e 29 09 09 09 5c 0a 20 20 20 20 20 ETURN)...\.
4080: 20 20 20 20 20 20 7c 7c 20 28 28 54 59 50 45 5f || ((TYPE_
4090: 53 50 4c 49 54 54 41 42 4c 45 29 09 09 09 09 09 SPLITTABLE).....
40a0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
40b0: 20 26 26 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 && ((LIST)->fla
40c0: 67 73 20 26 20 5f 5f 56 41 5f 47 43 43 5f 53 54 gs & __VA_GCC_ST
40d0: 52 55 43 54 5f 52 45 54 55 52 4e 29 09 09 5c 0a RUCT_RETURN)..\.
40e0: 20 20 29 20 20 20 29 20 20 20 29 20 20 20 29 0a ) ) ) ).
40f0: 2f 2a 20 54 75 72 6e 20 6f 6e 20 5f 5f 56 41 5f /* Turn on __VA_
4100: 52 45 47 49 53 54 45 52 5f 53 54 52 55 43 54 5f REGISTER_STRUCT_
4110: 52 45 54 55 52 4e 20 69 66 20 5f 5f 56 41 5f 53 RETURN if __VA_S
4120: 4d 41 4c 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 MALL_STRUCT_RETU
4130: 52 4e 20 77 61 73 20 73 65 74 0a 20 2a 20 61 6e RN was set. * an
4140: 64 20 74 68 65 20 73 74 72 75 63 74 20 77 69 6c d the struct wil
4150: 6c 20 61 63 74 75 61 6c 6c 79 20 62 65 20 72 65 l actually be re
4160: 74 75 72 6e 65 64 20 69 6e 20 72 65 67 69 73 74 turned in regist
4170: 65 72 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 ers.. */.#define
4180: 20 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 __va_start_stru
4190: 63 74 31 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 ct1(LIST,TYPE_SI
41a0: 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 54 59 ZE,TYPE_ALIGN,TY
41b0: 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 PE_SPLITTABLE)
41c0: 5c 0a 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 \. ((LIST)->fla
41d0: 67 73 20 7c 3d 20 5f 5f 56 41 5f 52 45 47 49 53 gs |= __VA_REGIS
41e0: 54 45 52 5f 53 54 52 55 43 54 5f 52 45 54 55 52 TER_STRUCT_RETUR
41f0: 4e 2c 20 30 29 0a 23 65 6e 64 69 66 0a 23 69 66 N, 0).#endif.#if
4200: 20 28 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 (defined(__i386
4210: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 __) && !defined(
4220: 5f 57 49 4e 33 32 29 29 20 7c 7c 20 64 65 66 69 _WIN32)) || defi
4230: 6e 65 64 28 5f 5f 6d 36 38 6b 5f 5f 29 20 7c 7c ned(__m68k__) ||
4240: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f defined(__arm__
4250: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 72 ) || defined(__r
4260: 73 36 30 30 30 5f 5f 29 20 7c 7c 20 64 65 66 69 s6000__) || defi
4270: 6e 65 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 ned(__convex__)
4280: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 33 39 || defined(__s39
4290: 30 5f 5f 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 0__).#define __v
42a0: 61 5f 72 65 67 5f 73 74 72 75 63 74 5f 72 65 74 a_reg_struct_ret
42b0: 75 72 6e 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 urn(LIST,TYPE_SI
42c0: 5a 45 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 42 ZE,TYPE_SPLITTAB
42d0: 4c 45 29 20 20 5c 0a 20 20 28 28 54 59 50 45 5f LE) \. ((TYPE_
42e0: 53 49 5a 45 29 20 3d 3d 20 31 20 7c 7c 20 28 54 SIZE) == 1 || (T
42f0: 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 32 20 7c YPE_SIZE) == 2 |
4300: 7c 20 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d | (TYPE_SIZE) ==
4310: 20 34 09 09 5c 0a 20 20 20 7c 7c 20 28 28 54 59 4..\. || ((TY
4320: 50 45 5f 53 49 5a 45 29 20 3d 3d 20 38 20 26 26 PE_SIZE) == 8 &&
4330: 20 28 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c (TYPE_SPLITTABL
4340: 45 29 09 09 09 09 5c 0a 20 20 20 20 20 20 20 26 E)....\. &
4350: 26 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 & ((LIST)->flags
4360: 20 26 20 5f 5f 56 41 5f 47 43 43 5f 53 54 52 55 & __VA_GCC_STRU
4370: 43 54 5f 52 45 54 55 52 4e 29 09 09 09 5c 0a 20 CT_RETURN)...\.
4380: 20 29 20 20 20 29 0a 2f 2a 20 54 75 72 6e 20 6f ) )./* Turn o
4390: 6e 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 5f n __VA_REGISTER_
43a0: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 69 66 STRUCT_RETURN if
43b0: 20 5f 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 52 55 __VA_SMALL_STRU
43c0: 43 54 5f 52 45 54 55 52 4e 20 77 61 73 20 73 65 CT_RETURN was se
43d0: 74 0a 20 2a 20 61 6e 64 20 74 68 65 20 73 74 72 t. * and the str
43e0: 75 63 74 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c uct will actuall
43f0: 79 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 6e y be returned in
4400: 20 72 65 67 69 73 74 65 72 73 2e 0a 20 2a 2f 0a registers.. */.
4410: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 73 74 61 #define __va_sta
4420: 72 74 5f 73 74 72 75 63 74 31 28 4c 49 53 54 2c rt_struct1(LIST,
4430: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 TYPE_SIZE,TYPE_A
4440: 4c 49 47 4e 2c 54 59 50 45 5f 53 50 4c 49 54 54 LIGN,TYPE_SPLITT
4450: 41 42 4c 45 29 20 20 5c 0a 20 20 28 28 4c 49 53 ABLE) \. ((LIS
4460: 54 29 2d 3e 66 6c 61 67 73 20 7c 3d 20 5f 5f 56 T)->flags |= __V
4470: 41 5f 52 45 47 49 53 54 45 52 5f 53 54 52 55 43 A_REGISTER_STRUC
4480: 54 5f 52 45 54 55 52 4e 2c 20 30 29 0a 23 65 6e T_RETURN, 0).#en
4490: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
44a0: 5f 5f 61 6c 70 68 61 5f 5f 29 0a 23 64 65 66 69 __alpha__).#defi
44b0: 6e 65 20 5f 5f 76 61 5f 72 65 67 5f 73 74 72 75 ne __va_reg_stru
44c0: 63 74 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 54 ct_return(LIST,T
44d0: 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 53 50 YPE_SIZE,TYPE_SP
44e0: 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 28 LITTABLE) \. (
44f0: 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 31 (TYPE_SIZE) == 1
4500: 20 7c 7c 20 28 54 59 50 45 5f 53 49 5a 45 29 20 || (TYPE_SIZE)
4510: 3d 3d 20 32 20 7c 7c 20 28 54 59 50 45 5f 53 49 == 2 || (TYPE_SI
4520: 5a 45 29 20 3d 3d 20 34 20 7c 7c 20 28 54 59 50 ZE) == 4 || (TYP
4530: 45 5f 53 49 5a 45 29 20 3d 3d 20 38 09 5c 0a 20 E_SIZE) == 8.\.
4540: 20 20 7c 7c 20 28 28 54 59 50 45 5f 53 49 5a 45 || ((TYPE_SIZE
4550: 29 20 3d 3d 20 31 36 20 26 26 20 28 54 59 50 45 ) == 16 && (TYPE
4560: 5f 53 50 4c 49 54 54 41 42 4c 45 29 09 09 09 09 _SPLITTABLE)....
4570: 5c 0a 20 20 20 20 20 20 20 26 26 20 28 28 4c 49 \. && ((LI
4580: 53 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f 5f 56 ST)->flags & __V
4590: 41 5f 47 43 43 5f 53 54 52 55 43 54 5f 52 45 54 A_GCC_STRUCT_RET
45a0: 55 52 4e 29 09 09 09 5c 0a 20 20 29 20 20 20 29 URN)...\. ) )
45b0: 0a 2f 2a 20 54 75 72 6e 20 6f 6e 20 5f 5f 56 41 ./* Turn on __VA
45c0: 5f 52 45 47 49 53 54 45 52 5f 53 54 52 55 43 54 _REGISTER_STRUCT
45d0: 5f 52 45 54 55 52 4e 20 69 66 20 5f 5f 56 41 5f _RETURN if __VA_
45e0: 53 4d 41 4c 4c 5f 53 54 52 55 43 54 5f 52 45 54 SMALL_STRUCT_RET
45f0: 55 52 4e 20 77 61 73 20 73 65 74 0a 20 2a 20 61 URN was set. * a
4600: 6e 64 20 74 68 65 20 73 74 72 75 63 74 20 77 69 nd the struct wi
4610: 6c 6c 20 61 63 74 75 61 6c 6c 79 20 62 65 20 72 ll actually be r
4620: 65 74 75 72 6e 65 64 20 69 6e 20 72 65 67 69 73 eturned in regis
4630: 74 65 72 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e ters.. */.#defin
4640: 65 20 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 e __va_start_str
4650: 75 63 74 31 28 4c 49 53 54 2c 54 59 50 45 5f 53 uct1(LIST,TYPE_S
4660: 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 54 IZE,TYPE_ALIGN,T
4670: 59 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 YPE_SPLITTABLE)
4680: 20 5c 0a 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c \. ((LIST)->fl
4690: 61 67 73 20 7c 3d 20 5f 5f 56 41 5f 52 45 47 49 ags |= __VA_REGI
46a0: 53 54 45 52 5f 53 54 52 55 43 54 5f 52 45 54 55 STER_STRUCT_RETU
46b0: 52 4e 2c 20 30 29 0a 23 65 6e 64 69 66 0a 23 69 RN, 0).#endif.#i
46c0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 68 70 70 61 f defined(__hppa
46d0: 5f 5f 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 __).#define __va
46e0: 5f 72 65 67 5f 73 74 72 75 63 74 5f 72 65 74 75 _reg_struct_retu
46f0: 72 6e 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a rn(LIST,TYPE_SIZ
4700: 45 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c E,TYPE_SPLITTABL
4710: 45 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 2d E) \. ((LIST)-
4720: 3e 66 6c 61 67 73 20 26 20 5f 5f 56 41 5f 4f 4c >flags & __VA_OL
4730: 44 47 43 43 5f 53 54 52 55 43 54 5f 52 45 54 55 DGCC_STRUCT_RETU
4740: 52 4e 09 09 09 09 5c 0a 20 20 20 3f 20 28 28 54 RN....\. ? ((T
4750: 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 31 20 7c YPE_SIZE) == 1 |
4760: 7c 20 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d | (TYPE_SIZE) ==
4770: 20 32 20 7c 7c 20 28 54 59 50 45 5f 53 49 5a 45 2 || (TYPE_SIZE
4780: 29 20 3d 3d 20 34 29 09 09 5c 0a 20 20 20 3a 20 ) == 4)..\. :
4790: 28 28 54 59 50 45 5f 53 49 5a 45 29 20 3c 3d 20 ((TYPE_SIZE) <=
47a0: 38 29 09 09 09 09 09 09 09 5c 0a 20 20 29 0a 2f 8).......\. )./
47b0: 2a 20 54 65 73 74 20 62 6f 74 68 20 5f 5f 56 41 * Test both __VA
47c0: 5f 4f 4c 44 47 43 43 5f 53 54 52 55 43 54 5f 52 _OLDGCC_STRUCT_R
47d0: 45 54 55 52 4e 20 61 6e 64 20 5f 5f 56 41 5f 53 ETURN and __VA_S
47e0: 4d 41 4c 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 MALL_STRUCT_RETU
47f0: 52 4e 20 61 74 20 72 75 6e 20 74 69 6d 65 2e 20 RN at run time.
4800: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f */.#define __va_
4810: 73 74 61 72 74 5f 73 74 72 75 63 74 31 28 4c 49 start_struct1(LI
4820: 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 ST,TYPE_SIZE,TYP
4830: 45 5f 41 4c 49 47 4e 2c 54 59 50 45 5f 53 50 4c E_ALIGN,TYPE_SPL
4840: 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 30 0a ITTABLE) \. 0.
4850: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e #endif.#if defin
4860: 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 26 26 20 ed(__mips__) &&
4870: 21 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e !defined(__mipsn
4880: 33 32 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 65 32__) || (define
4890: 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 d(__sparc__) &&
48a0: 21 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 !defined(__sparc
48b0: 36 34 5f 5f 29 29 20 7c 7c 20 64 65 66 69 6e 65 64__)) || define
48c0: 64 28 5f 5f 6d 38 38 6b 5f 5f 29 0a 23 64 65 66 d(__m88k__).#def
48d0: 69 6e 65 20 5f 5f 76 61 5f 72 65 67 5f 73 74 72 ine __va_reg_str
48e0: 75 63 74 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c uct_return(LIST,
48f0: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 53 TYPE_SIZE,TYPE_S
4900: 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 PLITTABLE) \.
4910: 28 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 ((TYPE_SIZE) ==
4920: 31 20 7c 7c 20 28 54 59 50 45 5f 53 49 5a 45 29 1 || (TYPE_SIZE)
4930: 20 3d 3d 20 32 20 7c 7c 20 28 54 59 50 45 5f 53 == 2 || (TYPE_S
4940: 49 5a 45 29 20 3d 3d 20 34 29 0a 2f 2a 20 54 65 IZE) == 4)./* Te
4950: 73 74 20 5f 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 st __VA_SMALL_ST
4960: 52 55 43 54 5f 52 45 54 55 52 4e 20 69 6e 73 74 RUCT_RETURN inst
4970: 65 61 64 20 6f 66 20 5f 5f 56 41 5f 52 45 47 49 ead of __VA_REGI
4980: 53 54 45 52 5f 53 54 52 55 43 54 5f 52 45 54 55 STER_STRUCT_RETU
4990: 52 4e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e RN. */.#if defin
49a0: 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 26 26 20 ed(__mips__) &&
49b0: 21 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e !defined(__mipsn
49c0: 33 32 5f 5f 29 0a 23 64 65 66 69 6e 65 20 5f 5f 32__).#define __
49d0: 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 31 va_start_struct1
49e0: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
49f0: 54 59 50 45 5f 41 4c 49 47 4e 2c 54 59 50 45 5f TYPE_ALIGN,TYPE_
4a00: 53 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 SPLITTABLE) \.
4a10: 20 28 28 4c 49 53 54 29 2d 3e 61 6e 75 6d 2b 2b ((LIST)->anum++
4a20: 2c 09 09 09 09 09 09 09 5c 0a 20 20 20 30 09 09 ,.......\. 0..
4a30: 09 09 09 09 09 09 09 5c 0a 20 20 29 0a 23 65 6c .......\. ).#el
4a40: 73 65 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f se.#define __va_
4a50: 73 74 61 72 74 5f 73 74 72 75 63 74 31 28 4c 49 start_struct1(LI
4a60: 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 ST,TYPE_SIZE,TYP
4a70: 45 5f 41 4c 49 47 4e 2c 54 59 50 45 5f 53 50 4c E_ALIGN,TYPE_SPL
4a80: 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 20 30 0a ITTABLE) \. 0.
4a90: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 #endif.#endif.#i
4aa0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 f defined(__mips
4ab0: 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 n32__) || define
4ac0: 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 0a 23 64 d(__mips64__).#d
4ad0: 65 66 69 6e 65 20 5f 5f 76 61 5f 72 65 67 5f 73 efine __va_reg_s
4ae0: 74 72 75 63 74 5f 72 65 74 75 72 6e 28 4c 49 53 truct_return(LIS
4af0: 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 T,TYPE_SIZE,TYPE
4b00: 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a _SPLITTABLE) \.
4b10: 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 ((LIST)->flags
4b20: 20 26 20 5f 5f 56 41 5f 47 43 43 5f 53 54 52 55 & __VA_GCC_STRU
4b30: 43 54 5f 52 45 54 55 52 4e 09 09 09 09 5c 0a 20 CT_RETURN....\.
4b40: 20 20 3f 20 28 28 54 59 50 45 5f 53 49 5a 45 29 ? ((TYPE_SIZE)
4b50: 20 3d 3d 20 31 20 7c 7c 20 28 54 59 50 45 5f 53 == 1 || (TYPE_S
4b60: 49 5a 45 29 20 3d 3d 20 32 20 7c 7c 20 28 54 59 IZE) == 2 || (TY
4b70: 50 45 5f 53 49 5a 45 29 20 3d 3d 20 34 20 7c 7c PE_SIZE) == 4 ||
4b80: 20 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 (TYPE_SIZE) ==
4b90: 38 29 20 5c 0a 20 20 20 3a 20 28 28 54 59 50 45 8) \. : ((TYPE
4ba0: 5f 53 49 5a 45 29 20 3c 3d 20 31 36 29 09 09 09 _SIZE) <= 16)...
4bb0: 09 09 09 5c 0a 20 20 29 0a 2f 2a 20 54 75 72 6e ...\. )./* Turn
4bc0: 20 6f 6e 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 on __VA_REGISTE
4bd0: 52 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 R_STRUCT_RETURN
4be0: 69 66 20 5f 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 if __VA_SMALL_ST
4bf0: 52 55 43 54 5f 52 45 54 55 52 4e 20 77 61 73 20 RUCT_RETURN was
4c00: 73 65 74 0a 20 2a 20 61 6e 64 20 74 68 65 20 73 set. * and the s
4c10: 74 72 75 63 74 20 77 69 6c 6c 20 61 63 74 75 61 truct will actua
4c20: 6c 6c 79 20 62 65 20 72 65 74 75 72 6e 65 64 20 lly be returned
4c30: 69 6e 20 72 65 67 69 73 74 65 72 73 2e 20 41 6c in registers. Al
4c40: 73 6f 20 74 75 72 6e 20 6f 6e 0a 20 2a 20 5f 5f so turn on. * __
4c50: 56 41 5f 52 45 47 49 53 54 45 52 5f 46 4c 4f 41 VA_REGISTER_FLOA
4c60: 54 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 6f TSTRUCT_RETURN o
4c70: 72 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 5f r __VA_REGISTER_
4c80: 44 4f 55 42 4c 45 53 54 52 55 43 54 5f 52 45 54 DOUBLESTRUCT_RET
4c90: 55 52 4e 20 69 66 0a 20 2a 20 74 68 65 20 73 74 URN if. * the st
4ca0: 72 75 63 74 20 77 69 6c 6c 20 62 65 20 72 65 74 ruct will be ret
4cb0: 75 72 6e 65 64 20 69 6e 20 66 6c 6f 61 74 69 6e urned in floatin
4cc0: 67 2d 70 6f 69 6e 74 20 72 65 67 69 73 74 65 72 g-point register
4cd0: 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f s.. */.#define _
4ce0: 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 _va_start_struct
4cf0: 31 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 1(LIST,TYPE_SIZE
4d00: 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 54 59 50 45 ,TYPE_ALIGN,TYPE
4d10: 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a _SPLITTABLE) \.
4d20: 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 ((LIST)->flags
4d30: 20 7c 3d 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 |= __VA_REGISTE
4d40: 52 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 2c R_STRUCT_RETURN,
4d50: 09 09 09 09 5c 0a 20 20 20 28 54 59 50 45 5f 41 ....\. (TYPE_A
4d60: 4c 49 47 4e 29 20 3d 3d 20 73 69 7a 65 6f 66 28 LIGN) == sizeof(
4d70: 66 6c 6f 61 74 29 20 26 26 20 28 54 59 50 45 5f float) && (TYPE_
4d80: 53 50 4c 49 54 54 41 42 4c 45 29 09 09 09 09 5c SPLITTABLE)....\
4d90: 0a 20 20 20 20 26 26 20 28 28 54 59 50 45 5f 53 . && ((TYPE_S
4da0: 49 5a 45 29 20 3d 3d 20 73 69 7a 65 6f 66 28 66 IZE) == sizeof(f
4db0: 6c 6f 61 74 29 20 7c 7c 20 28 54 59 50 45 5f 53 loat) || (TYPE_S
4dc0: 49 5a 45 29 20 3d 3d 20 32 2a 73 69 7a 65 6f 66 IZE) == 2*sizeof
4dd0: 28 66 6c 6f 61 74 29 29 09 09 5c 0a 20 20 20 20 (float))..\.
4de0: 26 26 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 && ((LIST)->flag
4df0: 73 20 7c 3d 20 5f 5f 56 41 5f 52 45 47 49 53 54 s |= __VA_REGIST
4e00: 45 52 5f 46 4c 4f 41 54 53 54 52 55 43 54 5f 52 ER_FLOATSTRUCT_R
4e10: 45 54 55 52 4e 29 2c 09 09 09 5c 0a 20 20 20 28 ETURN),...\. (
4e20: 54 59 50 45 5f 41 4c 49 47 4e 29 20 3d 3d 20 73 TYPE_ALIGN) == s
4e30: 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 20 26 26 izeof(double) &&
4e40: 20 28 54 59 50 45 5f 53 50 4c 49 54 54 41 42 4c (TYPE_SPLITTABL
4e50: 45 29 09 09 09 09 5c 0a 20 20 20 20 26 26 20 28 E)....\. && (
4e60: 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 73 (TYPE_SIZE) == s
4e70: 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 20 7c 7c izeof(double) ||
4e80: 20 28 54 59 50 45 5f 53 49 5a 45 29 20 3d 3d 20 (TYPE_SIZE) ==
4e90: 32 2a 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 2*sizeof(double)
4ea0: 29 09 5c 0a 20 20 20 20 26 26 20 28 28 4c 49 53 ).\. && ((LIS
4eb0: 54 29 2d 3e 66 6c 61 67 73 20 7c 3d 20 5f 5f 56 T)->flags |= __V
4ec0: 41 5f 52 45 47 49 53 54 45 52 5f 44 4f 55 42 4c A_REGISTER_DOUBL
4ed0: 45 53 54 52 55 43 54 5f 52 45 54 55 52 4e 29 2c ESTRUCT_RETURN),
4ee0: 09 09 09 5c 0a 20 20 20 30 29 0a 23 65 6e 64 69 ...\. 0).#endi
4ef0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
4f00: 73 70 61 72 63 36 34 5f 5f 29 20 7c 7c 20 64 65 sparc64__) || de
4f10: 66 69 6e 65 64 28 5f 5f 69 61 36 34 5f 5f 29 0a fined(__ia64__).
4f20: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 72 65 67 #define __va_reg
4f30: 5f 73 74 72 75 63 74 5f 72 65 74 75 72 6e 28 4c _struct_return(L
4f40: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
4f50: 50 45 5f 53 50 4c 49 54 54 41 42 4c 45 29 20 20 PE_SPLITTABLE)
4f60: 5c 0a 20 20 28 28 54 59 50 45 5f 53 49 5a 45 29 \. ((TYPE_SIZE)
4f70: 20 3c 3d 20 33 32 29 0a 2f 2a 20 54 75 72 6e 20 <= 32)./* Turn
4f80: 6f 6e 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 on __VA_REGISTER
4f90: 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 69 _STRUCT_RETURN i
4fa0: 66 20 5f 5f 56 41 5f 53 4d 41 4c 4c 5f 53 54 52 f __VA_SMALL_STR
4fb0: 55 43 54 5f 52 45 54 55 52 4e 20 77 61 73 20 73 UCT_RETURN was s
4fc0: 65 74 0a 20 2a 20 61 6e 64 20 74 68 65 20 73 74 et. * and the st
4fd0: 72 75 63 74 20 77 69 6c 6c 20 61 63 74 75 61 6c ruct will actual
4fe0: 6c 79 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 ly be returned i
4ff0: 6e 20 72 65 67 69 73 74 65 72 73 2e 0a 20 2a 2f n registers.. */
5000: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 73 74 .#define __va_st
5010: 61 72 74 5f 73 74 72 75 63 74 31 28 4c 49 53 54 art_struct1(LIST
5020: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
5030: 41 4c 49 47 4e 2c 54 59 50 45 5f 53 50 4c 49 54 ALIGN,TYPE_SPLIT
5040: 54 41 42 4c 45 29 20 20 5c 0a 20 20 28 28 4c 49 TABLE) \. ((LI
5050: 53 54 29 2d 3e 66 6c 61 67 73 20 7c 3d 20 5f 5f ST)->flags |= __
5060: 56 41 5f 52 45 47 49 53 54 45 52 5f 53 54 52 55 VA_REGISTER_STRU
5070: 43 54 5f 52 45 54 55 52 4e 2c 09 09 09 09 5c 0a CT_RETURN,....\.
5080: 20 20 20 30 29 0a 23 65 6e 64 69 66 0a 23 69 66 0).#endif.#if
5090: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 defined(__x86_6
50a0: 34 5f 5f 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 4__).#define __v
50b0: 61 5f 72 65 67 5f 73 74 72 75 63 74 5f 72 65 74 a_reg_struct_ret
50c0: 75 72 6e 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 urn(LIST,TYPE_SI
50d0: 5a 45 2c 54 59 50 45 5f 53 50 4c 49 54 54 41 42 ZE,TYPE_SPLITTAB
50e0: 4c 45 29 20 20 5c 0a 20 20 28 28 54 59 50 45 5f LE) \. ((TYPE_
50f0: 53 49 5a 45 29 20 3c 3d 20 31 36 29 0a 2f 2a 20 SIZE) <= 16)./*
5100: 54 75 72 6e 20 6f 6e 20 5f 5f 56 41 5f 52 45 47 Turn on __VA_REG
5110: 49 53 54 45 52 5f 53 54 52 55 43 54 5f 52 45 54 ISTER_STRUCT_RET
5120: 55 52 4e 20 69 66 20 5f 5f 56 41 5f 53 4d 41 4c URN if __VA_SMAL
5130: 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 20 L_STRUCT_RETURN
5140: 77 61 73 20 73 65 74 0a 20 2a 20 61 6e 64 20 74 was set. * and t
5150: 68 65 20 73 74 72 75 63 74 20 77 69 6c 6c 20 61 he struct will a
5160: 63 74 75 61 6c 6c 79 20 62 65 20 72 65 74 75 72 ctually be retur
5170: 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 73 ned in registers
5180: 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f .. */.#define __
5190: 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 31 va_start_struct1
51a0: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
51b0: 54 59 50 45 5f 41 4c 49 47 4e 2c 54 59 50 45 5f TYPE_ALIGN,TYPE_
51c0: 53 50 4c 49 54 54 41 42 4c 45 29 20 20 5c 0a 20 SPLITTABLE) \.
51d0: 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 ((LIST)->flags
51e0: 7c 3d 20 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 |= __VA_REGISTER
51f0: 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 2c 09 _STRUCT_RETURN,.
5200: 09 09 09 5c 0a 20 20 20 30 29 0a 23 65 6e 64 69 ...\. 0).#endi
5210: 66 0a 2f 2a 0a 20 2a 20 50 72 65 70 61 72 69 6e f./*. * Preparin
5220: 67 20 73 74 72 75 63 74 75 72 65 20 72 65 74 75 g structure retu
5230: 72 6e 20 69 6e 20 6d 65 6d 6f 72 79 2e 0a 20 2a rn in memory.. *
5240: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f /.#if defined(__
5250: 69 33 38 36 5f 5f 29 0a 2f 2a 20 52 65 74 75 72 i386__)./* Retur
5260: 6e 20 73 74 72 75 63 74 75 72 65 20 70 6f 69 6e n structure poin
5270: 74 65 72 20 69 73 20 70 61 73 73 65 64 20 69 6e ter is passed in
5280: 20 61 20 73 70 65 63 69 61 6c 20 72 65 67 69 73 a special regis
5290: 74 65 72 20 6f 72 20 61 73 20 66 69 72 73 74 20 ter or as first
52a0: 61 72 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 arg. */.#define
52b0: 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 __va_start_struc
52c0: 74 32 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 t2(LIST) \. ((
52d0: 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f LIST)->flags & _
52e0: 5f 56 41 5f 4e 45 58 54 47 43 43 5f 53 54 52 55 _VA_NEXTGCC_STRU
52f0: 43 54 5f 52 45 54 55 52 4e 09 09 09 09 5c 0a 20 CT_RETURN....\.
5300: 20 20 3f 20 28 28 4c 49 53 54 29 2d 3e 72 61 64 ? ((LIST)->rad
5310: 64 72 20 3d 20 28 4c 49 53 54 29 2d 3e 73 74 72 dr = (LIST)->str
5320: 75 63 74 72 61 64 64 72 2c 20 30 29 09 20 2f 2a uctraddr, 0). /*
5330: 20 73 70 65 63 69 61 6c 20 72 65 67 69 73 74 65 special registe
5340: 72 20 2a 2f 09 5c 0a 20 20 20 3a 20 28 28 4c 49 r */.\. : ((LI
5350: 53 54 29 2d 3e 72 61 64 64 72 20 3d 20 2a 28 76 ST)->raddr = *(v
5360: 6f 69 64 2a 20 2a 29 28 28 4c 49 53 54 29 2d 3e oid* *)((LIST)->
5370: 61 70 74 72 29 2c 09 09 2f 2a 20 66 69 72 73 74 aptr),../* first
5380: 20 61 72 67 20 2a 2f 09 5c 0a 20 20 20 20 20 20 arg */.\.
5390: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 (LIST)->aptr +=
53a0: 73 69 7a 65 6f 66 28 76 6f 69 64 2a 29 2c 09 09 sizeof(void*),..
53b0: 09 09 09 5c 0a 20 20 20 20 20 20 30 09 09 09 09 ...\. 0....
53c0: 09 09 09 09 09 5c 0a 20 20 29 20 20 29 0a 23 65 .....\. ) ).#e
53d0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
53e0: 28 5f 5f 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 (__alpha__) || d
53f0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 efined(__arm__)
5400: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 || defined(__rs6
5410: 30 30 30 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 000__) || define
5420: 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 20 7c d(__convex__) |
5430: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 33 39 30 | defined(__s390
5440: 5f 5f 29 0a 2f 2a 20 52 65 74 75 72 6e 20 73 74 __)./* Return st
5450: 72 75 63 74 75 72 65 20 70 6f 69 6e 74 65 72 20 ructure pointer
5460: 69 73 20 70 61 73 73 65 64 20 61 73 20 66 69 72 is passed as fir
5470: 73 74 20 61 72 67 2e 20 2a 2f 0a 23 64 65 66 69 st arg. */.#defi
5480: 6e 65 20 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 ne __va_start_st
5490: 72 75 63 74 32 28 4c 49 53 54 29 20 20 5c 0a 20 ruct2(LIST) \.
54a0: 20 28 28 4c 49 53 54 29 2d 3e 72 61 64 64 72 20 ((LIST)->raddr
54b0: 3d 20 2a 28 76 6f 69 64 2a 20 2a 29 28 28 4c 49 = *(void* *)((LI
54c0: 53 54 29 2d 3e 61 70 74 72 29 2c 09 09 09 09 5c ST)->aptr),....\
54d0: 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 . (LIST)->aptr
54e0: 20 2b 3d 20 73 69 7a 65 6f 66 28 76 6f 69 64 2a += sizeof(void*
54f0: 29 2c 09 09 09 09 09 5c 0a 20 20 20 30 09 09 09 ),.....\. 0...
5500: 09 09 09 09 09 09 5c 0a 20 20 29 0a 23 65 6e 64 ......\. ).#end
5510: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f if.#if defined(_
5520: 5f 6d 69 70 73 5f 5f 29 20 7c 7c 20 64 65 66 69 _mips__) || defi
5530: 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 ned(__mipsn32__)
5540: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 || defined(__mi
5550: 70 73 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e ps64__) || defin
5560: 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a ed(__sparc64__).
5570: 2f 2a 20 52 65 74 75 72 6e 20 73 74 72 75 63 74 /* Return struct
5580: 75 72 65 20 70 6f 69 6e 74 65 72 20 69 73 20 70 ure pointer is p
5590: 61 73 73 65 64 20 61 73 20 66 69 72 73 74 20 61 assed as first a
55a0: 72 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f rg. */.#define _
55b0: 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 _va_start_struct
55c0: 32 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 4c 2(LIST) \. ((L
55d0: 49 53 54 29 2d 3e 72 61 64 64 72 20 3d 20 2a 28 IST)->raddr = *(
55e0: 76 6f 69 64 2a 20 2a 29 28 28 4c 49 53 54 29 2d void* *)((LIST)-
55f0: 3e 61 70 74 72 29 2c 09 09 09 09 5c 0a 20 20 20 >aptr),....\.
5600: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 (LIST)->aptr +=
5610: 73 69 7a 65 6f 66 28 76 6f 69 64 2a 29 2c 09 09 sizeof(void*),..
5620: 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e ...\. (LIST)->
5630: 61 6e 75 6d 2b 2b 2c 09 09 09 09 09 09 09 5c 0a anum++,.......\.
5640: 20 20 20 30 09 09 09 09 09 09 09 09 09 5c 0a 20 0.........\.
5650: 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 ).#endif.#if de
5660: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f fined(__x86_64__
5670: 29 0a 2f 2a 20 52 65 74 75 72 6e 20 73 74 72 75 )./* Return stru
5680: 63 74 75 72 65 20 70 6f 69 6e 74 65 72 20 69 73 cture pointer is
5690: 20 70 61 73 73 65 64 20 61 73 20 66 69 72 73 74 passed as first
56a0: 20 61 72 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 arg. */.#define
56b0: 20 5f 5f 76 61 5f 73 74 61 72 74 5f 73 74 72 75 __va_start_stru
56c0: 63 74 32 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 ct2(LIST) \. (
56d0: 28 4c 49 53 54 29 2d 3e 72 61 64 64 72 20 3d 20 (LIST)->raddr =
56e0: 28 76 6f 69 64 20 2a 29 28 2a 28 4c 49 53 54 29 (void *)(*(LIST)
56f0: 2d 3e 6d 65 6d 69 61 72 67 70 74 72 2b 2b 29 2c ->memiargptr++),
5700: 09 09 09 5c 0a 20 20 20 30 09 09 09 09 09 09 09 ...\. 0.......
5710: 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 ..\. ).#endif.#
5720: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 if defined(__m68
5730: 6b 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 k__) || (defined
5740: 28 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 (__sparc__) && !
5750: 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 defined(__sparc6
5760: 34 5f 5f 29 29 20 7c 7c 20 64 65 66 69 6e 65 64 4__)) || defined
5770: 28 5f 5f 68 70 70 61 5f 5f 29 20 7c 7c 20 64 65 (__hppa__) || de
5780: 66 69 6e 65 64 28 5f 5f 6d 38 38 6b 5f 5f 29 20 fined(__m88k__)
5790: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 61 36 || defined(__ia6
57a0: 34 5f 5f 29 0a 2f 2a 20 52 65 74 75 72 6e 20 73 4__)./* Return s
57b0: 74 72 75 63 74 75 72 65 20 70 6f 69 6e 74 65 72 tructure pointer
57c0: 20 69 73 20 70 61 73 73 65 64 20 69 6e 20 61 20 is passed in a
57d0: 73 70 65 63 69 61 6c 20 72 65 67 69 73 74 65 72 special register
57e0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 . */.#define __v
57f0: 61 5f 73 74 61 72 74 5f 73 74 72 75 63 74 32 28 a_start_struct2(
5800: 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 LIST) \. ((LIS
5810: 54 29 2d 3e 72 61 64 64 72 20 3d 20 28 4c 49 53 T)->raddr = (LIS
5820: 54 29 2d 3e 73 74 72 75 63 74 72 61 64 64 72 2c T)->structraddr,
5830: 20 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 0).#endif.../*.
5840: 20 2a 20 44 65 66 69 6e 69 74 69 6f 6e 20 6f 66 * Definition of
5850: 20 74 68 65 20 76 61 5f 61 72 67 5f 78 78 78 20 the va_arg_xxx
5860: 6d 61 63 72 6f 73 2e 0a 20 2a 2f 0a 0a 2f 2a 20 macros.. */../*
5870: 50 61 64 64 69 6e 67 20 6f 66 20 6e 6f 6e 2d 73 Padding of non-s
5880: 74 72 75 63 74 20 61 72 67 75 6d 65 6e 74 73 2e truct arguments.
5890: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 */.#define __va
58a0: 5f 61 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 _argsize(TYPE_SI
58b0: 5a 45 29 20 20 5c 0a 20 20 28 28 28 54 59 50 45 ZE) \. (((TYPE
58c0: 5f 53 49 5a 45 29 20 2b 20 73 69 7a 65 6f 66 28 _SIZE) + sizeof(
58d0: 5f 5f 76 61 77 6f 72 64 29 2d 31 29 20 26 20 2d __vaword)-1) & -
58e0: 28 6c 6f 6e 67 29 73 69 7a 65 6f 66 28 5f 5f 76 (long)sizeof(__v
58f0: 61 77 6f 72 64 29 29 0a 23 69 66 20 64 65 66 69 aword)).#if defi
5900: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c ned(__i386__) ||
5910: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f defined(__m68k_
5920: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
5930: 6d 69 70 73 5f 5f 29 20 26 26 20 21 64 65 66 69 mips__) && !defi
5940: 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 ned(__mipsn32__)
5950: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 73 || (defined(__s
5960: 70 61 72 63 5f 5f 29 20 26 26 20 21 64 65 66 69 parc__) && !defi
5970: 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 ned(__sparc64__)
5980: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 ) || defined(__a
5990: 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 6e lpha__) || defin
59a0: 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 7c 7c 20 28 ed(__arm__) || (
59b0: 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 defined(__rs6000
59c0: 5f 5f 29 20 26 26 20 28 64 65 66 69 6e 65 64 28 __) && (defined(
59d0: 5f 41 49 58 29 20 7c 7c 20 28 64 65 66 69 6e 65 _AIX) || (define
59e0: 64 28 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 20 64 d(__MACH__) && d
59f0: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f efined(__APPLE__
5a00: 29 29 29 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 )))) || defined(
5a10: 5f 5f 6d 38 38 6b 5f 5f 29 20 7c 7c 20 64 65 66 __m88k__) || def
5a20: 69 6e 65 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f 29 ined(__convex__)
5a30: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 61 || defined(__ia
5a40: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 64__) || defined
5a50: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 2f 2a 20 (__x86_64__)./*
5a60: 61 72 67 73 20 67 72 6f 77 20 75 70 20 2a 2f 0a args grow up */.
5a70: 2f 2a 20 73 6d 61 6c 6c 20 73 74 72 75 63 74 75 /* small structu
5a80: 72 65 73 20 3c 20 31 20 77 6f 72 64 20 61 72 65 res < 1 word are
5a90: 20 61 64 6a 75 73 74 65 64 20 64 65 70 65 6e 64 adjusted depend
5aa0: 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 65 72 20 ing on compiler
5ab0: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f */.#define __va_
5ac0: 61 72 67 5f 6c 65 66 74 61 64 6a 75 73 74 65 64 arg_leftadjusted
5ad0: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
5ae0: 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 TYPE_ALIGN) \.
5af0: 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b ((LIST)->aptr +
5b00: 3d 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 = __va_argsize(T
5b10: 59 50 45 5f 53 49 5a 45 29 2c 09 09 09 09 5c 0a YPE_SIZE),....\.
5b20: 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 (LIST)->aptr
5b30: 2d 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 - __va_argsize(T
5b40: 59 50 45 5f 53 49 5a 45 29 09 09 09 09 5c 0a 20 YPE_SIZE)....\.
5b50: 20 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f ).#define __va_
5b60: 61 72 67 5f 72 69 67 68 74 61 64 6a 75 73 74 65 arg_rightadjuste
5b70: 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 d(LIST,TYPE_SIZE
5b80: 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a ,TYPE_ALIGN) \.
5b90: 20 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 ((LIST)->aptr
5ba0: 2b 3d 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 += __va_argsize(
5bb0: 54 59 50 45 5f 53 49 5a 45 29 2c 09 09 09 09 5c TYPE_SIZE),....\
5bc0: 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 . (LIST)->aptr
5bd0: 20 2d 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 - ((TYPE_SIZE)
5be0: 3c 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 < sizeof(__vawor
5bf0: 64 29 09 09 09 5c 0a 09 09 20 20 20 3f 20 28 54 d)...\... ? (T
5c00: 59 50 45 5f 53 49 5a 45 29 09 09 09 09 09 5c 0a YPE_SIZE).....\.
5c10: 09 09 20 20 20 3a 20 5f 5f 76 61 5f 61 72 67 73 .. : __va_args
5c20: 69 7a 65 28 54 59 50 45 5f 53 49 5a 45 29 09 09 ize(TYPE_SIZE)..
5c30: 09 09 5c 0a 09 09 20 20 29 09 09 09 09 09 09 09 ..\... ).......
5c40: 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 \. ).#endif.#if
5c50: 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 defined(__rs600
5c60: 30 5f 5f 29 20 26 26 20 21 28 64 65 66 69 6e 65 0__) && !(define
5c70: 64 28 5f 41 49 58 29 20 7c 7c 20 28 64 65 66 69 d(_AIX) || (defi
5c80: 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 ned(__MACH__) &&
5c90: 20 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 defined(__APPLE
5ca0: 5f 5f 29 29 29 0a 2f 2a 20 61 72 67 73 20 67 72 __)))./* args gr
5cb0: 6f 77 20 75 70 20 2a 2f 0a 2f 2a 20 73 6d 61 6c ow up */./* smal
5cc0: 6c 20 73 74 72 75 63 74 75 72 65 73 20 3c 20 31 l structures < 1
5cd0: 20 77 6f 72 64 20 61 72 65 20 61 64 6a 75 73 74 word are adjust
5ce0: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 ed depending on
5cf0: 63 6f 6d 70 69 6c 65 72 20 2a 2f 0a 2f 2a 20 41 compiler */./* A
5d00: 6c 73 6f 20 6d 61 6b 65 20 73 75 72 65 20 77 65 lso make sure we
5d10: 20 73 77 69 74 63 68 20 74 6f 20 74 68 65 20 73 switch to the s
5d20: 74 61 63 6b 20 70 6f 69 6e 74 65 72 20 61 66 74 tack pointer aft
5d30: 65 72 20 38 20 61 72 67 73 20 2a 2f 0a 23 64 65 er 8 args */.#de
5d40: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 6c 65 fine __va_arg_le
5d50: 66 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c ftadjusted(LIST,
5d60: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 TYPE_SIZE,TYPE_A
5d70: 4c 49 47 4e 29 20 20 5c 0a 20 20 28 28 28 28 4c LIGN) \. ((((L
5d80: 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b 20 3d 3d IST)->onstack ==
5d90: 20 30 20 26 26 20 28 4c 49 53 54 29 2d 3e 61 70 0 && (LIST)->ap
5da0: 74 72 20 3e 3d 20 28 6c 6f 6e 67 29 26 28 4c 49 tr >= (long)&(LI
5db0: 53 54 29 2d 3e 72 65 67 61 72 67 5b 38 5d 29 09 ST)->regarg[8]).
5dc0: 5c 0a 20 20 20 20 3f 20 28 28 4c 49 53 54 29 2d \. ? ((LIST)-
5dd0: 3e 6f 6e 73 74 61 63 6b 3d 31 2c 20 28 4c 49 53 >onstack=1, (LIS
5de0: 54 29 2d 3e 61 70 74 72 20 3d 20 28 4c 49 53 54 T)->aptr = (LIST
5df0: 29 2d 3e 73 61 70 74 72 29 20 3a 20 30 29 2c 09 )->saptr) : 0),.
5e00: 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 .\. (LIST)->ap
5e10: 74 72 20 2b 3d 20 5f 5f 76 61 5f 61 72 67 73 69 tr += __va_argsi
5e20: 7a 65 28 54 59 50 45 5f 53 49 5a 45 29 2c 09 09 ze(TYPE_SIZE),..
5e30: 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 ..\. (LIST)->a
5e40: 70 74 72 20 2d 20 5f 5f 76 61 5f 61 72 67 73 69 ptr - __va_argsi
5e50: 7a 65 28 54 59 50 45 5f 53 49 5a 45 29 09 09 09 ze(TYPE_SIZE)...
5e60: 09 5c 0a 20 20 29 0a 23 64 65 66 69 6e 65 20 5f .\. ).#define _
5e70: 5f 76 61 5f 61 72 67 5f 72 69 67 68 74 61 64 6a _va_arg_rightadj
5e80: 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f usted(LIST,TYPE_
5e90: 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 SIZE,TYPE_ALIGN)
5ea0: 20 20 5c 0a 20 20 28 28 28 28 4c 49 53 54 29 2d \. ((((LIST)-
5eb0: 3e 6f 6e 73 74 61 63 6b 20 3d 3d 20 30 20 26 26 >onstack == 0 &&
5ec0: 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3e 3d (LIST)->aptr >=
5ed0: 20 28 6c 6f 6e 67 29 26 28 4c 49 53 54 29 2d 3e (long)&(LIST)->
5ee0: 72 65 67 61 72 67 5b 38 5d 29 09 5c 0a 20 20 20 regarg[8]).\.
5ef0: 20 3f 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 ? ((LIST)->onst
5f00: 61 63 6b 3d 31 2c 20 28 4c 49 53 54 29 2d 3e 61 ack=1, (LIST)->a
5f10: 70 74 72 20 3d 20 28 4c 49 53 54 29 2d 3e 73 61 ptr = (LIST)->sa
5f20: 70 74 72 29 20 3a 20 30 29 2c 09 09 5c 0a 20 20 ptr) : 0),..\.
5f30: 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d (LIST)->aptr +=
5f40: 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 __va_argsize(TY
5f50: 50 45 5f 53 49 5a 45 29 2c 09 09 09 09 5c 0a 20 PE_SIZE),....\.
5f60: 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d (LIST)->aptr -
5f70: 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 3c 20 ((TYPE_SIZE) <
5f80: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
5f90: 09 09 09 5c 0a 09 09 20 20 20 3f 20 28 54 59 50 ...\... ? (TYP
5fa0: 45 5f 53 49 5a 45 29 09 09 09 09 09 5c 0a 09 09 E_SIZE).....\...
5fb0: 20 20 20 3a 20 5f 5f 76 61 5f 61 72 67 73 69 7a : __va_argsiz
5fc0: 65 28 54 59 50 45 5f 53 49 5a 45 29 09 09 09 09 e(TYPE_SIZE)....
5fd0: 5c 0a 09 09 20 20 29 09 09 09 09 09 09 09 5c 0a \... ).......\.
5fe0: 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 ).#endif.#if d
5ff0: 65 66 69 6e 65 64 28 5f 5f 73 33 39 30 5f 5f 29 efined(__s390__)
6000: 0a 2f 2a 20 61 72 67 73 20 67 72 6f 77 20 75 70 ./* args grow up
6010: 20 2a 2f 0a 2f 2a 20 73 6d 61 6c 6c 20 73 74 72 */./* small str
6020: 75 63 74 75 72 65 73 20 3c 20 31 20 77 6f 72 64 uctures < 1 word
6030: 20 61 72 65 20 61 64 6a 75 73 74 65 64 20 64 65 are adjusted de
6040: 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 pending on compi
6050: 6c 65 72 20 2a 2f 0a 2f 2a 20 41 6c 73 6f 20 6d ler */./* Also m
6060: 61 6b 65 20 73 75 72 65 20 77 65 20 73 77 69 74 ake sure we swit
6070: 63 68 20 74 6f 20 74 68 65 20 73 74 61 63 6b 20 ch to the stack
6080: 70 6f 69 6e 74 65 72 20 61 66 74 65 72 20 35 20 pointer after 5
6090: 61 72 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 args */.#define
60a0: 5f 5f 76 61 5f 61 72 67 5f 6c 65 66 74 61 64 6a __va_arg_leftadj
60b0: 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f usted(LIST,TYPE_
60c0: 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 SIZE,TYPE_ALIGN)
60d0: 20 20 5c 0a 20 20 28 28 28 28 4c 49 53 54 29 2d \. ((((LIST)-
60e0: 3e 6f 6e 73 74 61 63 6b 20 3d 3d 20 30 20 26 26 >onstack == 0 &&
60f0: 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3e 3d (LIST)->aptr >=
6100: 20 28 6c 6f 6e 67 29 26 28 4c 49 53 54 29 2d 3e (long)&(LIST)->
6110: 72 65 67 61 72 67 5b 35 5d 29 09 5c 0a 20 20 20 regarg[5]).\.
6120: 20 3f 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 ? ((LIST)->onst
6130: 61 63 6b 3d 31 2c 20 28 4c 49 53 54 29 2d 3e 61 ack=1, (LIST)->a
6140: 70 74 72 20 3d 20 28 4c 49 53 54 29 2d 3e 73 61 ptr = (LIST)->sa
6150: 70 74 72 29 20 3a 20 30 29 2c 09 09 5c 0a 20 20 ptr) : 0),..\.
6160: 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d (LIST)->aptr +=
6170: 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 __va_argsize(TY
6180: 50 45 5f 53 49 5a 45 29 2c 09 09 09 09 5c 0a 20 PE_SIZE),....\.
6190: 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d (LIST)->aptr -
61a0: 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 __va_argsize(TY
61b0: 50 45 5f 53 49 5a 45 29 09 09 09 09 5c 0a 20 20 PE_SIZE)....\.
61c0: 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 ).#define __va_a
61d0: 72 67 5f 72 69 67 68 74 61 64 6a 75 73 74 65 64 rg_rightadjusted
61e0: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
61f0: 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 TYPE_ALIGN) \.
6200: 20 28 28 28 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 (((((LIST)->ons
6210: 74 61 63 6b 20 3d 3d 20 30 20 26 26 20 28 28 4c tack == 0 && ((L
6220: 49 53 54 29 2d 3e 61 70 74 72 20 3e 3d 20 28 6c IST)->aptr >= (l
6230: 6f 6e 67 29 26 28 4c 49 53 54 29 2d 3e 72 65 67 ong)&(LIST)->reg
6240: 61 72 67 5b 35 5d 29 29 20 5c 0a 20 20 20 7c 7c arg[5])) \. ||
6250: 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 3e 20 ((TYPE_SIZE) >
6260: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
6270: 20 26 26 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 && (LIST)->aptr
6280: 20 3e 3d 20 28 6c 6f 6e 67 29 26 28 4c 49 53 54 >= (long)&(LIST
6290: 29 2d 3e 72 65 67 61 72 67 5b 34 5d 29 29 20 5c )->regarg[4])) \
62a0: 0a 20 20 20 20 3f 20 28 28 4c 49 53 54 29 2d 3e . ? ((LIST)->
62b0: 6f 6e 73 74 61 63 6b 3d 31 2c 20 28 4c 49 53 54 onstack=1, (LIST
62c0: 29 2d 3e 61 70 74 72 20 3d 20 28 4c 49 53 54 29 )->aptr = (LIST)
62d0: 2d 3e 73 61 70 74 72 29 20 3a 20 30 29 2c 09 09 ->saptr) : 0),..
62e0: 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 \. (LIST)->apt
62f0: 72 20 2b 3d 20 5f 5f 76 61 5f 61 72 67 73 69 7a r += __va_argsiz
6300: 65 28 54 59 50 45 5f 53 49 5a 45 29 2c 09 09 09 e(TYPE_SIZE),...
6310: 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 .\. (LIST)->ap
6320: 74 72 20 2d 20 28 28 54 59 50 45 5f 53 49 5a 45 tr - ((TYPE_SIZE
6330: 29 20 3c 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 ) < sizeof(__vaw
6340: 6f 72 64 29 09 09 09 5c 0a 09 09 20 20 20 3f 20 ord)...\... ?
6350: 28 54 59 50 45 5f 53 49 5a 45 29 09 09 09 09 09 (TYPE_SIZE).....
6360: 5c 0a 09 09 20 20 20 3a 20 5f 5f 76 61 5f 61 72 \... : __va_ar
6370: 67 73 69 7a 65 28 54 59 50 45 5f 53 49 5a 45 29 gsize(TYPE_SIZE)
6380: 09 09 09 09 5c 0a 09 09 20 20 29 09 09 09 09 09 ....\... ).....
6390: 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 ..\. ).#endif.#
63a0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 if defined(__mip
63b0: 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e sn32__) || defin
63c0: 65 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 20 7c ed(__mips64__) |
63d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 | defined(__spar
63e0: 63 36 34 5f 5f 29 0a 2f 2a 20 61 72 67 73 20 67 c64__)./* args g
63f0: 72 6f 77 20 75 70 20 2a 2f 0a 2f 2a 20 73 6d 61 row up */./* sma
6400: 6c 6c 20 73 74 72 75 63 74 75 72 65 73 20 3c 20 ll structures <
6410: 31 20 77 6f 72 64 20 61 72 65 20 61 64 6a 75 73 1 word are adjus
6420: 74 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e ted depending on
6430: 20 63 6f 6d 70 69 6c 65 72 20 2a 2f 0a 23 64 65 compiler */.#de
6440: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 6c 65 fine __va_arg_le
6450: 66 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c ftadjusted(LIST,
6460: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 TYPE_SIZE,TYPE_A
6470: 4c 49 47 4e 29 20 20 5c 0a 20 20 28 28 4c 49 53 LIGN) \. ((LIS
6480: 54 29 2d 3e 61 6e 75 6d 20 2b 3d 20 5f 5f 76 61 T)->anum += __va
6490: 5f 61 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 _argsize(TYPE_SI
64a0: 5a 45 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 ZE)/sizeof(__vaw
64b0: 6f 72 64 29 2c 09 09 5c 0a 20 20 20 28 4c 49 53 ord),..\. (LIS
64c0: 54 29 2d 3e 61 70 74 72 20 2b 3d 20 5f 5f 76 61 T)->aptr += __va
64d0: 5f 61 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 _argsize(TYPE_SI
64e0: 5a 45 29 2c 09 09 09 09 5c 0a 20 20 20 28 4c 49 ZE),....\. (LI
64f0: 53 54 29 2d 3e 61 70 74 72 20 2d 20 5f 5f 76 61 ST)->aptr - __va
6500: 5f 61 72 67 73 69 7a 65 28 54 59 50 45 5f 53 49 _argsize(TYPE_SI
6510: 5a 45 29 09 09 09 09 5c 0a 20 20 29 0a 23 64 65 ZE)....\. ).#de
6520: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 72 69 fine __va_arg_ri
6530: 67 68 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 ghtadjusted(LIST
6540: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
6550: 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 28 4c 49 ALIGN) \. ((LI
6560: 53 54 29 2d 3e 61 6e 75 6d 20 2b 3d 20 5f 5f 76 ST)->anum += __v
6570: 61 5f 61 72 67 73 69 7a 65 28 54 59 50 45 5f 53 a_argsize(TYPE_S
6580: 49 5a 45 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 IZE)/sizeof(__va
6590: 77 6f 72 64 29 2c 09 09 5c 0a 20 20 20 28 4c 49 word),..\. (LI
65a0: 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 5f 5f 76 ST)->aptr += __v
65b0: 61 5f 61 72 67 73 69 7a 65 28 54 59 50 45 5f 53 a_argsize(TYPE_S
65c0: 49 5a 45 29 2c 09 09 09 09 5c 0a 20 20 20 28 4c IZE),....\. (L
65d0: 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 28 28 54 IST)->aptr - ((T
65e0: 59 50 45 5f 53 49 5a 45 29 20 3c 20 73 69 7a 65 YPE_SIZE) < size
65f0: 6f 66 28 5f 5f 76 61 77 6f 72 64 29 09 09 09 5c of(__vaword)...\
6600: 0a 09 09 20 20 20 3f 20 28 54 59 50 45 5f 53 49 ... ? (TYPE_SI
6610: 5a 45 29 09 09 09 09 09 5c 0a 09 09 20 20 20 3a ZE).....\... :
6620: 20 5f 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 __va_argsize(TY
6630: 50 45 5f 53 49 5a 45 29 09 09 09 09 5c 0a 09 09 PE_SIZE)....\...
6640: 20 20 29 09 09 09 09 09 09 09 5c 0a 20 20 29 0a ).......\. ).
6650: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e #endif.#if defin
6660: 65 64 28 5f 5f 68 70 70 61 5f 5f 29 0a 2f 2a 20 ed(__hppa__)./*
6670: 61 72 67 73 20 67 72 6f 77 20 64 6f 77 6e 20 2a args grow down *
6680: 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 /.#define __va_a
6690: 72 67 5f 6c 65 66 74 61 64 6a 75 73 74 65 64 28 rg_leftadjusted(
66a0: 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 LIST,TYPE_SIZE,T
66b0: 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 YPE_ALIGN) \.
66c0: 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3d 20 ((LIST)->aptr =
66d0: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 5f (LIST)->aptr - _
66e0: 5f 76 61 5f 61 72 67 73 69 7a 65 28 54 59 50 45 _va_argsize(TYPE
66f0: 5f 53 49 5a 45 29 2c 09 09 5c 0a 20 20 20 28 28 _SIZE),..\. ((
6700: 54 59 50 45 5f 53 49 5a 45 29 20 3e 20 34 20 26 TYPE_SIZE) > 4 &
6710: 26 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 & ((LIST)->aptr
6720: 26 3d 20 2d 38 29 29 2c 09 09 09 09 5c 0a 20 20 &= -8)),....\.
6730: 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 09 09 09 (LIST)->aptr...
6740: 09 09 09 09 09 5c 0a 20 20 29 0a 23 64 65 66 69 .....\. ).#defi
6750: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 72 69 67 68 ne __va_arg_righ
6760: 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 tadjusted(LIST,T
6770: 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c YPE_SIZE,TYPE_AL
6780: 49 47 4e 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 IGN) \. ((LIST
6790: 29 2d 3e 61 70 74 72 20 3d 20 28 4c 49 53 54 29 )->aptr = (LIST)
67a0: 2d 3e 61 70 74 72 20 2d 20 5f 5f 76 61 5f 61 72 ->aptr - __va_ar
67b0: 67 73 69 7a 65 28 54 59 50 45 5f 53 49 5a 45 29 gsize(TYPE_SIZE)
67c0: 2c 09 09 5c 0a 20 20 20 28 28 54 59 50 45 5f 53 ,..\. ((TYPE_S
67d0: 49 5a 45 29 20 3e 20 34 20 26 26 20 28 28 4c 49 IZE) > 4 && ((LI
67e0: 53 54 29 2d 3e 61 70 74 72 20 26 3d 20 2d 38 29 ST)->aptr &= -8)
67f0: 29 2c 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 ),....\. (LIST
6800: 29 2d 3e 61 70 74 72 20 2b 20 28 28 2d 28 54 59 )->aptr + ((-(TY
6810: 50 45 5f 53 49 5a 45 29 29 20 26 20 33 29 09 09 PE_SIZE)) & 3)..
6820: 09 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a ...\. ).#endif.
6830: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 #if defined(__i3
6840: 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 86__) || defined
6850: 28 5f 5f 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 (__alpha__) || d
6860: 65 66 69 6e 65 64 28 5f 5f 69 61 36 34 5f 5f 29 efined(__ia64__)
6870: 0a 2f 2a 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 ./* little endia
6880: 6e 20 2d 3e 20 73 6d 61 6c 6c 20 61 72 67 73 20 n -> small args
6890: 3c 20 31 20 77 6f 72 64 20 61 72 65 20 61 64 6a < 1 word are adj
68a0: 75 73 74 65 64 20 74 6f 20 74 68 65 20 6c 65 66 usted to the lef
68b0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 t */.#define __v
68c0: 61 5f 61 72 67 5f 61 64 6a 75 73 74 65 64 28 4c a_arg_adjusted(L
68d0: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
68e0: 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 5f PE_ALIGN) \. _
68f0: 5f 76 61 5f 61 72 67 5f 6c 65 66 74 61 64 6a 75 _va_arg_leftadju
6900: 73 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 sted(LIST,TYPE_S
6910: 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 0a IZE,TYPE_ALIGN).
6920: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e #endif.#if defin
6930: 65 64 28 5f 5f 6d 36 38 6b 5f 5f 29 20 7c 7c 20 ed(__m68k__) ||
6940: 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 defined(__mipsn3
6950: 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 2__) || defined(
6960: 5f 5f 6d 69 70 73 36 34 5f 5f 29 20 7c 7c 20 64 __mips64__) || d
6970: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f efined(__sparc__
6980: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 ) || defined(__s
6990: 70 61 72 63 36 34 5f 5f 29 20 7c 7c 20 64 65 66 parc64__) || def
69a0: 69 6e 65 64 28 5f 5f 68 70 70 61 5f 5f 29 20 7c ined(__hppa__) |
69b0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f | defined(__arm_
69c0: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
69d0: 72 73 36 30 30 30 5f 5f 29 20 7c 7c 20 64 65 66 rs6000__) || def
69e0: 69 6e 65 64 28 5f 5f 6d 38 38 6b 5f 5f 29 20 7c ined(__m88k__) |
69f0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 63 6f 6e 76 | defined(__conv
6a00: 65 78 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 ex__) || defined
6a10: 28 5f 5f 73 33 39 30 5f 5f 29 0a 2f 2a 20 62 69 (__s390__)./* bi
6a20: 67 20 65 6e 64 69 61 6e 20 2d 3e 20 73 6d 61 6c g endian -> smal
6a30: 6c 20 61 72 67 73 20 3c 20 31 20 77 6f 72 64 20 l args < 1 word
6a40: 61 72 65 20 61 64 6a 75 73 74 65 64 20 74 6f 20 are adjusted to
6a50: 74 68 65 20 72 69 67 68 74 20 2a 2f 0a 23 64 65 the right */.#de
6a60: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 61 64 fine __va_arg_ad
6a70: 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 45 justed(LIST,TYPE
6a80: 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e _SIZE,TYPE_ALIGN
6a90: 29 20 20 5c 0a 20 20 5f 5f 76 61 5f 61 72 67 5f ) \. __va_arg_
6aa0: 72 69 67 68 74 61 64 6a 75 73 74 65 64 28 4c 49 rightadjusted(LI
6ab0: 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 ST,TYPE_SIZE,TYP
6ac0: 45 5f 41 4c 49 47 4e 29 0a 23 65 6e 64 69 66 0a E_ALIGN).#endif.
6ad0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 #if defined(__mi
6ae0: 70 73 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 ps__) && !define
6af0: 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a 2f d(__mipsn32__)./
6b00: 2a 20 62 69 67 20 65 6e 64 69 61 6e 20 2d 3e 20 * big endian ->
6b10: 73 6d 61 6c 6c 20 61 72 67 73 20 3c 20 31 20 77 small args < 1 w
6b20: 6f 72 64 20 61 72 65 20 61 64 6a 75 73 74 65 64 ord are adjusted
6b30: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 2a 2f to the right */
6b40: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 .#define __va_ar
6b50: 67 5f 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c g_adjusted(LIST,
6b60: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 TYPE_SIZE,TYPE_A
6b70: 4c 49 47 4e 29 20 20 5c 0a 20 20 28 28 4c 49 53 LIGN) \. ((LIS
6b80: 54 29 2d 3e 61 6e 75 6d 2b 2b 2c 20 5f 5f 76 61 T)->anum++, __va
6b90: 5f 61 72 67 5f 72 69 67 68 74 61 64 6a 75 73 74 _arg_rightadjust
6ba0: 65 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a ed(LIST,TYPE_SIZ
6bb0: 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 29 0a 23 E,TYPE_ALIGN)).#
6bc0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
6bd0: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 2f 2a d(__x86_64__)./*
6be0: 20 74 68 65 20 66 69 72 73 74 20 36 20 61 72 67 the first 6 arg
6bf0: 75 6d 65 6e 74 20 77 6f 72 64 73 20 61 72 65 20 ument words are
6c00: 70 61 73 73 65 64 20 69 6e 20 72 65 67 69 73 74 passed in regist
6c10: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f ers */.#define _
6c20: 5f 76 61 5f 61 72 67 5f 61 64 6a 75 73 74 65 64 _va_arg_adjusted
6c30: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
6c40: 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 TYPE_ALIGN) \.
6c50: 20 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 69 61 72 ((LIST)->memiar
6c60: 67 70 74 72 20 2b 20 28 28 54 59 50 45 5f 53 49 gptr + ((TYPE_SI
6c70: 5a 45 29 20 2b 20 73 69 7a 65 6f 66 28 5f 5f 76 ZE) + sizeof(__v
6c80: 61 77 6f 72 64 29 2d 31 29 20 2f 20 73 69 7a 65 aword)-1) / size
6c90: 6f 66 28 5f 5f 76 61 77 6f 72 64 29 20 3c 3d 20 of(__vaword) <=
6ca0: 26 28 4c 49 53 54 29 2d 3e 69 61 72 67 5b 36 5d &(LIST)->iarg[6]
6cb0: 20 5c 0a 20 20 20 3f 20 28 28 4c 49 53 54 29 2d \. ? ((LIST)-
6cc0: 3e 6d 65 6d 69 61 72 67 70 74 72 20 2b 3d 20 28 >memiargptr += (
6cd0: 28 54 59 50 45 5f 53 49 5a 45 29 20 2b 20 73 69 (TYPE_SIZE) + si
6ce0: 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 2d 31 zeof(__vaword)-1
6cf0: 29 20 2f 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 ) / sizeof(__vaw
6d00: 6f 72 64 29 2c 20 5c 0a 20 20 20 20 20 20 28 4c ord), \. (L
6d10: 49 53 54 29 2d 3e 6d 65 6d 69 61 72 67 70 74 72 IST)->memiargptr
6d20: 20 2d 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 - ((TYPE_SIZE)
6d30: 2b 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 + sizeof(__vawor
6d40: 64 29 2d 31 29 20 2f 20 73 69 7a 65 6f 66 28 5f d)-1) / sizeof(_
6d50: 5f 76 61 77 6f 72 64 29 20 5c 0a 20 20 20 20 20 _vaword) \.
6d60: 29 09 09 09 09 09 09 09 09 09 5c 0a 20 20 20 3a ).........\. :
6d70: 20 28 76 6f 69 64 2a 29 5f 5f 76 61 5f 61 72 67 (void*)__va_arg
6d80: 5f 6c 65 66 74 61 64 6a 75 73 74 65 64 28 4c 49 _leftadjusted(LI
6d90: 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 ST,TYPE_SIZE,TYP
6da0: 45 5f 41 4c 49 47 4e 29 09 09 5c 0a 20 20 29 0a E_ALIGN)..\. ).
6db0: 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 5f #endif.#define _
6dc0: 5f 76 61 5f 61 72 67 28 4c 49 53 54 2c 54 59 50 _va_arg(LIST,TYP
6dd0: 45 29 20 20 5c 0a 20 20 2a 28 54 59 50 45 2a 29 E) \. *(TYPE*)
6de0: 5f 5f 76 61 5f 61 72 67 5f 61 64 6a 75 73 74 65 __va_arg_adjuste
6df0: 64 28 4c 49 53 54 2c 73 69 7a 65 6f 66 28 54 59 d(LIST,sizeof(TY
6e00: 50 45 29 2c 5f 5f 56 41 5f 61 6c 69 67 6e 6f 66 PE),__VA_alignof
6e10: 28 54 59 50 45 29 29 0a 0a 2f 2a 20 49 6e 74 65 (TYPE))../* Inte
6e20: 67 65 72 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a ger arguments. *
6e30: 2f 0a 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 /..#define va_ar
6e40: 67 5f 63 68 61 72 28 4c 49 53 54 29 09 5f 5f 76 g_char(LIST).__v
6e50: 61 5f 61 72 67 28 4c 49 53 54 2c 63 68 61 72 29 a_arg(LIST,char)
6e60: 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f .#define va_arg_
6e70: 73 63 68 61 72 28 4c 49 53 54 29 09 5f 5f 76 61 schar(LIST).__va
6e80: 5f 61 72 67 28 4c 49 53 54 2c 73 69 67 6e 65 64 _arg(LIST,signed
6e90: 20 63 68 61 72 29 0a 23 64 65 66 69 6e 65 20 76 char).#define v
6ea0: 61 5f 61 72 67 5f 75 63 68 61 72 28 4c 49 53 54 a_arg_uchar(LIST
6eb0: 29 09 5f 5f 76 61 5f 61 72 67 28 4c 49 53 54 2c ).__va_arg(LIST,
6ec0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 0a 23 unsigned char).#
6ed0: 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 73 68 define va_arg_sh
6ee0: 6f 72 74 28 4c 49 53 54 29 09 5f 5f 76 61 5f 61 ort(LIST).__va_a
6ef0: 72 67 28 4c 49 53 54 2c 73 68 6f 72 74 29 0a 23 rg(LIST,short).#
6f00: 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 75 73 define va_arg_us
6f10: 68 6f 72 74 28 4c 49 53 54 29 09 5f 5f 76 61 5f hort(LIST).__va_
6f20: 61 72 67 28 4c 49 53 54 2c 75 6e 73 69 67 6e 65 arg(LIST,unsigne
6f30: 64 20 73 68 6f 72 74 29 0a 23 64 65 66 69 6e 65 d short).#define
6f40: 20 76 61 5f 61 72 67 5f 69 6e 74 28 4c 49 53 54 va_arg_int(LIST
6f50: 29 09 5f 5f 76 61 5f 61 72 67 28 4c 49 53 54 2c ).__va_arg(LIST,
6f60: 69 6e 74 29 0a 23 64 65 66 69 6e 65 20 76 61 5f int).#define va_
6f70: 61 72 67 5f 75 69 6e 74 28 4c 49 53 54 29 09 5f arg_uint(LIST)._
6f80: 5f 76 61 5f 61 72 67 28 4c 49 53 54 2c 75 6e 73 _va_arg(LIST,uns
6f90: 69 67 6e 65 64 20 69 6e 74 29 0a 23 64 65 66 69 igned int).#defi
6fa0: 6e 65 20 76 61 5f 61 72 67 5f 6c 6f 6e 67 28 4c ne va_arg_long(L
6fb0: 49 53 54 29 09 5f 5f 76 61 5f 61 72 67 28 4c 49 IST).__va_arg(LI
6fc0: 53 54 2c 6c 6f 6e 67 29 0a 23 64 65 66 69 6e 65 ST,long).#define
6fd0: 20 76 61 5f 61 72 67 5f 75 6c 6f 6e 67 28 4c 49 va_arg_ulong(LI
6fe0: 53 54 29 09 5f 5f 76 61 5f 61 72 67 28 4c 49 53 ST).__va_arg(LIS
6ff0: 54 2c 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 T,unsigned long)
7000: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f ..#if defined(__
7010: 6d 69 70 73 36 34 5f 5f 29 20 7c 7c 20 64 65 66 mips64__) || def
7020: 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f ined(__sparc64__
7030: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 ) || defined(__a
7040: 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 6e lpha__) || defin
7050: 65 64 28 5f 5f 69 61 36 34 5f 5f 29 20 7c 7c 20 ed(__ia64__) ||
7060: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 defined(__x86_64
7070: 5f 5f 29 0a 2f 2a 20 60 6c 6f 6e 67 20 6c 6f 6e __)./* `long lon
7080: 67 27 20 61 6e 64 20 60 6c 6f 6e 67 27 20 61 72 g' and `long' ar
7090: 65 20 69 64 65 6e 74 69 63 61 6c 2e 20 2a 2f 0a e identical. */.
70a0: 23 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 6c #define va_arg_l
70b0: 6f 6e 67 6c 6f 6e 67 09 09 76 61 5f 61 72 67 5f onglong..va_arg_
70c0: 6c 6f 6e 67 0a 23 64 65 66 69 6e 65 20 76 61 5f long.#define va_
70d0: 61 72 67 5f 75 6c 6f 6e 67 6c 6f 6e 67 09 76 61 arg_ulonglong.va
70e0: 5f 61 72 67 5f 75 6c 6f 6e 67 0a 23 65 6c 69 66 _arg_ulong.#elif
70f0: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e defined(__mipsn
7100: 33 32 5f 5f 29 0a 2f 2a 20 60 6c 6f 6e 67 20 6c 32__)./* `long l
7110: 6f 6e 67 27 20 66 69 74 73 20 69 6e 20 5f 5f 76 ong' fits in __v
7120: 61 77 6f 72 64 2e 20 2a 2f 0a 23 64 65 66 69 6e aword. */.#defin
7130: 65 20 76 61 5f 61 72 67 5f 6c 6f 6e 67 6c 6f 6e e va_arg_longlon
7140: 67 28 4c 49 53 54 29 09 5f 5f 76 61 5f 61 72 67 g(LIST).__va_arg
7150: 28 4c 49 53 54 2c 6c 6f 6e 67 20 6c 6f 6e 67 29 (LIST,long long)
7160: 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f .#define va_arg_
7170: 75 6c 6f 6e 67 6c 6f 6e 67 28 4c 49 53 54 29 09 ulonglong(LIST).
7180: 5f 5f 76 61 5f 61 72 67 28 4c 49 53 54 2c 75 6e __va_arg(LIST,un
7190: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6c 6f 6e 67 signed long long
71a0: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 ).#elif defined(
71b0: 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 __i386__) || def
71c0: 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f 5f 29 20 7c ined(__m68k__) |
71d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 | defined(__mips
71e0: 5f 5f 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 __) || (defined(
71f0: 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 __sparc__) && !d
7200: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 efined(__sparc64
7210: 5f 5f 29 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 __)) || defined(
7220: 5f 5f 68 70 70 61 5f 5f 29 20 7c 7c 20 64 65 66 __hppa__) || def
7230: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 7c 7c ined(__arm__) ||
7240: 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 defined(__rs600
7250: 30 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 0__) || defined(
7260: 5f 5f 6d 38 38 6b 5f 5f 29 20 7c 7c 20 64 65 66 __m88k__) || def
7270: 69 6e 65 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f 29 ined(__convex__)
7280: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 33 || defined(__s3
7290: 39 30 5f 5f 29 0a 2f 2a 20 60 6c 6f 6e 67 20 6c 90__)./* `long l
72a0: 6f 6e 67 27 73 20 61 72 65 20 70 61 73 73 65 64 ong's are passed
72b0: 20 65 6d 62 65 64 64 65 64 20 6f 6e 20 74 68 65 embedded on the
72c0: 20 61 72 67 20 73 74 61 63 6b 2e 20 2a 2f 0a 23 arg stack. */.#
72d0: 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 6c 6f define va_arg_lo
72e0: 6e 67 6c 6f 6e 67 28 4c 49 53 54 29 09 5f 5f 76 nglong(LIST).__v
72f0: 61 5f 61 72 67 5f 6c 6f 6e 67 6c 6f 6e 67 28 4c a_arg_longlong(L
7300: 49 53 54 2c 6c 6f 6e 67 20 6c 6f 6e 67 29 0a 23 IST,long long).#
7310: 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 75 6c define va_arg_ul
7320: 6f 6e 67 6c 6f 6e 67 28 4c 49 53 54 29 09 5f 5f onglong(LIST).__
7330: 76 61 5f 61 72 67 5f 6c 6f 6e 67 6c 6f 6e 67 28 va_arg_longlong(
7340: 4c 49 53 54 2c 75 6e 73 69 67 6e 65 64 20 6c 6f LIST,unsigned lo
7350: 6e 67 20 6c 6f 6e 67 29 0a 23 69 66 20 64 65 66 ng long).#if def
7360: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c ined(__i386__) |
7370: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 6b | defined(__m68k
7380: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
7390: 5f 61 72 6d 5f 5f 29 20 7c 7c 20 28 64 65 66 69 _arm__) || (defi
73a0: 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f 5f 29 20 ned(__rs6000__)
73b0: 26 26 20 28 64 65 66 69 6e 65 64 28 5f 41 49 58 && (defined(_AIX
73c0: 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f ) || (defined(__
73d0: 4d 41 43 48 5f 5f 29 20 26 26 20 64 65 66 69 6e MACH__) && defin
73e0: 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 29 29 29 ed(__APPLE__))))
73f0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 63 6f || defined(__co
7400: 6e 76 65 78 5f 5f 29 0a 2f 2a 20 60 6c 6f 6e 67 nvex__)./* `long
7410: 20 6c 6f 6e 67 27 73 20 61 72 65 20 28 61 74 20 long's are (at
7420: 6d 6f 73 74 29 20 77 6f 72 64 2d 61 6c 69 67 6e most) word-align
7430: 65 64 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f ed. */.#define _
7440: 5f 76 61 5f 61 72 67 5f 6c 6f 6e 67 6c 6f 6e 67 _va_arg_longlong
7450: 28 4c 49 53 54 2c 54 59 50 45 29 09 5f 5f 76 61 (LIST,TYPE).__va
7460: 5f 61 72 67 28 4c 49 53 54 2c 54 59 50 45 29 0a _arg(LIST,TYPE).
7470: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e #endif.#if defin
7480: 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 7c 7c 20 ed(__mips__) ||
7490: 28 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 (defined(__rs600
74a0: 30 5f 5f 29 20 26 26 20 21 28 64 65 66 69 6e 65 0__) && !(define
74b0: 64 28 5f 41 49 58 29 20 7c 7c 20 28 64 65 66 69 d(_AIX) || (defi
74c0: 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 ned(__MACH__) &&
74d0: 20 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 defined(__APPLE
74e0: 5f 5f 29 29 29 29 20 7c 7c 20 64 65 66 69 6e 65 __)))) || define
74f0: 64 28 5f 5f 6d 38 38 6b 5f 5f 29 0a 2f 2a 20 60 d(__m88k__)./* `
7500: 6c 6f 6e 67 20 6c 6f 6e 67 27 73 20 68 61 76 65 long long's have
7510: 20 61 6c 69 67 6e 6d 65 6e 74 20 38 2e 20 2a 2f alignment 8. */
7520: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 .#define __va_ar
7530: 67 5f 6c 6f 6e 67 6c 6f 6e 67 28 4c 49 53 54 2c g_longlong(LIST,
7540: 54 59 50 45 29 09 09 09 09 09 5c 0a 20 20 28 28 TYPE).....\. ((
7550: 4c 49 53 54 29 2d 3e 61 70 74 72 20 3d 20 28 28 LIST)->aptr = ((
7560: 28 4c 49 53 54 29 2d 3e 61 70 74 72 2b 5f 5f 56 (LIST)->aptr+__V
7570: 41 5f 61 6c 69 67 6e 6f 66 28 54 59 50 45 29 2d A_alignof(TYPE)-
7580: 31 29 20 26 20 2d 28 6c 6f 6e 67 29 5f 5f 56 41 1) & -(long)__VA
7590: 5f 61 6c 69 67 6e 6f 66 28 54 59 50 45 29 29 2c _alignof(TYPE)),
75a0: 20 5c 0a 20 20 20 5f 5f 76 61 5f 61 72 67 28 4c \. __va_arg(L
75b0: 49 53 54 2c 54 59 50 45 29 29 0a 23 65 6e 64 69 IST,TYPE)).#endi
75c0: 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 5f f.#if (defined(_
75d0: 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 65 _sparc__) && !de
75e0: 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f fined(__sparc64_
75f0: 5f 29 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f _)) || defined(_
7600: 5f 73 33 39 30 5f 5f 29 0a 2f 2a 20 57 69 74 68 _s390__)./* With
7610: 69 6e 20 74 68 65 20 61 72 67 20 73 74 61 63 6b in the arg stack
7620: 2c 20 74 68 65 20 61 6c 69 67 6e 6d 65 6e 74 20 , the alignment
7630: 69 73 20 6f 6e 6c 79 20 34 2c 20 6e 6f 74 20 38 is only 4, not 8
7640: 2e 20 2a 2f 0a 2f 2a 20 42 65 77 61 72 65 20 61 . */./* Beware a
7650: 67 61 69 6e 73 74 20 75 6e 61 6c 69 67 6e 65 64 gainst unaligned
7660: 20 61 63 63 65 73 73 65 73 21 20 2a 2f 0a 23 64 accesses! */.#d
7670: 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 6c efine __va_arg_l
7680: 6f 6e 67 6c 6f 6e 67 28 4c 49 53 54 2c 54 59 50 onglong(LIST,TYP
7690: 45 29 09 09 09 09 09 5c 0a 20 20 28 28 4c 49 53 E).....\. ((LIS
76a0: 54 29 2d 3e 74 6d 70 2e 5f 77 6f 72 64 73 5b 30 T)->tmp._words[0
76b0: 5d 20 3d 20 28 28 5f 5f 76 61 77 6f 72 64 2a 29 ] = ((__vaword*)
76c0: 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 29 29 5b ((LIST)->aptr))[
76d0: 30 5d 2c 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 0],..\. (LIST)
76e0: 2d 3e 74 6d 70 2e 5f 77 6f 72 64 73 5b 31 5d 20 ->tmp._words[1]
76f0: 3d 20 28 28 5f 5f 76 61 77 6f 72 64 2a 29 28 28 = ((__vaword*)((
7700: 4c 49 53 54 29 2d 3e 61 70 74 72 29 29 5b 31 5d LIST)->aptr))[1]
7710: 2c 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e ,..\. (LIST)->
7720: 61 70 74 72 20 2b 3d 20 73 69 7a 65 6f 66 28 54 aptr += sizeof(T
7730: 59 50 45 29 2c 09 09 09 09 09 5c 0a 20 20 20 28 YPE),.....\. (
7740: 54 59 50 45 29 28 28 4c 49 53 54 29 2d 3e 74 6d TYPE)((LIST)->tm
7750: 70 2e 5f 6c 6f 6e 67 6c 6f 6e 67 29 09 09 09 09 p._longlong)....
7760: 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 .\. ).#endif.#i
7770: 66 20 64 65 66 69 6e 65 64 28 5f 5f 68 70 70 61 f defined(__hppa
7780: 5f 5f 29 0a 2f 2a 20 60 6c 6f 6e 67 20 6c 6f 6e __)./* `long lon
7790: 67 27 73 20 68 61 76 65 20 61 6c 69 67 6e 6d 65 g's have alignme
77a0: 6e 74 20 38 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 nt 8. */.#define
77b0: 20 5f 5f 76 61 5f 61 72 67 5f 6c 6f 6e 67 6c 6f __va_arg_longlo
77c0: 6e 67 28 4c 49 53 54 2c 54 59 50 45 29 09 09 09 ng(LIST,TYPE)...
77d0: 09 09 5c 0a 20 20 28 28 4c 49 53 54 29 2d 3e 61 ..\. ((LIST)->a
77e0: 70 74 72 20 3d 20 28 28 4c 49 53 54 29 2d 3e 61 ptr = ((LIST)->a
77f0: 70 74 72 20 26 20 2d 28 6c 6f 6e 67 29 5f 5f 56 ptr & -(long)__V
7800: 41 5f 61 6c 69 67 6e 6f 66 28 54 59 50 45 29 29 A_alignof(TYPE))
7810: 2c 09 09 5c 0a 20 20 20 5f 5f 76 61 5f 61 72 67 ,..\. __va_arg
7820: 28 4c 49 53 54 2c 54 59 50 45 29 29 0a 23 65 6e (LIST,TYPE)).#en
7830: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 46 dif.#endif../* F
7840: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 61 72 loating point ar
7850: 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 0a 23 64 65 guments. */..#de
7860: 66 69 6e 65 20 76 61 5f 61 72 67 5f 66 6c 6f 61 fine va_arg_floa
7870: 74 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 4c t(LIST) \. ((L
7880: 49 53 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f 5f IST)->flags & __
7890: 56 41 5f 54 52 41 44 49 54 49 4f 4e 41 4c 5f 46 VA_TRADITIONAL_F
78a0: 4c 4f 41 54 5f 41 52 47 53 09 09 09 09 5c 0a 20 LOAT_ARGS....\.
78b0: 20 20 3f 20 28 66 6c 6f 61 74 29 76 61 5f 61 72 ? (float)va_ar
78c0: 67 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 09 09 g_double(LIST)..
78d0: 09 09 09 09 5c 0a 20 20 20 3a 20 5f 5f 76 61 5f ....\. : __va_
78e0: 61 72 67 5f 66 6c 6f 61 74 28 4c 49 53 54 29 09 arg_float(LIST).
78f0: 09 09 09 09 09 5c 0a 20 20 29 0a 0a 23 69 66 20 .....\. )..#if
7900: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f defined(__i386__
7910: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d ) || defined(__m
7920: 36 38 6b 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 68k__) || define
7930: 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 20 7c d(__mipsn32__) |
7940: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 | defined(__mips
7950: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 64__) || defined
7960: 28 5f 5f 73 70 61 72 63 5f 5f 29 20 7c 7c 20 64 (__sparc__) || d
7970: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 efined(__sparc64
7980: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
7990: 5f 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 _alpha__) || def
79a0: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 7c 7c ined(__arm__) ||
79b0: 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 defined(__rs600
79c0: 30 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 0__) || defined(
79d0: 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 7c 7c 20 64 __convex__) || d
79e0: 65 66 69 6e 65 64 28 5f 5f 69 61 36 34 5f 5f 29 efined(__ia64__)
79f0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 || defined(__x8
7a00: 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 6_64__) || defin
7a10: 65 64 28 5f 5f 73 33 39 30 5f 5f 29 0a 23 64 65 ed(__s390__).#de
7a20: 66 69 6e 65 20 5f 5f 76 61 5f 61 6c 69 67 6e 5f fine __va_align_
7a30: 64 6f 75 62 6c 65 28 4c 49 53 54 29 0a 23 65 6e double(LIST).#en
7a40: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
7a50: 5f 5f 6d 69 70 73 5f 5f 29 20 26 26 20 21 64 65 __mips__) && !de
7a60: 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f fined(__mipsn32_
7a70: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
7a80: 6d 38 38 6b 5f 5f 29 0a 2f 2a 20 5f 5f 56 41 5f m88k__)./* __VA_
7a90: 61 6c 69 67 6e 6f 66 28 64 6f 75 62 6c 65 29 20 alignof(double)
7aa0: 3e 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 > sizeof(__vawor
7ab0: 64 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f d) */.#define __
7ac0: 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 va_align_double(
7ad0: 4c 49 53 54 29 20 20 5c 0a 20 20 28 4c 49 53 54 LIST) \. (LIST
7ae0: 29 2d 3e 61 70 74 72 20 3d 20 28 28 4c 49 53 54 )->aptr = ((LIST
7af0: 29 2d 3e 61 70 74 72 20 2b 20 73 69 7a 65 6f 66 )->aptr + sizeof
7b00: 28 64 6f 75 62 6c 65 29 2d 31 29 20 26 20 2d 28 (double)-1) & -(
7b10: 6c 6f 6e 67 29 73 69 7a 65 6f 66 28 64 6f 75 62 long)sizeof(doub
7b20: 6c 65 29 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 le),.#endif.#if
7b30: 64 65 66 69 6e 65 64 28 5f 5f 68 70 70 61 5f 5f defined(__hppa__
7b40: 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 ).#define __va_a
7b50: 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 54 lign_double(LIST
7b60: 29 20 20 5c 0a 20 20 28 4c 49 53 54 29 2d 3e 61 ) \. (LIST)->a
7b70: 70 74 72 20 3d 20 28 4c 49 53 54 29 2d 3e 61 70 ptr = (LIST)->ap
7b80: 74 72 20 26 20 2d 28 6c 6f 6e 67 29 73 69 7a 65 tr & -(long)size
7b90: 6f 66 28 64 6f 75 62 6c 65 29 2c 0a 23 65 6e 64 of(double),.#end
7ba0: 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 if..#if defined(
7bb0: 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 __sparc__) && !d
7bc0: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 efined(__sparc64
7bd0: 5f 5f 29 0a 2f 2a 20 42 65 77 61 72 65 20 61 67 __)./* Beware ag
7be0: 61 69 6e 73 74 20 75 6e 61 6c 69 67 6e 65 64 20 ainst unaligned
7bf0: 60 64 6f 75 62 6c 65 27 20 61 63 63 65 73 73 65 `double' accesse
7c00: 73 21 20 2a 2f 0a 23 64 65 66 69 6e 65 20 76 61 s! */.#define va
7c10: 5f 61 72 67 5f 64 6f 75 62 6c 65 28 4c 49 53 54 _arg_double(LIST
7c20: 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 61 6c 69 ) \. (__va_ali
7c30: 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 09 gn_double(LIST).
7c40: 09 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 .....\. (LIST)
7c50: 2d 3e 74 6d 70 2e 5f 77 6f 72 64 73 5b 30 5d 20 ->tmp._words[0]
7c60: 3d 20 28 28 5f 5f 76 61 77 6f 72 64 2a 29 28 28 = ((__vaword*)((
7c70: 4c 49 53 54 29 2d 3e 61 70 74 72 29 29 5b 30 5d LIST)->aptr))[0]
7c80: 2c 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e ,..\. (LIST)->
7c90: 74 6d 70 2e 5f 77 6f 72 64 73 5b 31 5d 20 3d 20 tmp._words[1] =
7ca0: 28 28 5f 5f 76 61 77 6f 72 64 2a 29 28 28 4c 49 ((__vaword*)((LI
7cb0: 53 54 29 2d 3e 61 70 74 72 29 29 5b 31 5d 2c 09 ST)->aptr))[1],.
7cc0: 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 .\. (LIST)->ap
7cd0: 74 72 20 2b 3d 20 73 69 7a 65 6f 66 28 64 6f 75 tr += sizeof(dou
7ce0: 62 6c 65 29 2c 09 09 09 09 09 5c 0a 20 20 20 28 ble),.....\. (
7cf0: 4c 49 53 54 29 2d 3e 74 6d 70 2e 5f 64 6f 75 62 LIST)->tmp._doub
7d00: 6c 65 09 09 09 09 09 09 09 5c 0a 20 20 29 0a 23 le.......\. ).#
7d10: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
7d20: 64 28 5f 5f 61 6c 70 68 61 5f 5f 29 0a 2f 2a 20 d(__alpha__)./*
7d30: 54 68 65 20 66 69 72 73 74 20 36 20 66 6c 6f 61 The first 6 floa
7d40: 74 69 6e 67 20 70 6f 69 6e 74 20 72 65 67 69 73 ting point regis
7d50: 74 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 73 ters have been s
7d60: 74 6f 72 65 64 20 69 6e 20 61 6e 6f 74 68 65 72 tored in another
7d70: 20 70 6c 61 63 65 2e 20 2a 2f 0a 23 64 65 66 69 place. */.#defi
7d80: 6e 65 20 76 61 5f 61 72 67 5f 64 6f 75 62 6c 65 ne va_arg_double
7d90: 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 28 4c (LIST) \. (((L
7da0: 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 IST)->aptr += si
7db0: 7a 65 6f 66 28 64 6f 75 62 6c 65 29 29 20 3c 3d zeof(double)) <=
7dc0: 20 28 4c 49 53 54 29 2d 3e 6d 65 6d 61 72 67 70 (LIST)->memargp
7dd0: 74 72 09 09 5c 0a 20 20 20 3f 20 2a 28 64 6f 75 tr..\. ? *(dou
7de0: 62 6c 65 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 ble*)((LIST)->ap
7df0: 74 72 20 2d 20 73 69 7a 65 6f 66 28 64 6f 75 62 tr - sizeof(doub
7e00: 6c 65 29 20 2d 20 36 2a 73 69 7a 65 6f 66 28 64 le) - 6*sizeof(d
7e10: 6f 75 62 6c 65 29 29 09 5c 0a 20 20 20 3a 20 2a ouble)).\. : *
7e20: 28 64 6f 75 62 6c 65 2a 29 28 28 4c 49 53 54 29 (double*)((LIST)
7e30: 2d 3e 61 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 ->aptr - sizeof(
7e40: 64 6f 75 62 6c 65 29 29 09 09 09 09 5c 0a 20 20 double))....\.
7e50: 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 ).#define __va_a
7e60: 72 67 5f 66 6c 6f 61 74 28 4c 49 53 54 29 20 20 rg_float(LIST)
7e70: 5c 0a 20 20 28 28 28 4c 49 53 54 29 2d 3e 61 70 \. (((LIST)->ap
7e80: 74 72 20 2b 3d 20 73 69 7a 65 6f 66 28 64 6f 75 tr += sizeof(dou
7e90: 62 6c 65 29 29 20 3c 3d 20 28 4c 49 53 54 29 2d ble)) <= (LIST)-
7ea0: 3e 6d 65 6d 61 72 67 70 74 72 09 09 5c 0a 20 20 >memargptr..\.
7eb0: 20 3f 20 2f 2a 20 54 68 65 20 66 69 72 73 74 20 ? /* The first
7ec0: 36 20 61 72 67 73 20 68 61 76 65 20 62 65 65 6e 6 args have been
7ed0: 20 70 75 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 put into memory
7ee0: 20 62 79 20 22 73 74 74 22 20 69 6e 73 74 72 75 by "stt" instru
7ef0: 63 74 69 6f 6e 73 20 2a 2f 5c 0a 20 20 20 20 20 ctions */\.
7f00: 2f 2a 20 28 73 65 65 20 76 61 63 61 6c 6c 2d 61 /* (see vacall-a
7f10: 6c 70 68 61 2e 73 21 29 2e 20 54 68 65 72 65 66 lpha.s!). Theref
7f20: 6f 72 65 20 6c 6f 61 64 20 74 68 65 6d 20 61 73 ore load them as
7f30: 20 64 6f 75 62 6c 65 73 2e 20 2a 2f 09 5c 0a 20 doubles. */.\.
7f40: 20 20 20 20 2f 2a 20 57 68 65 6e 20 76 69 65 77 /* When view
7f50: 65 64 20 61 73 20 66 6c 6f 61 74 73 2c 20 74 68 ed as floats, th
7f60: 65 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 e value will be
7f70: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 6e 65 2e the correct one.
7f80: 20 2a 2f 09 5c 0a 20 20 20 20 20 28 66 6c 6f 61 */.\. (floa
7f90: 74 29 2a 28 64 6f 75 62 6c 65 2a 29 28 28 4c 49 t)*(double*)((LI
7fa0: 53 54 29 2d 3e 61 70 74 72 20 2d 20 73 69 7a 65 ST)->aptr - size
7fb0: 6f 66 28 64 6f 75 62 6c 65 29 20 2d 20 36 2a 73 of(double) - 6*s
7fc0: 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 29 20 5c izeof(double)) \
7fd0: 0a 20 20 20 3a 20 2f 2a 20 54 68 65 73 65 20 61 . : /* These a
7fe0: 72 67 73 20 68 61 76 65 20 62 65 65 6e 20 70 75 rgs have been pu
7ff0: 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 62 79 t into memory by
8000: 20 22 73 74 73 22 20 69 6e 73 74 72 75 63 74 69 "sts" instructi
8010: 6f 6e 73 2c 20 2a 2f 09 5c 0a 20 20 20 20 20 2f ons, */.\. /
8020: 2a 20 74 68 65 72 65 66 6f 72 65 20 6c 6f 61 64 * therefore load
8030: 20 74 68 65 6d 20 61 73 20 66 6c 6f 61 74 73 2e them as floats.
8040: 20 2a 2f 09 09 09 09 5c 0a 20 20 20 20 20 2a 28 */....\. *(
8050: 66 6c 6f 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e float*)((LIST)->
8060: 61 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 64 6f aptr - sizeof(do
8070: 75 62 6c 65 29 29 09 09 09 09 5c 0a 20 20 29 0a uble))....\. ).
8080: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e #endif.#if defin
8090: 65 64 28 5f 5f 68 70 70 61 5f 5f 29 0a 2f 2a 20 ed(__hppa__)./*
80a0: 54 68 65 20 66 69 72 73 74 20 34 20 66 6c 6f 61 The first 4 floa
80b0: 74 20 72 65 67 69 73 74 65 72 73 20 61 6e 64 20 t registers and
80c0: 74 68 65 20 66 69 72 73 74 20 32 20 64 6f 75 62 the first 2 doub
80d0: 6c 65 20 72 65 67 69 73 74 65 72 73 20 61 72 65 le registers are
80e0: 20 73 74 6f 72 65 64 0a 20 2a 20 65 6c 73 65 77 stored. * elsew
80f0: 68 65 72 65 2e 0a 20 2a 2f 0a 23 69 66 20 31 20 here.. */.#if 1
8100: 2f 2a 20 67 63 63 2d 32 2e 35 2e 32 20 70 61 73 /* gcc-2.5.2 pas
8110: 73 65 73 20 74 68 65 73 65 20 61 72 67 73 20 69 ses these args i
8120: 6e 20 67 65 6e 65 72 61 6c 20 72 65 67 69 73 74 n general regist
8130: 65 72 73 21 20 41 20 62 75 67 2c 20 49 20 74 68 ers! A bug, I th
8140: 69 6e 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 ink. */.#define
8150: 5f 5f 76 61 5f 61 72 67 5f 66 6c 6f 61 74 28 4c __va_arg_float(L
8160: 49 53 54 29 20 20 5c 0a 20 20 28 2a 28 66 6c 6f IST) \. (*(flo
8170: 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 at*)((LIST)->apt
8180: 72 20 2d 3d 20 73 69 7a 65 6f 66 28 66 6c 6f 61 r -= sizeof(floa
8190: 74 29 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f t))).#define va_
81a0: 61 72 67 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 arg_double(LIST)
81b0: 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 61 6c 69 67 \. (__va_alig
81c0: 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 09 09 n_double(LIST)..
81d0: 09 09 09 09 5c 0a 20 20 20 2a 28 64 6f 75 62 6c ....\. *(doubl
81e0: 65 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 e*)((LIST)->aptr
81f0: 20 2d 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c -= sizeof(doubl
8200: 65 29 29 09 09 09 09 5c 0a 20 20 29 0a 23 65 6c e))....\. ).#el
8210: 73 65 20 2f 2a 20 74 68 69 73 20 77 6f 75 6c 64 se /* this would
8220: 20 62 65 20 63 6f 72 72 65 63 74 20 69 66 20 74 be correct if t
8230: 68 65 20 61 72 67 73 20 77 65 72 65 20 70 61 73 he args were pas
8240: 73 65 64 20 69 6e 20 66 6c 6f 61 74 20 72 65 67 sed in float reg
8250: 69 73 74 65 72 73 2e 20 2a 2f 0a 23 64 65 66 69 isters. */.#defi
8260: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 66 6c 6f 61 ne __va_arg_floa
8270: 74 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 28 t(LIST) \. (((
8280: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 3d 20 73 LIST)->aptr -= s
8290: 69 7a 65 6f 66 28 66 6c 6f 61 74 29 29 20 3e 3d izeof(float)) >=
82a0: 20 28 4c 49 53 54 29 2d 3e 6d 65 6d 61 72 67 70 (LIST)->memargp
82b0: 74 72 09 09 09 5c 0a 20 20 20 3f 20 2f 2a 20 54 tr...\. ? /* T
82c0: 68 65 20 66 69 72 73 74 20 34 20 66 6c 6f 61 74 he first 4 float
82d0: 20 61 72 67 73 20 61 72 65 20 73 74 6f 72 65 64 args are stored
82e0: 20 73 65 70 61 72 61 74 65 6c 79 2e 20 2a 2f 09 separately. */.
82f0: 09 5c 0a 20 20 20 20 20 2a 28 66 6c 6f 61 74 2a .\. *(float*
8300: 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b )((LIST)->aptr +
8310: 20 28 4c 49 53 54 29 2d 3e 66 61 72 67 5f 6f 66 (LIST)->farg_of
8320: 66 73 65 74 29 09 09 09 5c 0a 20 20 20 3a 20 2a fset)...\. : *
8330: 28 66 6c 6f 61 74 2a 29 28 28 4c 49 53 54 29 2d (float*)((LIST)-
8340: 3e 61 70 74 72 29 09 09 09 09 09 09 5c 0a 20 20 >aptr)......\.
8350: 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 67 ).#define va_arg
8360: 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 20 20 5c _double(LIST) \
8370: 0a 20 20 28 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 . (__va_align_d
8380: 6f 75 62 6c 65 28 4c 49 53 54 29 09 09 09 09 09 ouble(LIST).....
8390: 09 5c 0a 20 20 20 28 28 28 4c 49 53 54 29 2d 3e .\. (((LIST)->
83a0: 61 70 74 72 20 2d 3d 20 73 69 7a 65 6f 66 28 64 aptr -= sizeof(d
83b0: 6f 75 62 6c 65 29 29 20 3e 3d 20 28 4c 49 53 54 ouble)) >= (LIST
83c0: 29 2d 3e 6d 65 6d 61 72 67 70 74 72 09 09 5c 0a )->memargptr..\.
83d0: 20 20 20 20 3f 20 2f 2a 20 54 68 65 20 66 69 72 ? /* The fir
83e0: 73 74 20 32 20 64 6f 75 62 6c 65 20 61 72 67 73 st 2 double args
83f0: 20 61 72 65 20 73 74 6f 72 65 64 20 73 65 70 61 are stored sepa
8400: 72 61 74 65 6c 79 2e 20 2a 2f 09 09 5c 0a 20 20 rately. */..\.
8410: 20 20 20 20 2a 28 64 6f 75 62 6c 65 2a 29 28 28 *(double*)((
8420: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 20 28 4c LIST)->aptr + (L
8430: 49 53 54 29 2d 3e 64 61 72 67 5f 6f 66 66 73 65 IST)->darg_offse
8440: 74 29 09 09 09 5c 0a 20 20 20 20 3a 20 2a 28 64 t)...\. : *(d
8450: 6f 75 62 6c 65 2a 29 28 28 4c 49 53 54 29 2d 3e ouble*)((LIST)->
8460: 61 70 74 72 29 09 09 09 09 09 09 5c 0a 20 20 29 aptr)......\. )
8470: 29 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a ).#endif.#endif.
8480: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 #if defined(__mi
8490: 70 73 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 ps__) && !define
84a0: 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a 2f d(__mipsn32__)./
84b0: 2a 20 54 68 65 20 66 69 72 73 74 20 30 2c 31 2c * The first 0,1,
84c0: 32 20 72 65 67 69 73 74 65 72 73 20 61 72 65 20 2 registers are
84d0: 73 74 6f 72 65 64 20 65 6c 73 65 77 68 65 72 65 stored elsewhere
84e0: 20 69 66 20 74 68 65 79 20 61 72 65 20 66 6c 6f if they are flo
84f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 2a 20 70 ating-point. * p
8500: 61 72 61 6d 65 74 65 72 73 2e 0a 20 2a 2f 0a 23 arameters.. */.#
8510: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f define __va_arg_
8520: 66 6c 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 float(LIST) \.
8530: 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b ((LIST)->aptr +
8540: 3d 20 73 69 7a 65 6f 66 28 66 6c 6f 61 74 29 2c = sizeof(float),
8550: 09 09 09 09 09 5c 0a 20 20 20 28 4c 49 53 54 29 .....\. (LIST)
8560: 2d 3e 61 6e 75 6d 2b 2b 2c 09 09 09 09 09 09 09 ->anum++,.......
8570: 5c 0a 20 20 20 28 28 4c 49 53 54 29 2d 3e 61 6e \. ((LIST)->an
8580: 75 6d 20 3d 3d 20 31 09 09 09 09 09 09 09 5c 0a um == 1.......\.
8590: 20 20 20 20 3f 20 28 28 4c 49 53 54 29 2d 3e 66 ? ((LIST)->f
85a0: 6c 61 67 73 20 7c 3d 20 5f 5f 56 41 5f 46 4c 4f lags |= __VA_FLO
85b0: 41 54 5f 31 2c 20 28 4c 49 53 54 29 2d 3e 66 61 AT_1, (LIST)->fa
85c0: 72 67 5b 30 5d 29 09 09 09 5c 0a 20 20 20 20 3a rg[0])...\. :
85d0: 20 28 28 4c 49 53 54 29 2d 3e 61 6e 75 6d 20 3d ((LIST)->anum =
85e0: 3d 20 32 20 26 26 20 28 28 4c 49 53 54 29 2d 3e = 2 && ((LIST)->
85f0: 66 6c 61 67 73 20 26 20 5f 5f 56 41 5f 46 4c 4f flags & __VA_FLO
8600: 41 54 5f 31 29 09 09 5c 0a 20 20 20 20 20 20 20 AT_1)..\.
8610: 3f 20 28 2f 2a 20 28 4c 49 53 54 29 2d 3e 66 6c ? (/* (LIST)->fl
8620: 61 67 73 20 7c 3d 20 5f 5f 56 41 5f 46 4c 4f 41 ags |= __VA_FLOA
8630: 54 5f 32 2c 20 2a 2f 20 28 4c 49 53 54 29 2d 3e T_2, */ (LIST)->
8640: 66 61 72 67 5b 31 5d 29 09 09 5c 0a 20 20 20 20 farg[1])..\.
8650: 20 20 20 3a 20 2a 28 66 6c 6f 61 74 2a 29 28 28 : *(float*)((
8660: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 73 69 LIST)->aptr - si
8670: 7a 65 6f 66 28 66 6c 6f 61 74 29 29 09 09 09 5c zeof(float))...\
8680: 0a 20 20 29 29 20 20 29 0a 23 64 65 66 69 6e 65 . )) ).#define
8690: 20 76 61 5f 61 72 67 5f 64 6f 75 62 6c 65 28 4c va_arg_double(L
86a0: 49 53 54 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f IST) \. (__va_
86b0: 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 align_double(LIS
86c0: 54 29 09 09 09 09 09 09 5c 0a 20 20 20 28 4c 49 T)......\. (LI
86d0: 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 7a ST)->aptr += siz
86e0: 65 6f 66 28 64 6f 75 62 6c 65 29 2c 09 09 09 09 eof(double),....
86f0: 09 5c 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 6e .\. (LIST)->an
8700: 75 6d 2b 2b 2c 09 09 09 09 09 09 09 5c 0a 20 20 um++,.......\.
8710: 20 28 28 4c 49 53 54 29 2d 3e 61 6e 75 6d 20 3d ((LIST)->anum =
8720: 3d 20 31 09 09 09 09 09 09 09 5c 0a 20 20 20 20 = 1.......\.
8730: 3f 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 ? ((LIST)->flags
8740: 20 7c 3d 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 31 |= __VA_FLOAT_1
8750: 2c 20 28 4c 49 53 54 29 2d 3e 64 61 72 67 5b 30 , (LIST)->darg[0
8760: 5d 29 09 09 09 5c 0a 20 20 20 20 3a 20 28 28 4c ])...\. : ((L
8770: 49 53 54 29 2d 3e 61 6e 75 6d 20 3d 3d 20 32 20 IST)->anum == 2
8780: 26 26 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 67 && ((LIST)->flag
8790: 73 20 26 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 31 s & __VA_FLOAT_1
87a0: 29 09 09 5c 0a 20 20 20 20 20 20 20 3f 20 28 2f )..\. ? (/
87b0: 2a 20 28 4c 49 53 54 29 2d 3e 66 6c 61 67 73 20 * (LIST)->flags
87c0: 7c 3d 20 5f 5f 56 41 5f 46 4c 4f 41 54 5f 32 2c |= __VA_FLOAT_2,
87d0: 20 2a 2f 20 28 4c 49 53 54 29 2d 3e 64 61 72 67 */ (LIST)->darg
87e0: 5b 31 5d 29 09 09 5c 0a 20 20 20 20 20 20 20 3a [1])..\. :
87f0: 20 2a 28 64 6f 75 62 6c 65 2a 29 28 28 4c 49 53 *(double*)((LIS
8800: 54 29 2d 3e 61 70 74 72 20 2d 20 73 69 7a 65 6f T)->aptr - sizeo
8810: 66 28 64 6f 75 62 6c 65 29 29 09 09 09 5c 0a 20 f(double))...\.
8820: 20 29 29 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 )) ).#endif.#i
8830: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 f defined(__mips
8840: 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 n32__) || define
8850: 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 0a 2f 2a d(__mips64__)./*
8860: 20 54 68 65 20 66 69 72 73 74 20 30 2c 2e 2e 2c The first 0,..,
8870: 38 20 72 65 67 69 73 74 65 72 73 20 61 72 65 20 8 registers are
8880: 73 74 6f 72 65 64 20 65 6c 73 65 77 68 65 72 65 stored elsewhere
8890: 20 69 66 20 74 68 65 79 20 61 72 65 20 66 6c 6f if they are flo
88a0: 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 2a 20 70 ating-point. * p
88b0: 61 72 61 6d 65 74 65 72 73 2e 0a 20 2a 2f 0a 23 arameters.. */.#
88c0: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f define __va_arg_
88d0: 66 6c 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 float(LIST) \.
88e0: 20 28 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 (__va_align_dou
88f0: 62 6c 65 28 4c 49 53 54 29 09 09 09 09 09 09 5c ble(LIST)......\
8900: 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 . (LIST)->aptr
8910: 20 2b 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c += sizeof(doubl
8920: 65 29 2c 09 09 09 09 09 5c 0a 20 20 20 28 2b 2b e),.....\. (++
8930: 28 4c 49 53 54 29 2d 3e 61 6e 75 6d 20 3c 3d 20 (LIST)->anum <=
8940: 38 09 09 09 09 09 09 09 5c 0a 20 20 20 20 3f 20 8.......\. ?
8950: 28 4c 49 53 54 29 2d 3e 66 61 72 67 5b 28 4c 49 (LIST)->farg[(LI
8960: 53 54 29 2d 3e 61 6e 75 6d 20 2d 20 31 5d 09 09 ST)->anum - 1]..
8970: 09 09 09 5c 0a 20 20 20 20 3a 20 2a 28 66 6c 6f ...\. : *(flo
8980: 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 at*)((LIST)->apt
8990: 72 20 2d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c r - sizeof(doubl
89a0: 65 29 29 09 09 09 09 5c 0a 20 20 29 29 0a 23 64 e))....\. )).#d
89b0: 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 64 6f 75 efine va_arg_dou
89c0: 62 6c 65 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 ble(LIST) \. (
89d0: 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c __va_align_doubl
89e0: 65 28 4c 49 53 54 29 09 09 09 09 09 09 5c 0a 20 e(LIST)......\.
89f0: 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b (LIST)->aptr +
8a00: 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 = sizeof(double)
8a10: 2c 09 09 09 09 09 5c 0a 20 20 20 28 2b 2b 28 4c ,.....\. (++(L
8a20: 49 53 54 29 2d 3e 61 6e 75 6d 20 3c 3d 20 38 09 IST)->anum <= 8.
8a30: 09 09 09 09 09 09 5c 0a 20 20 20 20 3f 20 28 4c ......\. ? (L
8a40: 49 53 54 29 2d 3e 64 61 72 67 5b 28 4c 49 53 54 IST)->darg[(LIST
8a50: 29 2d 3e 61 6e 75 6d 20 2d 20 31 5d 09 09 09 09 )->anum - 1]....
8a60: 09 5c 0a 20 20 20 20 3a 20 2a 28 64 6f 75 62 6c .\. : *(doubl
8a70: 65 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 e*)((LIST)->aptr
8a80: 20 2d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 - sizeof(double
8a90: 29 29 09 09 09 09 5c 0a 20 20 29 29 0a 23 65 6e ))....\. )).#en
8aa0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
8ab0: 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a 2f 2a 20 __sparc64__)./*
8ac0: 54 68 65 20 66 69 72 73 74 20 30 2c 2e 2e 2c 31 The first 0,..,1
8ad0: 36 20 72 65 67 69 73 74 65 72 73 20 61 72 65 20 6 registers are
8ae0: 73 74 6f 72 65 64 20 65 6c 73 65 77 68 65 72 65 stored elsewhere
8af0: 20 69 66 20 74 68 65 79 20 61 72 65 20 66 6c 6f if they are flo
8b00: 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 2a 20 70 ating-point. * p
8b10: 61 72 61 6d 65 74 65 72 73 2e 0a 20 2a 2f 0a 23 arameters.. */.#
8b20: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f define __va_arg_
8b30: 66 6c 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 float(LIST) \.
8b40: 20 28 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 (__va_align_dou
8b50: 62 6c 65 28 4c 49 53 54 29 09 09 09 09 09 09 5c ble(LIST)......\
8b60: 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 . (LIST)->aptr
8b70: 20 2b 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c += sizeof(doubl
8b80: 65 29 2c 09 09 09 09 09 5c 0a 20 20 20 28 2b 2b e),.....\. (++
8b90: 28 4c 49 53 54 29 2d 3e 61 6e 75 6d 20 3c 3d 20 (LIST)->anum <=
8ba0: 31 36 09 09 09 09 09 09 5c 0a 20 20 20 20 3f 20 16......\. ?
8bb0: 28 4c 49 53 54 29 2d 3e 66 61 72 67 5b 28 4c 49 (LIST)->farg[(LI
8bc0: 53 54 29 2d 3e 61 6e 75 6d 20 2d 20 31 5d 09 09 ST)->anum - 1]..
8bd0: 09 09 09 5c 0a 20 20 20 20 3a 20 2a 28 66 6c 6f ...\. : *(flo
8be0: 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 at*)((LIST)->apt
8bf0: 72 20 2d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c r - sizeof(doubl
8c00: 65 29 29 09 09 09 09 5c 0a 20 20 29 29 0a 23 64 e))....\. )).#d
8c10: 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 64 6f 75 efine va_arg_dou
8c20: 62 6c 65 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 ble(LIST) \. (
8c30: 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c __va_align_doubl
8c40: 65 28 4c 49 53 54 29 09 09 09 09 09 09 5c 0a 20 e(LIST)......\.
8c50: 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b (LIST)->aptr +
8c60: 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 = sizeof(double)
8c70: 2c 09 09 09 09 09 5c 0a 20 20 20 28 2b 2b 28 4c ,.....\. (++(L
8c80: 49 53 54 29 2d 3e 61 6e 75 6d 20 3c 3d 20 31 36 IST)->anum <= 16
8c90: 09 09 09 09 09 09 5c 0a 20 20 20 20 3f 20 28 4c ......\. ? (L
8ca0: 49 53 54 29 2d 3e 64 61 72 67 5b 28 4c 49 53 54 IST)->darg[(LIST
8cb0: 29 2d 3e 61 6e 75 6d 20 2d 20 31 5d 09 09 09 09 )->anum - 1]....
8cc0: 09 5c 0a 20 20 20 20 3a 20 2a 28 64 6f 75 62 6c .\. : *(doubl
8cd0: 65 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 e*)((LIST)->aptr
8ce0: 20 2d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 - sizeof(double
8cf0: 29 29 09 09 09 09 5c 0a 20 20 29 29 0a 23 65 6e ))....\. )).#en
8d00: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
8d10: 5f 5f 72 73 36 30 30 30 5f 5f 29 20 26 26 20 28 __rs6000__) && (
8d20: 64 65 66 69 6e 65 64 28 5f 41 49 58 29 20 7c 7c defined(_AIX) ||
8d30: 20 28 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 (defined(__MACH
8d40: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f __) && defined(_
8d50: 5f 41 50 50 4c 45 5f 5f 29 29 29 0a 2f 2a 20 54 _APPLE__)))./* T
8d60: 68 65 20 66 69 72 73 74 20 31 33 20 66 6c 6f 61 he first 13 floa
8d70: 74 69 6e 67 2d 70 6f 69 6e 74 20 61 72 67 73 20 ting-point args
8d80: 68 61 76 65 20 62 65 65 6e 20 73 74 6f 72 65 64 have been stored
8d90: 20 65 6c 73 65 77 68 65 72 65 2e 20 2a 2f 0a 23 elsewhere. */.#
8da0: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f define __va_arg_
8db0: 66 6c 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a 20 float(LIST) \.
8dc0: 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b ((LIST)->aptr +
8dd0: 3d 20 73 69 7a 65 6f 66 28 66 6c 6f 61 74 29 2c = sizeof(float),
8de0: 09 09 09 09 09 5c 0a 20 20 20 28 28 4c 49 53 54 .....\. ((LIST
8df0: 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 20 3c 20 )->memfargptr <
8e00: 26 28 4c 49 53 54 29 2d 3e 66 61 72 67 5b 31 33 &(LIST)->farg[13
8e10: 5d 09 09 09 09 5c 0a 20 20 20 20 3f 20 28 66 6c ]....\. ? (fl
8e20: 6f 61 74 29 20 2a 28 28 4c 49 53 54 29 2d 3e 6d oat) *((LIST)->m
8e30: 65 6d 66 61 72 67 70 74 72 2b 2b 29 09 09 09 09 emfargptr++)....
8e40: 09 5c 0a 20 20 20 20 3a 20 2a 28 66 6c 6f 61 74 .\. : *(float
8e50: 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 *)((LIST)->aptr
8e60: 2d 20 73 69 7a 65 6f 66 28 66 6c 6f 61 74 29 29 - sizeof(float))
8e70: 09 09 09 09 5c 0a 20 20 29 29 0a 23 64 65 66 69 ....\. )).#defi
8e80: 6e 65 20 76 61 5f 61 72 67 5f 64 6f 75 62 6c 65 ne va_arg_double
8e90: 28 4c 49 53 54 29 20 20 5c 0a 20 20 28 5f 5f 76 (LIST) \. (__v
8ea0: 61 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 4c a_align_double(L
8eb0: 49 53 54 29 09 09 09 09 09 09 5c 0a 20 20 20 28 IST)......\. (
8ec0: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 LIST)->aptr += s
8ed0: 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 2c 09 09 izeof(double),..
8ee0: 09 09 09 5c 0a 20 20 20 28 28 4c 49 53 54 29 2d ...\. ((LIST)-
8ef0: 3e 6d 65 6d 66 61 72 67 70 74 72 20 3c 20 26 28 >memfargptr < &(
8f00: 4c 49 53 54 29 2d 3e 66 61 72 67 5b 31 33 5d 09 LIST)->farg[13].
8f10: 09 09 09 5c 0a 20 20 20 20 3f 20 2a 28 28 4c 49 ...\. ? *((LI
8f20: 53 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 2b ST)->memfargptr+
8f30: 2b 29 09 09 09 09 09 09 5c 0a 20 20 20 20 3a 20 +)......\. :
8f40: 2a 28 64 6f 75 62 6c 65 2a 29 28 28 4c 49 53 54 *(double*)((LIST
8f50: 29 2d 3e 61 70 74 72 20 2d 20 73 69 7a 65 6f 66 )->aptr - sizeof
8f60: 28 64 6f 75 62 6c 65 29 29 09 09 09 09 5c 0a 20 (double))....\.
8f70: 20 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 )).#endif.#if d
8f80: 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 5f efined(__rs6000_
8f90: 5f 29 20 26 26 20 21 28 64 65 66 69 6e 65 64 28 _) && !(defined(
8fa0: 5f 41 49 58 29 20 7c 7c 20 28 64 65 66 69 6e 65 _AIX) || (define
8fb0: 64 28 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 20 64 d(__MACH__) && d
8fc0: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f efined(__APPLE__
8fd0: 29 29 29 0a 2f 2a 20 54 68 65 20 66 69 72 73 74 )))./* The first
8fe0: 20 38 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 8 floating-poin
8ff0: 74 20 61 72 67 73 20 68 61 76 65 20 62 65 65 6e t args have been
9000: 20 73 74 6f 72 65 64 20 65 6c 73 65 77 68 65 72 stored elsewher
9010: 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f e. */.#define __
9020: 76 61 5f 61 72 67 5f 66 6c 6f 61 74 28 4c 49 53 va_arg_float(LIS
9030: 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 2d T) \. ((LIST)-
9040: 3e 6d 65 6d 66 61 72 67 70 74 72 20 3c 20 26 28 >memfargptr < &(
9050: 4c 49 53 54 29 2d 3e 66 61 72 67 5b 38 5d 09 09 LIST)->farg[8]..
9060: 09 09 5c 0a 20 20 20 3f 20 28 66 6c 6f 61 74 29 ..\. ? (float)
9070: 20 2a 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 *((LIST)->memfa
9080: 72 67 70 74 72 2b 2b 29 09 09 09 09 09 5c 0a 20 rgptr++).....\.
9090: 20 20 3a 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 : ((LIST)->apt
90a0: 72 20 3d 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 r = ((LIST)->ons
90b0: 74 61 63 6b 20 3d 3d 20 30 20 20 20 20 20 20 20 tack == 0
90c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90d0: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 20 \.
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90f0: 3f 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 ? ((LIST)->onsta
9100: 63 6b 3d 31 2c 20 28 4c 49 53 54 29 2d 3e 73 61 ck=1, (LIST)->sa
9110: 70 74 72 29 20 20 20 20 20 20 20 20 20 20 20 20 ptr)
9120: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
9130: 20 20 20 20 20 20 20 20 20 20 3a 20 28 4c 49 53 : (LIS
9140: 54 29 2d 3e 61 70 74 72 20 20 20 20 20 20 20 20 T)->aptr
9150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9160: 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 \.
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9180: 20 20 20 29 2c 20 20 20 20 20 20 20 20 20 20 20 ),
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
91b0: 20 20 20 20 20 5c 0a 20 20 20 20 20 20 28 4c 49 \. (LI
91c0: 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 69 7a ST)->aptr += siz
91d0: 65 6f 66 28 66 6c 6f 61 74 29 2c 09 09 09 09 09 eof(float),.....
91e0: 5c 0a 20 20 20 20 20 20 2a 28 66 6c 6f 61 74 2a \. *(float*
91f0: 29 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d )((LIST)->aptr -
9200: 20 73 69 7a 65 6f 66 28 66 6c 6f 61 74 29 29 09 sizeof(float)).
9210: 09 09 09 5c 0a 20 20 29 29 0a 23 64 65 66 69 6e ...\. )).#defin
9220: 65 20 76 61 5f 61 72 67 5f 64 6f 75 62 6c 65 28 e va_arg_double(
9230: 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 LIST) \. ((LIS
9240: 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 20 3c T)->memfargptr <
9250: 20 26 28 4c 49 53 54 29 2d 3e 66 61 72 67 5b 38 &(LIST)->farg[8
9260: 5d 09 09 09 09 5c 0a 20 20 20 20 3f 20 2a 28 28 ]....\. ? *((
9270: 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 LIST)->memfargpt
9280: 72 2b 2b 29 09 09 09 09 09 09 5c 0a 20 20 20 20 r++)......\.
9290: 3a 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 : ((LIST)->aptr
92a0: 3d 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 = ((LIST)->onsta
92b0: 63 6b 20 3d 3d 20 30 20 20 20 20 20 20 20 20 20 ck == 0
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
92d0: 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20 20 20 \.
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3f 20 28 ? (
92f0: 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b 3d (LIST)->onstack=
9300: 31 2c 20 28 4c 49 53 54 29 2d 3e 73 61 70 74 72 1, (LIST)->saptr
9310: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a ) \.
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9330: 20 20 20 20 20 20 20 3a 20 28 4c 49 53 54 29 2d : (LIST)-
9340: 3e 61 70 74 72 20 20 20 20 20 20 20 20 20 20 20 >aptr
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9360: 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 \.
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9380: 29 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ),
9390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93b0: 20 20 5c 0a 20 20 20 20 20 20 20 5f 5f 76 61 5f \. __va_
93c0: 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 align_double(LIS
93d0: 54 29 09 09 09 09 09 09 5c 0a 20 20 20 20 20 20 T)......\.
93e0: 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d (LIST)->aptr +=
93f0: 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 2c sizeof(double),
9400: 09 09 09 09 09 5c 0a 20 20 20 20 20 20 20 2a 28 .....\. *(
9410: 64 6f 75 62 6c 65 2a 29 28 28 4c 49 53 54 29 2d double*)((LIST)-
9420: 3e 61 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 64 >aptr - sizeof(d
9430: 6f 75 62 6c 65 29 29 09 09 09 5c 0a 20 20 29 29 ouble))...\. ))
9440: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 .#endif.#if defi
9450: 6e 65 64 28 5f 5f 73 33 39 30 5f 5f 29 0a 2f 2a ned(__s390__)./*
9460: 20 54 68 65 20 66 69 72 73 74 20 32 20 66 6c 6f The first 2 flo
9470: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 61 72 67 73 ating-point args
9480: 20 68 61 76 65 20 62 65 65 6e 20 73 74 6f 72 65 have been store
9490: 64 20 65 6c 73 65 77 68 65 72 65 2e 20 2a 2f 0a d elsewhere. */.
94a0: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 #define __va_arg
94b0: 5f 66 6c 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a _float(LIST) \.
94c0: 20 20 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 ((LIST)->memfa
94d0: 72 67 70 74 72 20 3c 20 26 28 4c 49 53 54 29 2d rgptr < &(LIST)-
94e0: 3e 66 61 72 67 5b 32 5d 09 09 09 09 5c 0a 20 20 >farg[2]....\.
94f0: 20 3f 20 28 4c 49 53 54 29 2d 3e 6d 65 6d 64 61 ? (LIST)->memda
9500: 72 67 70 74 72 2b 2b 2c 20 28 66 6c 6f 61 74 29 rgptr++, (float)
9510: 20 2a 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 *((LIST)->memfa
9520: 72 67 70 74 72 2b 2b 29 09 09 5c 0a 20 20 20 3a rgptr++)..\. :
9530: 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3d ((LIST)->aptr =
9540: 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 ((LIST)->onstac
9550: 6b 20 3d 3d 20 30 20 20 20 20 20 20 20 20 20 20 k == 0
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9570: 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20 20 20 \.
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 3f 20 28 ? (
9590: 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b 3d (LIST)->onstack=
95a0: 31 2c 20 28 4c 49 53 54 29 2d 3e 73 61 70 74 72 1, (LIST)->saptr
95b0: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a ) \.
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95d0: 20 20 20 20 20 20 20 3a 20 28 4c 49 53 54 29 2d : (LIST)-
95e0: 3e 61 70 74 72 20 20 20 20 20 20 20 20 20 20 20 >aptr
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9600: 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 \.
9610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9620: 29 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ),
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9650: 20 20 5c 0a 20 20 20 20 20 20 28 4c 49 53 54 29 \. (LIST)
9660: 2d 3e 61 70 74 72 20 2b 3d 20 73 69 7a 65 6f 66 ->aptr += sizeof
9670: 28 66 6c 6f 61 74 29 2c 09 09 09 09 09 5c 0a 20 (float),.....\.
9680: 20 20 20 20 20 2a 28 66 6c 6f 61 74 2a 29 28 28 *(float*)((
9690: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 73 69 LIST)->aptr - si
96a0: 7a 65 6f 66 28 66 6c 6f 61 74 29 29 09 09 09 09 zeof(float))....
96b0: 5c 0a 20 20 29 29 0a 23 64 65 66 69 6e 65 20 76 \. )).#define v
96c0: 61 5f 61 72 67 5f 64 6f 75 62 6c 65 28 4c 49 53 a_arg_double(LIS
96d0: 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 54 29 2d T) \. ((LIST)-
96e0: 3e 6d 65 6d 64 61 72 67 70 74 72 20 3c 20 26 28 >memdargptr < &(
96f0: 4c 49 53 54 29 2d 3e 64 61 72 67 5b 32 5d 09 09 LIST)->darg[2]..
9700: 09 09 5c 0a 20 20 20 20 3f 20 28 4c 49 53 54 29 ..\. ? (LIST)
9710: 2d 3e 6d 65 6d 66 61 72 67 70 74 72 2b 2b 2c 20 ->memfargptr++,
9720: 2a 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 64 61 72 *((LIST)->memdar
9730: 67 70 74 72 2b 2b 29 09 09 09 5c 0a 20 20 20 20 gptr++)...\.
9740: 3a 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 : ((LIST)->aptr
9750: 3d 20 28 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 = ((LIST)->onsta
9760: 63 6b 20 3d 3d 20 30 20 20 20 20 20 20 20 20 20 ck == 0
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9780: 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20 20 20 \.
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 3f 20 28 ? (
97a0: 28 4c 49 53 54 29 2d 3e 6f 6e 73 74 61 63 6b 3d (LIST)->onstack=
97b0: 31 2c 20 28 4c 49 53 54 29 2d 3e 73 61 70 74 72 1, (LIST)->saptr
97c0: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a ) \.
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
97e0: 20 20 20 20 20 20 20 3a 20 28 4c 49 53 54 29 2d : (LIST)-
97f0: 3e 61 70 74 72 20 20 20 20 20 20 20 20 20 20 20 >aptr
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9810: 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 \.
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9830: 29 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ),
9840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9860: 20 20 5c 0a 20 20 20 20 20 20 20 5f 5f 76 61 5f \. __va_
9870: 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 53 align_double(LIS
9880: 54 29 09 09 09 09 09 09 5c 0a 20 20 20 20 20 20 T)......\.
9890: 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d (LIST)->aptr +=
98a0: 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 29 2c sizeof(double),
98b0: 09 09 09 09 09 5c 0a 20 20 20 20 20 20 20 2a 28 .....\. *(
98c0: 64 6f 75 62 6c 65 2a 29 28 28 4c 49 53 54 29 2d double*)((LIST)-
98d0: 3e 61 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 64 >aptr - sizeof(d
98e0: 6f 75 62 6c 65 29 29 09 09 09 5c 0a 20 20 29 29 ouble))...\. ))
98f0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 .#endif.#if defi
9900: 6e 65 64 28 5f 5f 69 61 36 34 5f 5f 29 0a 2f 2a ned(__ia64__)./*
9910: 20 54 68 65 20 66 69 72 73 74 20 38 20 66 6c 6f The first 8 flo
9920: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 61 72 67 73 ating-point args
9930: 20 68 61 76 65 20 62 65 65 6e 20 73 74 6f 72 65 have been store
9940: 64 20 65 6c 73 65 77 68 65 72 65 2e 20 2a 2f 0a d elsewhere. */.
9950: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 #define __va_arg
9960: 5f 66 6c 6f 61 74 28 4c 49 53 54 29 20 20 5c 0a _float(LIST) \.
9970: 20 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 ((LIST)->aptr
9980: 2b 3d 20 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f += sizeof(__vawo
9990: 72 64 29 2c 09 09 09 09 09 5c 0a 20 20 20 28 28 rd),.....\. ((
99a0: 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 LIST)->memfargpt
99b0: 72 20 3c 20 26 28 4c 49 53 54 29 2d 3e 66 61 72 r < &(LIST)->far
99c0: 67 5b 38 5d 09 09 09 09 5c 0a 20 20 20 20 3f 20 g[8]....\. ?
99d0: 28 66 6c 6f 61 74 29 20 2a 28 28 4c 49 53 54 29 (float) *((LIST)
99e0: 2d 3e 6d 65 6d 66 61 72 67 70 74 72 2b 2b 29 09 ->memfargptr++).
99f0: 09 09 09 09 5c 0a 20 20 20 20 3a 20 2a 28 66 6c ....\. : *(fl
9a00: 6f 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e 61 70 oat*)((LIST)->ap
9a10: 74 72 20 2d 20 73 69 7a 65 6f 66 28 5f 5f 76 61 tr - sizeof(__va
9a20: 77 6f 72 64 29 29 09 09 09 5c 0a 20 20 29 29 0a word))...\. )).
9a30: 23 64 65 66 69 6e 65 20 76 61 5f 61 72 67 5f 64 #define va_arg_d
9a40: 6f 75 62 6c 65 28 4c 49 53 54 29 20 20 5c 0a 20 ouble(LIST) \.
9a50: 20 28 5f 5f 76 61 5f 61 6c 69 67 6e 5f 64 6f 75 (__va_align_dou
9a60: 62 6c 65 28 4c 49 53 54 29 09 09 09 09 09 09 5c ble(LIST)......\
9a70: 0a 20 20 20 28 4c 49 53 54 29 2d 3e 61 70 74 72 . (LIST)->aptr
9a80: 20 2b 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c += sizeof(doubl
9a90: 65 29 2c 09 09 09 09 09 5c 0a 20 20 20 28 28 4c e),.....\. ((L
9aa0: 49 53 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 IST)->memfargptr
9ab0: 20 3c 20 26 28 4c 49 53 54 29 2d 3e 66 61 72 67 < &(LIST)->farg
9ac0: 5b 38 5d 09 09 09 09 5c 0a 20 20 20 20 3f 20 2a [8]....\. ? *
9ad0: 28 28 4c 49 53 54 29 2d 3e 6d 65 6d 66 61 72 67 ((LIST)->memfarg
9ae0: 70 74 72 2b 2b 29 09 09 09 09 09 09 5c 0a 20 20 ptr++)......\.
9af0: 20 20 3a 20 2a 28 64 6f 75 62 6c 65 2a 29 28 28 : *(double*)((
9b00: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 73 69 LIST)->aptr - si
9b10: 7a 65 6f 66 28 64 6f 75 62 6c 65 29 29 09 09 09 zeof(double))...
9b20: 09 5c 0a 20 20 29 29 0a 23 65 6e 64 69 66 0a 23 .\. )).#endif.#
9b30: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 if defined(__x86
9b40: 5f 36 34 5f 5f 29 0a 2f 2a 20 54 68 65 20 66 69 _64__)./* The fi
9b50: 72 73 74 20 38 20 66 6c 6f 61 74 69 6e 67 2d 70 rst 8 floating-p
9b60: 6f 69 6e 74 20 61 72 67 73 20 68 61 76 65 20 62 oint args have b
9b70: 65 65 6e 20 73 74 6f 72 65 64 20 65 6c 73 65 77 een stored elsew
9b80: 68 65 72 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 here. */.#define
9b90: 20 5f 5f 76 61 5f 61 72 67 5f 66 6c 6f 61 74 28 __va_arg_float(
9ba0: 4c 49 53 54 29 20 20 5c 0a 20 20 28 28 4c 49 53 LIST) \. ((LIS
9bb0: 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 20 3c T)->memfargptr <
9bc0: 20 26 28 4c 49 53 54 29 2d 3e 66 61 72 67 5b 38 &(LIST)->farg[8
9bd0: 5d 09 09 09 09 5c 0a 20 20 20 3f 20 28 28 4c 49 ]....\. ? ((LI
9be0: 53 54 29 2d 3e 6d 65 6d 66 61 72 67 70 74 72 2b ST)->memfargptr+
9bf0: 2b 2c 09 09 09 09 09 09 5c 0a 20 20 20 20 20 20 +,......\.
9c00: 2a 28 66 6c 6f 61 74 2a 29 28 28 4c 49 53 54 29 *(float*)((LIST)
9c10: 2d 3e 6d 65 6d 66 61 72 67 70 74 72 20 2d 20 31 ->memfargptr - 1
9c20: 29 09 09 09 09 09 5c 0a 20 20 20 20 20 29 09 09 ).....\. )..
9c30: 09 09 09 09 09 09 09 5c 0a 20 20 20 3a 20 28 28 .......\. : ((
9c40: 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 73 LIST)->aptr += s
9c50: 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 2c izeof(__vaword),
9c60: 09 09 09 09 09 5c 0a 20 20 20 20 20 20 2a 28 66 .....\. *(f
9c70: 6c 6f 61 74 2a 29 28 28 4c 49 53 54 29 2d 3e 61 loat*)((LIST)->a
9c80: 70 74 72 20 2d 20 73 69 7a 65 6f 66 28 5f 5f 76 ptr - sizeof(__v
9c90: 61 77 6f 72 64 29 29 09 09 09 5c 0a 20 20 29 20 aword))...\. )
9ca0: 20 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 61 72 ).#define va_ar
9cb0: 67 5f 64 6f 75 62 6c 65 28 4c 49 53 54 29 20 20 g_double(LIST)
9cc0: 5c 0a 20 20 28 28 4c 49 53 54 29 2d 3e 6d 65 6d \. ((LIST)->mem
9cd0: 66 61 72 67 70 74 72 20 3c 20 26 28 4c 49 53 54 fargptr < &(LIST
9ce0: 29 2d 3e 66 61 72 67 5b 38 5d 09 09 09 09 5c 0a )->farg[8]....\.
9cf0: 20 20 20 3f 20 2a 28 4c 49 53 54 29 2d 3e 6d 65 ? *(LIST)->me
9d00: 6d 66 61 72 67 70 74 72 2b 2b 09 09 09 09 09 09 mfargptr++......
9d10: 5c 0a 20 20 20 3a 20 28 28 4c 49 53 54 29 2d 3e \. : ((LIST)->
9d20: 61 70 74 72 20 2b 3d 20 73 69 7a 65 6f 66 28 5f aptr += sizeof(_
9d30: 5f 76 61 77 6f 72 64 29 2c 09 09 09 09 09 5c 0a _vaword),.....\.
9d40: 20 20 20 20 20 20 2a 28 64 6f 75 62 6c 65 2a 29 *(double*)
9d50: 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2d 20 ((LIST)->aptr -
9d60: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
9d70: 29 09 09 09 5c 0a 20 20 29 20 20 29 0a 23 65 6e )...\. ) ).#en
9d80: 64 69 66 0a 23 69 66 6e 64 65 66 20 5f 5f 76 61 dif.#ifndef __va
9d90: 5f 61 72 67 5f 66 6c 6f 61 74 0a 23 64 65 66 69 _arg_float.#defi
9da0: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 66 6c 6f 61 ne __va_arg_floa
9db0: 74 28 4c 49 53 54 29 09 5f 5f 76 61 5f 61 72 67 t(LIST).__va_arg
9dc0: 28 4c 49 53 54 2c 66 6c 6f 61 74 29 0a 23 65 6e (LIST,float).#en
9dd0: 64 69 66 0a 23 69 66 6e 64 65 66 20 76 61 5f 61 dif.#ifndef va_a
9de0: 72 67 5f 64 6f 75 62 6c 65 0a 23 64 65 66 69 6e rg_double.#defin
9df0: 65 20 76 61 5f 61 72 67 5f 64 6f 75 62 6c 65 28 e va_arg_double(
9e00: 4c 49 53 54 29 20 20 5c 0a 20 20 28 5f 5f 76 61 LIST) \. (__va
9e10: 5f 61 6c 69 67 6e 5f 64 6f 75 62 6c 65 28 4c 49 _align_double(LI
9e20: 53 54 29 20 5f 5f 76 61 5f 61 72 67 28 4c 49 53 ST) __va_arg(LIS
9e30: 54 2c 64 6f 75 62 6c 65 29 29 0a 23 65 6e 64 69 T,double)).#endi
9e40: 66 0a 0a 2f 2a 20 50 6f 69 6e 74 65 72 20 61 72 f../* Pointer ar
9e50: 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 23 64 65 66 guments. */.#def
9e60: 69 6e 65 20 76 61 5f 61 72 67 5f 70 74 72 28 4c ine va_arg_ptr(L
9e70: 49 53 54 2c 54 59 50 45 29 09 5f 5f 76 61 5f 61 IST,TYPE).__va_a
9e80: 72 67 28 4c 49 53 54 2c 54 59 50 45 29 0a 0a 2f rg(LIST,TYPE)../
9e90: 2a 20 53 74 72 75 63 74 75 72 65 20 61 72 67 75 * Structure argu
9ea0: 6d 65 6e 74 73 2e 20 2a 2f 0a 23 64 65 66 69 6e ments. */.#defin
9eb0: 65 20 76 61 5f 61 72 67 5f 73 74 72 75 63 74 28 e va_arg_struct(
9ec0: 4c 49 53 54 2c 54 59 50 45 29 20 20 5c 0a 20 20 LIST,TYPE) \.
9ed0: 2a 28 54 59 50 45 2a 29 5f 5f 76 61 5f 61 72 67 *(TYPE*)__va_arg
9ee0: 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 73 69 7a _struct(LIST,siz
9ef0: 65 6f 66 28 54 59 50 45 29 2c 5f 5f 56 41 5f 61 eof(TYPE),__VA_a
9f00: 6c 69 67 6e 6f 66 28 54 59 50 45 29 29 0a 2f 2a lignof(TYPE))./*
9f10: 20 5f 76 61 5f 61 72 67 5f 73 74 72 75 63 74 28 _va_arg_struct(
9f20: 29 20 69 73 20 6c 69 6b 65 20 76 61 5f 61 72 67 ) is like va_arg
9f30: 5f 73 74 72 75 63 74 28 29 2c 20 65 78 63 65 70 _struct(), excep
9f40: 74 20 74 68 61 74 20 79 6f 75 20 70 61 73 73 20 t that you pass
9f50: 74 68 65 20 74 79 70 65 27 73 0a 20 2a 20 73 69 the type's. * si
9f60: 7a 65 20 61 6e 64 20 61 6c 69 67 6e 6d 65 6e 74 ze and alignment
9f70: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 instead of the
9f80: 74 79 70 65 20 61 6e 64 20 67 65 74 20 74 68 65 type and get the
9f90: 20 76 61 6c 75 65 27 73 20 61 64 64 72 65 73 73 value's address
9fa0: 20 69 6e 73 74 65 61 64 0a 20 2a 20 6f 66 20 74 instead. * of t
9fb0: 68 65 20 76 61 6c 75 65 20 69 74 73 65 6c 66 2e he value itself.
9fc0: 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 76 61 . */.#define _va
9fd0: 5f 61 72 67 5f 73 74 72 75 63 74 28 4c 49 53 54 _arg_struct(LIST
9fe0: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
9ff0: 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 76 6f 69 ALIGN) \. (voi
a000: 64 2a 29 5f 5f 76 61 5f 61 72 67 5f 73 74 72 75 d*)__va_arg_stru
a010: 63 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a ct(LIST,TYPE_SIZ
a020: 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 0a 2f 2a E,TYPE_ALIGN)./*
a030: 20 53 74 72 75 63 74 75 72 65 20 61 72 67 75 6d Structure argum
a040: 65 6e 74 20 61 6c 69 67 6e 6d 65 6e 74 2e 20 2a ent alignment. *
a050: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f /.#if defined(__
a060: 69 33 38 36 5f 5f 29 20 26 26 20 64 65 66 69 6e i386__) && defin
a070: 65 64 28 5f 4d 53 43 5f 56 45 52 29 0a 2f 2a 20 ed(_MSC_VER)./*
a080: 49 6e 20 4d 53 56 43 2c 20 64 6f 75 62 6c 65 73 In MSVC, doubles
a090: 20 69 6e 73 69 64 65 20 73 74 72 75 63 74 75 72 inside structur
a0a0: 65 73 20 68 61 76 65 20 61 6c 69 67 6e 6d 65 6e es have alignmen
a0b0: 74 20 38 2c 20 69 2e 65 2e 0a 20 2a 20 5f 5f 56 t 8, i.e.. * __V
a0c0: 41 5f 61 6c 69 67 6e 6f 66 28 64 6f 75 62 6c 65 A_alignof(double
a0d0: 29 20 3d 20 38 2c 20 62 75 74 20 64 6f 75 62 6c ) = 8, but doubl
a0e0: 65 73 20 28 61 6e 64 20 61 6c 73 6f 20 73 74 72 es (and also str
a0f0: 75 63 74 75 72 65 73 20 63 6f 6e 74 61 69 6e 69 uctures containi
a100: 6e 67 0a 20 2a 20 64 6f 75 62 6c 65 73 29 20 61 ng. * doubles) a
a110: 72 65 20 70 61 73 73 65 64 20 6f 6e 20 74 68 65 re passed on the
a120: 20 73 74 61 63 6b 20 77 69 74 68 20 61 6c 69 67 stack with alig
a130: 6e 6d 65 6e 74 20 34 2e 20 4c 6f 6f 6b 73 20 72 nment 4. Looks r
a140: 65 61 6c 6c 79 20 77 65 69 72 64 2e 0a 20 2a 2f eally weird.. */
a150: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 73 74 .#define __va_st
a160: 72 75 63 74 5f 61 6c 69 67 6e 6d 65 6e 74 28 54 ruct_alignment(T
a170: 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 YPE_ALIGN) \.
a180: 28 28 54 59 50 45 5f 41 4c 49 47 4e 29 20 3c 3d ((TYPE_ALIGN) <=
a190: 20 34 20 3f 20 28 54 59 50 45 5f 41 4c 49 47 4e 4 ? (TYPE_ALIGN
a1a0: 29 20 3a 20 34 29 0a 23 65 6c 73 65 0a 23 64 65 ) : 4).#else.#de
a1b0: 66 69 6e 65 20 5f 5f 76 61 5f 73 74 72 75 63 74 fine __va_struct
a1c0: 5f 61 6c 69 67 6e 6d 65 6e 74 28 54 59 50 45 5f _alignment(TYPE_
a1d0: 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 54 59 50 ALIGN) \. (TYP
a1e0: 45 5f 41 4c 49 47 4e 29 0a 23 65 6e 64 69 66 0a E_ALIGN).#endif.
a1f0: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 6c 69 #define __va_ali
a200: 67 6e 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 gn_struct(LIST,T
a210: 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c YPE_SIZE,TYPE_AL
a220: 49 47 4e 29 20 20 5c 0a 20 20 28 4c 49 53 54 29 IGN) \. (LIST)
a230: 2d 3e 61 70 74 72 20 3d 20 28 28 4c 49 53 54 29 ->aptr = ((LIST)
a240: 2d 3e 61 70 74 72 20 2b 20 5f 5f 76 61 5f 73 74 ->aptr + __va_st
a250: 72 75 63 74 5f 61 6c 69 67 6e 6d 65 6e 74 28 54 ruct_alignment(T
a260: 59 50 45 5f 41 4c 49 47 4e 29 2d 31 29 20 26 20 YPE_ALIGN)-1) &
a270: 2d 28 6c 6f 6e 67 29 5f 5f 76 61 5f 73 74 72 75 -(long)__va_stru
a280: 63 74 5f 61 6c 69 67 6e 6d 65 6e 74 28 54 59 50 ct_alignment(TYP
a290: 45 5f 41 4c 49 47 4e 29 2c 0a 23 69 66 20 64 65 E_ALIGN),.#if de
a2a0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 fined(__i386__)
a2b0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 36 38 || defined(__m68
a2c0: 6b 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 k__) || defined(
a2d0: 5f 5f 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 __alpha__) || de
a2e0: 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 7c fined(__arm__) |
a2f0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 38 38 6b | defined(__m88k
a300: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
a310: 5f 63 6f 6e 76 65 78 5f 5f 29 20 7c 7c 20 64 65 _convex__) || de
a320: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f fined(__x86_64__
a330: 29 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 ).#define __va_a
a340: 72 67 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 rg_struct(LIST,T
a350: 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c YPE_SIZE,TYPE_AL
a360: 49 47 4e 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f IGN) \. (__va_
a370: 61 6c 69 67 6e 5f 73 74 72 75 63 74 28 4c 49 53 align_struct(LIS
a380: 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 T,TYPE_SIZE,TYPE
a390: 5f 41 4c 49 47 4e 29 09 09 09 09 5c 0a 20 20 20 _ALIGN)....\.
a3a0: 5f 5f 76 61 5f 61 72 67 5f 61 64 6a 75 73 74 65 __va_arg_adjuste
a3b0: 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 d(LIST,TYPE_SIZE
a3c0: 2c 54 59 50 45 5f 41 4c 49 47 4e 29 09 09 09 09 ,TYPE_ALIGN)....
a3d0: 5c 0a 20 20 29 0a 23 65 6e 64 69 66 0a 23 69 66 \. ).#endif.#if
a3e0: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 5f defined(__mips_
a3f0: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f _) && !defined(_
a400: 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a 2f 2a 20 73 _mipsn32__)./* s
a410: 6d 61 6c 6c 20 73 74 72 75 63 74 75 72 65 73 20 mall structures
a420: 3c 20 31 20 77 6f 72 64 20 61 72 65 20 61 64 6a < 1 word are adj
a430: 75 73 74 65 64 20 64 65 70 65 6e 64 69 6e 67 20 usted depending
a440: 6f 6e 20 63 6f 6d 70 69 6c 65 72 20 2a 2f 0a 23 on compiler */.#
a450: 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f define __va_arg_
a460: 73 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 45 struct(LIST,TYPE
a470: 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e _SIZE,TYPE_ALIGN
a480: 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 61 6c 69 ) \. (__va_ali
a490: 67 6e 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 gn_struct(LIST,T
a4a0: 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c YPE_SIZE,TYPE_AL
a4b0: 49 47 4e 29 09 09 09 09 5c 0a 20 20 20 28 28 4c IGN)....\. ((L
a4c0: 49 53 54 29 2d 3e 66 6c 61 67 73 20 26 20 5f 5f IST)->flags & __
a4d0: 56 41 5f 53 47 49 43 43 5f 53 54 52 55 43 54 5f VA_SGICC_STRUCT_
a4e0: 41 52 47 53 09 09 09 09 5c 0a 20 20 20 20 3f 20 ARGS....\. ?
a4f0: 2f 2a 20 53 47 49 20 4d 49 50 53 20 63 63 20 70 /* SGI MIPS cc p
a500: 61 73 73 65 73 20 73 6d 61 6c 6c 20 73 74 72 75 asses small stru
a510: 63 74 75 72 65 73 20 6c 65 66 74 2d 61 64 6a 75 ctures left-adju
a520: 73 74 65 64 2c 20 61 6c 74 68 6f 75 67 68 20 62 sted, although b
a530: 69 67 2d 65 6e 64 69 61 6e 21 20 2a 2f 5c 0a 20 ig-endian! */\.
a540: 20 20 20 20 20 5f 5f 76 61 5f 61 72 67 5f 6c 65 __va_arg_le
a550: 66 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c ftadjusted(LIST,
a560: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 TYPE_SIZE,TYPE_A
a570: 4c 49 47 4e 29 09 09 09 5c 0a 20 20 20 20 3a 20 LIGN)...\. :
a580: 2f 2a 20 53 47 49 20 4d 49 50 53 20 67 63 63 20 /* SGI MIPS gcc
a590: 70 61 73 73 65 73 20 73 6d 61 6c 6c 20 73 74 72 passes small str
a5a0: 75 63 74 75 72 65 73 20 77 69 74 68 69 6e 20 74 uctures within t
a5b0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 77 6f he first four wo
a5c0: 72 64 73 20 6c 65 66 74 2d 09 20 20 20 5c 0a 20 rds left-. \.
a5d0: 20 20 20 20 20 20 2a 20 61 64 6a 75 73 74 65 64 * adjusted
a5e0: 2c 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c , for compatibil
a5f0: 69 74 79 20 77 69 74 68 20 63 63 2e 20 42 75 74 ity with cc. But
a600: 20 73 74 72 75 63 74 75 72 65 73 20 69 6e 20 6d structures in m
a610: 65 6d 6f 72 79 20 61 72 65 20 70 61 73 73 65 64 emory are passed
a620: 20 20 5c 0a 20 20 20 20 20 20 20 2a 20 72 69 67 \. * rig
a630: 68 74 2d 61 64 6a 75 73 74 65 64 21 21 20 53 65 ht-adjusted!! Se
a640: 65 20 67 63 63 2d 32 2e 36 2e 33 2f 63 6f 6e 66 e gcc-2.6.3/conf
a650: 69 67 2f 6d 69 70 73 2f 6d 69 70 73 2e 63 3a 66 ig/mips/mips.c:f
a660: 75 6e 63 74 69 6f 6e 5f 61 72 67 28 29 2e 09 20 unction_arg()..
a670: 20 20 5c 0a 20 20 20 20 20 20 20 2a 2f 09 09 09 \. */...
a680: 09 09 09 09 09 09 20 20 20 5c 0a 20 20 20 20 20 ...... \.
a690: 20 28 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 3c ((LIST)->aptr <
a6a0: 20 28 4c 49 53 54 29 2d 3e 6d 65 6d 61 72 67 70 (LIST)->memargp
a6b0: 74 72 09 09 09 09 09 5c 0a 20 20 20 20 20 20 20 tr.....\.
a6c0: 3f 20 5f 5f 76 61 5f 61 72 67 5f 6c 65 66 74 61 ? __va_arg_lefta
a6d0: 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 djusted(LIST,TYP
a6e0: 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 E_SIZE,TYPE_ALIG
a6f0: 4e 29 09 09 5c 0a 20 20 20 20 20 20 20 3a 20 5f N)..\. : _
a700: 5f 76 61 5f 61 72 67 5f 72 69 67 68 74 61 64 6a _va_arg_rightadj
a710: 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f usted(LIST,TYPE_
a720: 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 SIZE,TYPE_ALIGN)
a730: 09 09 5c 0a 20 20 29 29 20 20 29 0a 23 65 6e 64 ..\. )) ).#end
a740: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f if.#if defined(_
a750: 5f 6d 69 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 _mipsn32__) || d
a760: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f efined(__mips64_
a770: 5f 29 0a 2f 2a 20 73 6d 61 6c 6c 20 73 74 72 75 _)./* small stru
a780: 63 74 75 72 65 73 20 3c 20 31 20 77 6f 72 64 20 ctures < 1 word
a790: 61 72 65 20 61 64 6a 75 73 74 65 64 20 64 65 70 are adjusted dep
a7a0: 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c ending on compil
a7b0: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f er */.#define __
a7c0: 76 61 5f 61 72 67 5f 73 74 72 75 63 74 28 4c 49 va_arg_struct(LI
a7d0: 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 ST,TYPE_SIZE,TYP
a7e0: 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 5f E_ALIGN) \. (_
a7f0: 5f 76 61 5f 61 6c 69 67 6e 5f 73 74 72 75 63 74 _va_align_struct
a800: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
a810: 54 59 50 45 5f 41 4c 49 47 4e 29 09 09 09 09 5c TYPE_ALIGN)....\
a820: 0a 20 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c 61 . ((LIST)->fla
a830: 67 73 20 26 20 5f 5f 56 41 5f 53 47 49 43 43 5f gs & __VA_SGICC_
a840: 53 54 52 55 43 54 5f 41 52 47 53 09 09 09 09 5c STRUCT_ARGS....\
a850: 0a 20 20 20 20 3f 20 2f 2a 20 53 47 49 20 4d 49 . ? /* SGI MI
a860: 50 53 20 63 63 20 70 61 73 73 65 73 20 73 6d 61 PS cc passes sma
a870: 6c 6c 20 73 74 72 75 63 74 75 72 65 73 20 6c 65 ll structures le
a880: 66 74 2d 61 64 6a 75 73 74 65 64 2c 20 61 6c 74 ft-adjusted, alt
a890: 68 6f 75 67 68 20 62 69 67 2d 65 6e 64 69 61 6e hough big-endian
a8a0: 21 20 2a 2f 5c 0a 20 20 20 20 20 20 5f 5f 76 61 ! */\. __va
a8b0: 5f 61 72 67 5f 6c 65 66 74 61 64 6a 75 73 74 65 _arg_leftadjuste
a8c0: 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 d(LIST,TYPE_SIZE
a8d0: 2c 54 59 50 45 5f 41 4c 49 47 4e 29 09 09 09 5c ,TYPE_ALIGN)...\
a8e0: 0a 20 20 20 20 3a 20 2f 2a 20 53 47 49 20 4d 49 . : /* SGI MI
a8f0: 50 53 20 67 63 63 20 70 61 73 73 65 73 20 73 6d PS gcc passes sm
a900: 61 6c 6c 20 73 74 72 75 63 74 75 72 65 73 20 72 all structures r
a910: 69 67 68 74 2d 61 64 6a 75 73 74 65 64 2e 20 2a ight-adjusted. *
a920: 2f 09 5c 0a 20 20 20 20 20 20 5f 5f 76 61 5f 61 /.\. __va_a
a930: 72 67 5f 72 69 67 68 74 61 64 6a 75 73 74 65 64 rg_rightadjusted
a940: 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c (LIST,TYPE_SIZE,
a950: 54 59 50 45 5f 41 4c 49 47 4e 29 09 09 09 5c 0a TYPE_ALIGN)...\.
a960: 20 20 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 )).#endif.#if
a970: 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 30 30 defined(__rs6000
a980: 5f 5f 29 20 26 26 20 28 64 65 66 69 6e 65 64 28 __) && (defined(
a990: 5f 41 49 58 29 20 7c 7c 20 28 64 65 66 69 6e 65 _AIX) || (define
a9a0: 64 28 5f 5f 4d 41 43 48 5f 5f 29 20 26 26 20 64 d(__MACH__) && d
a9b0: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f efined(__APPLE__
a9c0: 29 29 29 0a 2f 2a 20 73 6d 61 6c 6c 20 73 74 72 )))./* small str
a9d0: 75 63 74 75 72 65 73 20 3c 20 31 20 77 6f 72 64 uctures < 1 word
a9e0: 20 61 72 65 20 61 64 6a 75 73 74 65 64 20 64 65 are adjusted de
a9f0: 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 pending on compi
aa00: 6c 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f ler */.#define _
aa10: 5f 76 61 5f 61 72 67 5f 73 74 72 75 63 74 28 4c _va_arg_struct(L
aa20: 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 IST,TYPE_SIZE,TY
aa30: 50 45 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 28 PE_ALIGN) \. (
aa40: 5f 5f 76 61 5f 61 6c 69 67 6e 5f 73 74 72 75 63 __va_align_struc
aa50: 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a 45 t(LIST,TYPE_SIZE
aa60: 2c 54 59 50 45 5f 41 4c 49 47 4e 29 09 09 09 09 ,TYPE_ALIGN)....
aa70: 5c 0a 20 20 20 28 28 4c 49 53 54 29 2d 3e 66 6c \. ((LIST)->fl
aa80: 61 67 73 20 26 20 5f 5f 56 41 5f 41 49 58 43 43 ags & __VA_AIXCC
aa90: 5f 53 54 52 55 43 54 5f 41 52 47 53 09 09 09 09 _STRUCT_ARGS....
aaa0: 5c 0a 20 20 20 20 3f 20 2f 2a 20 41 49 58 20 63 \. ? /* AIX c
aab0: 63 20 61 6e 64 20 78 6c 63 20 70 61 73 73 20 73 c and xlc pass s
aac0: 6d 61 6c 6c 20 73 74 72 75 63 74 75 72 65 73 20 mall structures
aad0: 6c 65 66 74 2d 61 64 6a 75 73 74 65 64 2c 20 61 left-adjusted, a
aae0: 6c 74 68 6f 75 67 68 20 62 69 67 2d 65 6e 64 69 lthough big-endi
aaf0: 61 6e 21 20 2a 2f 5c 0a 20 20 20 20 20 20 5f 5f an! */\. __
ab00: 76 61 5f 61 72 67 5f 6c 65 66 74 61 64 6a 75 73 va_arg_leftadjus
ab10: 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 ted(LIST,TYPE_SI
ab20: 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 09 09 ZE,TYPE_ALIGN)..
ab30: 09 5c 0a 20 20 20 20 3a 20 2f 2a 20 67 63 63 20 .\. : /* gcc
ab40: 70 61 73 73 65 73 20 73 6d 61 6c 6c 20 73 74 72 passes small str
ab50: 75 63 74 75 72 65 73 20 72 69 67 68 74 2d 61 64 uctures right-ad
ab60: 6a 75 73 74 65 64 2e 20 2a 2f 09 09 09 5c 0a 20 justed. */...\.
ab70: 20 20 20 20 20 5f 5f 76 61 5f 61 72 67 5f 72 69 __va_arg_ri
ab80: 67 68 74 61 64 6a 75 73 74 65 64 28 4c 49 53 54 ghtadjusted(LIST
ab90: 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f ,TYPE_SIZE,TYPE_
aba0: 41 4c 49 47 4e 29 09 09 09 5c 0a 20 20 29 29 0a ALIGN)...\. )).
abb0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e #endif.#if defin
abc0: 65 64 28 5f 5f 72 73 36 30 30 30 5f 5f 29 20 26 ed(__rs6000__) &
abd0: 26 20 21 28 64 65 66 69 6e 65 64 28 5f 41 49 58 & !(defined(_AIX
abe0: 29 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f ) || (defined(__
abf0: 4d 41 43 48 5f 5f 29 20 26 26 20 64 65 66 69 6e MACH__) && defin
ac00: 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 29 29 0a ed(__APPLE__))).
ac10: 2f 2a 20 53 74 72 75 63 74 75 72 65 73 20 61 72 /* Structures ar
ac20: 65 20 70 61 73 73 65 64 20 61 73 20 70 6f 69 6e e passed as poin
ac30: 74 65 72 73 20 74 6f 20 63 61 6c 6c 65 72 2d 6d ters to caller-m
ac40: 61 64 65 20 6c 6f 63 61 6c 20 63 6f 70 69 65 73 ade local copies
ac50: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 5f 76 . */.#define __v
ac60: 61 5f 61 72 67 5f 73 74 72 75 63 74 28 4c 49 53 a_arg_struct(LIS
ac70: 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 T,TYPE_SIZE,TYPE
ac80: 5f 41 4c 49 47 4e 29 20 20 5c 0a 20 20 76 61 5f _ALIGN) \. va_
ac90: 61 72 67 5f 70 74 72 28 4c 49 53 54 2c 76 6f 69 arg_ptr(LIST,voi
aca0: 64 2a 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 d*).#endif.#if d
acb0: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f efined(__sparc__
acc0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f ) && !defined(__
acd0: 73 70 61 72 63 36 34 5f 5f 29 0a 2f 2a 20 53 74 sparc64__)./* St
ace0: 72 75 63 74 75 72 65 73 20 61 72 65 20 70 61 73 ructures are pas
acf0: 73 65 64 20 61 73 20 70 6f 69 6e 74 65 72 73 20 sed as pointers
ad00: 74 6f 20 63 61 6c 6c 65 72 2d 6d 61 64 65 20 6c to caller-made l
ad10: 6f 63 61 6c 20 63 6f 70 69 65 73 2e 20 2a 2f 0a ocal copies. */.
ad20: 23 64 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 #define __va_arg
ad30: 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 _struct(LIST,TYP
ad40: 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 E_SIZE,TYPE_ALIG
ad50: 4e 29 20 20 5c 0a 20 20 76 61 5f 61 72 67 5f 70 N) \. va_arg_p
ad60: 74 72 28 4c 49 53 54 2c 76 6f 69 64 2a 29 0a 23 tr(LIST,void*).#
ad70: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
ad80: 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a 2f d(__sparc64__)./
ad90: 2a 20 53 6d 61 6c 6c 20 73 74 72 75 63 74 75 72 * Small structur
ada0: 65 73 20 61 72 65 20 70 61 73 73 65 64 20 6c 65 es are passed le
adb0: 66 74 2d 61 64 6a 75 73 74 65 64 2c 20 61 6c 74 ft-adjusted, alt
adc0: 68 6f 75 67 68 20 62 69 67 2d 65 6e 64 69 61 6e hough big-endian
add0: 21 20 2a 2f 0a 2f 2a 20 42 69 67 20 73 74 72 75 ! */./* Big stru
ade0: 63 74 75 72 65 73 20 61 72 65 20 70 61 73 73 65 ctures are passe
adf0: 64 20 61 73 20 70 6f 69 6e 74 65 72 73 20 74 6f d as pointers to
ae00: 20 63 61 6c 6c 65 72 2d 6d 61 64 65 20 6c 6f 63 caller-made loc
ae10: 61 6c 20 63 6f 70 69 65 73 2e 20 2a 2f 0a 23 64 al copies. */.#d
ae20: 65 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 73 efine __va_arg_s
ae30: 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 45 5f truct(LIST,TYPE_
ae40: 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 SIZE,TYPE_ALIGN)
ae50: 20 20 5c 0a 20 20 28 28 54 59 50 45 5f 53 49 5a \. ((TYPE_SIZ
ae60: 45 29 20 3c 3d 20 31 36 09 09 09 09 09 09 09 5c E) <= 16.......\
ae70: 0a 20 20 20 3f 20 28 5f 5f 76 61 5f 61 6c 69 67 . ? (__va_alig
ae80: 6e 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 59 n_struct(LIST,TY
ae90: 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 PE_SIZE,TYPE_ALI
aea0: 47 4e 29 09 09 09 5c 0a 20 20 20 20 20 20 5f 5f GN)...\. __
aeb0: 76 61 5f 61 72 67 5f 6c 65 66 74 61 64 6a 75 73 va_arg_leftadjus
aec0: 74 65 64 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 ted(LIST,TYPE_SI
aed0: 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 29 09 ZE,TYPE_ALIGN)).
aee0: 09 09 5c 0a 20 20 20 3a 20 76 61 5f 61 72 67 5f ..\. : va_arg_
aef0: 70 74 72 28 4c 49 53 54 2c 76 6f 69 64 2a 29 09 ptr(LIST,void*).
af00: 09 09 09 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 .....\. ).#endi
af10: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
af20: 73 33 39 30 5f 5f 29 0a 2f 2a 20 53 74 72 75 63 s390__)./* Struc
af30: 74 75 72 65 73 20 3c 3d 20 38 20 62 79 74 65 73 tures <= 8 bytes
af40: 20 61 72 65 20 70 61 73 73 65 64 20 61 73 20 65 are passed as e
af50: 6d 62 65 64 64 65 64 20 63 6f 70 69 65 73 20 6f mbedded copies o
af60: 6e 20 74 68 65 20 61 72 67 20 73 74 61 63 6b 2e n the arg stack.
af70: 0a 20 2a 20 42 69 67 20 73 74 72 75 63 74 75 72 . * Big structur
af80: 65 73 20 61 72 65 20 70 61 73 73 65 64 20 61 73 es are passed as
af90: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 61 6c pointers to cal
afa0: 6c 65 72 2d 6d 61 64 65 20 6c 6f 63 61 6c 20 63 ler-made local c
afb0: 6f 70 69 65 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 opies.. */.#defi
afc0: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 73 74 72 75 ne __va_arg_stru
afd0: 63 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a ct(LIST,TYPE_SIZ
afe0: 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c E,TYPE_ALIGN) \
aff0: 0a 20 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 . ((TYPE_SIZE)
b000: 21 3d 20 31 20 26 26 20 28 54 59 50 45 5f 53 49 != 1 && (TYPE_SI
b010: 5a 45 29 20 21 3d 20 32 20 26 26 20 28 54 59 50 ZE) != 2 && (TYP
b020: 45 5f 53 49 5a 45 29 20 21 3d 20 34 20 26 26 20 E_SIZE) != 4 &&
b030: 28 54 59 50 45 5f 53 49 5a 45 29 20 21 3d 20 38 (TYPE_SIZE) != 8
b040: 20 5c 0a 20 20 20 3f 20 76 61 5f 61 72 67 5f 70 \. ? va_arg_p
b050: 74 72 28 4c 49 53 54 2c 76 6f 69 64 2a 29 09 09 tr(LIST,void*)..
b060: 09 09 09 09 5c 0a 20 20 20 3a 20 28 76 6f 69 64 ....\. : (void
b070: 2a 29 5f 5f 76 61 5f 61 72 67 5f 72 69 67 68 74 *)__va_arg_right
b080: 61 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 adjusted(LIST,TY
b090: 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 PE_SIZE,TYPE_ALI
b0a0: 47 4e 29 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 GN)..\. ).#endi
b0b0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
b0c0: 68 70 70 61 5f 5f 29 0a 2f 2a 20 53 74 72 75 63 hppa__)./* Struc
b0d0: 74 75 72 65 73 20 3c 3d 20 38 20 62 79 74 65 73 tures <= 8 bytes
b0e0: 20 61 72 65 20 70 61 73 73 65 64 20 61 73 20 65 are passed as e
b0f0: 6d 62 65 64 64 65 64 20 63 6f 70 69 65 73 20 6f mbedded copies o
b100: 6e 20 74 68 65 20 61 72 67 20 73 74 61 63 6b 2e n the arg stack.
b110: 0a 20 2a 20 42 69 67 20 73 74 72 75 63 74 75 72 . * Big structur
b120: 65 73 20 61 72 65 20 70 61 73 73 65 64 20 61 73 es are passed as
b130: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 61 6c pointers to cal
b140: 6c 65 72 2d 6d 61 64 65 20 6c 6f 63 61 6c 20 63 ler-made local c
b150: 6f 70 69 65 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 opies.. */.#defi
b160: 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 73 74 72 75 ne __va_arg_stru
b170: 63 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a ct(LIST,TYPE_SIZ
b180: 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 20 5c E,TYPE_ALIGN) \
b190: 0a 20 20 28 28 54 59 50 45 5f 53 49 5a 45 29 20 . ((TYPE_SIZE)
b1a0: 3e 20 38 09 09 09 09 09 09 09 5c 0a 20 20 20 3f > 8.......\. ?
b1b0: 20 76 61 5f 61 72 67 5f 70 74 72 28 4c 49 53 54 va_arg_ptr(LIST
b1c0: 2c 76 6f 69 64 2a 29 09 09 09 09 09 09 5c 0a 20 ,void*)......\.
b1d0: 20 20 3a 20 2f 2a 20 46 49 58 4d 45 3a 20 67 63 : /* FIXME: gc
b1e0: 63 2d 32 2e 36 2e 33 20 70 61 73 73 65 73 20 73 c-2.6.3 passes s
b1f0: 74 72 75 63 74 75 72 65 73 20 3c 3d 20 34 20 62 tructures <= 4 b
b200: 79 74 65 73 20 69 6e 20 6d 65 6d 6f 72 79 20 6c ytes in memory l
b210: 65 66 74 2d 61 64 6a 75 73 74 65 64 21 20 3f 3f eft-adjusted! ??
b220: 20 2a 2f 5c 0a 20 20 20 20 20 28 76 6f 69 64 2a */\. (void*
b230: 29 5f 5f 76 61 5f 61 72 67 5f 72 69 67 68 74 61 )__va_arg_righta
b240: 64 6a 75 73 74 65 64 28 4c 49 53 54 2c 54 59 50 djusted(LIST,TYP
b250: 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 E_SIZE,TYPE_ALIG
b260: 4e 29 09 09 5c 0a 20 20 29 0a 23 65 6e 64 69 66 N)..\. ).#endif
b270: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 69 .#if defined(__i
b280: 61 36 34 5f 5f 29 0a 2f 2a 20 54 79 70 65 73 20 a64__)./* Types
b290: 6c 61 72 67 65 72 20 74 68 61 6e 20 61 20 77 6f larger than a wo
b2a0: 72 64 20 68 61 76 65 20 32 2d 77 6f 72 64 20 61 rd have 2-word a
b2b0: 6c 69 67 6e 6d 65 6e 74 2e 20 2a 2f 0a 23 64 65 lignment. */.#de
b2c0: 66 69 6e 65 20 5f 5f 76 61 5f 61 72 67 5f 73 74 fine __va_arg_st
b2d0: 72 75 63 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 ruct(LIST,TYPE_S
b2e0: 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 4e 29 20 IZE,TYPE_ALIGN)
b2f0: 20 5c 0a 20 20 28 5f 5f 76 61 5f 61 6c 69 67 6e \. (__va_align
b300: 5f 73 74 72 75 63 74 28 4c 49 53 54 2c 54 59 50 _struct(LIST,TYP
b310: 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 4c 49 47 E_SIZE,TYPE_ALIG
b320: 4e 29 09 09 09 09 5c 0a 20 20 20 28 28 54 59 50 N)....\. ((TYP
b330: 45 5f 53 49 5a 45 29 20 3e 20 73 69 7a 65 6f 66 E_SIZE) > sizeof
b340: 28 5f 5f 76 61 77 6f 72 64 29 20 26 26 20 28 28 (__vaword) && ((
b350: 28 5f 5f 76 61 77 6f 72 64 2a 29 28 4c 49 53 54 (__vaword*)(LIST
b360: 29 2d 3e 61 70 74 72 20 2d 20 28 4c 49 53 54 29 )->aptr - (LIST)
b370: 2d 3e 73 61 70 74 72 29 20 26 20 31 29 20 3f 20 ->saptr) & 1) ?
b380: 28 4c 49 53 54 29 2d 3e 61 70 74 72 20 2b 3d 20 (LIST)->aptr +=
b390: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
b3a0: 20 3a 20 30 29 2c 20 5c 0a 20 20 20 5f 5f 76 61 : 0), \. __va
b3b0: 5f 61 72 67 5f 61 64 6a 75 73 74 65 64 28 4c 49 _arg_adjusted(LI
b3c0: 53 54 2c 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 ST,TYPE_SIZE,TYP
b3d0: 45 5f 41 4c 49 47 4e 29 09 09 09 09 5c 0a 20 20 E_ALIGN)....\.
b3e0: 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 20 2a ).#endif.../*. *
b3f0: 20 44 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 Definition of t
b400: 68 65 20 76 61 5f 72 65 74 75 72 6e 5f 78 78 78 he va_return_xxx
b410: 20 6d 61 63 72 6f 73 2e 0a 20 2a 2f 0a 23 64 65 macros.. */.#de
b420: 66 69 6e 65 20 5f 5f 76 61 5f 72 65 74 75 72 6e fine __va_return
b430: 28 4c 49 53 54 2c 52 45 54 54 59 50 45 29 20 20 (LIST,RETTYPE)
b440: 5c 0a 20 20 28 28 28 4c 49 53 54 29 2d 3e 72 74 \. (((LIST)->rt
b450: 79 70 65 20 3d 3d 20 28 52 45 54 54 59 50 45 29 ype == (RETTYPE)
b460: 29 20 7c 7c 20 5f 5f 76 61 5f 65 72 72 6f 72 31 ) || __va_error1
b470: 28 28 4c 49 53 54 29 2d 3e 72 74 79 70 65 2c 52 ((LIST)->rtype,R
b480: 45 54 54 59 50 45 29 29 0a 23 64 65 66 69 6e 65 ETTYPE)).#define
b490: 20 76 61 5f 72 65 74 75 72 6e 5f 76 6f 69 64 28 va_return_void(
b4a0: 4c 49 53 54 29 20 20 5c 0a 20 20 5f 5f 76 61 5f LIST) \. __va_
b4b0: 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 return(LIST,__VA
b4c0: 76 6f 69 64 29 0a 23 64 65 66 69 6e 65 20 76 61 void).#define va
b4d0: 5f 72 65 74 75 72 6e 5f 63 68 61 72 28 4c 49 53 _return_char(LIS
b4e0: 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 T,VAL) \. (__v
b4f0: 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f a_return(LIST,__
b500: 56 41 63 68 61 72 29 2c 20 28 4c 49 53 54 29 2d VAchar), (LIST)-
b510: 3e 74 6d 70 2e 5f 63 68 61 72 20 3d 20 28 56 41 >tmp._char = (VA
b520: 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 L)).#define va_r
b530: 65 74 75 72 6e 5f 73 63 68 61 72 28 4c 49 53 54 eturn_schar(LIST
b540: 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 ,VAL) \. (__va
b550: 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 _return(LIST,__V
b560: 41 73 63 68 61 72 29 2c 20 28 4c 49 53 54 29 2d Aschar), (LIST)-
b570: 3e 74 6d 70 2e 5f 73 63 68 61 72 20 3d 20 28 56 >tmp._schar = (V
b580: 41 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f AL)).#define va_
b590: 72 65 74 75 72 6e 5f 75 63 68 61 72 28 4c 49 53 return_uchar(LIS
b5a0: 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 T,VAL) \. (__v
b5b0: 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f a_return(LIST,__
b5c0: 56 41 75 63 68 61 72 29 2c 20 28 4c 49 53 54 29 VAuchar), (LIST)
b5d0: 2d 3e 74 6d 70 2e 5f 75 63 68 61 72 20 3d 20 28 ->tmp._uchar = (
b5e0: 56 41 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 61 VAL)).#define va
b5f0: 5f 72 65 74 75 72 6e 5f 73 68 6f 72 74 28 4c 49 _return_short(LI
b600: 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f ST,VAL) \. (__
b610: 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f va_return(LIST,_
b620: 5f 56 41 73 68 6f 72 74 29 2c 20 28 4c 49 53 54 _VAshort), (LIST
b630: 29 2d 3e 74 6d 70 2e 5f 73 68 6f 72 74 20 3d 20 )->tmp._short =
b640: 28 56 41 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 (VAL)).#define v
b650: 61 5f 72 65 74 75 72 6e 5f 75 73 68 6f 72 74 28 a_return_ushort(
b660: 4c 49 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 LIST,VAL) \. (
b670: 5f 5f 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 __va_return(LIST
b680: 2c 5f 5f 56 41 75 73 68 6f 72 74 29 2c 20 28 4c ,__VAushort), (L
b690: 49 53 54 29 2d 3e 74 6d 70 2e 5f 75 73 68 6f 72 IST)->tmp._ushor
b6a0: 74 20 3d 20 28 56 41 4c 29 29 0a 23 64 65 66 69 t = (VAL)).#defi
b6b0: 6e 65 20 76 61 5f 72 65 74 75 72 6e 5f 69 6e 74 ne va_return_int
b6c0: 28 4c 49 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 (LIST,VAL) \.
b6d0: 28 5f 5f 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 (__va_return(LIS
b6e0: 54 2c 5f 5f 56 41 69 6e 74 29 2c 20 28 4c 49 53 T,__VAint), (LIS
b6f0: 54 29 2d 3e 74 6d 70 2e 5f 69 6e 74 20 3d 20 28 T)->tmp._int = (
b700: 56 41 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 61 VAL)).#define va
b710: 5f 72 65 74 75 72 6e 5f 75 69 6e 74 28 4c 49 53 _return_uint(LIS
b720: 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 T,VAL) \. (__v
b730: 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f a_return(LIST,__
b740: 56 41 75 69 6e 74 29 2c 20 28 4c 49 53 54 29 2d VAuint), (LIST)-
b750: 3e 74 6d 70 2e 5f 75 69 6e 74 20 3d 20 28 56 41 >tmp._uint = (VA
b760: 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 L)).#define va_r
b770: 65 74 75 72 6e 5f 6c 6f 6e 67 28 4c 49 53 54 2c eturn_long(LIST,
b780: 56 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f VAL) \. (__va_
b790: 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 return(LIST,__VA
b7a0: 6c 6f 6e 67 29 2c 20 28 4c 49 53 54 29 2d 3e 74 long), (LIST)->t
b7b0: 6d 70 2e 5f 6c 6f 6e 67 20 3d 20 28 56 41 4c 29 mp._long = (VAL)
b7c0: 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 65 74 ).#define va_ret
b7d0: 75 72 6e 5f 75 6c 6f 6e 67 28 4c 49 53 54 2c 56 urn_ulong(LIST,V
b7e0: 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 72 AL) \. (__va_r
b7f0: 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 75 eturn(LIST,__VAu
b800: 6c 6f 6e 67 29 2c 20 28 4c 49 53 54 29 2d 3e 74 long), (LIST)->t
b810: 6d 70 2e 5f 75 6c 6f 6e 67 20 3d 20 28 56 41 4c mp._ulong = (VAL
b820: 29 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f )).#if defined(_
b830: 5f 6d 69 70 73 36 34 5f 5f 29 20 7c 7c 20 64 65 _mips64__) || de
b840: 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f fined(__sparc64_
b850: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
b860: 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 alpha__) || defi
b870: 6e 65 64 28 5f 5f 69 61 36 34 5f 5f 29 20 7c 7c ned(__ia64__) ||
b880: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 defined(__x86_6
b890: 34 5f 5f 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 4__).#define va_
b8a0: 72 65 74 75 72 6e 5f 6c 6f 6e 67 6c 6f 6e 67 28 return_longlong(
b8b0: 4c 49 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 LIST,VAL) \. (
b8c0: 5f 5f 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 __va_return(LIST
b8d0: 2c 5f 5f 56 41 6c 6f 6e 67 6c 6f 6e 67 29 2c 20 ,__VAlonglong),
b8e0: 28 4c 49 53 54 29 2d 3e 74 6d 70 2e 5f 6c 6f 6e (LIST)->tmp._lon
b8f0: 67 20 3d 20 28 56 41 4c 29 29 0a 23 64 65 66 69 g = (VAL)).#defi
b900: 6e 65 20 76 61 5f 72 65 74 75 72 6e 5f 75 6c 6f ne va_return_ulo
b910: 6e 67 6c 6f 6e 67 28 4c 49 53 54 2c 56 41 4c 29 nglong(LIST,VAL)
b920: 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 72 65 74 75 \. (__va_retu
b930: 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 75 6c 6f 6e rn(LIST,__VAulon
b940: 67 6c 6f 6e 67 29 2c 20 28 4c 49 53 54 29 2d 3e glong), (LIST)->
b950: 74 6d 70 2e 5f 75 6c 6f 6e 67 20 3d 20 28 56 41 tmp._ulong = (VA
b960: 4c 29 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e L)).#else.#defin
b970: 65 20 76 61 5f 72 65 74 75 72 6e 5f 6c 6f 6e 67 e va_return_long
b980: 6c 6f 6e 67 28 4c 49 53 54 2c 56 41 4c 29 20 20 long(LIST,VAL)
b990: 5c 0a 20 20 28 5f 5f 76 61 5f 72 65 74 75 72 6e \. (__va_return
b9a0: 28 4c 49 53 54 2c 5f 5f 56 41 6c 6f 6e 67 6c 6f (LIST,__VAlonglo
b9b0: 6e 67 29 2c 20 28 4c 49 53 54 29 2d 3e 74 6d 70 ng), (LIST)->tmp
b9c0: 2e 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 28 56 41 ._longlong = (VA
b9d0: 4c 29 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 72 L)).#define va_r
b9e0: 65 74 75 72 6e 5f 75 6c 6f 6e 67 6c 6f 6e 67 28 eturn_ulonglong(
b9f0: 4c 49 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 LIST,VAL) \. (
ba00: 5f 5f 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 __va_return(LIST
ba10: 2c 5f 5f 56 41 75 6c 6f 6e 67 6c 6f 6e 67 29 2c ,__VAulonglong),
ba20: 20 28 4c 49 53 54 29 2d 3e 74 6d 70 2e 5f 75 6c (LIST)->tmp._ul
ba30: 6f 6e 67 6c 6f 6e 67 20 3d 20 28 56 41 4c 29 29 onglong = (VAL))
ba40: 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 .#endif.#define
ba50: 76 61 5f 72 65 74 75 72 6e 5f 66 6c 6f 61 74 28 va_return_float(
ba60: 4c 49 53 54 2c 56 41 4c 29 20 20 5c 0a 20 20 28 LIST,VAL) \. (
ba70: 5f 5f 76 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 __va_return(LIST
ba80: 2c 5f 5f 56 41 66 6c 6f 61 74 29 2c 20 28 4c 49 ,__VAfloat), (LI
ba90: 53 54 29 2d 3e 74 6d 70 2e 5f 66 6c 6f 61 74 20 ST)->tmp._float
baa0: 3d 20 28 56 41 4c 29 29 0a 23 64 65 66 69 6e 65 = (VAL)).#define
bab0: 20 76 61 5f 72 65 74 75 72 6e 5f 64 6f 75 62 6c va_return_doubl
bac0: 65 28 4c 49 53 54 2c 56 41 4c 29 20 20 5c 0a 20 e(LIST,VAL) \.
bad0: 20 28 5f 5f 76 61 5f 72 65 74 75 72 6e 28 4c 49 (__va_return(LI
bae0: 53 54 2c 5f 5f 56 41 64 6f 75 62 6c 65 29 2c 20 ST,__VAdouble),
baf0: 28 4c 49 53 54 29 2d 3e 74 6d 70 2e 5f 64 6f 75 (LIST)->tmp._dou
bb00: 62 6c 65 20 3d 20 28 56 41 4c 29 29 0a 23 64 65 ble = (VAL)).#de
bb10: 66 69 6e 65 20 76 61 5f 72 65 74 75 72 6e 5f 70 fine va_return_p
bb20: 74 72 28 4c 49 53 54 2c 54 59 50 45 2c 56 41 4c tr(LIST,TYPE,VAL
bb30: 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 72 65 74 ) \. (__va_ret
bb40: 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 76 6f 69 urn(LIST,__VAvoi
bb50: 64 70 29 2c 20 28 4c 49 53 54 29 2d 3e 74 6d 70 dp), (LIST)->tmp
bb60: 2e 5f 70 74 72 20 3d 20 28 76 6f 69 64 2a 29 28 ._ptr = (void*)(
bb70: 54 59 50 45 29 28 56 41 4c 29 29 0a 23 64 65 66 TYPE)(VAL)).#def
bb80: 69 6e 65 20 76 61 5f 72 65 74 75 72 6e 5f 73 74 ine va_return_st
bb90: 72 75 63 74 28 4c 49 53 54 2c 54 59 50 45 2c 56 ruct(LIST,TYPE,V
bba0: 41 4c 29 20 20 5c 0a 20 20 28 5f 5f 76 61 5f 72 AL) \. (__va_r
bbb0: 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f 56 41 73 eturn(LIST,__VAs
bbc0: 74 72 75 63 74 29 2c 20 2a 28 54 59 50 45 2a 29 truct), *(TYPE*)
bbd0: 28 28 4c 49 53 54 29 2d 3e 72 61 64 64 72 29 20 ((LIST)->raddr)
bbe0: 3d 20 28 56 41 4c 29 29 0a 23 64 65 66 69 6e 65 = (VAL)).#define
bbf0: 20 5f 76 61 5f 72 65 74 75 72 6e 5f 73 74 72 75 _va_return_stru
bc00: 63 74 28 4c 49 53 54 2c 54 59 50 45 5f 53 49 5a ct(LIST,TYPE_SIZ
bc10: 45 2c 54 59 50 45 5f 41 4c 49 47 4e 2c 56 41 4c E,TYPE_ALIGN,VAL
bc20: 5f 41 44 44 52 29 20 20 5c 0a 20 20 28 5f 5f 76 _ADDR) \. (__v
bc30: 61 5f 72 65 74 75 72 6e 28 4c 49 53 54 2c 5f 5f a_return(LIST,__
bc40: 56 41 73 74 72 75 63 74 29 2c 09 09 09 09 09 5c VAstruct),.....\
bc50: 0a 20 20 20 5f 5f 73 74 72 75 63 74 63 70 79 28 . __structcpy(
bc60: 28 76 6f 69 64 2a 29 28 28 4c 49 53 54 29 2d 3e (void*)((LIST)->
bc70: 72 61 64 64 72 29 2c 56 41 4c 5f 41 44 44 52 2c raddr),VAL_ADDR,
bc80: 54 59 50 45 5f 53 49 5a 45 2c 54 59 50 45 5f 41 TYPE_SIZE,TYPE_A
bc90: 4c 49 47 4e 29 09 5c 0a 20 20 29 0a 0a 0a 2f 2a LIGN).\. ).../*
bca0: 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 Determine wheth
bcb0: 65 72 20 61 20 73 74 72 75 63 74 20 74 79 70 65 er a struct type
bcc0: 20 69 73 20 77 6f 72 64 2d 73 70 6c 69 74 74 61 is word-splitta
bcd0: 62 6c 65 2c 20 69 2e 65 2e 20 77 68 65 74 68 65 ble, i.e. whethe
bce0: 72 20 65 61 63 68 20 6f 66 0a 20 2a 20 69 74 73 r each of. * its
bcf0: 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 69 74 20 components fit
bd00: 69 6e 74 6f 20 61 20 72 65 67 69 73 74 65 72 2e into a register.
bd10: 0a 20 2a 20 54 68 65 20 65 6e 74 69 72 65 20 63 . * The entire c
bd20: 6f 6d 70 75 74 61 74 69 6f 6e 20 69 73 20 64 6f omputation is do
bd30: 6e 65 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 ne at compile ti
bd40: 6d 65 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 me.. */.#define
bd50: 76 61 5f 77 6f 72 64 5f 73 70 6c 69 74 74 61 62 va_word_splittab
bd60: 6c 65 5f 31 28 73 6c 6f 74 31 29 20 20 5c 0a 20 le_1(slot1) \.
bd70: 20 28 5f 5f 76 61 5f 6f 66 66 73 65 74 31 28 73 (__va_offset1(s
bd80: 6c 6f 74 31 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 lot1)/sizeof(__v
bd90: 61 77 6f 72 64 29 20 3d 3d 20 28 5f 5f 76 61 5f aword) == (__va_
bda0: 6f 66 66 73 65 74 31 28 73 6c 6f 74 31 29 2b 73 offset1(slot1)+s
bdb0: 69 7a 65 6f 66 28 73 6c 6f 74 31 29 2d 31 29 2f izeof(slot1)-1)/
bdc0: 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 sizeof(__vaword)
bdd0: 29 0a 23 64 65 66 69 6e 65 20 76 61 5f 77 6f 72 ).#define va_wor
bde0: 64 5f 73 70 6c 69 74 74 61 62 6c 65 5f 32 28 73 d_splittable_2(s
bdf0: 6c 6f 74 31 2c 73 6c 6f 74 32 29 20 20 5c 0a 20 lot1,slot2) \.
be00: 20 28 28 5f 5f 76 61 5f 6f 66 66 73 65 74 31 28 ((__va_offset1(
be10: 73 6c 6f 74 31 29 2f 73 69 7a 65 6f 66 28 5f 5f slot1)/sizeof(__
be20: 76 61 77 6f 72 64 29 20 3d 3d 20 28 5f 5f 76 61 vaword) == (__va
be30: 5f 6f 66 66 73 65 74 31 28 73 6c 6f 74 31 29 2b _offset1(slot1)+
be40: 73 69 7a 65 6f 66 28 73 6c 6f 74 31 29 2d 31 29 sizeof(slot1)-1)
be50: 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 /sizeof(__vaword
be60: 29 29 20 5c 0a 20 20 20 26 26 20 28 5f 5f 76 61 )) \. && (__va
be70: 5f 6f 66 66 73 65 74 32 28 73 6c 6f 74 31 2c 73 _offset2(slot1,s
be80: 6c 6f 74 32 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 lot2)/sizeof(__v
be90: 61 77 6f 72 64 29 20 3d 3d 20 28 5f 5f 76 61 5f aword) == (__va_
bea0: 6f 66 66 73 65 74 32 28 73 6c 6f 74 31 2c 73 6c offset2(slot1,sl
beb0: 6f 74 32 29 2b 73 69 7a 65 6f 66 28 73 6c 6f 74 ot2)+sizeof(slot
bec0: 32 29 2d 31 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 2)-1)/sizeof(__v
bed0: 61 77 6f 72 64 29 29 20 5c 0a 20 20 29 0a 23 64 aword)) \. ).#d
bee0: 65 66 69 6e 65 20 76 61 5f 77 6f 72 64 5f 73 70 efine va_word_sp
bef0: 6c 69 74 74 61 62 6c 65 5f 33 28 73 6c 6f 74 31 littable_3(slot1
bf00: 2c 73 6c 6f 74 32 2c 73 6c 6f 74 33 29 20 20 5c ,slot2,slot3) \
bf10: 0a 20 20 28 28 5f 5f 76 61 5f 6f 66 66 73 65 74 . ((__va_offset
bf20: 31 28 73 6c 6f 74 31 29 2f 73 69 7a 65 6f 66 28 1(slot1)/sizeof(
bf30: 5f 5f 76 61 77 6f 72 64 29 20 3d 3d 20 28 5f 5f __vaword) == (__
bf40: 76 61 5f 6f 66 66 73 65 74 31 28 73 6c 6f 74 31 va_offset1(slot1
bf50: 29 2b 73 69 7a 65 6f 66 28 73 6c 6f 74 31 29 2d )+sizeof(slot1)-
bf60: 31 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 1)/sizeof(__vawo
bf70: 72 64 29 29 20 5c 0a 20 20 20 26 26 20 28 5f 5f rd)) \. && (__
bf80: 76 61 5f 6f 66 66 73 65 74 32 28 73 6c 6f 74 31 va_offset2(slot1
bf90: 2c 73 6c 6f 74 32 29 2f 73 69 7a 65 6f 66 28 5f ,slot2)/sizeof(_
bfa0: 5f 76 61 77 6f 72 64 29 20 3d 3d 20 28 5f 5f 76 _vaword) == (__v
bfb0: 61 5f 6f 66 66 73 65 74 32 28 73 6c 6f 74 31 2c a_offset2(slot1,
bfc0: 73 6c 6f 74 32 29 2b 73 69 7a 65 6f 66 28 73 6c slot2)+sizeof(sl
bfd0: 6f 74 32 29 2d 31 29 2f 73 69 7a 65 6f 66 28 5f ot2)-1)/sizeof(_
bfe0: 5f 76 61 77 6f 72 64 29 29 20 5c 0a 20 20 20 26 _vaword)) \. &
bff0: 26 20 28 5f 5f 76 61 5f 6f 66 66 73 65 74 33 28 & (__va_offset3(
c000: 73 6c 6f 74 31 2c 73 6c 6f 74 32 2c 73 6c 6f 74 slot1,slot2,slot
c010: 33 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 3)/sizeof(__vawo
c020: 72 64 29 20 3d 3d 20 28 5f 5f 76 61 5f 6f 66 66 rd) == (__va_off
c030: 73 65 74 33 28 73 6c 6f 74 31 2c 73 6c 6f 74 32 set3(slot1,slot2
c040: 2c 73 6c 6f 74 33 29 2b 73 69 7a 65 6f 66 28 73 ,slot3)+sizeof(s
c050: 6c 6f 74 33 29 2d 31 29 2f 73 69 7a 65 6f 66 28 lot3)-1)/sizeof(
c060: 5f 5f 76 61 77 6f 72 64 29 29 20 5c 0a 20 20 29 __vaword)) \. )
c070: 0a 23 64 65 66 69 6e 65 20 76 61 5f 77 6f 72 64 .#define va_word
c080: 5f 73 70 6c 69 74 74 61 62 6c 65 5f 34 28 73 6c _splittable_4(sl
c090: 6f 74 31 2c 73 6c 6f 74 32 2c 73 6c 6f 74 33 2c ot1,slot2,slot3,
c0a0: 73 6c 6f 74 34 29 20 20 5c 0a 20 20 28 28 5f 5f slot4) \. ((__
c0b0: 76 61 5f 6f 66 66 73 65 74 31 28 73 6c 6f 74 31 va_offset1(slot1
c0c0: 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 )/sizeof(__vawor
c0d0: 64 29 20 3d 3d 20 28 5f 5f 76 61 5f 6f 66 66 73 d) == (__va_offs
c0e0: 65 74 31 28 73 6c 6f 74 31 29 2b 73 69 7a 65 6f et1(slot1)+sizeo
c0f0: 66 28 73 6c 6f 74 31 29 2d 31 29 2f 73 69 7a 65 f(slot1)-1)/size
c100: 6f 66 28 5f 5f 76 61 77 6f 72 64 29 29 20 5c 0a of(__vaword)) \.
c110: 20 20 20 26 26 20 28 5f 5f 76 61 5f 6f 66 66 73 && (__va_offs
c120: 65 74 32 28 73 6c 6f 74 31 2c 73 6c 6f 74 32 29 et2(slot1,slot2)
c130: 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 /sizeof(__vaword
c140: 29 20 3d 3d 20 28 5f 5f 76 61 5f 6f 66 66 73 65 ) == (__va_offse
c150: 74 32 28 73 6c 6f 74 31 2c 73 6c 6f 74 32 29 2b t2(slot1,slot2)+
c160: 73 69 7a 65 6f 66 28 73 6c 6f 74 32 29 2d 31 29 sizeof(slot2)-1)
c170: 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 /sizeof(__vaword
c180: 29 29 20 5c 0a 20 20 20 26 26 20 28 5f 5f 76 61 )) \. && (__va
c190: 5f 6f 66 66 73 65 74 33 28 73 6c 6f 74 31 2c 73 _offset3(slot1,s
c1a0: 6c 6f 74 32 2c 73 6c 6f 74 33 29 2f 73 69 7a 65 lot2,slot3)/size
c1b0: 6f 66 28 5f 5f 76 61 77 6f 72 64 29 20 3d 3d 20 of(__vaword) ==
c1c0: 28 5f 5f 76 61 5f 6f 66 66 73 65 74 33 28 73 6c (__va_offset3(sl
c1d0: 6f 74 31 2c 73 6c 6f 74 32 2c 73 6c 6f 74 33 29 ot1,slot2,slot3)
c1e0: 2b 73 69 7a 65 6f 66 28 73 6c 6f 74 33 29 2d 31 +sizeof(slot3)-1
c1f0: 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 )/sizeof(__vawor
c200: 64 29 29 20 5c 0a 20 20 20 26 26 20 28 5f 5f 76 d)) \. && (__v
c210: 61 5f 6f 66 66 73 65 74 34 28 73 6c 6f 74 31 2c a_offset4(slot1,
c220: 73 6c 6f 74 32 2c 73 6c 6f 74 33 2c 73 6c 6f 74 slot2,slot3,slot
c230: 34 29 2f 73 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 4)/sizeof(__vawo
c240: 72 64 29 20 3d 3d 20 28 5f 5f 76 61 5f 6f 66 66 rd) == (__va_off
c250: 73 65 74 34 28 73 6c 6f 74 31 2c 73 6c 6f 74 32 set4(slot1,slot2
c260: 2c 73 6c 6f 74 33 2c 73 6c 6f 74 34 29 2b 73 69 ,slot3,slot4)+si
c270: 7a 65 6f 66 28 73 6c 6f 74 34 29 2d 31 29 2f 73 zeof(slot4)-1)/s
c280: 69 7a 65 6f 66 28 5f 5f 76 61 77 6f 72 64 29 29 izeof(__vaword))
c290: 20 5c 0a 20 20 29 0a 23 64 65 66 69 6e 65 20 5f \. ).#define _
c2a0: 5f 76 61 5f 6f 66 66 73 65 74 31 28 73 6c 6f 74 _va_offset1(slot
c2b0: 31 29 20 20 5c 0a 20 20 30 0a 23 64 65 66 69 6e 1) \. 0.#defin
c2c0: 65 20 5f 5f 76 61 5f 6f 66 66 73 65 74 32 28 73 e __va_offset2(s
c2d0: 6c 6f 74 31 2c 73 6c 6f 74 32 29 20 20 5c 0a 20 lot1,slot2) \.
c2e0: 20 28 28 5f 5f 76 61 5f 6f 66 66 73 65 74 31 28 ((__va_offset1(
c2f0: 73 6c 6f 74 31 29 2b 73 69 7a 65 6f 66 28 73 6c slot1)+sizeof(sl
c300: 6f 74 31 29 2b 5f 5f 56 41 5f 61 6c 69 67 6e 6f ot1)+__VA_aligno
c310: 66 28 73 6c 6f 74 32 29 2d 31 29 20 26 20 2d 28 f(slot2)-1) & -(
c320: 6c 6f 6e 67 29 5f 5f 56 41 5f 61 6c 69 67 6e 6f long)__VA_aligno
c330: 66 28 73 6c 6f 74 32 29 29 0a 23 64 65 66 69 6e f(slot2)).#defin
c340: 65 20 5f 5f 76 61 5f 6f 66 66 73 65 74 33 28 73 e __va_offset3(s
c350: 6c 6f 74 31 2c 73 6c 6f 74 32 2c 73 6c 6f 74 33 lot1,slot2,slot3
c360: 29 20 20 5c 0a 20 20 28 28 5f 5f 76 61 5f 6f 66 ) \. ((__va_of
c370: 66 73 65 74 32 28 73 6c 6f 74 31 2c 73 6c 6f 74 fset2(slot1,slot
c380: 32 29 2b 73 69 7a 65 6f 66 28 73 6c 6f 74 32 29 2)+sizeof(slot2)
c390: 2b 5f 5f 56 41 5f 61 6c 69 67 6e 6f 66 28 73 6c +__VA_alignof(sl
c3a0: 6f 74 33 29 2d 31 29 20 26 20 2d 28 6c 6f 6e 67 ot3)-1) & -(long
c3b0: 29 5f 5f 56 41 5f 61 6c 69 67 6e 6f 66 28 73 6c )__VA_alignof(sl
c3c0: 6f 74 33 29 29 0a 23 64 65 66 69 6e 65 20 5f 5f ot3)).#define __
c3d0: 76 61 5f 6f 66 66 73 65 74 34 28 73 6c 6f 74 31 va_offset4(slot1
c3e0: 2c 73 6c 6f 74 32 2c 73 6c 6f 74 33 2c 73 6c 6f ,slot2,slot3,slo
c3f0: 74 34 29 20 20 5c 0a 20 20 28 28 5f 5f 76 61 5f t4) \. ((__va_
c400: 6f 66 66 73 65 74 33 28 73 6c 6f 74 31 2c 73 6c offset3(slot1,sl
c410: 6f 74 32 2c 73 6c 6f 74 33 29 2b 73 69 7a 65 6f ot2,slot3)+sizeo
c420: 66 28 73 6c 6f 74 33 29 2b 5f 5f 56 41 5f 61 6c f(slot3)+__VA_al
c430: 69 67 6e 6f 66 28 73 6c 6f 74 34 29 2d 31 29 20 ignof(slot4)-1)
c440: 26 20 2d 28 6c 6f 6e 67 29 5f 5f 56 41 5f 61 6c & -(long)__VA_al
c450: 69 67 6e 6f 66 28 73 6c 6f 74 34 29 29 0a 0a 0a ignof(slot4))...
c460: 2f 2a 0a 20 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 /*. * Miscellane
c470: 6f 75 73 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 ous declarations
c480: 2e 0a 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 63 .. */.#ifdef __c
c490: 70 6c 75 73 70 6c 75 73 0a 65 78 74 65 72 6e 20 plusplus.extern
c4a0: 22 43 22 20 76 6f 69 64 20 28 2a 76 61 63 61 6c "C" void (*vacal
c4b0: 6c 29 20 28 29 3b 20 2f 2a 20 74 68 65 20 72 65 l) (); /* the re
c4c0: 74 75 72 6e 20 74 79 70 65 20 69 73 20 76 61 72 turn type is var
c4d0: 69 61 62 6c 65 2c 20 6e 6f 74 20 76 6f 69 64 21 iable, not void!
c4e0: 20 2a 2f 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e */.#else.extern
c4f0: 20 76 6f 69 64 20 28 2a 76 61 63 61 6c 6c 29 20 void (*vacall)
c500: 28 29 3b 20 2f 2a 20 74 68 65 20 72 65 74 75 72 (); /* the retur
c510: 6e 20 74 79 70 65 20 69 73 20 76 61 72 69 61 62 n type is variab
c520: 6c 65 2c 20 6e 6f 74 20 76 6f 69 64 21 20 2a 2f le, not void! */
c530: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 .#endif.#if defi
c540: 6e 65 64 28 5f 5f 53 54 44 43 5f 5f 29 20 7c 7c ned(__STDC__) ||
c550: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f defined(__GNUC_
c560: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
c570: 63 70 6c 75 73 70 6c 75 73 29 0a 65 78 74 65 72 cplusplus).exter
c580: 6e 20 76 6f 69 64 20 28 2a 20 76 61 63 61 6c 6c n void (* vacall
c590: 5f 66 75 6e 63 74 69 6f 6e 29 20 28 76 61 5f 61 _function) (va_a
c5a0: 6c 69 73 74 29 3b 0a 65 78 74 65 72 6e 20 69 6e list);.extern in
c5b0: 74 20 5f 5f 76 61 5f 65 72 72 6f 72 31 20 28 65 t __va_error1 (e
c5c0: 6e 75 6d 20 5f 5f 56 41 74 79 70 65 2c 20 65 6e num __VAtype, en
c5d0: 75 6d 20 5f 5f 56 41 74 79 70 65 29 3b 0a 65 78 um __VAtype);.ex
c5e0: 74 65 72 6e 20 69 6e 74 20 5f 5f 76 61 5f 65 72 tern int __va_er
c5f0: 72 6f 72 32 20 28 75 6e 73 69 67 6e 65 64 20 69 ror2 (unsigned i
c600: 6e 74 29 3b 0a 65 78 74 65 72 6e 20 76 6f 69 64 nt);.extern void
c610: 20 5f 5f 73 74 72 75 63 74 63 70 79 20 28 76 6f __structcpy (vo
c620: 69 64 2a 20 64 65 73 74 2c 20 76 6f 69 64 2a 20 id* dest, void*
c630: 73 72 63 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f src, unsigned lo
c640: 6e 67 20 73 69 7a 65 2c 20 75 6e 73 69 67 6e 65 ng size, unsigne
c650: 64 20 6c 6f 6e 67 20 61 6c 69 67 6e 6d 65 6e 74 d long alignment
c660: 29 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20 );.#else.extern
c670: 76 6f 69 64 20 28 2a 20 76 61 63 61 6c 6c 5f 66 void (* vacall_f
c680: 75 6e 63 74 69 6f 6e 29 20 28 29 3b 0a 65 78 74 unction) ();.ext
c690: 65 72 6e 20 69 6e 74 20 5f 5f 76 61 5f 65 72 72 ern int __va_err
c6a0: 6f 72 31 20 28 29 3b 0a 65 78 74 65 72 6e 20 69 or1 ();.extern i
c6b0: 6e 74 20 5f 5f 76 61 5f 65 72 72 6f 72 32 20 28 nt __va_error2 (
c6c0: 29 3b 0a 65 78 74 65 72 6e 20 76 6f 69 64 20 5f );.extern void _
c6d0: 5f 73 74 72 75 63 74 63 70 79 20 28 29 3b 0a 23 _structcpy ();.#
c6e0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 75 6e endif.typedef un
c6f0: 69 6f 6e 20 7b 20 5f 5f 76 61 77 6f 72 64 20 72 ion { __vaword r
c700: 6f 6f 6d 5b 5f 5f 56 41 5f 41 4c 49 53 54 5f 57 oom[__VA_ALIST_W
c710: 4f 52 44 53 5d 3b 20 64 6f 75 62 6c 65 20 61 6c ORDS]; double al
c720: 69 67 6e 3b 20 7d 20 5f 5f 76 61 5f 73 74 72 75 ign; } __va_stru
c730: 63 74 5f 62 75 66 66 65 72 5f 74 3b 0a 65 78 74 ct_buffer_t;.ext
c740: 65 72 6e 20 5f 5f 76 61 5f 73 74 72 75 63 74 5f ern __va_struct_
c750: 62 75 66 66 65 72 5f 74 20 5f 5f 76 61 5f 73 74 buffer_t __va_st
c760: 72 75 63 74 5f 62 75 66 66 65 72 3b 0a 0a 0a 23 ruct_buffer;...#
c770: 65 6e 64 69 66 20 2f 2a 20 5f 56 41 43 41 4c 4c endif /* _VACALL
c780: 5f 48 20 2a 2f 0a _H */.