diff options
author | Lee Starnes <lee@canned-death.us> | 2022-05-29 02:24:14 +0000 |
---|---|---|
committer | Zach van Rijn <me@zv.io> | 2022-06-12 23:51:59 +0000 |
commit | 42f6359e5b03c841003b162c31c14c6779b97e00 (patch) | |
tree | 135a5002c5c6730046b07b38d12db39ab5d607d5 | |
parent | 46f667fc189d8a841fe7391cd31c337df972fb9b (diff) | |
download | packages-42f6359e5b03c841003b162c31c14c6779b97e00.tar.gz packages-42f6359e5b03c841003b162c31c14c6779b97e00.tar.bz2 packages-42f6359e5b03c841003b162c31c14c6779b97e00.tar.xz packages-42f6359e5b03c841003b162c31c14c6779b97e00.zip |
user/libffcall: 2.4 with Zach's patch
-rw-r--r-- | user/libffcall/APKBUILD | 36 | ||||
-rw-r--r-- | user/libffcall/ppc64.patch | 1604 |
2 files changed, 177 insertions, 1463 deletions
diff --git a/user/libffcall/APKBUILD b/user/libffcall/APKBUILD index 48b16a78f..f3bc87e30 100644 --- a/user/libffcall/APKBUILD +++ b/user/libffcall/APKBUILD @@ -1,9 +1,8 @@ # Contributor: Carlo Landmeter <clandmeter@gmail.com> # Contributor: Will Sinatra <wpsinatra@gmail.com> -# Contributor: Lee Starnes <lee@canned-death.us> # Maintainer: Lee Starnes <lee@canned-death.us> pkgname=libffcall -pkgver=2.2 +pkgver=2.4 pkgrel=0 pkgdesc="C library for implementing foreign function calls in embedded interpreters" url="https://www.gnu.org/software/libffcall" @@ -16,6 +15,35 @@ 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 \ @@ -38,5 +66,5 @@ package() { } -sha512sums="b9d3ca4c67ab92915a8183d850153e585dcb58ceb2199a104426a7aae363d37017b1226440acd18a2db0cc207e044f71e932857189964261e8eaa6de5cef1731 libffcall-2.2.tar.gz -db7fae1d2f0d95003186671fd89b097b4abf6184d3001e34dd93419640502b9cd5cf32aef4839d6a4208f4aed793c70f9a4367f12adde21372dc131b111238fe ppc64.patch" +sha512sums="c9451662764a888e3be21499c29673bfb0e1df4915814da3506db5d395a2b00ea2f0c08d1c9dffebf030179f9347794876ec6ec9e6710b4fc70fd760960335e6 libffcall-2.4.tar.gz +7360a5bdea23dec4a84f9653e96540dcccfcce1214899c421ad66760aeffa6223eb1a2d9011a1e0cddb1027b90242518e37c45b12625f8ff9a276e181db278d3 ppc64.patch" diff --git a/user/libffcall/ppc64.patch b/user/libffcall/ppc64.patch index 74525987b..e7da43899 100644 --- a/user/libffcall/ppc64.patch +++ b/user/libffcall/ppc64.patch @@ -1,3 +1,8 @@ +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 @@ @@ -181,432 +186,6 @@ } } #else /* Optimized: fewer conditional jumps, fewer memory accesses */ ---- libffcall-2.2/avcall/avcall-powerpc64-elfv2-linux.S.old 2019-08-25 01:03:04.000000000 +0000 -+++ libffcall-2.2/avcall/avcall-powerpc64-elfv2-linux.S 2020-05-11 23:07:17.992574561 +0000 -@@ -1,44 +1,52 @@ - .file "avcall-powerpc64.c" -- .machine power4 - .abiversion 2 -- .section ".toc","aw" - .section ".text" - .align 2 - .p2align 4,,15 - .globl avcall_call - .type avcall_call, @function - avcall_call: --0: addis 2,12,.TOC.-0b@ha -- addi 2,2,.TOC.-0b@l -+.LFB0: -+ .cfi_startproc -+.LCF0: -+0: addis 2,12,.TOC.-.LCF0@ha -+ addi 2,2,.TOC.-.LCF0@l - .localentry avcall_call,.-avcall_call - mflr 0 - std 30,-16(1) - std 31,-8(1) -+ .cfi_register 65, 0 -+ .cfi_offset 30, -16 -+ .cfi_offset 31, -8 - mr 30,3 - std 0,16(1) -- stdu 1,-112(1) -- ld 3,48(3) -- ld 9,40(30) -+ stdu 1,-128(1) -+ .cfi_def_cfa_offset 128 -+ .cfi_offset 65, 16 - mr 31,1 -+ .cfi_def_cfa_register 31 -+ ld 3,48(3) - ld 10,0(1) -+ ld 9,-28688(13) -+ std 9,104(31) -+ li 9,0 -+ ld 9,40(30) -+ stdu 10,-2048(1) - subf 9,3,9 -- stdu 10,-2064(1) - sradi 9,9,3 - cmpwi 7,9,8 - ble 7,.L6 -- addi 10,9,-9 -- addi 8,1,96 -- addi 9,3,56 -- rldicl 10,10,0,32 -- addi 8,8,-8 -- addi 10,10,8 -- sldi 10,10,3 -- add 10,3,10 -+ addi 8,9,-9 -+ addi 7,1,96 -+ addi 10,3,56 -+ rldic 8,8,3,29 -+ addi 9,7,-8 -+ add 7,7,8 - .p2align 4,,15 - .L5: -- ldu 7,8(9) -- cmpld 7,10,9 -- stdu 7,8(8) -+ ldu 8,8(10) -+ stdu 8,8(9) -+ cmpld 7,7,9 - bne 7,.L5 - .L6: - ld 10,64(30) -@@ -114,191 +122,210 @@ - ld 2,24(1) - lwz 9,24(30) - cmplwi 7,9,1 -- beq 7,.L19 -+ beq 7,.L20 - cmpdi 7,9,0 -- beq 7,.L50 -+ beq 7,.L68 - cmplwi 7,9,2 -- beq 7,.L45 -+ beq 7,.L62 - cmplwi 7,9,3 -- beq 7,.L45 -+ beq 7,.L62 - cmplwi 7,9,4 -- beq 7,.L45 -+ beq 7,.L62 - cmplwi 7,9,5 -- beq 7,.L46 -+ beq 7,.L63 - cmplwi 7,9,6 -- beq 7,.L46 -+ beq 7,.L63 - cmplwi 7,9,7 -- beq 7,.L47 -+ beq 7,.L64 - cmplwi 7,9,8 -- beq 7,.L47 -+ beq 7,.L64 - cmplwi 7,9,9 -- beq 7,.L50 -+ beq 7,.L68 - cmplwi 7,9,10 -- beq 7,.L50 -+ beq 7,.L68 - cmplwi 7,9,11 -- beq 7,.L50 -+ beq 7,.L68 - cmplwi 7,9,12 -- beq 7,.L50 -+ beq 7,.L68 - cmplwi 7,9,13 -- beq 7,.L52 -+ beq 7,.L71 - cmplwi 7,9,14 -- beq 7,.L53 -+ beq 7,.L72 - cmplwi 7,9,15 -- beq 7,.L50 -+ beq 7,.L68 - cmplwi 7,9,16 -- bne 7,.L19 -+ bne 7,.L20 - lwz 9,0(30) -- rldicl. 10,9,55,63 -- beq 0,.L19 -+ andi. 9,9,0x200 -+ beq 0,.L20 - ld 10,32(30) - addi 9,10,-1 - cmpldi 7,9,15 -- bgt 7,.L19 -- ld 8,16(30) -- cmpldi 7,10,8 -- rldicl 9,8,0,61 -- rldicr 8,8,0,60 -- add 10,10,9 -- bgt 7,.L35 -+ bgt 7,.L20 -+ cmpldi 7,10,1 -+ ld 9,16(30) -+ rlwinm 8,3,0,0xff -+ beq 7,.L69 -+ cmpldi 7,10,2 -+ beq 7,.L73 -+ cmpldi 7,10,3 -+ rldicl 8,3,48,56 -+ beq 7,.L74 -+ cmpldi 7,10,4 -+ beq 7,.L75 -+ cmpldi 7,10,5 -+ rldicl 8,3,32,56 -+ beq 7,.L76 -+ cmpldi 7,10,6 -+ rldicl 7,3,24,56 -+ beq 7,.L77 -+ cmpldi 7,10,7 -+ rldicl 6,3,16,56 -+ beq 7,.L78 -+ std 3,0(9) -+ ld 10,32(30) - cmpldi 7,10,8 -- bgt 7,.L36 -- slwi 10,10,3 -- li 7,2 -- ld 6,0(8) -- slwi 9,9,3 -- addi 10,10,-1 -- sld 10,7,10 -- li 7,1 -- sld 7,7,9 -- sld 9,3,9 -- subf 10,7,10 -- xor 9,9,6 -- and 9,10,9 -- xor 9,9,6 -- std 9,0(8) --.L19: -- addi 1,31,112 -+ beq 7,.L20 -+ cmpldi 7,10,9 -+ beq 7,.L79 -+ cmpldi 7,10,10 -+ beq 7,.L80 -+ cmpldi 7,10,11 -+ beq 7,.L81 -+ cmpldi 7,10,12 -+ beq 7,.L82 -+ cmpldi 7,10,13 -+ beq 7,.L83 -+ cmpldi 7,10,14 -+ beq 7,.L84 -+ cmpldi 7,10,15 -+ beq 7,.L85 -+ cmpldi 7,10,16 -+ bne 7,.L20 -+ std 4,8(9) -+ .p2align 4,,15 -+.L20: -+ ld 9,104(31) -+ ld 10,-28688(13) -+ xor. 9,9,10 -+ li 10,0 - li 3,0 -+ bne 0,.L86 -+ addi 1,31,128 -+ .cfi_remember_state -+ .cfi_def_cfa 1, 0 - ld 0,16(1) - ld 30,-16(1) - ld 31,-8(1) - mtlr 0 -+ .cfi_restore 65 -+ .cfi_restore 31 -+ .cfi_restore 30 - blr - .p2align 4,,15 --.L50: -+.L68: -+ .cfi_restore_state - ld 9,16(30) - std 3,0(9) -- addi 1,31,112 -- li 3,0 -- ld 0,16(1) -- ld 30,-16(1) -- ld 31,-8(1) -- mtlr 0 -- blr -+ b .L20 - .p2align 4,,15 --.L45: -+.L62: - ld 9,16(30) - stb 3,0(9) -- addi 1,31,112 -- li 3,0 -- ld 0,16(1) -- ld 30,-16(1) -- ld 31,-8(1) -- mtlr 0 -- blr --.L46: -+ b .L20 -+.L63: - ld 9,16(30) - sth 3,0(9) -- b .L19 --.L47: -+ b .L20 -+.L64: - ld 9,16(30) - stw 3,0(9) -- b .L19 --.L52: -+ b .L20 -+.L71: - ld 9,16(30) - stfs 1,0(9) -- b .L19 --.L53: -+ b .L20 -+.L72: - ld 9,16(30) - stfd 1,0(9) -- b .L19 --.L36: -- rldicl 9,9,0,32 -- slwi 10,10,3 -- ld 11,0(8) -- ld 4,8(8) -- li 7,2 -- mulli 6,9,-8 -- addi 10,10,-65 -- slwi 9,9,3 -- sld 10,7,10 -- sld 5,3,9 -- li 7,-1 -- addi 6,6,64 -- addi 10,10,-1 -- sld 7,7,9 -- srad 3,3,6 -- xor 6,5,11 -- xor 9,3,4 -- and 7,7,6 -- and 9,10,9 -- xor 10,7,11 -- xor 9,9,4 -- std 10,0(8) -- std 9,8(8) -- b .L19 --.L35: -- rldicl 9,9,0,32 -- ld 11,0(8) -- li 6,-1 -- cmpldi 7,10,16 -- slwi 5,9,3 -- sld 7,3,5 -- sld 6,6,5 -- xor 7,7,11 -- and 7,6,7 -- xor 7,7,11 -- std 7,0(8) -- ble 7,.L54 -- mulli 9,9,-8 -- ld 11,16(8) -- slwi 10,10,3 -- li 7,2 -- addi 10,10,-129 -- addi 9,9,64 -- sld 7,7,10 -- srad 6,4,9 -- srad 3,3,9 -- addi 7,7,-1 -- sld 9,4,5 -- xor 10,6,11 -- or 9,3,9 -- and 10,7,10 -- std 9,8(8) -- xor 10,10,11 -- std 10,16(8) -- b .L19 --.L54: -- mulli 9,9,-4 -- slwi 10,10,3 -- ld 11,8(8) -- sld 4,4,5 -- addi 10,10,-65 -- li 6,2 -- addi 9,9,32 -- sld 10,6,10 -- srad 3,3,9 -- srad 9,3,9 -- or 7,9,4 -- addi 9,10,-1 -- xor 10,7,11 -- and 9,10,9 -- xor 9,9,11 -- std 9,8(8) -- b .L19 -+ b .L20 -+.L86: -+ bl __stack_chk_fail -+ nop -+.L74: -+ sth 3,1(9) -+.L69: -+ stb 8,0(9) -+ b .L20 -+.L85: -+ srdi 7,4,32 -+ sradi 8,4,24 -+ sradi 10,4,16 -+ sradi 4,4,8 -+ stw 7,8(9) -+ stb 8,12(9) -+ stb 10,13(9) -+ stb 4,14(9) -+ b .L20 -+.L76: -+ stw 3,1(9) -+ stb 8,0(9) -+ b .L20 -+.L75: -+ stw 3,0(9) -+ b .L20 -+.L73: -+ sth 3,0(9) -+ b .L20 -+.L84: -+ srdi 8,4,32 -+ sradi 10,4,24 -+ sradi 4,4,16 -+ stw 8,8(9) -+ stb 10,12(9) -+ stb 4,13(9) -+ b .L20 -+.L83: -+ srdi 10,4,32 -+ sradi 4,4,24 -+ stw 10,8(9) -+ stb 4,12(9) -+ b .L20 -+.L82: -+ srdi 4,4,32 -+ stw 4,8(9) -+ b .L20 -+.L81: -+ srdi 10,4,48 -+ sradi 4,4,40 -+ sth 10,8(9) -+ stb 4,10(9) -+ b .L20 -+.L80: -+ srdi 4,4,48 -+ sth 4,8(9) -+ b .L20 -+.L79: -+ sradi 4,4,56 -+ stb 4,8(9) -+ b .L20 -+.L78: -+ stw 3,3(9) -+ stb 8,2(9) -+ stb 7,1(9) -+ stb 6,0(9) -+ b .L20 -+.L77: -+ stw 3,2(9) -+ stb 8,1(9) -+ stb 7,0(9) -+ b .L20 - .long 0 - .byte 0,0,0,1,128,2,0,0 -+ .cfi_endproc -+.LFE0: - .size avcall_call,.-avcall_call -+ .gnu_attribute 4, 9 - #if defined __linux__ || defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __DragonFly__ - .section .note.GNU-stack,"",@progbits - #endif --- 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 @@ @@ -616,1070 +195,177 @@ - #if 0 /* Unoptimized */ + #if 1 /* Unoptimized */ if (list.rsize == 1) { - iret = (__vaword)((unsigned char *) list.raddr)[0]; + iret = (__varword)((unsigned char *) list.raddr)[0]; } else if (list.rsize == 2) { -- iret = ((__vaword)((unsigned char *) list.raddr)[0]) -- | ((__vaword)((unsigned char *) list.raddr)[1] << 8); -+ iret = ((__vaword)((unsigned char *) list.raddr)[1]) -+ | ((__vaword)((unsigned char *) list.raddr)[0] << 8); +- 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 = ((__vaword)((unsigned char *) list.raddr)[0]) -+ iret = ((__vaword)((unsigned char *) list.raddr)[2]) - | ((__vaword)((unsigned char *) list.raddr)[1] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[2] << 16); -+ | ((__vaword)((unsigned char *) list.raddr)[0] << 16); +- 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 = ((__vaword)((unsigned char *) list.raddr)[0]) -- | ((__vaword)((unsigned char *) list.raddr)[1] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[2] << 16) -- | ((__vaword)((unsigned char *) list.raddr)[3] << 24); -+ iret = ((__vaword)((unsigned char *) list.raddr)[3]) -+ | ((__vaword)((unsigned char *) list.raddr)[2] << 8) -+ | ((__vaword)((unsigned char *) list.raddr)[1] << 16) -+ | ((__vaword)((unsigned char *) list.raddr)[0] << 24); +- 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 = ((__vaword)((unsigned char *) list.raddr)[0]) -- | ((__vaword)((unsigned char *) list.raddr)[1] << 8) -+ iret = ((__vaword)((unsigned char *) list.raddr)[4]) -+ | ((__vaword)((unsigned char *) list.raddr)[3] << 8) - | ((__vaword)((unsigned char *) list.raddr)[2] << 16) -- | ((__vaword)((unsigned char *) list.raddr)[3] << 24) -- | ((__vaword)((unsigned char *) list.raddr)[4] << 32); -+ | ((__vaword)((unsigned char *) list.raddr)[1] << 24) -+ | ((__vaword)((unsigned char *) list.raddr)[0] << 32); +- 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 = ((__vaword)((unsigned char *) list.raddr)[0]) -- | ((__vaword)((unsigned char *) list.raddr)[1] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[2] << 16) -- | ((__vaword)((unsigned char *) list.raddr)[3] << 24) -- | ((__vaword)((unsigned char *) list.raddr)[4] << 32) -- | ((__vaword)((unsigned char *) list.raddr)[5] << 40); -+ iret = ((__vaword)((unsigned char *) list.raddr)[5]) -+ | ((__vaword)((unsigned char *) list.raddr)[4] << 8) -+ | ((__vaword)((unsigned char *) list.raddr)[3] << 16) -+ | ((__vaword)((unsigned char *) list.raddr)[2] << 24) -+ | ((__vaword)((unsigned char *) list.raddr)[1] << 32) -+ | ((__vaword)((unsigned char *) list.raddr)[0] << 40); +- 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 = ((__vaword)((unsigned char *) list.raddr)[0]) -- | ((__vaword)((unsigned char *) list.raddr)[1] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[2] << 16) -+ iret = ((__vaword)((unsigned char *) list.raddr)[6]) -+ | ((__vaword)((unsigned char *) list.raddr)[5] << 8) -+ | ((__vaword)((unsigned char *) list.raddr)[4] << 16) - | ((__vaword)((unsigned char *) list.raddr)[3] << 24) -- | ((__vaword)((unsigned char *) list.raddr)[4] << 32) -- | ((__vaword)((unsigned char *) list.raddr)[5] << 40) -- | ((__vaword)((unsigned char *) list.raddr)[6] << 48); -+ | ((__vaword)((unsigned char *) list.raddr)[2] << 32) -+ | ((__vaword)((unsigned char *) list.raddr)[1] << 40) -+ | ((__vaword)((unsigned char *) list.raddr)[0] << 48); +- 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 = ((__vaword)((unsigned char *) list.raddr)[0]) -- | ((__vaword)((unsigned char *) list.raddr)[1] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[2] << 16) -- | ((__vaword)((unsigned char *) list.raddr)[3] << 24) -- | ((__vaword)((unsigned char *) list.raddr)[4] << 32) -- | ((__vaword)((unsigned char *) list.raddr)[5] << 40) -- | ((__vaword)((unsigned char *) list.raddr)[6] << 48) -- | ((__vaword)((unsigned char *) list.raddr)[7] << 56); -+ iret = ((__vaword)((unsigned char *) list.raddr)[7]) -+ | ((__vaword)((unsigned char *) list.raddr)[6] << 8) -+ | ((__vaword)((unsigned char *) list.raddr)[5] << 16) -+ | ((__vaword)((unsigned char *) list.raddr)[4] << 24) -+ | ((__vaword)((unsigned char *) list.raddr)[3] << 32) -+ | ((__vaword)((unsigned char *) list.raddr)[2] << 40) -+ | ((__vaword)((unsigned char *) list.raddr)[1] << 48) -+ | ((__vaword)((unsigned char *) list.raddr)[0] << 56); +- 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 = (__vaword)((unsigned char *) list.raddr)[8]; -+ iret2 = (__vaword)((unsigned char *) list.raddr)[8] << 56; +- iret2 = (__varword)((unsigned char *) list.raddr)[8]; ++ iret2 = (__varword)((unsigned char *) list.raddr)[8] << 56; } else if (list.rsize == 10) { -- iret2 = ((__vaword)((unsigned char *) list.raddr)[8]) -- | ((__vaword)((unsigned char *) list.raddr)[9] << 8); -+ iret2 = ((__vaword)((unsigned char *) list.raddr)[8] << 56) -+ | ((__vaword)((unsigned char *) list.raddr)[9] << 48); +- 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 = ((__vaword)((unsigned char *) list.raddr)[8]) -- | ((__vaword)((unsigned char *) list.raddr)[9] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[10] << 16); -+ iret2 = ((__vaword)((unsigned char *) list.raddr)[8] << 56) -+ | ((__vaword)((unsigned char *) list.raddr)[9] << 48) -+ | ((__vaword)((unsigned char *) list.raddr)[10] << 40); +- 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 = ((__vaword)((unsigned char *) list.raddr)[8]) -- | ((__vaword)((unsigned char *) list.raddr)[9] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[10] << 16) -- | ((__vaword)((unsigned char *) list.raddr)[11] << 24); -+ iret2 = ((__vaword)((unsigned char *) list.raddr)[8] << 56) -+ | ((__vaword)((unsigned char *) list.raddr)[9] << 48) -+ | ((__vaword)((unsigned char *) list.raddr)[10] << 40) -+ | ((__vaword)((unsigned char *) list.raddr)[11] << 32); +- 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 = ((__vaword)((unsigned char *) list.raddr)[8]) -- | ((__vaword)((unsigned char *) list.raddr)[9] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[10] << 16) -- | ((__vaword)((unsigned char *) list.raddr)[11] << 24) -- | ((__vaword)((unsigned char *) list.raddr)[12] << 32); -+ iret2 = ((__vaword)((unsigned char *) list.raddr)[8] << 56) -+ | ((__vaword)((unsigned char *) list.raddr)[9] << 48) -+ | ((__vaword)((unsigned char *) list.raddr)[10] << 40) -+ | ((__vaword)((unsigned char *) list.raddr)[11] << 32) -+ | ((__vaword)((unsigned char *) list.raddr)[12] << 24); +- 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 = ((__vaword)((unsigned char *) list.raddr)[8]) -- | ((__vaword)((unsigned char *) list.raddr)[9] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[10] << 16) -- | ((__vaword)((unsigned char *) list.raddr)[11] << 24) -- | ((__vaword)((unsigned char *) list.raddr)[12] << 32) -- | ((__vaword)((unsigned char *) list.raddr)[13] << 40); -+ iret2 = ((__vaword)((unsigned char *) list.raddr)[8] << 56) -+ | ((__vaword)((unsigned char *) list.raddr)[9] << 48) -+ | ((__vaword)((unsigned char *) list.raddr)[10] << 40) -+ | ((__vaword)((unsigned char *) list.raddr)[11] << 32) -+ | ((__vaword)((unsigned char *) list.raddr)[12] << 24) -+ | ((__vaword)((unsigned char *) list.raddr)[13] << 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); ++ 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 = ((__vaword)((unsigned char *) list.raddr)[8]) -- | ((__vaword)((unsigned char *) list.raddr)[9] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[10] << 16) -- | ((__vaword)((unsigned char *) list.raddr)[11] << 24) -- | ((__vaword)((unsigned char *) list.raddr)[12] << 32) -- | ((__vaword)((unsigned char *) list.raddr)[13] << 40) -- | ((__vaword)((unsigned char *) list.raddr)[14] << 48); -+ iret2 = ((__vaword)((unsigned char *) list.raddr)[8] << 56) -+ | ((__vaword)((unsigned char *) list.raddr)[9] << 48) -+ | ((__vaword)((unsigned char *) list.raddr)[10] << 40) -+ | ((__vaword)((unsigned char *) list.raddr)[11] << 32) -+ | ((__vaword)((unsigned char *) list.raddr)[12] << 24) -+ | ((__vaword)((unsigned char *) list.raddr)[13] << 16) -+ | ((__vaword)((unsigned char *) list.raddr)[14] << 8); +- 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 = ((__vaword)((unsigned char *) list.raddr)[8]) -- | ((__vaword)((unsigned char *) list.raddr)[9] << 8) -- | ((__vaword)((unsigned char *) list.raddr)[10] << 16) -- | ((__vaword)((unsigned char *) list.raddr)[11] << 24) -- | ((__vaword)((unsigned char *) list.raddr)[12] << 32) -- | ((__vaword)((unsigned char *) list.raddr)[13] << 40) -- | ((__vaword)((unsigned char *) list.raddr)[14] << 48) -- | ((__vaword)((unsigned char *) list.raddr)[15] << 56); -+ iret2 = ((__vaword)((unsigned char *) list.raddr)[8] << 56) -+ | ((__vaword)((unsigned char *) list.raddr)[9] << 48) -+ | ((__vaword)((unsigned char *) list.raddr)[10] << 40) -+ | ((__vaword)((unsigned char *) list.raddr)[11] << 32) -+ | ((__vaword)((unsigned char *) list.raddr)[12] << 24) -+ | ((__vaword)((unsigned char *) list.raddr)[13] << 16) -+ | ((__vaword)((unsigned char *) list.raddr)[14] << 8) -+ | ((__vaword)((unsigned char *) list.raddr)[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) +- | ((__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 */ ---- libffcall-2.2/vacall/vacall-powerpc64-elfv2-linux.S.old 2019-08-25 01:03:06.000000000 +0000 -+++ libffcall-2.2/vacall/vacall-powerpc64-elfv2-linux.S 2020-05-11 23:18:00.842212129 +0000 -@@ -1,9 +1,8 @@ - .file "vacall-powerpc64.c" -- .machine power4 - .abiversion 2 -- .section ".toc","aw" - .section ".text" - .section ".toc","aw" -+ .align 3 - .LC0: - .quad vacall_function - .section ".text" -@@ -12,40 +11,50 @@ - .globl vacall_receiver - .type vacall_receiver, @function - vacall_receiver: --0: addis 2,12,.TOC.-0b@ha -- addi 2,2,.TOC.-0b@l -+.LFB0: -+ .cfi_startproc -+.LCF0: -+0: addis 2,12,.TOC.-.LCF0@ha -+ addi 2,2,.TOC.-.LCF0@l - .localentry vacall_receiver,.-vacall_receiver - mflr 0 - std 31,-8(1) -+ std 30,-16(1) - addis 11,2,.LC0@toc@ha -- ld 12,.LC0@toc@l(11) -- li 11,0 - std 0,16(1) - stdu 1,-224(1) -- mr 31,1 -- ld 0,0(12) -+ .cfi_def_cfa_offset 224 -+ .cfi_offset 65, 16 -+ .cfi_offset 31, -8 -+ .cfi_offset 30, -16 -+ li 0,0 -+ ld 12,.LC0@toc@l(11) - std 2,24(1) -+ mr 31,1 -+ .cfi_def_cfa_register 31 -+ addi 11,31,256 -+ ld 30,-28688(13) -+ std 30,200(31) -+ li 30,0 -+ std 6,280(31) -+ ld 6,0(12) - std 9,304(31) - li 9,0 - std 3,256(31) -- addi 3,31,32 - std 4,264(31) -+ stfd 1,96(31) - std 5,272(31) -- mtctr 0 -- stw 9,32(31) -- std 6,280(31) - std 7,288(31) - std 8,296(31) -+ mtctr 6 - std 10,312(31) -- stfd 1,96(31) -- addi 9,31,256 - stfd 2,104(31) - stfd 3,112(31) - stfd 4,120(31) -+ mr 12,6 - stfd 5,128(31) -- mr 12,0 -- std 9,56(31) - stfd 6,136(31) -+ addi 3,31,32 - stfd 7,144(31) - stfd 8,152(31) - stfd 9,160(31) -@@ -53,173 +62,232 @@ - stfd 11,176(31) - stfd 12,184(31) - stfd 13,192(31) -- std 11,64(31) -- stw 11,72(31) -- stw 11,88(31) -+ stw 0,32(31) -+ std 11,56(31) -+ std 9,64(31) -+ stw 9,72(31) -+ stw 9,88(31) - bctrl - ld 2,24(1) - lwz 9,72(31) - cmpdi 7,9,0 - beq 7,.L1 - cmplwi 7,9,1 -- beq 7,.L27 -+ beq 7,.L41 - cmplwi 7,9,2 -- beq 7,.L30 -+ beq 7,.L45 - cmplwi 7,9,3 -- beq 7,.L27 -+ beq 7,.L41 - cmplwi 7,9,4 -- beq 7,.L31 -+ beq 7,.L46 - cmplwi 7,9,5 -- beq 7,.L32 -+ beq 7,.L47 - cmplwi 7,9,6 -- beq 7,.L33 -+ beq 7,.L48 - cmplwi 7,9,7 -- beq 7,.L34 -+ beq 7,.L49 - cmplwi 7,9,8 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,9 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,10 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,11 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,12 -- beq 7,.L35 -+ beq 7,.L50 - cmplwi 7,9,13 -- beq 7,.L36 -+ beq 7,.L51 - cmplwi 7,9,14 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,15 - bne 7,.L1 - lwz 9,32(31) -- rldicl. 10,9,54,63 -+ andi. 9,9,0x400 - beq 0,.L1 -- ld 9,80(31) -- addi 10,9,-1 -- cmpldi 7,10,15 -+ ld 10,80(31) -+ addi 9,10,-1 -+ cmpldi 7,9,15 - bgt 7,.L1 -+ cmpldi 7,10,1 - ld 8,64(31) -- cmpldi 7,9,8 -- rldicl 10,8,0,61 -- rldicr 8,8,0,60 -- add 9,9,10 -- bgt 7,.L17 -- cmpldi 7,9,8 -- slwi 9,9,3 -- bgt 7,.L18 -- ld 7,0(8) -- addi 9,9,-1 -- li 8,2 -- slwi 10,10,3 -- sld 9,8,9 -- addi 9,9,-1 -- and 9,9,7 -- srad 3,9,10 -+ lbz 9,0(8) -+ beq 7,.L52 -+ cmpldi 7,10,2 -+ beq 7,.L53 -+ cmpldi 7,10,3 -+ lbz 7,1(8) -+ lbz 6,2(8) -+ beq 7,.L54 -+ cmpldi 7,10,4 -+ beq 7,.L55 -+ cmpldi 7,10,5 -+ beq 7,.L56 -+ cmpldi 7,10,6 -+ beq 7,.L57 -+ cmpldi 7,10,7 -+ beq 7,.L58 -+ cmpldi 7,10,8 -+ ld 3,0(8) -+ beq 7,.L1 -+ cmpldi 7,10,9 -+ lbz 9,8(8) -+ sldi 9,9,56 -+ beq 7,.L59 -+ lbz 7,9(8) -+ cmpldi 7,10,10 -+ sldi 7,7,48 -+ or 7,7,9 -+ beq 7,.L60 -+ cmpldi 7,10,11 -+ lbz 9,10(8) -+ sldi 9,9,40 -+ beq 7,.L43 -+ cmpldi 7,10,12 -+ lbz 6,11(8) -+ sldi 6,6,32 -+ beq 7,.L61 -+ cmpldi 7,10,13 -+ lbz 5,12(8) -+ sldi 5,5,24 -+ beq 7,.L62 -+ cmpldi 7,10,14 -+ lbz 11,13(8) -+ sldi 11,11,16 -+ beq 7,.L63 -+ cmpldi 7,10,15 -+ beq 7,.L64 -+ ld 4,8(8) -+ .p2align 4,,15 - .L1: -+ ld 9,200(31) -+ ld 10,-28688(13) -+ xor. 9,9,10 -+ li 10,0 -+ bne 0,.L65 - addi 1,31,224 -+ .cfi_remember_state -+ .cfi_def_cfa 1, 0 - ld 0,16(1) -+ ld 30,-16(1) - ld 31,-8(1) - mtlr 0 -+ .cfi_restore 65 -+ .cfi_restore 31 -+ .cfi_restore 30 - blr - .p2align 4,,15 --.L27: -- addi 1,31,224 -+.L41: -+ .cfi_restore_state - lbz 3,40(31) -- ld 0,16(1) -- ld 31,-8(1) -- mtlr 0 -- blr -+ b .L1 - .p2align 4,,15 --.L30: -- lbz 9,40(31) -- extsb 3,9 -+.L45: -+ lbz 3,40(31) -+ extsb 3,3 - b .L1 - .p2align 4,,15 --.L28: -- ld 3,40(31) -+.L48: -+ lwa 3,40(31) - b .L1 - .p2align 4,,15 --.L31: -+.L46: - lha 3,40(31) - b .L1 - .p2align 4,,15 --.L32: -+.L47: - lhz 3,40(31) - b .L1 - .p2align 4,,15 --.L33: -- lwa 3,40(31) -- b .L1 -- .p2align 4,,15 --.L35: -- lfs 1,40(31) -+.L42: -+ ld 3,40(31) - b .L1 - .p2align 4,,15 --.L34: -+.L49: - lwz 3,40(31) - b .L1 --.L36: -+.L50: -+ lfs 1,40(31) -+ b .L1 -+.L51: - lfd 1,40(31) - b .L1 --.L17: -- cmpldi 7,9,16 -- rldicl 10,10,0,32 -- slwi 9,9,3 -- ble 7,.L37 -- li 7,2 -- addi 9,9,-129 -- ld 11,16(8) -- ld 5,0(8) -- mulli 6,10,-8 -- sld 9,7,9 -- ld 7,8(8) -- addi 8,9,-1 -- slwi 9,10,3 -- addi 6,6,64 -- and 10,8,11 -- srad 8,5,9 -- sld 5,7,6 -- srad 9,7,9 -- sld 10,10,6 -- or 3,8,5 -- or 4,10,9 -- b .L1 --.L18: -- rldicl 10,10,0,32 -- li 7,2 -- ld 6,8(8) -- ld 8,0(8) -- addi 9,9,-65 -- sld 9,7,9 -- mulli 7,10,-8 -- slwi 10,10,3 -- addi 9,9,-1 -- srad 10,8,10 -- and 9,9,6 -- addi 7,7,64 -- sld 9,9,7 -- or 3,9,10 -- b .L1 --.L37: -- li 7,2 -- addi 9,9,-65 -- ld 5,8(8) -- ld 6,0(8) -- sld 9,7,9 -- mulli 7,10,-4 -- addi 9,9,-1 -- addi 7,7,32 -- and 8,9,5 -- slwi 9,10,3 -- sld 10,8,7 -- srad 6,6,9 -- srad 4,8,9 -- sld 7,10,7 -- or 3,6,7 -+.L65: -+ bl __stack_chk_fail -+ nop -+.L64: -+ or 4,9,6 -+ lbz 9,14(8) -+ or 4,4,5 -+ sldi 9,9,8 -+ or 4,4,11 -+ or 4,4,9 -+ or 4,4,7 -+ b .L1 -+.L63: -+ or 4,9,6 -+ or 4,4,5 -+ or 4,4,11 -+ or 4,4,7 -+ b .L1 -+.L55: -+ lwz 3,0(8) -+ b .L1 -+.L54: -+ sldi 7,7,8 -+ sldi 9,9,16 -+ or 9,7,9 -+ or 3,9,6 -+ b .L1 -+.L53: -+ lhz 3,0(8) -+ b .L1 -+.L52: -+ mr 3,9 -+ b .L1 -+.L62: -+ or 9,9,6 -+ or 4,9,5 -+ or 4,4,7 -+ b .L1 -+.L61: -+ or 9,9,6 -+.L43: -+ or 4,9,7 -+ b .L1 -+.L60: -+ mr 4,7 -+ b .L1 -+.L59: -+ mr 4,9 -+ b .L1 -+.L58: -+ sldi 6,6,32 -+ sldi 7,7,40 -+ lwz 3,3(8) -+ sldi 9,9,48 -+ or 7,6,7 -+ or 3,7,3 -+ or 3,3,9 -+ b .L1 -+.L57: -+ sldi 7,7,32 -+ sldi 9,9,40 -+ lwz 3,2(8) -+ or 9,7,9 -+ or 3,9,3 -+ b .L1 -+.L56: -+ lwz 3,1(8) -+ sldi 9,9,32 -+ or 3,3,9 - b .L1 - .long 0 -- .byte 0,0,0,1,128,1,0,0 -+ .byte 0,0,0,1,128,2,0,0 -+ .cfi_endproc -+.LFE0: - .size vacall_receiver,.-vacall_receiver -+ .gnu_attribute 4, 9 - #if defined __linux__ || defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __DragonFly__ - .section .note.GNU-stack,"",@progbits - #endif ---- libffcall-2.2/callback/vacall_r/vacall-powerpc64-elfv2-linux.S.old 2019-08-25 01:03:08.000000000 +0000 -+++ libffcall-2.2/callback/vacall_r/vacall-powerpc64-elfv2-linux.S 2020-05-11 23:26:54.443785997 +0000 -@@ -1,45 +1,56 @@ - .file "vacall-powerpc64.c" -- .machine power4 - .abiversion 2 -- .section ".toc","aw" - .section ".text" - .align 2 - .p2align 4,,15 - .type callback_receiver, @function - callback_receiver: --0: addis 2,12,.TOC.-0b@ha -- addi 2,2,.TOC.-0b@l -+.LFB0: -+ .cfi_startproc -+.LCF0: -+0: addis 2,12,.TOC.-.LCF0@ha -+ addi 2,2,.TOC.-.LCF0@l - .localentry callback_receiver,.-callback_receiver - mflr 0 -- std 30,-16(1) -+ std 28,-32(1) -+ std 29,-24(1) - std 31,-8(1) -+ std 30,-16(1) - std 0,16(1) -- stdu 1,-224(1) -- li 0,0 -- ld 30,0(11) -+ stdu 1,-240(1) -+ .cfi_def_cfa_offset 240 -+ .cfi_offset 65, 16 -+ .cfi_offset 28, -32 -+ .cfi_offset 29, -24 -+ .cfi_offset 31, -8 -+ .cfi_offset 30, -16 -+ li 28,0 -+ std 2,24(1) - mr 31,1 -- std 3,256(31) -- std 4,264(31) -- addi 4,31,32 -- ld 3,8(11) -- std 9,304(31) -- mtctr 30 -+ .cfi_def_cfa_register 31 -+ addi 29,31,272 -+ ld 0,-28688(13) -+ std 0,200(31) -+ li 0,0 -+ ld 0,0(11) -+ std 9,320(31) - li 9,0 -- std 5,272(31) -- std 6,280(31) -- std 7,288(31) -- std 8,296(31) -- stw 9,32(31) -- std 10,312(31) - stfd 1,96(31) -+ std 3,272(31) -+ std 4,280(31) -+ std 5,288(31) - stfd 2,104(31) -- mr 12,30 -- addi 9,31,256 -+ mtctr 0 -+ std 6,296(31) -+ std 7,304(31) -+ std 8,312(31) -+ std 10,328(31) - stfd 3,112(31) - stfd 4,120(31) - stfd 5,128(31) - stfd 6,136(31) -- std 9,56(31) -+ mr 12,0 -+ addi 4,31,32 - stfd 7,144(31) - stfd 8,152(31) - stfd 9,160(31) -@@ -47,195 +58,266 @@ - stfd 11,176(31) - stfd 12,184(31) - stfd 13,192(31) -- std 0,64(31) -- stw 0,72(31) -- stw 0,88(31) -- std 2,24(1) -+ ld 3,8(11) -+ stw 28,32(31) -+ std 9,64(31) -+ stw 9,72(31) -+ stw 9,88(31) -+ std 29,56(31) - bctrl - ld 2,24(1) - lwz 9,72(31) - cmpdi 7,9,0 - beq 7,.L1 - cmplwi 7,9,1 -- beq 7,.L27 -+ beq 7,.L41 - cmplwi 7,9,2 -- beq 7,.L30 -+ beq 7,.L45 - cmplwi 7,9,3 -- beq 7,.L27 -+ beq 7,.L41 - cmplwi 7,9,4 -- beq 7,.L31 -+ beq 7,.L46 - cmplwi 7,9,5 -- beq 7,.L32 -+ beq 7,.L47 - cmplwi 7,9,6 -- beq 7,.L33 -+ beq 7,.L48 - cmplwi 7,9,7 -- beq 7,.L34 -+ beq 7,.L49 - cmplwi 7,9,8 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,9 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,10 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,11 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,12 -- beq 7,.L35 -+ beq 7,.L50 - cmplwi 7,9,13 -- beq 7,.L36 -+ beq 7,.L51 - cmplwi 7,9,14 -- beq 7,.L28 -+ beq 7,.L42 - cmplwi 7,9,15 - bne 7,.L1 - lwz 9,32(31) -- rldicl. 10,9,54,63 -+ andi. 9,9,0x400 - beq 0,.L1 -- ld 9,80(31) -- addi 10,9,-1 -- cmpldi 7,10,15 -+ ld 10,80(31) -+ addi 9,10,-1 -+ cmpldi 7,9,15 - bgt 7,.L1 -+ cmpldi 7,10,1 - ld 8,64(31) -- cmpldi 7,9,8 -- rldicl 10,8,0,61 -- rldicr 8,8,0,60 -- add 9,9,10 -- bgt 7,.L17 -- cmpldi 7,9,8 -- slwi 9,9,3 -- bgt 7,.L18 -- ld 7,0(8) -- addi 9,9,-1 -- li 8,2 -- slwi 10,10,3 -- sld 9,8,9 -- addi 9,9,-1 -- and 9,9,7 -- srad 3,9,10 -+ lbz 9,0(8) -+ beq 7,.L52 -+ cmpldi 7,10,2 -+ beq 7,.L53 -+ cmpldi 7,10,3 -+ lbz 7,1(8) -+ lbz 6,2(8) -+ beq 7,.L54 -+ cmpldi 7,10,4 -+ beq 7,.L55 -+ cmpldi 7,10,5 -+ beq 7,.L56 -+ cmpldi 7,10,6 -+ beq 7,.L57 -+ cmpldi 7,10,7 -+ beq 7,.L58 -+ cmpldi 7,10,8 -+ ld 3,0(8) -+ beq 7,.L1 -+ cmpldi 7,10,9 -+ lbz 9,8(8) -+ sldi 9,9,56 -+ beq 7,.L59 -+ lbz 7,9(8) -+ cmpldi 7,10,10 -+ sldi 7,7,48 -+ or 7,7,9 -+ beq 7,.L60 -+ cmpldi 7,10,11 -+ lbz 9,10(8) -+ sldi 9,9,40 -+ beq 7,.L43 -+ cmpldi 7,10,12 -+ lbz 6,11(8) -+ sldi 6,6,32 -+ beq 7,.L61 -+ cmpldi 7,10,13 -+ lbz 5,12(8) -+ sldi 5,5,24 -+ beq 7,.L62 -+ cmpldi 7,10,14 -+ lbz 0,13(8) -+ sldi 0,0,16 -+ beq 7,.L63 -+ cmpldi 7,10,15 -+ beq 7,.L64 -+ ld 4,8(8) -+ .p2align 4,,15 - .L1: -- addi 1,31,224 -+ ld 9,200(31) -+ ld 10,-28688(13) -+ xor. 9,9,10 -+ li 10,0 -+ bne 0,.L65 -+ addi 1,31,240 -+ .cfi_remember_state -+ .cfi_def_cfa 1, 0 - ld 0,16(1) -+ ld 28,-32(1) -+ ld 29,-24(1) - ld 30,-16(1) - ld 31,-8(1) - mtlr 0 -+ .cfi_restore 65 -+ .cfi_restore 31 -+ .cfi_restore 30 -+ .cfi_restore 29 -+ .cfi_restore 28 - blr - .p2align 4,,15 --.L27: -- addi 1,31,224 -+.L41: -+ .cfi_restore_state - lbz 3,40(31) -- ld 0,16(1) -- ld 30,-16(1) -- ld 31,-8(1) -- mtlr 0 -- blr -+ b .L1 - .p2align 4,,15 --.L30: -- lbz 9,40(31) -- extsb 3,9 -+.L45: -+ lbz 3,40(31) -+ extsb 3,3 - b .L1 - .p2align 4,,15 --.L28: -- ld 3,40(31) -+.L48: -+ lwa 3,40(31) - b .L1 - .p2align 4,,15 --.L31: -+.L46: - lha 3,40(31) - b .L1 - .p2align 4,,15 --.L32: -+.L47: - lhz 3,40(31) - b .L1 - .p2align 4,,15 --.L33: -- lwa 3,40(31) -- b .L1 -- .p2align 4,,15 --.L35: -- lfs 1,40(31) -+.L42: -+ ld 3,40(31) - b .L1 - .p2align 4,,15 --.L34: -+.L49: - lwz 3,40(31) - b .L1 --.L36: -+.L50: -+ lfs 1,40(31) -+ b .L1 -+.L51: - lfd 1,40(31) - b .L1 --.L17: -- cmpldi 7,9,16 -- rldicl 10,10,0,32 -- slwi 9,9,3 -- ble 7,.L37 -- li 7,2 -- addi 9,9,-129 -- ld 0,16(8) -- ld 5,0(8) -- mulli 6,10,-8 -- sld 9,7,9 -- ld 7,8(8) -- addi 8,9,-1 -- slwi 9,10,3 -- addi 6,6,64 -- and 10,8,0 -- srad 8,5,9 -- sld 5,7,6 -- srad 9,7,9 -- sld 10,10,6 -- or 3,8,5 -- or 4,10,9 -- b .L1 --.L18: -- rldicl 10,10,0,32 -- li 7,2 -- ld 6,8(8) -- ld 8,0(8) -- addi 9,9,-65 -- sld 9,7,9 -- mulli 7,10,-8 -- slwi 10,10,3 -- addi 9,9,-1 -- srad 10,8,10 -- and 9,9,6 -- addi 7,7,64 -- sld 9,9,7 -- or 3,9,10 -- b .L1 --.L37: -- li 7,2 -- addi 9,9,-65 -- ld 5,8(8) -- ld 6,0(8) -- sld 9,7,9 -- mulli 7,10,-4 -- addi 9,9,-1 -- addi 7,7,32 -- and 8,9,5 -- slwi 9,10,3 -- sld 10,8,7 -- srad 6,6,9 -- srad 4,8,9 -- sld 7,10,7 -- or 3,6,7 -+.L65: -+ bl __stack_chk_fail -+ nop -+.L64: -+ or 4,9,6 -+ lbz 9,14(8) -+ or 4,4,5 -+ sldi 9,9,8 -+ or 4,4,0 -+ or 4,4,9 -+ or 4,4,7 -+ b .L1 -+.L63: -+ or 4,9,6 -+ or 4,4,5 -+ or 4,4,0 -+ or 4,4,7 -+ b .L1 -+.L55: -+ lwz 3,0(8) -+ b .L1 -+.L54: -+ sldi 7,7,8 -+ sldi 9,9,16 -+ or 9,7,9 -+ or 3,9,6 -+ b .L1 -+.L53: -+ lhz 3,0(8) -+ b .L1 -+.L52: -+ mr 3,9 -+ b .L1 -+.L62: -+ or 9,9,6 -+ or 4,9,5 -+ or 4,4,7 -+ b .L1 -+.L61: -+ or 9,9,6 -+.L43: -+ or 4,9,7 -+ b .L1 -+.L60: -+ mr 4,7 -+ b .L1 -+.L59: -+ mr 4,9 -+ b .L1 -+.L58: -+ sldi 6,6,32 -+ sldi 7,7,40 -+ lwz 3,3(8) -+ sldi 9,9,48 -+ or 7,6,7 -+ or 3,7,3 -+ or 3,3,9 -+ b .L1 -+.L57: -+ sldi 7,7,32 -+ sldi 9,9,40 -+ lwz 3,2(8) -+ or 9,7,9 -+ or 3,9,3 -+ b .L1 -+.L56: -+ lwz 3,1(8) -+ sldi 9,9,32 -+ or 3,3,9 - b .L1 - .long 0 -- .byte 0,0,0,1,128,2,0,0 -+ .byte 0,0,0,1,128,4,0,0 -+ .cfi_endproc -+.LFE0: - .size callback_receiver,.-callback_receiver - .align 2 - .p2align 4,,15 - .globl callback_get_receiver - .type callback_get_receiver, @function - callback_get_receiver: --0: addis 2,12,.TOC.-0b@ha -- addi 2,2,.TOC.-0b@l -+.LFB1: -+ .cfi_startproc -+.LCF1: -+0: addis 2,12,.TOC.-.LCF1@ha -+ addi 2,2,.TOC.-.LCF1@l - .localentry callback_get_receiver,.-callback_get_receiver - std 31,-8(1) - stdu 1,-48(1) -+ .cfi_def_cfa_offset 48 -+ .cfi_offset 31, -8 - addis 3,2,callback_receiver@toc@ha - addi 3,3,callback_receiver@toc@l - mr 31,1 -+ .cfi_def_cfa_register 31 - addi 1,31,48 -+ .cfi_def_cfa 1, 0 - ld 31,-8(1) -+ .cfi_restore 31 - blr - .long 0 - .byte 0,0,0,0,128,1,0,0 -+ .cfi_endproc -+.LFE1: - .size callback_get_receiver,.-callback_get_receiver -+ .gnu_attribute 4, 9 - #if defined __linux__ || defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __DragonFly__ - .section .note.GNU-stack,"",@progbits - #endif |