Artifact
444aa37a38ba78dd1bb4933c932888d82afa255f:
0000: 23 69 66 6e 64 65 66 20 5f 61 76 63 61 6c 6c 5f #ifndef _avcall_
0010: 6d 38 38 6b 5f 63 09 09 09 09 2f 2a 2d 2a 2d 20 m88k_c..../*-*-
0020: 43 20 2d 2a 2d 2a 2f 0a 23 64 65 66 69 6e 65 20 C -*-*/.#define
0030: 5f 61 76 63 61 6c 6c 5f 6d 38 38 6b 5f 63 0a 2f _avcall_m88k_c./
0040: 2a 2a 0a 20 20 43 6f 70 79 72 69 67 68 74 20 31 **. Copyright 1
0050: 39 39 33 20 42 69 6c 6c 20 54 72 69 67 67 73 2c 993 Bill Triggs,
0060: 20 3c 42 69 6c 6c 2e 54 72 69 67 67 73 40 69 6e <Bill.Triggs@in
0070: 72 69 61 6c 70 65 73 2e 66 72 3e 0a 20 20 43 6f rialpes.fr>. Co
0080: 70 79 72 69 67 68 74 20 31 39 39 35 2d 31 39 39 pyright 1995-199
0090: 39 20 42 72 75 6e 6f 20 48 61 69 62 6c 65 2c 20 9 Bruno Haible,
00a0: 3c 62 72 75 6e 6f 40 63 6c 69 73 70 2e 6f 72 67 <bruno@clisp.org
00b0: 3e 0a 0a 20 20 54 68 69 73 20 69 73 20 66 72 65 >.. This is fre
00c0: 65 20 73 6f 66 74 77 61 72 65 20 64 69 73 74 72 e software distr
00d0: 69 62 75 74 65 64 20 75 6e 64 65 72 20 74 68 65 ibuted under the
00e0: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 GNU General Pub
00f0: 6c 69 63 0a 20 20 4c 69 63 65 6e 63 65 20 64 65 lic. Licence de
0100: 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 20 66 scribed in the f
0110: 69 6c 65 20 43 4f 50 59 49 4e 47 2e 20 43 6f 6e ile COPYING. Con
0120: 74 61 63 74 20 74 68 65 20 61 75 74 68 6f 72 20 tact the author
0130: 69 66 0a 20 20 79 6f 75 20 64 6f 6e 27 74 20 68 if. you don't h
0140: 61 76 65 20 74 68 69 73 20 6f 72 20 63 61 6e 27 ave this or can'
0150: 74 20 6c 69 76 65 20 77 69 74 68 20 69 74 2e 20 t live with it.
0160: 54 68 65 72 65 20 69 73 20 41 42 53 4f 4c 55 54 There is ABSOLUT
0170: 45 4c 59 0a 20 20 4e 4f 20 57 41 52 52 41 4e 54 ELY. NO WARRANT
0180: 59 2c 20 65 78 70 6c 69 63 69 74 20 6f 72 20 69 Y, explicit or i
0190: 6d 70 6c 69 65 64 2c 20 6f 6e 20 74 68 69 73 20 mplied, on this
01a0: 73 6f 66 74 77 61 72 65 2e 0a 2a 2a 2f 0a 2f 2a software..**/./*
01b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
01c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
01d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
01e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
01f0: 2d 2d 2d 2d 2d 2d 0a 20 20 21 21 21 20 54 48 49 ------. !!! THI
0200: 53 20 52 4f 55 54 49 4e 45 20 4d 55 53 54 20 42 S ROUTINE MUST B
0210: 45 20 43 4f 4d 50 49 4c 45 44 20 67 63 63 20 2d E COMPILED gcc -
0220: 4f 20 2d 66 6e 6f 2d 6f 6d 69 74 2d 66 72 61 6d O -fno-omit-fram
0230: 65 2d 70 6f 69 6e 74 65 72 20 21 21 21 0a 0a 20 e-pointer !!!..
0240: 20 46 6f 72 65 69 67 6e 20 66 75 6e 63 74 69 6f Foreign functio
0250: 6e 20 69 6e 74 65 72 66 61 63 65 20 66 6f 72 20 n interface for
0260: 61 20 4d 38 38 30 30 30 20 77 69 74 68 20 67 63 a M88000 with gc
0270: 63 2e 0a 0a 20 20 54 68 69 73 20 63 61 6c 6c 73 c... This calls
0280: 20 61 20 43 20 66 75 6e 63 74 69 6f 6e 20 77 69 a C function wi
0290: 74 68 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 6c th an argument l
02a0: 69 73 74 20 62 75 69 6c 74 20 75 70 20 75 73 69 ist built up usi
02b0: 6e 67 20 6d 61 63 72 6f 73 0a 20 20 64 65 66 69 ng macros. defi
02c0: 6e 65 64 20 69 6e 20 61 76 5f 63 61 6c 6c 2e 68 ned in av_call.h
02d0: 2e 0a 0a 20 20 4d 38 38 6b 20 41 72 67 75 6d 65 ... M88k Argume
02e0: 6e 74 20 50 61 73 73 69 6e 67 20 43 6f 6e 76 65 nt Passing Conve
02f0: 6e 74 69 6f 6e 73 3a 0a 0a 20 20 41 6c 6c 20 61 ntions:.. All a
0300: 72 67 75 6d 65 6e 74 73 2c 20 65 78 63 65 70 74 rguments, except
0310: 20 74 68 65 20 6e 6f 6e 2d 73 74 72 75 63 74 73 the non-structs
0320: 20 61 6d 6f 6e 67 20 74 68 65 20 66 69 72 73 74 among the first
0330: 20 38 20 77 6f 72 64 73 2c 20 61 72 65 20 70 61 8 words, are pa
0340: 73 73 65 64 0a 20 20 6f 6e 20 74 68 65 20 73 74 ssed. on the st
0350: 61 63 6b 20 77 69 74 68 20 77 6f 72 64 20 61 6c ack with word al
0360: 69 67 6e 6d 65 6e 74 2e 20 44 6f 75 62 6c 65 73 ignment. Doubles
0370: 20 74 61 6b 65 20 74 77 6f 20 77 6f 72 64 73 20 take two words
0380: 61 6e 64 20 66 6f 72 63 65 20 64 6f 75 62 6c 65 and force double
0390: 0a 20 20 61 6c 69 67 6e 6d 65 6e 74 2e 20 53 63 . alignment. Sc
03a0: 61 6c 61 72 73 20 61 6d 6f 6e 67 20 74 68 65 20 alars among the
03b0: 66 69 72 73 74 20 38 20 77 6f 72 64 73 20 61 72 first 8 words ar
03c0: 65 20 70 61 73 73 65 64 20 69 6e 20 72 65 67 69 e passed in regi
03d0: 73 74 65 72 73 2e 0a 20 20 53 74 72 75 63 74 75 sters.. Structu
03e0: 72 65 20 61 72 67 73 20 61 72 65 20 61 72 65 20 re args are are
03f0: 70 61 73 73 65 64 20 61 73 20 74 72 75 65 20 73 passed as true s
0400: 74 72 75 63 74 75 72 65 73 20 65 6d 62 65 64 64 tructures embedd
0410: 65 64 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65 ed in the argume
0420: 6e 74 0a 20 20 73 74 61 63 6b 2e 0a 0a 20 20 54 nt. stack... T
0430: 6f 20 72 65 74 75 72 6e 20 61 20 73 74 72 75 63 o return a struc
0440: 74 75 72 65 2c 20 74 68 65 20 63 61 6c 6c 65 64 ture, the called
0450: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 70 69 65 73 function copies
0460: 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 the return valu
0470: 65 20 74 6f 20 74 68 65 0a 20 20 61 64 64 72 65 e to the. addre
0480: 73 73 20 73 75 70 70 6c 69 65 64 20 69 6e 20 72 ss supplied in r
0490: 65 67 69 73 74 65 72 20 22 72 31 32 22 2e 0a 0a egister "r12"...
04a0: 20 20 43 6f 6d 70 69 6c 65 20 74 68 69 73 20 72 Compile this r
04b0: 6f 75 74 69 6e 65 20 77 69 74 68 20 67 63 63 20 outine with gcc
04c0: 2d 4f 20 28 6f 72 20 2d 4f 32 20 2d 66 6e 6f 2d -O (or -O2 -fno-
04d0: 6f 6d 69 74 2d 66 72 61 6d 65 2d 70 6f 69 6e 74 omit-frame-point
04e0: 65 72 20 6f 72 20 2d 67 20 2d 4f 29 0a 20 20 74 er or -g -O). t
04f0: 6f 20 67 65 74 20 74 68 65 20 72 69 67 68 74 20 o get the right
0500: 72 65 67 69 73 74 65 72 20 76 61 72 69 61 62 6c register variabl
0510: 65 73 2e 20 46 6f 72 20 6f 74 68 65 72 20 63 6f es. For other co
0520: 6d 70 69 6c 65 72 73 20 75 73 65 20 74 68 65 0a mpilers use the.
0530: 20 20 70 72 65 2d 63 6f 6d 70 69 6c 65 64 20 61 pre-compiled a
0540: 73 73 65 6d 62 6c 65 72 20 76 65 72 73 69 6f 6e ssembler version
0550: 2e 0a 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .. ------------
0560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 23 69 6e ----------*/.#in
05a0: 63 6c 75 64 65 20 22 61 76 63 61 6c 6c 2e 68 2e clude "avcall.h.
05b0: 69 6e 22 0a 0a 23 64 65 66 69 6e 65 20 52 45 54 in"..#define RET
05c0: 55 52 4e 28 54 59 50 45 2c 56 41 4c 29 09 28 2a URN(TYPE,VAL).(*
05d0: 28 54 59 50 45 2a 29 6c 2d 3e 72 61 64 64 72 20 (TYPE*)l->raddr
05e0: 3d 20 28 54 59 50 45 29 28 56 41 4c 29 29 0a 0a = (TYPE)(VAL))..
05f0: 72 65 67 69 73 74 65 72 20 5f 5f 61 76 77 6f 72 register __avwor
0600: 64 2a 09 73 72 65 74 09 5f 5f 61 73 6d 5f 5f 28 d*.sret.__asm__(
0610: 22 72 31 32 22 29 3b 20 20 2f 2a 20 73 74 72 75 "r12"); /* stru
0620: 63 74 75 72 65 20 72 65 74 75 72 6e 20 70 6f 69 cture return poi
0630: 6e 74 65 72 20 2a 2f 0a 0a 69 6e 74 0a 5f 5f 62 nter */..int.__b
0640: 75 69 6c 74 69 6e 5f 61 76 63 61 6c 6c 28 61 76 uiltin_avcall(av
0650: 5f 61 6c 69 73 74 2a 20 6c 29 0a 7b 0a 20 20 72 _alist* l).{. r
0660: 65 67 69 73 74 65 72 20 5f 5f 61 76 77 6f 72 64 egister __avword
0670: 2a 09 73 70 09 5f 5f 61 73 6d 5f 5f 28 22 72 33 *.sp.__asm__("r3
0680: 31 22 29 3b 09 2f 2a 20 43 20 6e 61 6d 65 73 20 1");./* C names
0690: 66 6f 72 20 72 65 67 69 73 74 65 72 73 20 2a 2f for registers */
06a0: 0a 2f 2a 72 65 67 69 73 74 65 72 20 5f 5f 61 76 ./*register __av
06b0: 77 6f 72 64 09 69 72 65 74 09 5f 5f 61 73 6d 5f word.iret.__asm_
06c0: 5f 28 22 72 32 22 29 3b 20 2a 2f 0a 20 20 72 65 _("r2"); */. re
06d0: 67 69 73 74 65 72 20 5f 5f 61 76 77 6f 72 64 09 gister __avword.
06e0: 69 72 65 74 32 09 5f 5f 61 73 6d 5f 5f 28 22 72 iret2.__asm__("r
06f0: 33 22 29 3b 0a 20 20 72 65 67 69 73 74 65 72 20 3");. register
0700: 66 6c 6f 61 74 09 66 72 65 74 09 5f 5f 61 73 6d float.fret.__asm
0710: 5f 5f 28 22 72 32 22 29 3b 0a 20 20 72 65 67 69 __("r2");. regi
0720: 73 74 65 72 20 64 6f 75 62 6c 65 09 64 72 65 74 ster double.dret
0730: 09 5f 5f 61 73 6d 5f 5f 28 22 72 32 22 29 3b 0a .__asm__("r2");.
0740: 0a 20 20 5f 5f 61 76 77 6f 72 64 2a 20 61 72 67 . __avword* arg
0750: 66 72 61 6d 65 20 3d 20 28 73 70 20 2d 3d 20 5f frame = (sp -= _
0760: 5f 41 56 5f 41 4c 49 53 54 5f 57 4f 52 44 53 29 _AV_ALIST_WORDS)
0770: 3b 20 2f 2a 20 6d 61 6b 65 20 72 6f 6f 6d 20 66 ; /* make room f
0780: 6f 72 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 or argument list
0790: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 6c 65 6e */. int arglen
07a0: 20 3d 20 6c 2d 3e 61 70 74 72 20 2d 20 6c 2d 3e = l->aptr - l->
07b0: 61 72 67 73 3b 0a 20 20 5f 5f 61 76 77 6f 72 64 args;. __avword
07c0: 20 69 3b 0a 0a 20 20 66 6f 72 20 28 69 20 3d 20 i;.. for (i =
07d0: 30 3b 20 69 20 3c 20 61 72 67 6c 65 6e 3b 20 69 0; i < arglen; i
07e0: 2b 2b 29 09 09 2f 2a 20 70 75 73 68 20 66 75 6e ++)../* push fun
07f0: 63 74 69 6f 6e 20 61 72 67 73 20 6f 6e 74 6f 20 ction args onto
0800: 73 74 61 63 6b 20 2a 2f 0a 20 20 20 20 61 72 67 stack */. arg
0810: 66 72 61 6d 65 5b 69 5d 20 3d 20 6c 2d 3e 61 72 frame[i] = l->ar
0820: 67 73 5b 69 5d 3b 0a 0a 20 20 69 66 20 28 6c 2d gs[i];.. if (l-
0830: 3e 72 74 79 70 65 20 3d 3d 20 5f 5f 41 56 73 74 >rtype == __AVst
0840: 72 75 63 74 29 09 09 2f 2a 20 70 61 73 73 20 73 ruct)../* pass s
0850: 74 72 75 63 74 20 72 65 74 75 72 6e 20 61 64 64 truct return add
0860: 72 65 73 73 20 2a 2f 0a 20 20 20 20 73 72 65 74 ress */. sret
0870: 20 3d 20 6c 2d 3e 72 61 64 64 72 3b 0a 0a 09 09 = l->raddr;....
0880: 09 09 2f 2a 20 63 61 6c 6c 20 66 75 6e 63 74 69 ../* call functi
0890: 6f 6e 2c 20 70 61 73 73 20 38 20 61 72 67 73 20 on, pass 8 args
08a0: 69 6e 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a in registers */.
08b0: 20 20 69 20 3d 20 28 2a 6c 2d 3e 66 75 6e 63 29 i = (*l->func)
08c0: 28 6c 2d 3e 61 72 67 73 5b 30 5d 2c 20 6c 2d 3e (l->args[0], l->
08d0: 61 72 67 73 5b 31 5d 2c 20 6c 2d 3e 61 72 67 73 args[1], l->args
08e0: 5b 32 5d 2c 20 6c 2d 3e 61 72 67 73 5b 33 5d 2c [2], l->args[3],
08f0: 0a 09 09 20 6c 2d 3e 61 72 67 73 5b 34 5d 2c 20 ... l->args[4],
0900: 6c 2d 3e 61 72 67 73 5b 35 5d 2c 20 6c 2d 3e 61 l->args[5], l->a
0910: 72 67 73 5b 36 5d 2c 20 6c 2d 3e 61 72 67 73 5b rgs[6], l->args[
0920: 37 5d 29 3b 0a 0a 20 20 2f 2a 20 73 61 76 65 20 7]);.. /* save
0930: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 2a 2f 0a return value */.
0940: 20 20 69 66 20 28 6c 2d 3e 72 74 79 70 65 20 3d if (l->rtype =
0950: 3d 20 5f 5f 41 56 76 6f 69 64 29 20 7b 0a 20 20 = __AVvoid) {.
0960: 7d 20 65 6c 73 65 0a 20 20 69 66 20 28 6c 2d 3e } else. if (l->
0970: 72 74 79 70 65 20 3d 3d 20 5f 5f 41 56 77 6f 72 rtype == __AVwor
0980: 64 29 20 7b 0a 20 20 20 20 52 45 54 55 52 4e 28 d) {. RETURN(
0990: 5f 5f 61 76 77 6f 72 64 2c 20 69 29 3b 0a 20 20 __avword, i);.
09a0: 7d 20 65 6c 73 65 0a 20 20 69 66 20 28 6c 2d 3e } else. if (l->
09b0: 72 74 79 70 65 20 3d 3d 20 5f 5f 41 56 63 68 61 rtype == __AVcha
09c0: 72 29 20 7b 0a 20 20 20 20 52 45 54 55 52 4e 28 r) {. RETURN(
09d0: 63 68 61 72 2c 20 69 29 3b 0a 20 20 7d 20 65 6c char, i);. } el
09e0: 73 65 0a 20 20 69 66 20 28 6c 2d 3e 72 74 79 70 se. if (l->rtyp
09f0: 65 20 3d 3d 20 5f 5f 41 56 73 63 68 61 72 29 20 e == __AVschar)
0a00: 7b 0a 20 20 20 20 52 45 54 55 52 4e 28 73 69 67 {. RETURN(sig
0a10: 6e 65 64 20 63 68 61 72 2c 20 69 29 3b 0a 20 20 ned char, i);.
0a20: 7d 20 65 6c 73 65 0a 20 20 69 66 20 28 6c 2d 3e } else. if (l->
0a30: 72 74 79 70 65 20 3d 3d 20 5f 5f 41 56 75 63 68 rtype == __AVuch
0a40: 61 72 29 20 7b 0a 20 20 20 20 52 45 54 55 52 4e ar) {. RETURN
0a50: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2c 20 (unsigned char,
0a60: 69 29 3b 0a 20 20 7d 20 65 6c 73 65 0a 20 20 69 i);. } else. i
0a70: 66 20 28 6c 2d 3e 72 74 79 70 65 20 3d 3d 20 5f f (l->rtype == _
0a80: 5f 41 56 73 68 6f 72 74 29 20 7b 0a 20 20 20 20 _AVshort) {.
0a90: 52 45 54 55 52 4e 28 73 68 6f 72 74 2c 20 69 29 RETURN(short, i)
0aa0: 3b 0a 20 20 7d 20 65 6c 73 65 0a 20 20 69 66 20 ;. } else. if
0ab0: 28 6c 2d 3e 72 74 79 70 65 20 3d 3d 20 5f 5f 41 (l->rtype == __A
0ac0: 56 75 73 68 6f 72 74 29 20 7b 0a 20 20 20 20 52 Vushort) {. R
0ad0: 45 54 55 52 4e 28 75 6e 73 69 67 6e 65 64 20 73 ETURN(unsigned s
0ae0: 68 6f 72 74 2c 20 69 29 3b 0a 20 20 7d 20 65 6c hort, i);. } el
0af0: 73 65 0a 20 20 69 66 20 28 6c 2d 3e 72 74 79 70 se. if (l->rtyp
0b00: 65 20 3d 3d 20 5f 5f 41 56 69 6e 74 29 20 7b 0a e == __AVint) {.
0b10: 20 20 20 20 52 45 54 55 52 4e 28 69 6e 74 2c 20 RETURN(int,
0b20: 69 29 3b 0a 20 20 7d 20 65 6c 73 65 0a 20 20 69 i);. } else. i
0b30: 66 20 28 6c 2d 3e 72 74 79 70 65 20 3d 3d 20 5f f (l->rtype == _
0b40: 5f 41 56 75 69 6e 74 29 20 7b 0a 20 20 20 20 52 _AVuint) {. R
0b50: 45 54 55 52 4e 28 75 6e 73 69 67 6e 65 64 20 69 ETURN(unsigned i
0b60: 6e 74 2c 20 69 29 3b 0a 20 20 7d 20 65 6c 73 65 nt, i);. } else
0b70: 0a 20 20 69 66 20 28 6c 2d 3e 72 74 79 70 65 20 . if (l->rtype
0b80: 3d 3d 20 5f 5f 41 56 6c 6f 6e 67 29 20 7b 0a 20 == __AVlong) {.
0b90: 20 20 20 52 45 54 55 52 4e 28 6c 6f 6e 67 2c 20 RETURN(long,
0ba0: 69 29 3b 0a 20 20 7d 20 65 6c 73 65 0a 20 20 69 i);. } else. i
0bb0: 66 20 28 6c 2d 3e 72 74 79 70 65 20 3d 3d 20 5f f (l->rtype == _
0bc0: 5f 41 56 75 6c 6f 6e 67 29 20 7b 0a 20 20 20 20 _AVulong) {.
0bd0: 52 45 54 55 52 4e 28 75 6e 73 69 67 6e 65 64 20 RETURN(unsigned
0be0: 6c 6f 6e 67 2c 20 69 29 3b 0a 20 20 7d 20 65 6c long, i);. } el
0bf0: 73 65 0a 20 20 69 66 20 28 6c 2d 3e 72 74 79 70 se. if (l->rtyp
0c00: 65 20 3d 3d 20 5f 5f 41 56 6c 6f 6e 67 6c 6f 6e e == __AVlonglon
0c10: 67 20 7c 7c 20 6c 2d 3e 72 74 79 70 65 20 3d 3d g || l->rtype ==
0c20: 20 5f 5f 41 56 75 6c 6f 6e 67 6c 6f 6e 67 29 20 __AVulonglong)
0c30: 7b 0a 20 20 20 20 28 28 5f 5f 61 76 77 6f 72 64 {. ((__avword
0c40: 2a 29 6c 2d 3e 72 61 64 64 72 29 5b 30 5d 20 3d *)l->raddr)[0] =
0c50: 20 69 3b 0a 20 20 20 20 28 28 5f 5f 61 76 77 6f i;. ((__avwo
0c60: 72 64 2a 29 6c 2d 3e 72 61 64 64 72 29 5b 31 5d rd*)l->raddr)[1]
0c70: 20 3d 20 69 72 65 74 32 3b 0a 20 20 7d 20 65 6c = iret2;. } el
0c80: 73 65 0a 20 20 69 66 20 28 6c 2d 3e 72 74 79 70 se. if (l->rtyp
0c90: 65 20 3d 3d 20 5f 5f 41 56 66 6c 6f 61 74 29 20 e == __AVfloat)
0ca0: 7b 0a 20 20 20 20 52 45 54 55 52 4e 28 66 6c 6f {. RETURN(flo
0cb0: 61 74 2c 20 66 72 65 74 29 3b 0a 20 20 7d 20 65 at, fret);. } e
0cc0: 6c 73 65 0a 20 20 69 66 20 28 6c 2d 3e 72 74 79 lse. if (l->rty
0cd0: 70 65 20 3d 3d 20 5f 5f 41 56 64 6f 75 62 6c 65 pe == __AVdouble
0ce0: 29 20 7b 0a 20 20 20 20 52 45 54 55 52 4e 28 64 ) {. RETURN(d
0cf0: 6f 75 62 6c 65 2c 20 64 72 65 74 29 3b 0a 20 20 ouble, dret);.
0d00: 7d 20 65 6c 73 65 0a 20 20 69 66 20 28 6c 2d 3e } else. if (l->
0d10: 72 74 79 70 65 20 3d 3d 20 5f 5f 41 56 76 6f 69 rtype == __AVvoi
0d20: 64 70 29 20 7b 0a 20 20 20 20 52 45 54 55 52 4e dp) {. RETURN
0d30: 28 76 6f 69 64 2a 2c 20 69 29 3b 0a 20 20 7d 20 (void*, i);. }
0d40: 65 6c 73 65 0a 20 20 69 66 20 28 6c 2d 3e 72 74 else. if (l->rt
0d50: 79 70 65 20 3d 3d 20 5f 5f 41 56 73 74 72 75 63 ype == __AVstruc
0d60: 74 29 20 7b 0a 20 20 20 20 69 66 20 28 6c 2d 3e t) {. if (l->
0d70: 66 6c 61 67 73 20 26 20 5f 5f 41 56 5f 50 43 43 flags & __AV_PCC
0d80: 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 29 20 _STRUCT_RETURN)
0d90: 7b 0a 20 20 20 20 20 20 2f 2a 20 70 63 63 20 73 {. /* pcc s
0da0: 74 72 75 63 74 20 72 65 74 75 72 6e 20 63 6f 6e truct return con
0db0: 76 65 6e 74 69 6f 6e 3a 20 6e 65 65 64 20 61 20 vention: need a
0dc0: 20 2a 28 54 59 50 45 2a 29 6c 2d 3e 72 61 64 64 *(TYPE*)l->radd
0dd0: 72 20 3d 20 2a 28 54 59 50 45 2a 29 69 3b 20 20 r = *(TYPE*)i;
0de0: 2a 2f 0a 20 20 20 20 20 20 69 66 20 28 6c 2d 3e */. if (l->
0df0: 72 73 69 7a 65 20 3d 3d 20 73 69 7a 65 6f 66 28 rsize == sizeof(
0e00: 63 68 61 72 29 29 20 7b 0a 20 20 20 20 20 20 20 char)) {.
0e10: 20 52 45 54 55 52 4e 28 63 68 61 72 2c 20 2a 28 RETURN(char, *(
0e20: 63 68 61 72 2a 29 69 29 3b 0a 20 20 20 20 20 20 char*)i);.
0e30: 7d 20 65 6c 73 65 0a 20 20 20 20 20 20 69 66 20 } else. if
0e40: 28 6c 2d 3e 72 73 69 7a 65 20 3d 3d 20 73 69 7a (l->rsize == siz
0e50: 65 6f 66 28 73 68 6f 72 74 29 29 20 7b 0a 20 20 eof(short)) {.
0e60: 20 20 20 20 20 20 52 45 54 55 52 4e 28 73 68 6f RETURN(sho
0e70: 72 74 2c 20 2a 28 73 68 6f 72 74 2a 29 69 29 3b rt, *(short*)i);
0e80: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 0a 20 20 . } else.
0e90: 20 20 20 20 69 66 20 28 6c 2d 3e 72 73 69 7a 65 if (l->rsize
0ea0: 20 3d 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 == sizeof(int))
0eb0: 20 7b 0a 20 20 20 20 20 20 20 20 52 45 54 55 52 {. RETUR
0ec0: 4e 28 69 6e 74 2c 20 2a 28 69 6e 74 2a 29 69 29 N(int, *(int*)i)
0ed0: 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 0a 20 ;. } else.
0ee0: 20 20 20 20 20 69 66 20 28 6c 2d 3e 72 73 69 7a if (l->rsiz
0ef0: 65 20 3d 3d 20 73 69 7a 65 6f 66 28 64 6f 75 62 e == sizeof(doub
0f00: 6c 65 29 29 20 7b 0a 20 20 20 20 20 20 20 20 28 le)) {. (
0f10: 28 69 6e 74 2a 29 6c 2d 3e 72 61 64 64 72 29 5b (int*)l->raddr)[
0f20: 30 5d 20 3d 20 28 28 69 6e 74 2a 29 69 29 5b 30 0] = ((int*)i)[0
0f30: 5d 3b 0a 20 20 20 20 20 20 20 20 28 28 69 6e 74 ];. ((int
0f40: 2a 29 6c 2d 3e 72 61 64 64 72 29 5b 31 5d 20 3d *)l->raddr)[1] =
0f50: 20 28 28 69 6e 74 2a 29 69 29 5b 31 5d 3b 0a 20 ((int*)i)[1];.
0f60: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 } else {.
0f70: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 6c int n = (l
0f80: 2d 3e 72 73 69 7a 65 20 2b 20 73 69 7a 65 6f 66 ->rsize + sizeof
0f90: 28 5f 5f 61 76 77 6f 72 64 29 2d 31 29 2f 73 69 (__avword)-1)/si
0fa0: 7a 65 6f 66 28 5f 5f 61 76 77 6f 72 64 29 3b 0a zeof(__avword);.
0fb0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 2d while (-
0fc0: 2d 6e 20 3e 3d 20 30 29 0a 20 20 20 20 20 20 20 -n >= 0).
0fd0: 20 20 20 28 28 5f 5f 61 76 77 6f 72 64 2a 29 6c ((__avword*)l
0fe0: 2d 3e 72 61 64 64 72 29 5b 6e 5d 20 3d 20 28 28 ->raddr)[n] = ((
0ff0: 5f 5f 61 76 77 6f 72 64 2a 29 69 29 5b 6e 5d 3b __avword*)i)[n];
1000: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65 . }. } e
1010: 6c 73 65 20 7b 0a 20 20 20 20 20 20 2f 2a 20 6e lse {. /* n
1020: 6f 72 6d 61 6c 20 73 74 72 75 63 74 20 72 65 74 ormal struct ret
1030: 75 72 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 2a urn convention *
1040: 2f 0a 20 20 20 20 20 20 69 66 20 28 6c 2d 3e 66 /. if (l->f
1050: 6c 61 67 73 20 26 20 5f 5f 41 56 5f 53 4d 41 4c lags & __AV_SMAL
1060: 4c 5f 53 54 52 55 43 54 5f 52 45 54 55 52 4e 29 L_STRUCT_RETURN)
1070: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 6c {. if (l
1080: 2d 3e 72 73 69 7a 65 20 3d 3d 20 73 69 7a 65 6f ->rsize == sizeo
1090: 66 28 63 68 61 72 29 29 20 7b 0a 20 20 20 20 20 f(char)) {.
10a0: 20 20 20 20 20 52 45 54 55 52 4e 28 63 68 61 72 RETURN(char
10b0: 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 , i);. }
10c0: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66 20 else. if
10d0: 28 6c 2d 3e 72 73 69 7a 65 20 3d 3d 20 73 69 7a (l->rsize == siz
10e0: 65 6f 66 28 73 68 6f 72 74 29 29 20 7b 0a 20 20 eof(short)) {.
10f0: 20 20 20 20 20 20 20 20 52 45 54 55 52 4e 28 73 RETURN(s
1100: 68 6f 72 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 hort, i);.
1110: 20 20 7d 20 65 6c 73 65 0a 20 20 20 20 20 20 20 } else.
1120: 20 69 66 20 28 6c 2d 3e 72 73 69 7a 65 20 3d 3d if (l->rsize ==
1130: 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 20 7b 0a sizeof(int)) {.
1140: 20 20 20 20 20 20 20 20 20 20 52 45 54 55 52 4e RETURN
1150: 28 69 6e 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 (int, i);.
1160: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 }. }.
1170: 7d 0a 20 20 7d 0a 20 20 73 70 20 2b 3d 20 5f 5f }. }. sp += __
1180: 41 56 5f 41 4c 49 53 54 5f 57 4f 52 44 53 3b 0a AV_ALIST_WORDS;.
1190: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 return 0;.}..#
11a0: 65 6e 64 69 66 20 2f 2a 5f 61 76 63 61 6c 6c 5f endif /*_avcall_
11b0: 6d 38 38 6b 5f 63 20 2a 2f 0a m88k_c */.