From b7965cf9a40f3b41761906c578d825bb8f8b572e Mon Sep 17 00:00:00 2001 From: Zach van Rijn Date: Fri, 4 Nov 2022 02:26:55 +0000 Subject: user/libffcall: move to 'experimental/'. see #761. --- experimental/libffcall/APKBUILD | 70 +++++++ experimental/libffcall/ppc64.patch | 371 +++++++++++++++++++++++++++++++++++++ 2 files changed, 441 insertions(+) create mode 100644 experimental/libffcall/APKBUILD create mode 100644 experimental/libffcall/ppc64.patch (limited to 'experimental') diff --git a/experimental/libffcall/APKBUILD b/experimental/libffcall/APKBUILD new file mode 100644 index 000000000..f3bc87e30 --- /dev/null +++ b/experimental/libffcall/APKBUILD @@ -0,0 +1,70 @@ +# Contributor: Carlo Landmeter +# Contributor: Will Sinatra +# Maintainer: Lee Starnes +pkgname=libffcall +pkgver=2.4 +pkgrel=0 +pkgdesc="C library for implementing foreign function calls in embedded interpreters" +url="https://www.gnu.org/software/libffcall" +arch="all" +license="GPL-2.0+" +depends="" +makedepends="" +subpackages="$pkgname-dev $pkgname-doc" +source="https://ftp.gnu.org/gnu/libffcall/libffcall-$pkgver.tar.gz + ppc64.patch + " + +prepare() { + default_prepare + case "${CARCH}" in + ppc64) + # C sources are patched, bundled .S need to be regenerated; + # recipes for *-powerpc64-elfv2-linux.S from Makefile.devel + temp=$(mktemp) + comm="-D__powerpc64__ -D__powerpc64_elfv2__ -O2 -fno-omit-frame-pointer -o ${temp}" + nxst="../common/noexecstack.h" + + flag="${comm} -I.. -I../dummy" + for k in avcall vacall; do + cd ${k} + gcc ${flag} -S ${k}-powerpc64.c + cat ${temp} ${nxst} > ${k}-powerpc64-elfv2-linux.S + cd - + done + + flag="${comm} -I. -I../.. -I../../dummy -fPIC -DREENTRANT" + cd callback/vacall_r + gcc ${flag} -S ../../vacall/vacall-powerpc64.c + cat ${temp} ../${nxst} > vacall-powerpc64-elfv2-linux.S + cd - + + rm ${temp} + ;; + esac +} + +build() { + ./configure \ + --build=$CBUILD \ + --host=$CHOST \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --localstatedir=/var + # Fails to build if building in parallel + make -j1 +} + +check() { + make check +} + +package() { + make DESTDIR="$pkgdir" htmldir=/usr/share/doc/ffcall install + +} + +sha512sums="c9451662764a888e3be21499c29673bfb0e1df4915814da3506db5d395a2b00ea2f0c08d1c9dffebf030179f9347794876ec6ec9e6710b4fc70fd760960335e6 libffcall-2.4.tar.gz +7360a5bdea23dec4a84f9653e96540dcccfcce1214899c421ad66760aeffa6223eb1a2d9011a1e0cddb1027b90242518e37c45b12625f8ff9a276e181db278d3 ppc64.patch" diff --git a/experimental/libffcall/ppc64.patch b/experimental/libffcall/ppc64.patch new file mode 100644 index 000000000..e7da43899 --- /dev/null +++ b/experimental/libffcall/ppc64.patch @@ -0,0 +1,371 @@ +Changed from 2.2/2.3 --> 2.4: + + * sed -i ppc64.patch -e 's/vaword/varword/g' + * remove all assembly + +--- libffcall-2.2/avcall/avcall-powerpc64.c.old 2018-09-17 16:47:43.000000000 +0000 ++++ libffcall-2.2/avcall/avcall-powerpc64.c 2020-05-11 23:06:57.534813743 +0000 +@@ -181,111 +181,111 @@ + /* In the ELFv2 ABI, gcc returns structs of size <= 16 in registers. */ + if (l->rsize > 0 && l->rsize <= 16) { + void* raddr = l->raddr; +- #if 0 /* Unoptimized */ ++ #if 1 /* Unoptimized */ + if (l->rsize == 1) { + ((unsigned char *)raddr)[0] = (unsigned char)(iret); + } else + if (l->rsize == 2) { +- ((unsigned char *)raddr)[0] = (unsigned char)(iret); +- ((unsigned char *)raddr)[1] = (unsigned char)(iret>>8); ++ ((unsigned char *)raddr)[1] = (unsigned char)(iret); ++ ((unsigned char *)raddr)[0] = (unsigned char)(iret>>8); + } else + if (l->rsize == 3) { +- ((unsigned char *)raddr)[0] = (unsigned char)(iret); ++ ((unsigned char *)raddr)[2] = (unsigned char)(iret); + ((unsigned char *)raddr)[1] = (unsigned char)(iret>>8); +- ((unsigned char *)raddr)[2] = (unsigned char)(iret>>16); ++ ((unsigned char *)raddr)[0] = (unsigned char)(iret>>16); + } else + if (l->rsize == 4) { +- ((unsigned char *)raddr)[0] = (unsigned char)(iret); +- ((unsigned char *)raddr)[1] = (unsigned char)(iret>>8); +- ((unsigned char *)raddr)[2] = (unsigned char)(iret>>16); +- ((unsigned char *)raddr)[3] = (unsigned char)(iret>>24); ++ ((unsigned char *)raddr)[3] = (unsigned char)(iret); ++ ((unsigned char *)raddr)[2] = (unsigned char)(iret>>8); ++ ((unsigned char *)raddr)[1] = (unsigned char)(iret>>16); ++ ((unsigned char *)raddr)[0] = (unsigned char)(iret>>24); + } else + if (l->rsize == 5) { +- ((unsigned char *)raddr)[0] = (unsigned char)(iret); +- ((unsigned char *)raddr)[1] = (unsigned char)(iret>>8); ++ ((unsigned char *)raddr)[4] = (unsigned char)(iret); ++ ((unsigned char *)raddr)[3] = (unsigned char)(iret>>8); + ((unsigned char *)raddr)[2] = (unsigned char)(iret>>16); +- ((unsigned char *)raddr)[3] = (unsigned char)(iret>>24); +- ((unsigned char *)raddr)[4] = (unsigned char)(iret>>32); ++ ((unsigned char *)raddr)[1] = (unsigned char)(iret>>24); ++ ((unsigned char *)raddr)[0] = (unsigned char)(iret>>32); + } else + if (l->rsize == 6) { +- ((unsigned char *)raddr)[0] = (unsigned char)(iret); +- ((unsigned char *)raddr)[1] = (unsigned char)(iret>>8); +- ((unsigned char *)raddr)[2] = (unsigned char)(iret>>16); +- ((unsigned char *)raddr)[3] = (unsigned char)(iret>>24); +- ((unsigned char *)raddr)[4] = (unsigned char)(iret>>32); +- ((unsigned char *)raddr)[5] = (unsigned char)(iret>>40); ++ ((unsigned char *)raddr)[5] = (unsigned char)(iret); ++ ((unsigned char *)raddr)[4] = (unsigned char)(iret>>8); ++ ((unsigned char *)raddr)[3] = (unsigned char)(iret>>16); ++ ((unsigned char *)raddr)[2] = (unsigned char)(iret>>24); ++ ((unsigned char *)raddr)[1] = (unsigned char)(iret>>32); ++ ((unsigned char *)raddr)[0] = (unsigned char)(iret>>40); + } else + if (l->rsize == 7) { +- ((unsigned char *)raddr)[0] = (unsigned char)(iret); +- ((unsigned char *)raddr)[1] = (unsigned char)(iret>>8); +- ((unsigned char *)raddr)[2] = (unsigned char)(iret>>16); ++ ((unsigned char *)raddr)[6] = (unsigned char)(iret); ++ ((unsigned char *)raddr)[5] = (unsigned char)(iret>>8); ++ ((unsigned char *)raddr)[4] = (unsigned char)(iret>>16); + ((unsigned char *)raddr)[3] = (unsigned char)(iret>>24); +- ((unsigned char *)raddr)[4] = (unsigned char)(iret>>32); +- ((unsigned char *)raddr)[5] = (unsigned char)(iret>>40); +- ((unsigned char *)raddr)[6] = (unsigned char)(iret>>48); ++ ((unsigned char *)raddr)[2] = (unsigned char)(iret>>32); ++ ((unsigned char *)raddr)[1] = (unsigned char)(iret>>40); ++ ((unsigned char *)raddr)[0] = (unsigned char)(iret>>48); + } else + if (l->rsize >= 8 && l->rsize <= 16) { +- ((unsigned char *)raddr)[0] = (unsigned char)(iret); +- ((unsigned char *)raddr)[1] = (unsigned char)(iret>>8); +- ((unsigned char *)raddr)[2] = (unsigned char)(iret>>16); +- ((unsigned char *)raddr)[3] = (unsigned char)(iret>>24); +- ((unsigned char *)raddr)[4] = (unsigned char)(iret>>32); +- ((unsigned char *)raddr)[5] = (unsigned char)(iret>>40); +- ((unsigned char *)raddr)[6] = (unsigned char)(iret>>48); +- ((unsigned char *)raddr)[7] = (unsigned char)(iret>>56); ++ ((unsigned char *)raddr)[7] = (unsigned char)(iret); ++ ((unsigned char *)raddr)[6] = (unsigned char)(iret>>8); ++ ((unsigned char *)raddr)[5] = (unsigned char)(iret>>16); ++ ((unsigned char *)raddr)[4] = (unsigned char)(iret>>24); ++ ((unsigned char *)raddr)[3] = (unsigned char)(iret>>32); ++ ((unsigned char *)raddr)[2] = (unsigned char)(iret>>40); ++ ((unsigned char *)raddr)[1] = (unsigned char)(iret>>48); ++ ((unsigned char *)raddr)[0] = (unsigned char)(iret>>56); + if (l->rsize == 8) { + } else + if (l->rsize == 9) { +- ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2); ++ ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2>>56); + } else + if (l->rsize == 10) { +- ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2); +- ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>8); ++ ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2>>56); ++ ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>48); + } else + if (l->rsize == 11) { +- ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2); +- ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>8); +- ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>16); ++ ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2>>56); ++ ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>48); ++ ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>40); + } else + if (l->rsize == 12) { +- ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2); +- ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>8); +- ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>16); +- ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>24); ++ ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2>>56); ++ ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>48); ++ ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>40); ++ ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>32); + } else + if (l->rsize == 13) { +- ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2); +- ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>8); +- ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>16); +- ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>24); +- ((unsigned char *)raddr)[8+4] = (unsigned char)(iret2>>32); ++ ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2>>56); ++ ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>48); ++ ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>40); ++ ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>32); ++ ((unsigned char *)raddr)[8+4] = (unsigned char)(iret2>>24); + } else + if (l->rsize == 14) { +- ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2); +- ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>8); +- ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>16); +- ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>24); +- ((unsigned char *)raddr)[8+4] = (unsigned char)(iret2>>32); +- ((unsigned char *)raddr)[8+5] = (unsigned char)(iret2>>40); ++ ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2>>56); ++ ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>48); ++ ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>40); ++ ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>32); ++ ((unsigned char *)raddr)[8+4] = (unsigned char)(iret2>>24); ++ ((unsigned char *)raddr)[8+5] = (unsigned char)(iret2>>16); + } else + if (l->rsize == 15) { +- ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2); +- ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>8); +- ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>16); +- ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>24); +- ((unsigned char *)raddr)[8+4] = (unsigned char)(iret2>>32); +- ((unsigned char *)raddr)[8+5] = (unsigned char)(iret2>>40); +- ((unsigned char *)raddr)[8+6] = (unsigned char)(iret2>>48); ++ ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2>>56); ++ ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>48); ++ ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>40); ++ ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>32); ++ ((unsigned char *)raddr)[8+4] = (unsigned char)(iret2>>24); ++ ((unsigned char *)raddr)[8+5] = (unsigned char)(iret2>>16); ++ ((unsigned char *)raddr)[8+6] = (unsigned char)(iret2>>8); + } else + if (l->rsize == 16) { +- ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2); +- ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>8); +- ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>16); +- ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>24); +- ((unsigned char *)raddr)[8+4] = (unsigned char)(iret2>>32); +- ((unsigned char *)raddr)[8+5] = (unsigned char)(iret2>>40); +- ((unsigned char *)raddr)[8+6] = (unsigned char)(iret2>>48); +- ((unsigned char *)raddr)[8+7] = (unsigned char)(iret2>>56); ++ ((unsigned char *)raddr)[8+0] = (unsigned char)(iret2>>56); ++ ((unsigned char *)raddr)[8+1] = (unsigned char)(iret2>>48); ++ ((unsigned char *)raddr)[8+2] = (unsigned char)(iret2>>40); ++ ((unsigned char *)raddr)[8+3] = (unsigned char)(iret2>>32); ++ ((unsigned char *)raddr)[8+4] = (unsigned char)(iret2>>24); ++ ((unsigned char *)raddr)[8+5] = (unsigned char)(iret2>>16); ++ ((unsigned char *)raddr)[8+6] = (unsigned char)(iret2>>8); ++ ((unsigned char *)raddr)[8+7] = (unsigned char)(iret2); + } + } + #else /* Optimized: fewer conditional jumps, fewer memory accesses */ +--- libffcall-2.2/vacall/vacall-powerpc64.c.old 2020-05-11 23:11:15.566571148 +0000 ++++ libffcall-2.2/vacall/vacall-powerpc64.c 2020-05-11 23:16:52.489693582 +0000 +@@ -140,111 +140,111 @@ + if (list.flags & __VA_REGISTER_STRUCT_RETURN) { + /* In the ELFv2 ABI, gcc returns structs of size <= 16 in registers. */ + if (list.rsize > 0 && list.rsize <= 16) { +- #if 0 /* Unoptimized */ ++ #if 1 /* Unoptimized */ + if (list.rsize == 1) { + iret = (__varword)((unsigned char *) list.raddr)[0]; + } else + if (list.rsize == 2) { +- iret = ((__varword)((unsigned char *) list.raddr)[0]) +- | ((__varword)((unsigned char *) list.raddr)[1] << 8); ++ iret = ((__varword)((unsigned char *) list.raddr)[1]) ++ | ((__varword)((unsigned char *) list.raddr)[0] << 8); + } else + if (list.rsize == 3) { +- iret = ((__varword)((unsigned char *) list.raddr)[0]) ++ iret = ((__varword)((unsigned char *) list.raddr)[2]) + | ((__varword)((unsigned char *) list.raddr)[1] << 8) +- | ((__varword)((unsigned char *) list.raddr)[2] << 16); ++ | ((__varword)((unsigned char *) list.raddr)[0] << 16); + } else + if (list.rsize == 4) { +- iret = ((__varword)((unsigned char *) list.raddr)[0]) +- | ((__varword)((unsigned char *) list.raddr)[1] << 8) +- | ((__varword)((unsigned char *) list.raddr)[2] << 16) +- | ((__varword)((unsigned char *) list.raddr)[3] << 24); ++ iret = ((__varword)((unsigned char *) list.raddr)[3]) ++ | ((__varword)((unsigned char *) list.raddr)[2] << 8) ++ | ((__varword)((unsigned char *) list.raddr)[1] << 16) ++ | ((__varword)((unsigned char *) list.raddr)[0] << 24); + } else + if (list.rsize == 5) { +- iret = ((__varword)((unsigned char *) list.raddr)[0]) +- | ((__varword)((unsigned char *) list.raddr)[1] << 8) ++ iret = ((__varword)((unsigned char *) list.raddr)[4]) ++ | ((__varword)((unsigned char *) list.raddr)[3] << 8) + | ((__varword)((unsigned char *) list.raddr)[2] << 16) +- | ((__varword)((unsigned char *) list.raddr)[3] << 24) +- | ((__varword)((unsigned char *) list.raddr)[4] << 32); ++ | ((__varword)((unsigned char *) list.raddr)[1] << 24) ++ | ((__varword)((unsigned char *) list.raddr)[0] << 32); + } else + if (list.rsize == 6) { +- iret = ((__varword)((unsigned char *) list.raddr)[0]) +- | ((__varword)((unsigned char *) list.raddr)[1] << 8) +- | ((__varword)((unsigned char *) list.raddr)[2] << 16) +- | ((__varword)((unsigned char *) list.raddr)[3] << 24) +- | ((__varword)((unsigned char *) list.raddr)[4] << 32) +- | ((__varword)((unsigned char *) list.raddr)[5] << 40); ++ iret = ((__varword)((unsigned char *) list.raddr)[5]) ++ | ((__varword)((unsigned char *) list.raddr)[4] << 8) ++ | ((__varword)((unsigned char *) list.raddr)[3] << 16) ++ | ((__varword)((unsigned char *) list.raddr)[2] << 24) ++ | ((__varword)((unsigned char *) list.raddr)[1] << 32) ++ | ((__varword)((unsigned char *) list.raddr)[0] << 40); + } else + if (list.rsize == 7) { +- iret = ((__varword)((unsigned char *) list.raddr)[0]) +- | ((__varword)((unsigned char *) list.raddr)[1] << 8) +- | ((__varword)((unsigned char *) list.raddr)[2] << 16) ++ iret = ((__varword)((unsigned char *) list.raddr)[6]) ++ | ((__varword)((unsigned char *) list.raddr)[5] << 8) ++ | ((__varword)((unsigned char *) list.raddr)[4] << 16) + | ((__varword)((unsigned char *) list.raddr)[3] << 24) +- | ((__varword)((unsigned char *) list.raddr)[4] << 32) +- | ((__varword)((unsigned char *) list.raddr)[5] << 40) +- | ((__varword)((unsigned char *) list.raddr)[6] << 48); ++ | ((__varword)((unsigned char *) list.raddr)[2] << 32) ++ | ((__varword)((unsigned char *) list.raddr)[1] << 40) ++ | ((__varword)((unsigned char *) list.raddr)[0] << 48); + } else + if (list.rsize >= 8 && list.rsize <= 16) { +- iret = ((__varword)((unsigned char *) list.raddr)[0]) +- | ((__varword)((unsigned char *) list.raddr)[1] << 8) +- | ((__varword)((unsigned char *) list.raddr)[2] << 16) +- | ((__varword)((unsigned char *) list.raddr)[3] << 24) +- | ((__varword)((unsigned char *) list.raddr)[4] << 32) +- | ((__varword)((unsigned char *) list.raddr)[5] << 40) +- | ((__varword)((unsigned char *) list.raddr)[6] << 48) +- | ((__varword)((unsigned char *) list.raddr)[7] << 56); ++ iret = ((__varword)((unsigned char *) list.raddr)[7]) ++ | ((__varword)((unsigned char *) list.raddr)[6] << 8) ++ | ((__varword)((unsigned char *) list.raddr)[5] << 16) ++ | ((__varword)((unsigned char *) list.raddr)[4] << 24) ++ | ((__varword)((unsigned char *) list.raddr)[3] << 32) ++ | ((__varword)((unsigned char *) list.raddr)[2] << 40) ++ | ((__varword)((unsigned char *) list.raddr)[1] << 48) ++ | ((__varword)((unsigned char *) list.raddr)[0] << 56); + if (list.rsize == 8) { + } else + if (list.rsize == 9) { +- iret2 = (__varword)((unsigned char *) list.raddr)[8]; ++ iret2 = (__varword)((unsigned char *) list.raddr)[8] << 56; + } else + if (list.rsize == 10) { +- iret2 = ((__varword)((unsigned char *) list.raddr)[8]) +- | ((__varword)((unsigned char *) list.raddr)[9] << 8); ++ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56) ++ | ((__varword)((unsigned char *) list.raddr)[9] << 48); + } else + if (list.rsize == 11) { +- iret2 = ((__varword)((unsigned char *) list.raddr)[8]) +- | ((__varword)((unsigned char *) list.raddr)[9] << 8) +- | ((__varword)((unsigned char *) list.raddr)[10] << 16); ++ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56) ++ | ((__varword)((unsigned char *) list.raddr)[9] << 48) ++ | ((__varword)((unsigned char *) list.raddr)[10] << 40); + } else + if (list.rsize == 12) { +- iret2 = ((__varword)((unsigned char *) list.raddr)[8]) +- | ((__varword)((unsigned char *) list.raddr)[9] << 8) +- | ((__varword)((unsigned char *) list.raddr)[10] << 16) +- | ((__varword)((unsigned char *) list.raddr)[11] << 24); ++ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56) ++ | ((__varword)((unsigned char *) list.raddr)[9] << 48) ++ | ((__varword)((unsigned char *) list.raddr)[10] << 40) ++ | ((__varword)((unsigned char *) list.raddr)[11] << 32); + } else + if (list.rsize == 13) { +- iret2 = ((__varword)((unsigned char *) list.raddr)[8]) +- | ((__varword)((unsigned char *) list.raddr)[9] << 8) +- | ((__varword)((unsigned char *) list.raddr)[10] << 16) +- | ((__varword)((unsigned char *) list.raddr)[11] << 24) +- | ((__varword)((unsigned char *) list.raddr)[12] << 32); ++ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56) ++ | ((__varword)((unsigned char *) list.raddr)[9] << 48) ++ | ((__varword)((unsigned char *) list.raddr)[10] << 40) ++ | ((__varword)((unsigned char *) list.raddr)[11] << 32) ++ | ((__varword)((unsigned char *) list.raddr)[12] << 24); + } else + if (list.rsize == 14) { +- iret2 = ((__varword)((unsigned char *) list.raddr)[8]) +- | ((__varword)((unsigned char *) list.raddr)[9] << 8) +- | ((__varword)((unsigned char *) list.raddr)[10] << 16) +- | ((__varword)((unsigned char *) list.raddr)[11] << 24) +- | ((__varword)((unsigned char *) list.raddr)[12] << 32) +- | ((__varword)((unsigned char *) list.raddr)[13] << 40); ++ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56) ++ | ((__varword)((unsigned char *) list.raddr)[9] << 48) ++ | ((__varword)((unsigned char *) list.raddr)[10] << 40) ++ | ((__varword)((unsigned char *) list.raddr)[11] << 32) ++ | ((__varword)((unsigned char *) list.raddr)[12] << 24) ++ | ((__varword)((unsigned char *) list.raddr)[13] << 16); + } else + if (list.rsize == 15) { +- iret2 = ((__varword)((unsigned char *) list.raddr)[8]) +- | ((__varword)((unsigned char *) list.raddr)[9] << 8) +- | ((__varword)((unsigned char *) list.raddr)[10] << 16) +- | ((__varword)((unsigned char *) list.raddr)[11] << 24) +- | ((__varword)((unsigned char *) list.raddr)[12] << 32) +- | ((__varword)((unsigned char *) list.raddr)[13] << 40) +- | ((__varword)((unsigned char *) list.raddr)[14] << 48); ++ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56) ++ | ((__varword)((unsigned char *) list.raddr)[9] << 48) ++ | ((__varword)((unsigned char *) list.raddr)[10] << 40) ++ | ((__varword)((unsigned char *) list.raddr)[11] << 32) ++ | ((__varword)((unsigned char *) list.raddr)[12] << 24) ++ | ((__varword)((unsigned char *) list.raddr)[13] << 16) ++ | ((__varword)((unsigned char *) list.raddr)[14] << 8); + } else + if (list.rsize == 16) { +- iret2 = ((__varword)((unsigned char *) list.raddr)[8]) +- | ((__varword)((unsigned char *) list.raddr)[9] << 8) +- | ((__varword)((unsigned char *) list.raddr)[10] << 16) +- | ((__varword)((unsigned char *) list.raddr)[11] << 24) +- | ((__varword)((unsigned char *) list.raddr)[12] << 32) +- | ((__varword)((unsigned char *) list.raddr)[13] << 40) +- | ((__varword)((unsigned char *) list.raddr)[14] << 48) +- | ((__varword)((unsigned char *) list.raddr)[15] << 56); ++ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56) ++ | ((__varword)((unsigned char *) list.raddr)[9] << 48) ++ | ((__varword)((unsigned char *) list.raddr)[10] << 40) ++ | ((__varword)((unsigned char *) list.raddr)[11] << 32) ++ | ((__varword)((unsigned char *) list.raddr)[12] << 24) ++ | ((__varword)((unsigned char *) list.raddr)[13] << 16) ++ | ((__varword)((unsigned char *) list.raddr)[14] << 8) ++ | ((__varword)((unsigned char *) list.raddr)[15]); + } + } + #else /* Optimized: fewer conditional jumps, fewer memory accesses */ -- cgit v1.2.3-70-g09d2