summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLee Starnes <lee@canned-death.us>2022-05-29 02:24:14 +0000
committerZach van Rijn <me@zv.io>2022-10-21 18:34:01 -0500
commit8721370ccff353cf46c523529a475e364e857393 (patch)
treec914e623e7923390dfba72de31f8d4703ac1cbab
parente3fd275e9e2360ee4363e5656f89e691aa2b8e36 (diff)
downloadpackages-8721370ccff353cf46c523529a475e364e857393.tar.gz
packages-8721370ccff353cf46c523529a475e364e857393.tar.bz2
packages-8721370ccff353cf46c523529a475e364e857393.tar.xz
packages-8721370ccff353cf46c523529a475e364e857393.zip
user/libffcall: 2.4 with Zach's patch
-rw-r--r--user/libffcall/APKBUILD36
-rw-r--r--user/libffcall/ppc64.patch1604
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