summaryrefslogtreecommitdiff
path: root/experimental/libffcall
diff options
context:
space:
mode:
authorZach van Rijn <me@zv.io>2022-11-04 02:26:55 +0000
committerZach van Rijn <me@zv.io>2022-11-04 02:26:55 +0000
commitb7965cf9a40f3b41761906c578d825bb8f8b572e (patch)
tree20806aeed4e1cc309ab30ab690ada676e225c17d /experimental/libffcall
parenteced2938ac3c628ac5c5ea8d1b8a7238452107cd (diff)
downloadpackages-b7965cf9a40f3b41761906c578d825bb8f8b572e.tar.gz
packages-b7965cf9a40f3b41761906c578d825bb8f8b572e.tar.bz2
packages-b7965cf9a40f3b41761906c578d825bb8f8b572e.tar.xz
packages-b7965cf9a40f3b41761906c578d825bb8f8b572e.zip
user/libffcall: move to 'experimental/'. see #761.
Diffstat (limited to 'experimental/libffcall')
-rw-r--r--experimental/libffcall/APKBUILD70
-rw-r--r--experimental/libffcall/ppc64.patch371
2 files changed, 441 insertions, 0 deletions
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 <clandmeter@gmail.com>
+# Contributor: Will Sinatra <wpsinatra@gmail.com>
+# Maintainer: Lee Starnes <lee@canned-death.us>
+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 */