diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2020-05-11 23:29:12 +0000 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2020-05-11 23:29:12 +0000 |
commit | 357959274975f567bea4548c97719e4f573544f5 (patch) | |
tree | 7edcf6503eaadd23a5e0540e778f25afc521e9dd | |
parent | a5ce3f8309b0f59316fffa7219bd04f726b08ff5 (diff) | |
download | packages-357959274975f567bea4548c97719e4f573544f5.tar.gz packages-357959274975f567bea4548c97719e4f573544f5.tar.bz2 packages-357959274975f567bea4548c97719e4f573544f5.tar.xz packages-357959274975f567bea4548c97719e4f573544f5.zip |
user/libffcall: Port to 64-bit PowerPC
-rw-r--r-- | user/libffcall/APKBUILD | 7 | ||||
-rw-r--r-- | user/libffcall/ppc64.patch | 1685 |
2 files changed, 1690 insertions, 2 deletions
diff --git a/user/libffcall/APKBUILD b/user/libffcall/APKBUILD index a3bdfde1a..48b16a78f 100644 --- a/user/libffcall/APKBUILD +++ b/user/libffcall/APKBUILD @@ -12,7 +12,9 @@ license="GPL-2.0+" depends="" makedepends="" subpackages="$pkgname-dev $pkgname-doc" -source="https://ftp.gnu.org/gnu/libffcall/libffcall-$pkgver.tar.gz" +source="https://ftp.gnu.org/gnu/libffcall/libffcall-$pkgver.tar.gz + ppc64.patch + " build() { ./configure \ @@ -36,4 +38,5 @@ package() { } -sha512sums="b9d3ca4c67ab92915a8183d850153e585dcb58ceb2199a104426a7aae363d37017b1226440acd18a2db0cc207e044f71e932857189964261e8eaa6de5cef1731 libffcall-2.2.tar.gz" +sha512sums="b9d3ca4c67ab92915a8183d850153e585dcb58ceb2199a104426a7aae363d37017b1226440acd18a2db0cc207e044f71e932857189964261e8eaa6de5cef1731 libffcall-2.2.tar.gz +db7fae1d2f0d95003186671fd89b097b4abf6184d3001e34dd93419640502b9cd5cf32aef4839d6a4208f4aed793c70f9a4367f12adde21372dc131b111238fe ppc64.patch" diff --git a/user/libffcall/ppc64.patch b/user/libffcall/ppc64.patch new file mode 100644 index 000000000..74525987b --- /dev/null +++ b/user/libffcall/ppc64.patch @@ -0,0 +1,1685 @@ +--- 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/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 @@ + 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 = (__vaword)((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); + } 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); + } 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); + } 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); + } 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); + } 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); + } 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); + if (list.rsize == 8) { + } else + if (list.rsize == 9) { +- iret2 = (__vaword)((unsigned char *) list.raddr)[8]; ++ iret2 = (__vaword)((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); + } 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); + } 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); + } 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); + } 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); + } 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); + } 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]); + } + } + #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 |