Artifact
7a3499cb39ee147db5c3a0fc91c61c0ea03e06a2:
0000: 2f 2a 20 76 61 63 61 6c 6c 20 66 75 6e 63 74 69 /* vacall functi
0010: 6f 6e 20 66 6f 72 20 6d 69 70 73 20 43 50 55 20 on for mips CPU
0020: 2a 2f 0a 0a 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 */../*. * Copyri
0030: 67 68 74 20 31 39 39 35 2d 32 30 30 34 20 42 72 ght 1995-2004 Br
0040: 75 6e 6f 20 48 61 69 62 6c 65 2c 20 3c 62 72 75 uno Haible, <bru
0050: 6e 6f 40 63 6c 69 73 70 2e 6f 72 67 3e 0a 20 2a no@clisp.org>. *
0060: 0a 20 2a 20 54 68 69 73 20 69 73 20 66 72 65 65 . * This is free
0070: 20 73 6f 66 74 77 61 72 65 20 64 69 73 74 72 69 software distri
0080: 62 75 74 65 64 20 75 6e 64 65 72 20 74 68 65 20 buted under the
0090: 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c GNU General Publ
00a0: 69 63 20 4c 69 63 65 6e 63 65 0a 20 2a 20 64 65 ic Licence. * de
00b0: 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 20 66 scribed in the f
00c0: 69 6c 65 20 43 4f 50 59 49 4e 47 2e 20 43 6f 6e ile COPYING. Con
00d0: 74 61 63 74 20 74 68 65 20 61 75 74 68 6f 72 20 tact the author
00e0: 69 66 20 79 6f 75 20 64 6f 6e 27 74 20 68 61 76 if you don't hav
00f0: 65 20 74 68 69 73 0a 20 2a 20 6f 72 20 63 61 6e e this. * or can
0100: 27 74 20 6c 69 76 65 20 77 69 74 68 20 69 74 2e 't live with it.
0110: 20 54 68 65 72 65 20 69 73 20 41 42 53 4f 4c 55 There is ABSOLU
0120: 54 45 4c 59 20 4e 4f 20 57 41 52 52 41 4e 54 59 TELY NO WARRANTY
0130: 2c 20 65 78 70 6c 69 63 69 74 20 6f 72 20 69 6d , explicit or im
0140: 70 6c 69 65 64 2c 0a 20 2a 20 6f 6e 20 74 68 69 plied,. * on thi
0150: 73 20 73 6f 66 74 77 61 72 65 2e 0a 20 2a 2f 0a s software.. */.
0160: 0a 23 69 66 6e 64 65 66 20 52 45 45 4e 54 52 41 .#ifndef REENTRA
0170: 4e 54 0a 23 69 6e 63 6c 75 64 65 20 22 76 61 63 NT.#include "vac
0180: 61 6c 6c 2e 68 2e 69 6e 22 0a 23 65 6c 73 65 20 all.h.in".#else
0190: 2f 2a 20 52 45 45 4e 54 52 41 4e 54 20 2a 2f 0a /* REENTRANT */.
01a0: 23 69 6e 63 6c 75 64 65 20 22 76 61 63 61 6c 6c #include "vacall
01b0: 5f 72 2e 68 2e 69 6e 22 0a 23 65 6e 64 69 66 0a _r.h.in".#endif.
01c0: 0a 23 69 66 6e 64 65 66 20 52 45 45 4e 54 52 41 .#ifndef REENTRA
01d0: 4e 54 0a 74 79 70 65 64 65 66 20 76 6f 69 64 20 NT.typedef void
01e0: 28 2a 66 75 6e 63 5f 70 6f 69 6e 74 65 72 29 28 (*func_pointer)(
01f0: 76 61 5f 61 6c 69 73 74 29 3b 0a 23 65 6c 73 65 va_alist);.#else
0200: 20 2f 2a 20 52 45 45 4e 54 52 41 4e 54 20 2a 2f /* REENTRANT */
0210: 0a 23 64 65 66 69 6e 65 20 5f 5f 76 61 63 61 6c .#define __vacal
0220: 6c 20 5f 5f 76 61 63 61 6c 6c 5f 72 0a 74 79 70 l __vacall_r.typ
0230: 65 64 65 66 20 76 6f 69 64 20 28 2a 66 75 6e 63 edef void (*func
0240: 5f 70 6f 69 6e 74 65 72 29 28 76 6f 69 64 2a 2c _pointer)(void*,
0250: 76 61 5f 61 6c 69 73 74 29 3b 0a 72 65 67 69 73 va_alist);.regis
0260: 74 65 72 20 73 74 72 75 63 74 20 7b 20 66 75 6e ter struct { fun
0270: 63 5f 70 6f 69 6e 74 65 72 20 76 61 63 61 6c 6c c_pointer vacall
0280: 5f 66 75 6e 63 74 69 6f 6e 3b 20 76 6f 69 64 2a _function; void*
0290: 20 61 72 67 3b 20 7d 0a 20 20 20 20 20 20 20 20 arg; }.
02a0: 20 2a 09 09 65 6e 76 09 5f 5f 61 73 6d 5f 5f 28 *..env.__asm__(
02b0: 22 24 32 22 29 3b 0a 23 65 6e 64 69 66 0a 72 65 "$2");.#endif.re
02c0: 67 69 73 74 65 72 20 66 75 6e 63 5f 70 6f 69 6e gister func_poin
02d0: 74 65 72 09 74 39 09 5f 5f 61 73 6d 5f 5f 28 22 ter.t9.__asm__("
02e0: 24 32 35 22 29 3b 0a 72 65 67 69 73 74 65 72 20 $25");.register
02f0: 76 6f 69 64 2a 09 09 73 70 09 5f 5f 61 73 6d 5f void*..sp.__asm_
0300: 5f 28 22 24 73 70 22 29 3b 0a 72 65 67 69 73 74 _("$sp");.regist
0310: 65 72 20 5f 5f 76 61 77 6f 72 64 09 69 61 72 67 er __vaword.iarg
0320: 30 09 5f 5f 61 73 6d 5f 5f 28 22 24 34 22 29 3b 0.__asm__("$4");
0330: 0a 72 65 67 69 73 74 65 72 20 5f 5f 76 61 77 6f .register __vawo
0340: 72 64 09 69 61 72 67 31 09 5f 5f 61 73 6d 5f 5f rd.iarg1.__asm__
0350: 28 22 24 35 22 29 3b 0a 72 65 67 69 73 74 65 72 ("$5");.register
0360: 20 5f 5f 76 61 77 6f 72 64 09 69 61 72 67 32 09 __vaword.iarg2.
0370: 5f 5f 61 73 6d 5f 5f 28 22 24 36 22 29 3b 0a 72 __asm__("$6");.r
0380: 65 67 69 73 74 65 72 20 5f 5f 76 61 77 6f 72 64 egister __vaword
0390: 09 69 61 72 67 33 09 5f 5f 61 73 6d 5f 5f 28 22 .iarg3.__asm__("
03a0: 24 37 22 29 3b 0a 72 65 67 69 73 74 65 72 20 5f $7");.register _
03b0: 5f 76 61 77 6f 72 64 09 69 61 72 67 34 09 5f 5f _vaword.iarg4.__
03c0: 61 73 6d 5f 5f 28 22 24 38 22 29 3b 0a 72 65 67 asm__("$8");.reg
03d0: 69 73 74 65 72 20 5f 5f 76 61 77 6f 72 64 09 69 ister __vaword.i
03e0: 61 72 67 35 09 5f 5f 61 73 6d 5f 5f 28 22 24 39 arg5.__asm__("$9
03f0: 22 29 3b 0a 72 65 67 69 73 74 65 72 20 5f 5f 76 ");.register __v
0400: 61 77 6f 72 64 09 69 61 72 67 36 09 5f 5f 61 73 aword.iarg6.__as
0410: 6d 5f 5f 28 22 24 31 30 22 29 3b 0a 72 65 67 69 m__("$10");.regi
0420: 73 74 65 72 20 5f 5f 76 61 77 6f 72 64 09 69 61 ster __vaword.ia
0430: 72 67 37 09 5f 5f 61 73 6d 5f 5f 28 22 24 31 31 rg7.__asm__("$11
0440: 22 29 3b 0a 72 65 67 69 73 74 65 72 20 66 6c 6f ");.register flo
0450: 61 74 09 09 66 61 72 67 30 09 5f 5f 61 73 6d 5f at..farg0.__asm_
0460: 5f 28 22 24 66 31 32 22 29 3b 0a 72 65 67 69 73 _("$f12");.regis
0470: 74 65 72 20 66 6c 6f 61 74 09 09 66 61 72 67 31 ter float..farg1
0480: 09 5f 5f 61 73 6d 5f 5f 28 22 24 66 31 33 22 29 .__asm__("$f13")
0490: 3b 0a 72 65 67 69 73 74 65 72 20 66 6c 6f 61 74 ;.register float
04a0: 09 09 66 61 72 67 32 09 5f 5f 61 73 6d 5f 5f 28 ..farg2.__asm__(
04b0: 22 24 66 31 34 22 29 3b 0a 72 65 67 69 73 74 65 "$f14");.registe
04c0: 72 20 66 6c 6f 61 74 09 09 66 61 72 67 33 09 5f r float..farg3._
04d0: 5f 61 73 6d 5f 5f 28 22 24 66 31 35 22 29 3b 0a _asm__("$f15");.
04e0: 72 65 67 69 73 74 65 72 20 66 6c 6f 61 74 09 09 register float..
04f0: 66 61 72 67 34 09 5f 5f 61 73 6d 5f 5f 28 22 24 farg4.__asm__("$
0500: 66 31 36 22 29 3b 0a 72 65 67 69 73 74 65 72 20 f16");.register
0510: 66 6c 6f 61 74 09 09 66 61 72 67 35 09 5f 5f 61 float..farg5.__a
0520: 73 6d 5f 5f 28 22 24 66 31 37 22 29 3b 0a 72 65 sm__("$f17");.re
0530: 67 69 73 74 65 72 20 66 6c 6f 61 74 09 09 66 61 gister float..fa
0540: 72 67 36 09 5f 5f 61 73 6d 5f 5f 28 22 24 66 31 rg6.__asm__("$f1
0550: 38 22 29 3b 0a 72 65 67 69 73 74 65 72 20 66 6c 8");.register fl
0560: 6f 61 74 09 09 66 61 72 67 37 09 5f 5f 61 73 6d oat..farg7.__asm
0570: 5f 5f 28 22 24 66 31 39 22 29 3b 0a 72 65 67 69 __("$f19");.regi
0580: 73 74 65 72 20 64 6f 75 62 6c 65 09 09 64 61 72 ster double..dar
0590: 67 30 09 5f 5f 61 73 6d 5f 5f 28 22 24 66 31 32 g0.__asm__("$f12
05a0: 22 29 3b 0a 72 65 67 69 73 74 65 72 20 64 6f 75 ");.register dou
05b0: 62 6c 65 09 09 64 61 72 67 31 09 5f 5f 61 73 6d ble..darg1.__asm
05c0: 5f 5f 28 22 24 66 31 33 22 29 3b 0a 72 65 67 69 __("$f13");.regi
05d0: 73 74 65 72 20 64 6f 75 62 6c 65 09 09 64 61 72 ster double..dar
05e0: 67 32 09 5f 5f 61 73 6d 5f 5f 28 22 24 66 31 34 g2.__asm__("$f14
05f0: 22 29 3b 0a 72 65 67 69 73 74 65 72 20 64 6f 75 ");.register dou
0600: 62 6c 65 09 09 64 61 72 67 33 09 5f 5f 61 73 6d ble..darg3.__asm
0610: 5f 5f 28 22 24 66 31 35 22 29 3b 0a 72 65 67 69 __("$f15");.regi
0620: 73 74 65 72 20 64 6f 75 62 6c 65 09 09 64 61 72 ster double..dar
0630: 67 34 09 5f 5f 61 73 6d 5f 5f 28 22 24 66 31 36 g4.__asm__("$f16
0640: 22 29 3b 0a 72 65 67 69 73 74 65 72 20 64 6f 75 ");.register dou
0650: 62 6c 65 09 09 64 61 72 67 35 09 5f 5f 61 73 6d ble..darg5.__asm
0660: 5f 5f 28 22 24 66 31 37 22 29 3b 0a 72 65 67 69 __("$f17");.regi
0670: 73 74 65 72 20 64 6f 75 62 6c 65 09 09 64 61 72 ster double..dar
0680: 67 36 09 5f 5f 61 73 6d 5f 5f 28 22 24 66 31 38 g6.__asm__("$f18
0690: 22 29 3b 0a 72 65 67 69 73 74 65 72 20 64 6f 75 ");.register dou
06a0: 62 6c 65 09 09 64 61 72 67 37 09 5f 5f 61 73 6d ble..darg7.__asm
06b0: 5f 5f 28 22 24 66 31 39 22 29 3b 0a 72 65 67 69 __("$f19");.regi
06c0: 73 74 65 72 20 5f 5f 76 61 77 6f 72 64 09 69 72 ster __vaword.ir
06d0: 65 74 09 5f 5f 61 73 6d 5f 5f 28 22 24 32 22 29 et.__asm__("$2")
06e0: 3b 0a 72 65 67 69 73 74 65 72 20 5f 5f 76 61 77 ;.register __vaw
06f0: 6f 72 64 09 69 72 65 74 32 09 5f 5f 61 73 6d 5f ord.iret2.__asm_
0700: 5f 28 22 24 33 22 29 3b 0a 72 65 67 69 73 74 65 _("$3");.registe
0710: 72 20 66 6c 6f 61 74 09 09 66 72 65 74 09 5f 5f r float..fret.__
0720: 61 73 6d 5f 5f 28 22 24 66 30 22 29 3b 0a 72 65 asm__("$f0");.re
0730: 67 69 73 74 65 72 20 66 6c 6f 61 74 09 09 66 72 gister float..fr
0740: 65 74 32 09 5f 5f 61 73 6d 5f 5f 28 22 24 66 32 et2.__asm__("$f2
0750: 22 29 3b 0a 72 65 67 69 73 74 65 72 20 64 6f 75 ");.register dou
0760: 62 6c 65 09 09 64 72 65 74 09 5f 5f 61 73 6d 5f ble..dret.__asm_
0770: 5f 28 22 24 66 30 22 29 3b 0a 72 65 67 69 73 74 _("$f0");.regist
0780: 65 72 20 64 6f 75 62 6c 65 09 09 64 72 65 74 32 er double..dret2
0790: 09 5f 5f 61 73 6d 5f 5f 28 22 24 66 32 22 29 3b .__asm__("$f2");
07a0: 0a 0a 76 6f 69 64 20 2f 2a 20 74 68 65 20 72 65 ..void /* the re
07b0: 74 75 72 6e 20 74 79 70 65 20 69 73 20 76 61 72 turn type is var
07c0: 69 61 62 6c 65 2c 20 6e 6f 74 20 76 6f 69 64 21 iable, not void!
07d0: 20 2a 2f 0a 5f 5f 76 61 63 61 6c 6c 20 28 5f 5f */.__vacall (__
07e0: 76 61 77 6f 72 64 20 77 6f 72 64 31 2c 20 5f 5f vaword word1, __
07f0: 76 61 77 6f 72 64 20 77 6f 72 64 32 2c 20 5f 5f vaword word2, __
0800: 76 61 77 6f 72 64 20 77 6f 72 64 33 2c 20 5f 5f vaword word3, __
0810: 76 61 77 6f 72 64 20 77 6f 72 64 34 2c 0a 20 20 vaword word4,.
0820: 20 20 20 20 20 20 20 20 5f 5f 76 61 77 6f 72 64 __vaword
0830: 20 77 6f 72 64 35 2c 20 5f 5f 76 61 77 6f 72 64 word5, __vaword
0840: 20 77 6f 72 64 36 2c 20 5f 5f 76 61 77 6f 72 64 word6, __vaword
0850: 20 77 6f 72 64 37 2c 20 5f 5f 76 61 77 6f 72 64 word7, __vaword
0860: 20 77 6f 72 64 38 2c 0a 20 20 20 20 20 20 20 20 word8,.
0870: 20 20 5f 5f 76 61 77 6f 72 64 20 66 69 72 73 74 __vaword first
0880: 77 6f 72 64 29 0a 7b 0a 20 20 2f 2a 20 67 63 63 word).{. /* gcc
0890: 2d 32 2e 39 35 20 64 6f 65 73 20 6e 6f 74 20 61 -2.95 does not a
08a0: 6c 6c 6f 63 61 74 65 20 73 74 61 63 6b 20 73 70 llocate stack sp
08b0: 61 63 65 20 66 6f 72 20 77 6f 72 64 31 2c 2e 2e ace for word1,..
08c0: 2e 2c 77 6f 72 64 38 2e 20 2a 2f 0a 20 20 2f 2a .,word8. */. /*
08d0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 The following a
08e0: 63 63 6f 75 6e 74 20 66 6f 72 20 74 68 65 20 73 ccount for the s
08f0: 74 61 63 6b 20 66 72 61 6d 65 20 69 6e 63 72 65 tack frame incre
0900: 61 73 65 20 66 72 6f 6d 20 31 39 32 20 74 6f 20 ase from 192 to
0910: 32 35 36 20 62 79 74 65 73 0a 20 20 20 2a 20 64 256 bytes. * d
0920: 6f 6e 65 20 62 79 20 70 6f 73 74 70 72 6f 63 65 one by postproce
0930: 73 73 69 6e 67 2e 20 2a 2f 0a 23 64 65 66 69 6e ssing. */.#defin
0940: 65 20 66 69 72 73 74 77 6f 72 64 20 28 2a 28 26 e firstword (*(&
0950: 66 69 72 73 74 77 6f 72 64 2b 38 29 29 0a 20 20 firstword+8)).
0960: 2f 2a 20 4d 6f 76 65 20 74 68 65 20 61 72 67 75 /* Move the argu
0970: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 69 6e 20 ments passed in
0980: 72 65 67 69 73 74 65 72 73 20 74 6f 20 74 68 65 registers to the
0990: 69 72 20 73 74 61 63 6b 20 6c 6f 63 61 74 69 6f ir stack locatio
09a0: 6e 73 2e 20 2a 2f 0a 20 20 28 26 66 69 72 73 74 ns. */. (&first
09b0: 77 6f 72 64 29 5b 2d 38 5d 20 3d 20 69 61 72 67 word)[-8] = iarg
09c0: 30 3b 20 2f 2a 20 77 6f 72 64 31 20 2a 2f 0a 20 0; /* word1 */.
09d0: 20 28 26 66 69 72 73 74 77 6f 72 64 29 5b 2d 37 (&firstword)[-7
09e0: 5d 20 3d 20 69 61 72 67 31 3b 20 2f 2a 20 77 6f ] = iarg1; /* wo
09f0: 72 64 32 20 2a 2f 0a 20 20 28 26 66 69 72 73 74 rd2 */. (&first
0a00: 77 6f 72 64 29 5b 2d 36 5d 20 3d 20 69 61 72 67 word)[-6] = iarg
0a10: 32 3b 20 2f 2a 20 77 6f 72 64 33 20 2a 2f 0a 20 2; /* word3 */.
0a20: 20 28 26 66 69 72 73 74 77 6f 72 64 29 5b 2d 35 (&firstword)[-5
0a30: 5d 20 3d 20 69 61 72 67 33 3b 20 2f 2a 20 77 6f ] = iarg3; /* wo
0a40: 72 64 34 20 2a 2f 0a 20 20 28 26 66 69 72 73 74 rd4 */. (&first
0a50: 77 6f 72 64 29 5b 2d 34 5d 20 3d 20 69 61 72 67 word)[-4] = iarg
0a60: 34 3b 20 2f 2a 20 77 6f 72 64 35 20 2a 2f 0a 20 4; /* word5 */.
0a70: 20 28 26 66 69 72 73 74 77 6f 72 64 29 5b 2d 33 (&firstword)[-3
0a80: 5d 20 3d 20 69 61 72 67 35 3b 20 2f 2a 20 77 6f ] = iarg5; /* wo
0a90: 72 64 36 20 2a 2f 0a 20 20 28 26 66 69 72 73 74 rd6 */. (&first
0aa0: 77 6f 72 64 29 5b 2d 32 5d 20 3d 20 69 61 72 67 word)[-2] = iarg
0ab0: 36 3b 20 2f 2a 20 77 6f 72 64 37 20 2a 2f 0a 20 6; /* word7 */.
0ac0: 20 28 26 66 69 72 73 74 77 6f 72 64 29 5b 2d 31 (&firstword)[-1
0ad0: 5d 20 3d 20 69 61 72 67 37 3b 20 2f 2a 20 77 6f ] = iarg7; /* wo
0ae0: 72 64 38 20 2a 2f 0a 20 7b 5f 5f 76 61 5f 61 6c rd8 */. {__va_al
0af0: 69 73 74 20 6c 69 73 74 3b 0a 20 20 6c 69 73 74 ist list;. list
0b00: 2e 64 61 72 67 5b 30 5d 20 3d 20 64 61 72 67 30 .darg[0] = darg0
0b10: 3b 0a 20 20 6c 69 73 74 2e 64 61 72 67 5b 31 5d ;. list.darg[1]
0b20: 20 3d 20 64 61 72 67 31 3b 0a 20 20 6c 69 73 74 = darg1;. list
0b30: 2e 64 61 72 67 5b 32 5d 20 3d 20 64 61 72 67 32 .darg[2] = darg2
0b40: 3b 0a 20 20 6c 69 73 74 2e 64 61 72 67 5b 33 5d ;. list.darg[3]
0b50: 20 3d 20 64 61 72 67 33 3b 0a 20 20 6c 69 73 74 = darg3;. list
0b60: 2e 64 61 72 67 5b 34 5d 20 3d 20 64 61 72 67 34 .darg[4] = darg4
0b70: 3b 0a 20 20 6c 69 73 74 2e 64 61 72 67 5b 35 5d ;. list.darg[5]
0b80: 20 3d 20 64 61 72 67 35 3b 0a 20 20 6c 69 73 74 = darg5;. list
0b90: 2e 64 61 72 67 5b 36 5d 20 3d 20 64 61 72 67 36 .darg[6] = darg6
0ba0: 3b 0a 20 20 6c 69 73 74 2e 64 61 72 67 5b 37 5d ;. list.darg[7]
0bb0: 20 3d 20 64 61 72 67 37 3b 0a 20 20 6c 69 73 74 = darg7;. list
0bc0: 2e 66 61 72 67 5b 30 5d 20 3d 20 66 61 72 67 30 .farg[0] = farg0
0bd0: 3b 0a 20 20 6c 69 73 74 2e 66 61 72 67 5b 31 5d ;. list.farg[1]
0be0: 20 3d 20 66 61 72 67 31 3b 0a 20 20 6c 69 73 74 = farg1;. list
0bf0: 2e 66 61 72 67 5b 32 5d 20 3d 20 66 61 72 67 32 .farg[2] = farg2
0c00: 3b 0a 20 20 6c 69 73 74 2e 66 61 72 67 5b 33 5d ;. list.farg[3]
0c10: 20 3d 20 66 61 72 67 33 3b 0a 20 20 6c 69 73 74 = farg3;. list
0c20: 2e 66 61 72 67 5b 34 5d 20 3d 20 66 61 72 67 34 .farg[4] = farg4
0c30: 3b 0a 20 20 6c 69 73 74 2e 66 61 72 67 5b 35 5d ;. list.farg[5]
0c40: 20 3d 20 66 61 72 67 35 3b 0a 20 20 6c 69 73 74 = farg5;. list
0c50: 2e 66 61 72 67 5b 36 5d 20 3d 20 66 61 72 67 36 .farg[6] = farg6
0c60: 3b 0a 20 20 6c 69 73 74 2e 66 61 72 67 5b 37 5d ;. list.farg[7]
0c70: 20 3d 20 66 61 72 67 37 3b 0a 20 20 2f 2a 20 50 = farg7;. /* P
0c80: 72 65 70 61 72 65 20 74 68 65 20 76 61 5f 61 6c repare the va_al
0c90: 69 73 74 2e 20 2a 2f 0a 20 20 6c 69 73 74 2e 66 ist. */. list.f
0ca0: 6c 61 67 73 20 3d 20 30 3b 0a 20 20 6c 69 73 74 lags = 0;. list
0cb0: 2e 61 70 74 72 20 3d 20 28 6c 6f 6e 67 29 28 26 .aptr = (long)(&
0cc0: 66 69 72 73 74 77 6f 72 64 20 2d 20 38 29 3b 0a firstword - 8);.
0cd0: 20 20 6c 69 73 74 2e 72 61 64 64 72 20 3d 20 28 list.raddr = (
0ce0: 76 6f 69 64 2a 29 30 3b 0a 20 20 6c 69 73 74 2e void*)0;. list.
0cf0: 72 74 79 70 65 20 3d 20 5f 5f 56 41 76 6f 69 64 rtype = __VAvoid
0d00: 3b 0a 20 20 6c 69 73 74 2e 6d 65 6d 61 72 67 70 ;. list.memargp
0d10: 74 72 20 3d 20 28 6c 6f 6e 67 29 26 66 69 72 73 tr = (long)&firs
0d20: 74 77 6f 72 64 3b 0a 20 20 6c 69 73 74 2e 61 6e tword;. list.an
0d30: 75 6d 20 3d 20 30 3b 0a 20 20 2f 2a 20 43 61 6c um = 0;. /* Cal
0d40: 6c 20 76 61 63 61 6c 6c 5f 66 75 6e 63 74 69 6f l vacall_functio
0d50: 6e 2e 20 54 68 65 20 6d 61 63 72 6f 73 20 64 6f n. The macros do
0d60: 20 61 6c 6c 20 74 68 65 20 72 65 73 74 2e 20 2a all the rest. *
0d70: 2f 0a 23 69 66 6e 64 65 66 20 52 45 45 4e 54 52 /.#ifndef REENTR
0d80: 41 4e 54 0a 20 20 28 2a 28 74 39 20 3d 20 76 61 ANT. (*(t9 = va
0d90: 63 61 6c 6c 5f 66 75 6e 63 74 69 6f 6e 29 29 20 call_function))
0da0: 28 26 6c 69 73 74 29 3b 0a 23 65 6c 73 65 20 2f (&list);.#else /
0db0: 2a 20 52 45 45 4e 54 52 41 4e 54 20 2a 2f 0a 20 * REENTRANT */.
0dc0: 20 28 2a 28 74 39 20 3d 20 65 6e 76 2d 3e 76 61 (*(t9 = env->va
0dd0: 63 61 6c 6c 5f 66 75 6e 63 74 69 6f 6e 29 29 20 call_function))
0de0: 28 65 6e 76 2d 3e 61 72 67 2c 26 6c 69 73 74 29 (env->arg,&list)
0df0: 3b 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 20 50 75 ;.#endif. /* Pu
0e00: 74 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 t return value i
0e10: 6e 74 6f 20 70 72 6f 70 65 72 20 72 65 67 69 73 nto proper regis
0e20: 74 65 72 2e 20 2a 2f 0a 20 20 69 66 20 28 6c 69 ter. */. if (li
0e30: 73 74 2e 72 74 79 70 65 20 3d 3d 20 5f 5f 56 41 st.rtype == __VA
0e40: 76 6f 69 64 29 20 7b 0a 20 20 7d 20 65 6c 73 65 void) {. } else
0e50: 0a 20 20 69 66 20 28 6c 69 73 74 2e 72 74 79 70 . if (list.rtyp
0e60: 65 20 3d 3d 20 5f 5f 56 41 63 68 61 72 29 20 7b e == __VAchar) {
0e70: 0a 20 20 20 20 69 72 65 74 20 3d 20 6c 69 73 74 . iret = list
0e80: 2e 74 6d 70 2e 5f 63 68 61 72 3b 0a 20 20 7d 20 .tmp._char;. }
0e90: 65 6c 73 65 0a 20 20 69 66 20 28 6c 69 73 74 2e else. if (list.
0ea0: 72 74 79 70 65 20 3d 3d 20 5f 5f 56 41 73 63 68 rtype == __VAsch
0eb0: 61 72 29 20 7b 0a 20 20 20 20 69 72 65 74 20 3d ar) {. iret =
0ec0: 20 6c 69 73 74 2e 74 6d 70 2e 5f 73 63 68 61 72 list.tmp._schar
0ed0: 3b 0a 20 20 7d 20 65 6c 73 65 0a 20 20 69 66 20 ;. } else. if
0ee0: 28 6c 69 73 74 2e 72 74 79 70 65 20 3d 3d 20 5f (list.rtype == _
0ef0: 5f 56 41 75 63 68 61 72 29 20 7b 0a 20 20 20 20 _VAuchar) {.
0f00: 69 72 65 74 20 3d 20 6c 69 73 74 2e 74 6d 70 2e iret = list.tmp.
0f10: 5f 75 63 68 61 72 3b 0a 20 20 7d 20 65 6c 73 65 _uchar;. } else
0f20: 0a 20 20 69 66 20 28 6c 69 73 74 2e 72 74 79 70 . if (list.rtyp
0f30: 65 20 3d 3d 20 5f 5f 56 41 73 68 6f 72 74 29 20 e == __VAshort)
0f40: 7b 0a 20 20 20 20 69 72 65 74 20 3d 20 6c 69 73 {. iret = lis
0f50: 74 2e 74 6d 70 2e 5f 73 68 6f 72 74 3b 0a 20 20 t.tmp._short;.
0f60: 7d 20 65 6c 73 65 0a 20 20 69 66 20 28 6c 69 73 } else. if (lis
0f70: 74 2e 72 74 79 70 65 20 3d 3d 20 5f 5f 56 41 75 t.rtype == __VAu
0f80: 73 68 6f 72 74 29 20 7b 0a 20 20 20 20 69 72 65 short) {. ire
0f90: 74 20 3d 20 6c 69 73 74 2e 74 6d 70 2e 5f 75 73 t = list.tmp._us
0fa0: 68 6f 72 74 3b 0a 20 20 7d 20 65 6c 73 65 0a 20 hort;. } else.
0fb0: 20 69 66 20 28 6c 69 73 74 2e 72 74 79 70 65 20 if (list.rtype
0fc0: 3d 3d 20 5f 5f 56 41 69 6e 74 29 20 7b 0a 20 20 == __VAint) {.
0fd0: 20 20 69 72 65 74 20 3d 20 6c 69 73 74 2e 74 6d iret = list.tm
0fe0: 70 2e 5f 69 6e 74 3b 0a 20 20 7d 20 65 6c 73 65 p._int;. } else
0ff0: 0a 20 20 69 66 20 28 6c 69 73 74 2e 72 74 79 70 . if (list.rtyp
1000: 65 20 3d 3d 20 5f 5f 56 41 75 69 6e 74 29 20 7b e == __VAuint) {
1010: 0a 20 20 20 20 69 72 65 74 20 3d 20 6c 69 73 74 . iret = list
1020: 2e 74 6d 70 2e 5f 75 69 6e 74 3b 0a 20 20 7d 20 .tmp._uint;. }
1030: 65 6c 73 65 0a 20 20 69 66 20 28 6c 69 73 74 2e else. if (list.
1040: 72 74 79 70 65 20 3d 3d 20 5f 5f 56 41 6c 6f 6e rtype == __VAlon
1050: 67 29 20 7b 0a 20 20 20 20 69 72 65 74 20 3d 20 g) {. iret =
1060: 6c 69 73 74 2e 74 6d 70 2e 5f 6c 6f 6e 67 3b 0a list.tmp._long;.
1070: 20 20 7d 20 65 6c 73 65 0a 20 20 69 66 20 28 6c } else. if (l
1080: 69 73 74 2e 72 74 79 70 65 20 3d 3d 20 5f 5f 56 ist.rtype == __V
1090: 41 75 6c 6f 6e 67 29 20 7b 0a 20 20 20 20 69 72 Aulong) {. ir
10a0: 65 74 20 3d 20 6c 69 73 74 2e 74 6d 70 2e 5f 75 et = list.tmp._u
10b0: 6c 6f 6e 67 3b 0a 20 20 7d 20 65 6c 73 65 0a 20 long;. } else.
10c0: 20 69 66 20 28 6c 69 73 74 2e 72 74 79 70 65 20 if (list.rtype
10d0: 3d 3d 20 5f 5f 56 41 6c 6f 6e 67 6c 6f 6e 67 29 == __VAlonglong)
10e0: 20 7b 0a 20 20 20 20 69 72 65 74 20 3d 20 6c 69 {. iret = li
10f0: 73 74 2e 74 6d 70 2e 5f 6c 6f 6e 67 6c 6f 6e 67 st.tmp._longlong
1100: 3b 0a 20 20 7d 20 65 6c 73 65 0a 20 20 69 66 20 ;. } else. if
1110: 28 6c 69 73 74 2e 72 74 79 70 65 20 3d 3d 20 5f (list.rtype == _
1120: 5f 56 41 75 6c 6f 6e 67 6c 6f 6e 67 29 20 7b 0a _VAulonglong) {.
1130: 20 20 20 20 69 72 65 74 20 3d 20 6c 69 73 74 2e iret = list.
1140: 74 6d 70 2e 5f 75 6c 6f 6e 67 6c 6f 6e 67 3b 0a tmp._ulonglong;.
1150: 20 20 7d 20 65 6c 73 65 0a 20 20 69 66 20 28 6c } else. if (l
1160: 69 73 74 2e 72 74 79 70 65 20 3d 3d 20 5f 5f 56 ist.rtype == __V
1170: 41 66 6c 6f 61 74 29 20 7b 0a 20 20 20 20 66 72 Afloat) {. fr
1180: 65 74 20 3d 20 6c 69 73 74 2e 74 6d 70 2e 5f 66 et = list.tmp._f
1190: 6c 6f 61 74 3b 0a 20 20 7d 20 65 6c 73 65 0a 20 loat;. } else.
11a0: 20 69 66 20 28 6c 69 73 74 2e 72 74 79 70 65 20 if (list.rtype
11b0: 3d 3d 20 5f 5f 56 41 64 6f 75 62 6c 65 29 20 7b == __VAdouble) {
11c0: 0a 20 20 20 20 64 72 65 74 20 3d 20 6c 69 73 74 . dret = list
11d0: 2e 74 6d 70 2e 5f 64 6f 75 62 6c 65 3b 0a 20 20 .tmp._double;.
11e0: 7d 20 65 6c 73 65 0a 20 20 69 66 20 28 6c 69 73 } else. if (lis
11f0: 74 2e 72 74 79 70 65 20 3d 3d 20 5f 5f 56 41 76 t.rtype == __VAv
1200: 6f 69 64 70 29 20 7b 0a 20 20 20 20 69 72 65 74 oidp) {. iret
1210: 20 3d 20 28 6c 6f 6e 67 29 6c 69 73 74 2e 74 6d = (long)list.tm
1220: 70 2e 5f 70 74 72 3b 0a 20 20 7d 20 65 6c 73 65 p._ptr;. } else
1230: 0a 20 20 69 66 20 28 6c 69 73 74 2e 72 74 79 70 . if (list.rtyp
1240: 65 20 3d 3d 20 5f 5f 56 41 73 74 72 75 63 74 29 e == __VAstruct)
1250: 20 7b 0a 20 20 20 20 69 66 20 28 6c 69 73 74 2e {. if (list.
1260: 66 6c 61 67 73 20 26 20 5f 5f 56 41 5f 50 43 43 flags & __VA_PCC
1270: 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 29 20 _STRUCT_RETURN)
1280: 7b 0a 20 20 20 20 20 20 2f 2a 20 70 63 63 20 73 {. /* pcc s
1290: 74 72 75 63 74 20 72 65 74 75 72 6e 20 63 6f 6e truct return con
12a0: 76 65 6e 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 vention */.
12b0: 20 69 72 65 74 20 3d 20 28 5f 5f 76 61 77 6f 72 iret = (__vawor
12c0: 64 29 20 6c 69 73 74 2e 72 61 64 64 72 3b 0a 20 d) list.raddr;.
12d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 } else {.
12e0: 20 20 2f 2a 20 6e 6f 72 6d 61 6c 20 73 74 72 75 /* normal stru
12f0: 63 74 20 72 65 74 75 72 6e 20 63 6f 6e 76 65 6e ct return conven
1300: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 tion */. if
1310: 20 28 6c 69 73 74 2e 66 6c 61 67 73 20 26 20 5f (list.flags & _
1320: 5f 56 41 5f 52 45 47 49 53 54 45 52 5f 53 54 52 _VA_REGISTER_STR
1330: 55 43 54 5f 52 45 54 55 52 4e 29 20 7b 0a 20 20 UCT_RETURN) {.
1340: 20 20 20 20 20 20 69 66 20 28 6c 69 73 74 2e 66 if (list.f
1350: 6c 61 67 73 20 26 20 5f 5f 56 41 5f 47 43 43 5f lags & __VA_GCC_
1360: 53 54 52 55 43 54 5f 52 45 54 55 52 4e 29 20 7b STRUCT_RETURN) {
1370: 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 67 63 . /* gc
1380: 63 20 72 65 74 75 72 6e 73 20 73 74 72 75 63 74 c returns struct
1390: 73 20 6f 66 20 73 69 7a 65 20 31 2c 32 2c 34 2c s of size 1,2,4,
13a0: 38 20 69 6e 20 72 65 67 69 73 74 65 72 73 2e 20 8 in registers.
13b0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 */. if
13c0: 28 6c 69 73 74 2e 72 73 69 7a 65 20 3d 3d 20 73 (list.rsize == s
13d0: 69 7a 65 6f 66 28 63 68 61 72 29 29 20 7b 0a 20 izeof(char)) {.
13e0: 20 20 20 20 20 20 20 20 20 20 20 69 72 65 74 20 iret
13f0: 3d 20 2a 28 75 6e 73 69 67 6e 65 64 20 63 68 61 = *(unsigned cha
1400: 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 3b r *) list.raddr;
1410: 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els
1420: 65 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 e. if (
1430: 6c 69 73 74 2e 72 73 69 7a 65 20 3d 3d 20 73 69 list.rsize == si
1440: 7a 65 6f 66 28 73 68 6f 72 74 29 29 20 7b 0a 20 zeof(short)) {.
1450: 20 20 20 20 20 20 20 20 20 20 20 69 72 65 74 20 iret
1460: 3d 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f = *(unsigned sho
1470: 72 74 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 rt *) list.raddr
1480: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c ;. } el
1490: 73 65 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 se. if
14a0: 28 6c 69 73 74 2e 72 73 69 7a 65 20 3d 3d 20 73 (list.rsize == s
14b0: 69 7a 65 6f 66 28 69 6e 74 29 29 20 7b 0a 20 20 izeof(int)) {.
14c0: 20 20 20 20 20 20 20 20 20 20 69 72 65 74 20 3d iret =
14d0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 *(unsigned int
14e0: 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 3b 0a 20 *) list.raddr;.
14f0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 0a } else.
1500: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 if (li
1510: 73 74 2e 72 73 69 7a 65 20 3d 3d 20 73 69 7a 65 st.rsize == size
1520: 6f 66 28 6c 6f 6e 67 20 6c 6f 6e 67 29 29 20 7b of(long long)) {
1530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 72 65 . ire
1540: 74 20 3d 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c t = *(unsigned l
1550: 6f 6e 67 20 6c 6f 6e 67 20 2a 29 20 6c 69 73 74 ong long *) list
1560: 2e 72 61 64 64 72 3b 0a 20 20 20 20 20 20 20 20 .raddr;.
1570: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }. } el
1580: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 2f se {. /
1590: 2a 20 63 63 20 72 65 74 75 72 6e 73 20 73 74 72 * cc returns str
15a0: 75 63 74 73 20 6f 66 20 73 69 7a 65 20 3c 3d 20 ucts of size <=
15b0: 31 36 20 69 6e 20 72 65 67 69 73 74 65 72 73 2e 16 in registers.
15c0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a */. /*
15d0: 20 4d 61 79 62 65 20 74 68 69 73 20 62 69 67 20 Maybe this big
15e0: 69 66 20 63 61 73 63 61 64 65 20 63 6f 75 6c 64 if cascade could
15f0: 20 62 65 20 72 65 70 6c 61 63 65 64 20 77 69 74 be replaced wit
1600: 68 0a 20 20 20 20 20 20 20 20 20 20 20 2a 20 69 h. * i
1610: 66 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 3e 20 f (list.rsize >
1620: 30 20 26 26 20 6c 69 73 74 2e 72 73 69 7a 65 20 0 && list.rsize
1630: 3c 3d 20 31 36 29 0a 20 20 20 20 20 20 20 20 20 <= 16).
1640: 20 20 2a 20 20 20 5f 5f 61 73 6d 5f 5f 20 28 22 * __asm__ ("
1650: 6c 64 6c 20 24 32 2c 25 30 20 3b 20 6c 64 72 20 ldl $2,%0 ; ldr
1660: 24 32 2c 25 31 22 0a 20 20 20 20 20 20 20 20 20 $2,%1".
1670: 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 3a * :
1680: 20 3a 20 22 6d 22 20 28 28 28 75 6e 73 69 67 6e : "m" (((unsign
1690: 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e ed char *) list.
16a0: 72 61 64 64 72 29 5b 30 5d 29 2c 0a 20 20 20 20 raddr)[0]),.
16b0: 20 20 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 *
16c0: 20 20 20 20 20 20 20 20 22 6d 22 20 28 28 28 75 "m" (((u
16d0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
16e0: 6c 69 73 74 2e 72 61 64 64 72 29 5b 37 5d 29 29 list.raddr)[7]))
16f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a ;. */.
1700: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 if (li
1710: 73 74 2e 72 73 69 7a 65 20 3e 20 30 20 26 26 20 st.rsize > 0 &&
1720: 6c 69 73 74 2e 72 73 69 7a 65 20 3c 3d 20 31 36 list.rsize <= 16
1730: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ) {.
1740: 69 66 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 3d if (list.rsize =
1750: 3d 20 31 29 20 7b 0a 20 20 20 20 20 20 20 20 20 = 1) {.
1760: 20 20 20 20 20 69 72 65 74 20 3d 20 20 20 28 5f iret = (_
1770: 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e _vaword)((unsign
1780: 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e ed char *) list.
1790: 72 61 64 64 72 29 5b 30 5d 20 3c 3c 20 35 36 3b raddr)[0] << 56;
17a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e
17b0: 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 lse.
17c0: 69 66 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 3d if (list.rsize =
17d0: 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 20 20 20 = 2) {.
17e0: 20 20 20 20 20 69 72 65 74 20 3d 20 20 28 28 5f iret = ((_
17f0: 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e _vaword)((unsign
1800: 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e ed char *) list.
1810: 72 61 64 64 72 29 5b 30 5d 20 3c 3c 20 35 36 29 raddr)[0] << 56)
1820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1830: 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 | ((__vawor
1840: 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 d)((unsigned cha
1850: 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 r *) list.raddr)
1860: 5b 31 5d 20 3c 3c 20 34 38 29 3b 0a 20 20 20 20 [1] << 48);.
1870: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 0a 20 } else.
1880: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c if (l
1890: 69 73 74 2e 72 73 69 7a 65 20 3d 3d 20 33 29 20 ist.rsize == 3)
18a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
18b0: 69 72 65 74 20 3d 20 20 28 28 5f 5f 76 61 77 6f iret = ((__vawo
18c0: 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 rd)((unsigned ch
18d0: 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 ar *) list.raddr
18e0: 29 5b 30 5d 20 3c 3c 20 35 36 29 0a 20 20 20 20 )[0] << 56).
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1900: 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 | ((__vaword)((u
1910: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
1920: 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 5d 20 3c list.raddr)[1] <
1930: 3c 20 34 38 29 0a 20 20 20 20 20 20 20 20 20 20 < 48).
1940: 20 20 20 20 20 20 20 20 20 20 7c 20 28 28 5f 5f | ((__
1950: 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 vaword)((unsigne
1960: 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 d char *) list.r
1970: 61 64 64 72 29 5b 32 5d 20 3c 3c 20 34 30 29 3b addr)[2] << 40);
1980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e
1990: 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 lse.
19a0: 69 66 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 3d if (list.rsize =
19b0: 3d 20 34 29 20 7b 0a 20 20 20 20 20 20 20 20 20 = 4) {.
19c0: 20 20 20 20 20 69 72 65 74 20 3d 20 20 28 28 5f iret = ((_
19d0: 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e _vaword)((unsign
19e0: 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e ed char *) list.
19f0: 72 61 64 64 72 29 5b 30 5d 20 3c 3c 20 35 36 29 raddr)[0] << 56)
1a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1a10: 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 | ((__vawor
1a20: 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 d)((unsigned cha
1a30: 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 r *) list.raddr)
1a40: 5b 31 5d 20 3c 3c 20 34 38 29 0a 20 20 20 20 20 [1] << 48).
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c |
1a60: 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e ((__vaword)((un
1a70: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c signed char *) l
1a80: 69 73 74 2e 72 61 64 64 72 29 5b 32 5d 20 3c 3c ist.raddr)[2] <<
1a90: 20 34 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 40).
1aa0: 20 20 20 20 20 20 20 20 20 7c 20 28 28 5f 5f 76 | ((__v
1ab0: 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 aword)((unsigned
1ac0: 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 char *) list.ra
1ad0: 64 64 72 29 5b 33 5d 20 3c 3c 20 33 32 29 3b 0a ddr)[3] << 32);.
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
1af0: 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 se. i
1b00: 66 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 3d 3d f (list.rsize ==
1b10: 20 35 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 5) {.
1b20: 20 20 20 20 69 72 65 74 20 3d 20 20 28 28 5f 5f iret = ((__
1b30: 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 vaword)((unsigne
1b40: 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 d char *) list.r
1b50: 61 64 64 72 29 5b 30 5d 20 3c 3c 20 35 36 29 0a addr)[0] << 56).
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b70: 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 | ((__vaword
1b80: 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 )((unsigned char
1b90: 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b *) list.raddr)[
1ba0: 31 5d 20 3c 3c 20 34 38 29 0a 20 20 20 20 20 20 1] << 48).
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 |
1bc0: 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 ((__vaword)((uns
1bd0: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 igned char *) li
1be0: 73 74 2e 72 61 64 64 72 29 5b 32 5d 20 3c 3c 20 st.raddr)[2] <<
1bf0: 34 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 40).
1c00: 20 20 20 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 | ((__va
1c10: 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 word)((unsigned
1c20: 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 char *) list.rad
1c30: 64 72 29 5b 33 5d 20 3c 3c 20 33 32 29 0a 20 20 dr)[3] << 32).
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c50: 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 | ((__vaword)(
1c60: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a (unsigned char *
1c70: 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 34 5d ) list.raddr)[4]
1c80: 20 3c 3c 20 32 34 29 3b 0a 20 20 20 20 20 20 20 << 24);.
1c90: 20 20 20 20 20 7d 20 65 6c 73 65 0a 20 20 20 20 } else.
1ca0: 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 74 if (list
1cb0: 2e 72 73 69 7a 65 20 3d 3d 20 36 29 20 7b 0a 20 .rsize == 6) {.
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 72 65 ire
1cd0: 74 20 3d 20 20 28 28 5f 5f 76 61 77 6f 72 64 29 t = ((__vaword)
1ce0: 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ((unsigned char
1cf0: 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 30 *) list.raddr)[0
1d00: 5d 20 3c 3c 20 35 36 29 0a 20 20 20 20 20 20 20 ] << 56).
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 28 | (
1d20: 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 (__vaword)((unsi
1d30: 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 gned char *) lis
1d40: 74 2e 72 61 64 64 72 29 5b 31 5d 20 3c 3c 20 34 t.raddr)[1] << 4
1d50: 38 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 8).
1d60: 20 20 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 | ((__vaw
1d70: 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 ord)((unsigned c
1d80: 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 har *) list.radd
1d90: 72 29 5b 32 5d 20 3c 3c 20 34 30 29 0a 20 20 20 r)[2] << 40).
1da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1db0: 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 | ((__vaword)((
1dc0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 unsigned char *)
1dd0: 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 33 5d 20 list.raddr)[3]
1de0: 3c 3c 20 33 32 29 0a 20 20 20 20 20 20 20 20 20 << 32).
1df0: 20 20 20 20 20 20 20 20 20 20 20 7c 20 28 28 5f | ((_
1e00: 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e _vaword)((unsign
1e10: 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e ed char *) list.
1e20: 72 61 64 64 72 29 5b 34 5d 20 3c 3c 20 32 34 29 raddr)[4] << 24)
1e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1e40: 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 | ((__vawor
1e50: 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 d)((unsigned cha
1e60: 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 r *) list.raddr)
1e70: 5b 35 5d 20 3c 3c 20 31 36 29 3b 0a 20 20 20 20 [5] << 16);.
1e80: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 0a 20 } else.
1e90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c if (l
1ea0: 69 73 74 2e 72 73 69 7a 65 20 3d 3d 20 37 29 20 ist.rsize == 7)
1eb0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
1ec0: 69 72 65 74 20 3d 20 20 28 28 5f 5f 76 61 77 6f iret = ((__vawo
1ed0: 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 rd)((unsigned ch
1ee0: 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 ar *) list.raddr
1ef0: 29 5b 30 5d 20 3c 3c 20 35 36 29 0a 20 20 20 20 )[0] << 56).
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f10: 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 | ((__vaword)((u
1f20: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
1f30: 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 5d 20 3c list.raddr)[1] <
1f40: 3c 20 34 38 29 0a 20 20 20 20 20 20 20 20 20 20 < 48).
1f50: 20 20 20 20 20 20 20 20 20 20 7c 20 28 28 5f 5f | ((__
1f60: 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 vaword)((unsigne
1f70: 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 d char *) list.r
1f80: 61 64 64 72 29 5b 32 5d 20 3c 3c 20 34 30 29 0a addr)[2] << 40).
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fa0: 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 | ((__vaword
1fb0: 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 )((unsigned char
1fc0: 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b *) list.raddr)[
1fd0: 33 5d 20 3c 3c 20 33 32 29 0a 20 20 20 20 20 20 3] << 32).
1fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 |
1ff0: 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 ((__vaword)((uns
2000: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 igned char *) li
2010: 73 74 2e 72 61 64 64 72 29 5b 34 5d 20 3c 3c 20 st.raddr)[4] <<
2020: 32 34 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 24).
2030: 20 20 20 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 | ((__va
2040: 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 word)((unsigned
2050: 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 char *) list.rad
2060: 64 72 29 5b 35 5d 20 3c 3c 20 31 36 29 0a 20 20 dr)[5] << 16).
2070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2080: 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 | ((__vaword)(
2090: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a (unsigned char *
20a0: 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 36 5d ) list.raddr)[6]
20b0: 20 3c 3c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 << 8);.
20c0: 20 20 20 20 7d 20 65 6c 73 65 0a 20 20 20 20 20 } else.
20d0: 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 74 2e if (list.
20e0: 72 73 69 7a 65 20 3e 3d 20 38 20 26 26 20 6c 69 rsize >= 8 && li
20f0: 73 74 2e 72 73 69 7a 65 20 3c 3d 20 31 36 29 20 st.rsize <= 16)
2100: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
2110: 69 72 65 74 20 3d 20 20 28 28 5f 5f 76 61 77 6f iret = ((__vawo
2120: 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 rd)((unsigned ch
2130: 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 ar *) list.raddr
2140: 29 5b 30 5d 20 3c 3c 20 35 36 29 0a 20 20 20 20 )[0] << 56).
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2160: 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 | ((__vaword)((u
2170: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
2180: 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 5d 20 3c list.raddr)[1] <
2190: 3c 20 34 38 29 0a 20 20 20 20 20 20 20 20 20 20 < 48).
21a0: 20 20 20 20 20 20 20 20 20 20 7c 20 28 28 5f 5f | ((__
21b0: 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 vaword)((unsigne
21c0: 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 d char *) list.r
21d0: 61 64 64 72 29 5b 32 5d 20 3c 3c 20 34 30 29 0a addr)[2] << 40).
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21f0: 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 | ((__vaword
2200: 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 )((unsigned char
2210: 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b *) list.raddr)[
2220: 33 5d 20 3c 3c 20 33 32 29 0a 20 20 20 20 20 20 3] << 32).
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 |
2240: 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 ((__vaword)((uns
2250: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 igned char *) li
2260: 73 74 2e 72 61 64 64 72 29 5b 34 5d 20 3c 3c 20 st.raddr)[4] <<
2270: 32 34 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 24).
2280: 20 20 20 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 | ((__va
2290: 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 word)((unsigned
22a0: 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 char *) list.rad
22b0: 64 72 29 5b 35 5d 20 3c 3c 20 31 36 29 0a 20 20 dr)[5] << 16).
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22d0: 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 | ((__vaword)(
22e0: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a (unsigned char *
22f0: 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 36 5d ) list.raddr)[6]
2300: 20 3c 3c 20 38 29 0a 20 20 20 20 20 20 20 20 20 << 8).
2310: 20 20 20 20 20 20 20 20 20 20 20 7c 20 20 28 5f | (_
2320: 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e _vaword)((unsign
2330: 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e ed char *) list.
2340: 72 61 64 64 72 29 5b 37 5d 3b 0a 20 20 20 20 20 raddr)[7];.
2350: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 79 62 /* Mayb
2360: 65 20 74 68 69 73 20 62 69 67 20 69 66 20 63 61 e this big if ca
2370: 73 63 61 64 65 20 63 6f 75 6c 64 20 62 65 20 72 scade could be r
2380: 65 70 6c 61 63 65 64 20 77 69 74 68 0a 20 20 20 eplaced with.
2390: 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 69 66 * if
23a0: 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 3e 20 38 (list.rsize > 8
23b0: 20 26 26 20 6c 69 73 74 2e 72 73 69 7a 65 20 3c && list.rsize <
23c0: 3d 20 31 36 29 0a 20 20 20 20 20 20 20 20 20 20 = 16).
23d0: 20 20 20 20 20 2a 20 20 20 5f 5f 61 73 6d 5f 5f * __asm__
23e0: 20 28 22 6c 64 6c 20 24 33 2c 25 30 20 3b 20 6c ("ldl $3,%0 ; l
23f0: 64 72 20 24 33 2c 25 31 22 0a 20 20 20 20 20 20 dr $3,%1".
2400: 20 20 20 20 20 20 20 20 20 2a 20 20 20 20 20 20 *
2410: 20 20 20 20 20 20 3a 20 3a 20 22 6d 22 20 28 28 : : "m" ((
2420: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a (unsigned char *
2430: 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 38 5d ) list.raddr)[8]
2440: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ),.
2450: 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 *
2460: 20 20 20 22 6d 22 20 28 28 28 75 6e 73 69 67 6e "m" (((unsign
2470: 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e ed char *) list.
2480: 72 61 64 64 72 29 5b 31 35 5d 29 29 3b 0a 20 20 raddr)[15]));.
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a */.
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
24b0: 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 3d 3d 20 (list.rsize ==
24c0: 38 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 8) {.
24d0: 20 20 20 7d 20 65 6c 73 65 0a 20 20 20 20 20 20 } else.
24e0: 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 74 if (list
24f0: 2e 72 73 69 7a 65 20 3d 3d 20 39 29 20 7b 0a 20 .rsize == 9) {.
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
2510: 72 65 74 32 20 3d 20 20 20 28 5f 5f 76 61 77 6f ret2 = (__vawo
2520: 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 rd)((unsigned ch
2530: 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 ar *) list.raddr
2540: 29 5b 38 5d 20 3c 3c 20 35 36 3b 0a 20 20 20 20 )[8] << 56;.
2550: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
2560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i
2570: 66 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 3d 3d f (list.rsize ==
2580: 20 31 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 10) {.
2590: 20 20 20 20 20 20 20 69 72 65 74 32 20 3d 20 20 iret2 =
25a0: 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 ((__vaword)((uns
25b0: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 igned char *) li
25c0: 73 74 2e 72 61 64 64 72 29 5b 38 5d 20 3c 3c 20 st.raddr)[8] <<
25d0: 35 36 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 56).
25e0: 20 20 20 20 20 20 20 20 20 20 20 7c 20 28 28 5f | ((_
25f0: 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e _vaword)((unsign
2600: 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e ed char *) list.
2610: 72 61 64 64 72 29 5b 39 5d 20 3c 3c 20 34 38 29 raddr)[9] << 48)
2620: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;.
2630: 7d 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 } else.
2640: 20 20 20 20 20 69 66 20 28 6c 69 73 74 2e 72 73 if (list.rs
2650: 69 7a 65 20 3d 3d 20 31 31 29 20 7b 0a 20 20 20 ize == 11) {.
2660: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 72 65 ire
2670: 74 32 20 3d 20 20 28 28 5f 5f 76 61 77 6f 72 64 t2 = ((__vaword
2680: 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 )((unsigned char
2690: 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b *) list.raddr)[
26a0: 38 5d 20 3c 3c 20 35 36 29 0a 20 20 20 20 20 20 8] << 56).
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26c0: 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 | ((__vaword)((
26d0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 unsigned char *)
26e0: 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 39 5d 20 list.raddr)[9]
26f0: 3c 3c 20 34 38 29 0a 20 20 20 20 20 20 20 20 20 << 48).
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 |
2710: 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 ((__vaword)((uns
2720: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 igned char *) li
2730: 73 74 2e 72 61 64 64 72 29 5b 31 30 5d 20 3c 3c st.raddr)[10] <<
2740: 20 34 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 40);.
2750: 20 20 20 20 7d 20 65 6c 73 65 0a 20 20 20 20 20 } else.
2760: 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 if (lis
2770: 74 2e 72 73 69 7a 65 20 3d 3d 20 31 32 29 20 7b t.rsize == 12) {
2780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2790: 20 69 72 65 74 32 20 3d 20 20 28 28 5f 5f 76 61 iret2 = ((__va
27a0: 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 word)((unsigned
27b0: 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 char *) list.rad
27c0: 64 72 29 5b 38 5d 20 3c 3c 20 35 36 29 0a 20 20 dr)[8] << 56).
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27e0: 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 | ((__vawor
27f0: 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 d)((unsigned cha
2800: 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 r *) list.raddr)
2810: 5b 39 5d 20 3c 3c 20 34 38 29 0a 20 20 20 20 20 [9] << 48).
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2830: 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 | ((__vaword)(
2840: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a (unsigned char *
2850: 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 30 ) list.raddr)[10
2860: 5d 20 3c 3c 20 34 30 29 0a 20 20 20 20 20 20 20 ] << 40).
2870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2880: 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 | ((__vaword)((u
2890: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
28a0: 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 31 5d 20 list.raddr)[11]
28b0: 3c 3c 20 33 32 29 3b 0a 20 20 20 20 20 20 20 20 << 32);.
28c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 0a 20 20 20 } else.
28d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c if (l
28e0: 69 73 74 2e 72 73 69 7a 65 20 3d 3d 20 31 33 29 ist.rsize == 13)
28f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
2900: 20 20 20 69 72 65 74 32 20 3d 20 20 28 28 5f 5f iret2 = ((__
2910: 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 vaword)((unsigne
2920: 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 d char *) list.r
2930: 61 64 64 72 29 5b 38 5d 20 3c 3c 20 35 36 29 0a addr)[8] << 56).
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2950: 20 20 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 | ((__vaw
2960: 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 ord)((unsigned c
2970: 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 har *) list.radd
2980: 72 29 5b 39 5d 20 3c 3c 20 34 38 29 0a 20 20 20 r)[9] << 48).
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29a0: 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 | ((__vaword
29b0: 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 )((unsigned char
29c0: 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b *) list.raddr)[
29d0: 31 30 5d 20 3c 3c 20 34 30 29 0a 20 20 20 20 20 10] << 40).
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29f0: 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 | ((__vaword)(
2a00: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a (unsigned char *
2a10: 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 31 ) list.raddr)[11
2a20: 5d 20 3c 3c 20 33 32 29 0a 20 20 20 20 20 20 20 ] << 32).
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a40: 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 | ((__vaword)((u
2a50: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
2a60: 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 32 5d 20 list.raddr)[12]
2a70: 3c 3c 20 32 34 29 3b 0a 20 20 20 20 20 20 20 20 << 24);.
2a80: 20 20 20 20 20 20 7d 20 65 6c 73 65 0a 20 20 20 } else.
2a90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c if (l
2aa0: 69 73 74 2e 72 73 69 7a 65 20 3d 3d 20 31 34 29 ist.rsize == 14)
2ab0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
2ac0: 20 20 20 69 72 65 74 32 20 3d 20 20 28 28 5f 5f iret2 = ((__
2ad0: 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 vaword)((unsigne
2ae0: 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 d char *) list.r
2af0: 61 64 64 72 29 5b 38 5d 20 3c 3c 20 35 36 29 0a addr)[8] << 56).
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b10: 20 20 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 | ((__vaw
2b20: 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 ord)((unsigned c
2b30: 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 har *) list.radd
2b40: 72 29 5b 39 5d 20 3c 3c 20 34 38 29 0a 20 20 20 r)[9] << 48).
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b60: 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 | ((__vaword
2b70: 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 )((unsigned char
2b80: 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b *) list.raddr)[
2b90: 31 30 5d 20 3c 3c 20 34 30 29 0a 20 20 20 20 20 10] << 40).
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bb0: 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 | ((__vaword)(
2bc0: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a (unsigned char *
2bd0: 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 31 ) list.raddr)[11
2be0: 5d 20 3c 3c 20 33 32 29 0a 20 20 20 20 20 20 20 ] << 32).
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c00: 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 | ((__vaword)((u
2c10: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
2c20: 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 32 5d 20 list.raddr)[12]
2c30: 3c 3c 20 32 34 29 0a 20 20 20 20 20 20 20 20 20 << 24).
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 |
2c50: 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 ((__vaword)((uns
2c60: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 igned char *) li
2c70: 73 74 2e 72 61 64 64 72 29 5b 31 33 5d 20 3c 3c st.raddr)[13] <<
2c80: 20 31 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20 16);.
2c90: 20 20 20 20 7d 20 65 6c 73 65 0a 20 20 20 20 20 } else.
2ca0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 if (lis
2cb0: 74 2e 72 73 69 7a 65 20 3d 3d 20 31 35 29 20 7b t.rsize == 15) {
2cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2cd0: 20 69 72 65 74 32 20 3d 20 20 28 28 5f 5f 76 61 iret2 = ((__va
2ce0: 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 word)((unsigned
2cf0: 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 char *) list.rad
2d00: 64 72 29 5b 38 5d 20 3c 3c 20 35 36 29 0a 20 20 dr)[8] << 56).
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d20: 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 | ((__vawor
2d30: 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 d)((unsigned cha
2d40: 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 r *) list.raddr)
2d50: 5b 39 5d 20 3c 3c 20 34 38 29 0a 20 20 20 20 20 [9] << 48).
2d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d70: 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 | ((__vaword)(
2d80: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a (unsigned char *
2d90: 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 30 ) list.raddr)[10
2da0: 5d 20 3c 3c 20 34 30 29 0a 20 20 20 20 20 20 20 ] << 40).
2db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2dc0: 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 | ((__vaword)((u
2dd0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
2de0: 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 31 5d 20 list.raddr)[11]
2df0: 3c 3c 20 33 32 29 0a 20 20 20 20 20 20 20 20 20 << 32).
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 |
2e10: 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 ((__vaword)((uns
2e20: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 igned char *) li
2e30: 73 74 2e 72 61 64 64 72 29 5b 31 32 5d 20 3c 3c st.raddr)[12] <<
2e40: 20 32 34 29 0a 20 20 20 20 20 20 20 20 20 20 20 24).
2e50: 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 28 28 | ((
2e60: 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 __vaword)((unsig
2e70: 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 ned char *) list
2e80: 2e 72 61 64 64 72 29 5b 31 33 5d 20 3c 3c 20 31 .raddr)[13] << 1
2e90: 36 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 6).
2ea0: 20 20 20 20 20 20 20 20 20 20 7c 20 28 28 5f 5f | ((__
2eb0: 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 vaword)((unsigne
2ec0: 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 d char *) list.r
2ed0: 61 64 64 72 29 5b 31 34 5d 20 3c 3c 20 38 29 3b addr)[14] << 8);
2ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . }
2ef0: 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 else.
2f00: 20 20 20 20 69 66 20 28 6c 69 73 74 2e 72 73 69 if (list.rsi
2f10: 7a 65 20 3d 3d 20 31 36 29 20 7b 0a 20 20 20 20 ze == 16) {.
2f20: 20 20 20 20 20 20 20 20 20 20 20 20 69 72 65 74 iret
2f30: 32 20 3d 20 20 28 28 5f 5f 76 61 77 6f 72 64 29 2 = ((__vaword)
2f40: 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ((unsigned char
2f50: 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 38 *) list.raddr)[8
2f60: 5d 20 3c 3c 20 35 36 29 0a 20 20 20 20 20 20 20 ] << 56).
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f80: 7c 20 28 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 | ((__vaword)((u
2f90: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
2fa0: 6c 69 73 74 2e 72 61 64 64 72 29 5b 39 5d 20 3c list.raddr)[9] <
2fb0: 3c 20 34 38 29 0a 20 20 20 20 20 20 20 20 20 20 < 48).
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 28 | (
2fd0: 28 5f 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 (__vaword)((unsi
2fe0: 67 6e 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 gned char *) lis
2ff0: 74 2e 72 61 64 64 72 29 5b 31 30 5d 20 3c 3c 20 t.raddr)[10] <<
3000: 34 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 40).
3010: 20 20 20 20 20 20 20 20 20 20 20 7c 20 28 28 5f | ((_
3020: 5f 76 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e _vaword)((unsign
3030: 65 64 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e ed char *) list.
3040: 72 61 64 64 72 29 5b 31 31 5d 20 3c 3c 20 33 32 raddr)[11] << 32
3050: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
3060: 20 20 20 20 20 20 20 20 20 7c 20 28 28 5f 5f 76 | ((__v
3070: 61 77 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 aword)((unsigned
3080: 20 63 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 char *) list.ra
3090: 64 64 72 29 5b 31 32 5d 20 3c 3c 20 32 34 29 0a ddr)[12] << 24).
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30b0: 20 20 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 | ((__vaw
30c0: 6f 72 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 ord)((unsigned c
30d0: 68 61 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 har *) list.radd
30e0: 72 29 5b 31 33 5d 20 3c 3c 20 31 36 29 0a 20 20 r)[13] << 16).
30f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3100: 20 20 20 20 20 7c 20 28 28 5f 5f 76 61 77 6f 72 | ((__vawor
3110: 64 29 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 d)((unsigned cha
3120: 72 20 2a 29 20 6c 69 73 74 2e 72 61 64 64 72 29 r *) list.raddr)
3130: 5b 31 34 5d 20 3c 3c 20 38 29 0a 20 20 20 20 20 [14] << 8).
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3150: 20 20 7c 20 20 28 5f 5f 76 61 77 6f 72 64 29 28 | (__vaword)(
3160: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a (unsigned char *
3170: 29 20 6c 69 73 74 2e 72 61 64 64 72 29 5b 31 35 ) list.raddr)[15
3180: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ];.
3190: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }. }
31a0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 . }.
31b0: 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 74 2e if (list.
31c0: 66 6c 61 67 73 20 26 20 5f 5f 56 41 5f 52 45 47 flags & __VA_REG
31d0: 49 53 54 45 52 5f 46 4c 4f 41 54 53 54 52 55 43 ISTER_FLOATSTRUC
31e0: 54 5f 52 45 54 55 52 4e 29 20 7b 0a 20 20 20 20 T_RETURN) {.
31f0: 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 74 if (list
3200: 2e 72 73 69 7a 65 20 3d 3d 20 73 69 7a 65 6f 66 .rsize == sizeof
3210: 28 66 6c 6f 61 74 29 29 20 7b 0a 20 20 20 20 20 (float)) {.
3220: 20 20 20 20 20 20 20 20 20 66 72 65 74 20 3d 20 fret =
3230: 2a 28 66 6c 6f 61 74 2a 29 6c 69 73 74 2e 72 61 *(float*)list.ra
3240: 64 64 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 ddr;.
3250: 20 7d 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 } else.
3260: 20 20 20 20 69 66 20 28 6c 69 73 74 2e 72 73 69 if (list.rsi
3270: 7a 65 20 3d 3d 20 32 2a 73 69 7a 65 6f 66 28 66 ze == 2*sizeof(f
3280: 6c 6f 61 74 29 29 20 7b 0a 20 20 20 20 20 20 20 loat)) {.
3290: 20 20 20 20 20 20 20 66 72 65 74 20 3d 20 2a 28 fret = *(
32a0: 66 6c 6f 61 74 2a 29 6c 69 73 74 2e 72 61 64 64 float*)list.radd
32b0: 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 r;.
32c0: 20 66 72 65 74 32 20 3d 20 2a 28 66 6c 6f 61 74 fret2 = *(float
32d0: 2a 29 28 28 63 68 61 72 2a 29 6c 69 73 74 2e 72 *)((char*)list.r
32e0: 61 64 64 72 20 2b 20 34 29 3b 0a 20 20 20 20 20 addr + 4);.
32f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
3300: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 }. i
3310: 66 20 28 6c 69 73 74 2e 66 6c 61 67 73 20 26 20 f (list.flags &
3320: 5f 5f 56 41 5f 52 45 47 49 53 54 45 52 5f 44 4f __VA_REGISTER_DO
3330: 55 42 4c 45 53 54 52 55 43 54 5f 52 45 54 55 52 UBLESTRUCT_RETUR
3340: 4e 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 N) {.
3350: 20 69 66 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 if (list.rsize
3360: 3d 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 == sizeof(double
3370: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 )) {.
3380: 20 20 20 64 72 65 74 20 3d 20 2a 28 64 6f 75 62 dret = *(doub
3390: 6c 65 2a 29 6c 69 73 74 2e 72 61 64 64 72 3b 0a le*)list.raddr;.
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
33b0: 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 se. i
33c0: 66 20 28 6c 69 73 74 2e 72 73 69 7a 65 20 3d 3d f (list.rsize ==
33d0: 20 32 2a 73 69 7a 65 6f 66 28 64 6f 75 62 6c 65 2*sizeof(double
33e0: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 )) {.
33f0: 20 20 20 64 72 65 74 20 3d 20 2a 28 64 6f 75 62 dret = *(doub
3400: 6c 65 2a 29 6c 69 73 74 2e 72 61 64 64 72 3b 0a le*)list.raddr;.
3410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 72 dr
3420: 65 74 32 20 3d 20 2a 28 64 6f 75 62 6c 65 2a 29 et2 = *(double*)
3430: 28 28 63 68 61 72 2a 29 6c 69 73 74 2e 72 61 64 ((char*)list.rad
3440: 64 72 20 2b 20 38 29 3b 0a 20 20 20 20 20 20 20 dr + 8);.
3450: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
3460: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 }. }.
3470: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d }. }. }.}
3480: 7d 0a }.