1825 lines
42 KiB
Diff
1825 lines
42 KiB
Diff
--- a/avcall/avcall-powerpc64-elfv2-linux.S
|
|
+++ b/avcall/avcall-powerpc64-elfv2-linux.S
|
|
@@ -1,308 +1,326 @@
|
|
.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 29,-24(1)
|
|
std 30,-16(1)
|
|
std 31,-8(1)
|
|
+ .cfi_register 65, 0
|
|
+ .cfi_offset 29, -24
|
|
+ .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,-144(1)
|
|
+ .cfi_def_cfa_offset 144
|
|
+ .cfi_offset 65, 16
|
|
+ ld 29,48(3)
|
|
+ ld 5,40(3)
|
|
mr 31,1
|
|
- ld 10,0(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
|
|
- .p2align 4,,15
|
|
+ .cfi_def_cfa_register 31
|
|
+ ld 9,0(1)
|
|
+ ld 10,-28688(13)
|
|
+ std 10,104(31)
|
|
+ li 10,0
|
|
+ subf 5,29,5
|
|
+ stdu 9,-2048(1)
|
|
+ sradi 5,5,3
|
|
+ cmpwi 0,5,8
|
|
+ ble 0,.L5
|
|
+ addi 5,5,-9
|
|
+ addi 3,1,96
|
|
+ addi 4,29,64
|
|
+ rldic 5,5,3,29
|
|
+ addi 5,5,8
|
|
+ bl memcpy
|
|
+ nop
|
|
.L5:
|
|
- ldu 7,8(9)
|
|
- cmpld 7,10,9
|
|
- stdu 7,8(8)
|
|
- bne 7,.L5
|
|
-.L6:
|
|
ld 10,64(30)
|
|
addi 9,30,72
|
|
subf 9,9,10
|
|
sradi 9,9,3
|
|
+ cmpwi 0,9,0
|
|
extsw 9,9
|
|
- cmpwi 7,9,0
|
|
- ble 7,.L4
|
|
- cmpwi 7,9,1
|
|
- beq 7,.L7
|
|
- cmpwi 7,9,2
|
|
- beq 7,.L8
|
|
- cmpwi 7,9,3
|
|
- beq 7,.L9
|
|
- cmpwi 7,9,4
|
|
- beq 7,.L10
|
|
- cmpwi 7,9,5
|
|
- beq 7,.L11
|
|
- cmpwi 7,9,6
|
|
- beq 7,.L12
|
|
- cmpwi 7,9,7
|
|
- beq 7,.L13
|
|
- cmpwi 7,9,8
|
|
- beq 7,.L14
|
|
- cmpwi 7,9,9
|
|
- beq 7,.L15
|
|
- cmpwi 7,9,10
|
|
- beq 7,.L16
|
|
- cmpwi 7,9,11
|
|
- beq 7,.L17
|
|
- cmpwi 7,9,12
|
|
- beq 7,.L18
|
|
+ ble 0,.L4
|
|
+ cmpwi 0,9,1
|
|
+ beq 0,.L6
|
|
+ cmpwi 0,9,2
|
|
+ beq 0,.L7
|
|
+ cmpwi 0,9,3
|
|
+ beq 0,.L8
|
|
+ cmpwi 0,9,4
|
|
+ beq 0,.L9
|
|
+ cmpwi 0,9,5
|
|
+ beq 0,.L10
|
|
+ cmpwi 0,9,6
|
|
+ beq 0,.L11
|
|
+ cmpwi 0,9,7
|
|
+ beq 0,.L12
|
|
+ cmpwi 0,9,8
|
|
+ beq 0,.L13
|
|
+ cmpwi 0,9,9
|
|
+ beq 0,.L14
|
|
+ cmpwi 0,9,10
|
|
+ beq 0,.L15
|
|
+ cmpwi 0,9,11
|
|
+ beq 0,.L16
|
|
+ cmpwi 0,9,12
|
|
+ beq 0,.L17
|
|
lfd 13,168(30)
|
|
-.L18:
|
|
- lfd 12,160(30)
|
|
.L17:
|
|
- lfd 11,152(30)
|
|
+ lfd 12,160(30)
|
|
.L16:
|
|
- lfd 10,144(30)
|
|
+ lfd 11,152(30)
|
|
.L15:
|
|
- lfd 9,136(30)
|
|
+ lfd 10,144(30)
|
|
.L14:
|
|
- lfd 8,128(30)
|
|
+ lfd 9,136(30)
|
|
.L13:
|
|
- lfd 7,120(30)
|
|
+ lfd 8,128(30)
|
|
.L12:
|
|
- lfd 6,112(30)
|
|
+ lfd 7,120(30)
|
|
.L11:
|
|
- lfd 5,104(30)
|
|
+ lfd 6,112(30)
|
|
.L10:
|
|
- lfd 4,96(30)
|
|
+ lfd 5,104(30)
|
|
.L9:
|
|
- lfd 3,88(30)
|
|
+ lfd 4,96(30)
|
|
.L8:
|
|
- lfd 2,80(30)
|
|
+ lfd 3,88(30)
|
|
.L7:
|
|
+ lfd 2,80(30)
|
|
+.L6:
|
|
lfd 1,72(30)
|
|
.L4:
|
|
- ld 11,8(30)
|
|
- ld 9,48(3)
|
|
- ld 10,56(3)
|
|
- ld 8,40(3)
|
|
- ld 7,32(3)
|
|
- ld 6,24(3)
|
|
- ld 5,16(3)
|
|
- ld 4,8(3)
|
|
- mtctr 11
|
|
- ld 3,0(3)
|
|
- mr 12,11
|
|
+ ld 12,8(30)
|
|
+ ld 9,48(29)
|
|
+ ld 10,56(29)
|
|
+ ld 8,40(29)
|
|
+ ld 7,32(29)
|
|
+ ld 6,24(29)
|
|
+ ld 5,16(29)
|
|
+ ld 4,8(29)
|
|
+ mtctr 12
|
|
+ ld 3,0(29)
|
|
std 2,24(1)
|
|
bctrl
|
|
ld 2,24(1)
|
|
lwz 9,24(30)
|
|
- cmplwi 7,9,1
|
|
- beq 7,.L19
|
|
- cmplwi 7,9,2
|
|
- beq 7,.L43
|
|
- cmplwi 7,9,3
|
|
- beq 7,.L43
|
|
- cmplwi 7,9,4
|
|
- beq 7,.L43
|
|
- cmplwi 7,9,5
|
|
- beq 7,.L44
|
|
- cmplwi 7,9,6
|
|
- beq 7,.L44
|
|
- cmplwi 7,9,7
|
|
- beq 7,.L45
|
|
- cmplwi 7,9,8
|
|
- beq 7,.L45
|
|
- cmplwi 7,9,9
|
|
- beq 7,.L49
|
|
- cmplwi 7,9,10
|
|
- beq 7,.L49
|
|
- cmplwi 7,9,11
|
|
- beq 7,.L49
|
|
- cmplwi 7,9,12
|
|
- beq 7,.L49
|
|
- cmplwi 7,9,13
|
|
- beq 7,.L51
|
|
- cmplwi 7,9,14
|
|
- beq 7,.L52
|
|
- cmplwi 7,9,15
|
|
- beq 7,.L49
|
|
- cmplwi 7,9,16
|
|
- bne 7,.L19
|
|
+ cmplwi 0,9,1
|
|
+ beq 0,.L19
|
|
+ cmplwi 0,9,2
|
|
+ beq 0,.L58
|
|
+ cmplwi 0,9,3
|
|
+ beq 0,.L58
|
|
+ cmplwi 0,9,4
|
|
+ beq 0,.L58
|
|
+ cmplwi 0,9,5
|
|
+ beq 0,.L59
|
|
+ cmplwi 0,9,6
|
|
+ beq 0,.L59
|
|
+ cmplwi 0,9,7
|
|
+ beq 0,.L60
|
|
+ cmplwi 0,9,8
|
|
+ beq 0,.L60
|
|
+ cmplwi 0,9,9
|
|
+ beq 0,.L64
|
|
+ cmplwi 0,9,10
|
|
+ beq 0,.L64
|
|
+ cmplwi 0,9,11
|
|
+ beq 0,.L64
|
|
+ cmplwi 0,9,12
|
|
+ beq 0,.L64
|
|
+ cmplwi 0,9,13
|
|
+ beq 0,.L67
|
|
+ cmplwi 0,9,14
|
|
+ beq 0,.L68
|
|
+ cmplwi 0,9,15
|
|
+ beq 0,.L64
|
|
+ cmplwi 0,9,16
|
|
+ bne 0,.L19
|
|
lwz 9,0(30)
|
|
- rldicl. 10,9,55,63
|
|
+ andi. 9,9,0x200
|
|
beq 0,.L19
|
|
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,.L34
|
|
- cmpldi 7,10,8
|
|
- bgt 7,.L35
|
|
- 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)
|
|
+ cmpldi 0,9,15
|
|
+ bgt 0,.L19
|
|
+ cmpldi 0,10,1
|
|
+ ld 9,16(30)
|
|
+ rlwinm 8,3,0,0xff
|
|
+ beq 0,.L65
|
|
+ cmpldi 0,10,2
|
|
+ beq 0,.L69
|
|
+ cmpldi 0,10,3
|
|
+ rldicl 8,3,48,56
|
|
+ beq 0,.L70
|
|
+ cmpldi 0,10,4
|
|
+ beq 0,.L71
|
|
+ cmpldi 0,10,5
|
|
+ rldicl 8,3,32,56
|
|
+ beq 0,.L72
|
|
+ cmpldi 0,10,6
|
|
+ rldicl 7,3,24,56
|
|
+ beq 0,.L73
|
|
+ cmpldi 0,10,7
|
|
+ rldicl 10,3,16,56
|
|
+ beq 0,.L74
|
|
+ std 3,0(9)
|
|
+ ld 10,32(30)
|
|
+ cmpldi 0,10,8
|
|
+ beq 0,.L19
|
|
+ cmpldi 0,10,9
|
|
+ beq 0,.L75
|
|
+ cmpldi 0,10,10
|
|
+ beq 0,.L76
|
|
+ cmpldi 0,10,11
|
|
+ beq 0,.L77
|
|
+ cmpldi 0,10,12
|
|
+ beq 0,.L78
|
|
+ cmpldi 0,10,13
|
|
+ beq 0,.L79
|
|
+ cmpldi 0,10,14
|
|
+ beq 0,.L80
|
|
+ cmpldi 0,10,15
|
|
+ beq 0,.L81
|
|
+ cmpldi 0,10,16
|
|
+ bne 0,.L19
|
|
+ std 4,8(9)
|
|
+ .p2align 4,,15
|
|
.L19:
|
|
- addi 1,31,112
|
|
+ ld 9,104(31)
|
|
+ ld 10,-28688(13)
|
|
+ xor. 9,9,10
|
|
+ li 10,0
|
|
+ bne 0,.L82
|
|
+ addi 1,31,144
|
|
+ .cfi_remember_state
|
|
+ .cfi_def_cfa 1, 0
|
|
li 3,0
|
|
ld 0,16(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
|
|
blr
|
|
.p2align 4,,15
|
|
-.L43:
|
|
+.L58:
|
|
+ .cfi_restore_state
|
|
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
|
|
-.L45:
|
|
- ld 9,16(30)
|
|
- stw 3,0(9)
|
|
b .L19
|
|
.p2align 4,,15
|
|
-.L44:
|
|
+.L59:
|
|
ld 9,16(30)
|
|
sth 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
|
|
- .p2align 4,,15
|
|
-.L49:
|
|
+ b .L19
|
|
+.L60:
|
|
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
|
|
-.L52:
|
|
+ stw 3,0(9)
|
|
+ b .L19
|
|
+.L64:
|
|
ld 9,16(30)
|
|
- stfd 1,0(9)
|
|
+ std 3,0(9)
|
|
b .L19
|
|
-.L51:
|
|
+.L67:
|
|
ld 9,16(30)
|
|
stfs 1,0(9)
|
|
b .L19
|
|
-.L34:
|
|
- 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,.L53
|
|
- 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)
|
|
+.L68:
|
|
+ ld 9,16(30)
|
|
+ stfd 1,0(9)
|
|
b .L19
|
|
-.L35:
|
|
- 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)
|
|
+.L70:
|
|
+ sth 3,1(9)
|
|
+.L65:
|
|
+ stb 8,0(9)
|
|
b .L19
|
|
-.L53:
|
|
- 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)
|
|
+.L82:
|
|
+ bl __stack_chk_fail
|
|
+ nop
|
|
+.L81:
|
|
+ srdi 6,4,32
|
|
+ sradi 7,4,24
|
|
+ sradi 8,4,16
|
|
+ sradi 10,4,8
|
|
+ stw 6,8(9)
|
|
+ stb 7,12(9)
|
|
+ stb 8,13(9)
|
|
+ stb 10,14(9)
|
|
+ b .L19
|
|
+.L72:
|
|
+ stw 3,1(9)
|
|
+ stb 8,0(9)
|
|
+ b .L19
|
|
+.L71:
|
|
+ stw 3,0(9)
|
|
+ b .L19
|
|
+.L69:
|
|
+ sth 3,0(9)
|
|
+ b .L19
|
|
+.L80:
|
|
+ srdi 7,4,32
|
|
+ sradi 8,4,24
|
|
+ sradi 10,4,16
|
|
+ stw 7,8(9)
|
|
+ stb 8,12(9)
|
|
+ stb 10,13(9)
|
|
+ b .L19
|
|
+.L79:
|
|
+ srdi 8,4,32
|
|
+ sradi 10,4,24
|
|
+ stw 8,8(9)
|
|
+ stb 10,12(9)
|
|
+ b .L19
|
|
+.L78:
|
|
+ srdi 4,4,32
|
|
+ stw 4,8(9)
|
|
+ b .L19
|
|
+.L77:
|
|
+ srdi 8,4,48
|
|
+ sradi 10,4,40
|
|
+ sth 8,8(9)
|
|
+ stb 10,10(9)
|
|
+ b .L19
|
|
+.L76:
|
|
+ srdi 4,4,48
|
|
+ sth 4,8(9)
|
|
+ b .L19
|
|
+.L75:
|
|
+ sradi 4,4,56
|
|
+ stb 4,8(9)
|
|
+ b .L19
|
|
+.L74:
|
|
+ stw 3,3(9)
|
|
+ stb 8,2(9)
|
|
+ stb 7,1(9)
|
|
+ stb 10,0(9)
|
|
+ b .L19
|
|
+.L73:
|
|
+ stw 3,2(9)
|
|
+ stb 8,1(9)
|
|
+ stb 7,0(9)
|
|
b .L19
|
|
.long 0
|
|
- .byte 0,0,0,1,128,2,0,0
|
|
+ .byte 0,0,0,1,128,3,0,0
|
|
+ .cfi_endproc
|
|
+.LFE0:
|
|
.size avcall_call,.-avcall_call
|
|
#if defined __linux__ || defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __DragonFly__
|
|
.section .note.GNU-stack,"",@progbits
|
|
--- a/avcall/avcall-powerpc64.c
|
|
+++ b/avcall/avcall-powerpc64.c
|
|
@@ -178,111 +178,111 @@ avcall_call(av_alist* list)
|
|
/* 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 */
|
|
--- a/vacall/vacall-powerpc64-elfv2-linux.S
|
|
+++ b/vacall/vacall-powerpc64-elfv2-linux.S
|
|
@@ -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 @@ vacall_receiver:
|
|
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
|
|
--- a/vacall/vacall-powerpc64.c
|
|
+++ b/vacall/vacall-powerpc64.c
|
|
@@ -140,111 +140,111 @@ vacall_receiver (__vaword word1, __vaword word2, __vaword word3, __vaword word4,
|
|
if (list.flags & __VA_REGISTER_STRUCT_RETURN) {
|
|
/* In the ELFv2 ABI, gcc returns structs of size <= 16 in registers. */
|
|
if (list.rsize > 0 && list.rsize <= 16) {
|
|
- #if 0 /* Unoptimized */
|
|
+ #if 1 /* Unoptimized */
|
|
if (list.rsize == 1) {
|
|
iret = (__varword)((unsigned char *) list.raddr)[0];
|
|
} else
|
|
if (list.rsize == 2) {
|
|
- iret = ((__varword)((unsigned char *) list.raddr)[0])
|
|
- | ((__varword)((unsigned char *) list.raddr)[1] << 8);
|
|
+ iret = ((__varword)((unsigned char *) list.raddr)[1])
|
|
+ | ((__varword)((unsigned char *) list.raddr)[0] << 8);
|
|
} else
|
|
if (list.rsize == 3) {
|
|
- iret = ((__varword)((unsigned char *) list.raddr)[0])
|
|
+ iret = ((__varword)((unsigned char *) list.raddr)[2])
|
|
| ((__varword)((unsigned char *) list.raddr)[1] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[2] << 16);
|
|
+ | ((__varword)((unsigned char *) list.raddr)[0] << 16);
|
|
} else
|
|
if (list.rsize == 4) {
|
|
- iret = ((__varword)((unsigned char *) list.raddr)[0])
|
|
- | ((__varword)((unsigned char *) list.raddr)[1] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[2] << 16)
|
|
- | ((__varword)((unsigned char *) list.raddr)[3] << 24);
|
|
+ iret = ((__varword)((unsigned char *) list.raddr)[3])
|
|
+ | ((__varword)((unsigned char *) list.raddr)[2] << 8)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[1] << 16)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[0] << 24);
|
|
} else
|
|
if (list.rsize == 5) {
|
|
- iret = ((__varword)((unsigned char *) list.raddr)[0])
|
|
- | ((__varword)((unsigned char *) list.raddr)[1] << 8)
|
|
+ iret = ((__varword)((unsigned char *) list.raddr)[4])
|
|
+ | ((__varword)((unsigned char *) list.raddr)[3] << 8)
|
|
| ((__varword)((unsigned char *) list.raddr)[2] << 16)
|
|
- | ((__varword)((unsigned char *) list.raddr)[3] << 24)
|
|
- | ((__varword)((unsigned char *) list.raddr)[4] << 32);
|
|
+ | ((__varword)((unsigned char *) list.raddr)[1] << 24)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[0] << 32);
|
|
} else
|
|
if (list.rsize == 6) {
|
|
- iret = ((__varword)((unsigned char *) list.raddr)[0])
|
|
- | ((__varword)((unsigned char *) list.raddr)[1] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[2] << 16)
|
|
- | ((__varword)((unsigned char *) list.raddr)[3] << 24)
|
|
- | ((__varword)((unsigned char *) list.raddr)[4] << 32)
|
|
- | ((__varword)((unsigned char *) list.raddr)[5] << 40);
|
|
+ iret = ((__varword)((unsigned char *) list.raddr)[5])
|
|
+ | ((__varword)((unsigned char *) list.raddr)[4] << 8)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[3] << 16)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[2] << 24)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[1] << 32)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[0] << 40);
|
|
} else
|
|
if (list.rsize == 7) {
|
|
- iret = ((__varword)((unsigned char *) list.raddr)[0])
|
|
- | ((__varword)((unsigned char *) list.raddr)[1] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[2] << 16)
|
|
+ iret = ((__varword)((unsigned char *) list.raddr)[6])
|
|
+ | ((__varword)((unsigned char *) list.raddr)[5] << 8)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[4] << 16)
|
|
| ((__varword)((unsigned char *) list.raddr)[3] << 24)
|
|
- | ((__varword)((unsigned char *) list.raddr)[4] << 32)
|
|
- | ((__varword)((unsigned char *) list.raddr)[5] << 40)
|
|
- | ((__varword)((unsigned char *) list.raddr)[6] << 48);
|
|
+ | ((__varword)((unsigned char *) list.raddr)[2] << 32)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[1] << 40)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[0] << 48);
|
|
} else
|
|
if (list.rsize >= 8 && list.rsize <= 16) {
|
|
- iret = ((__varword)((unsigned char *) list.raddr)[0])
|
|
- | ((__varword)((unsigned char *) list.raddr)[1] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[2] << 16)
|
|
- | ((__varword)((unsigned char *) list.raddr)[3] << 24)
|
|
- | ((__varword)((unsigned char *) list.raddr)[4] << 32)
|
|
- | ((__varword)((unsigned char *) list.raddr)[5] << 40)
|
|
- | ((__varword)((unsigned char *) list.raddr)[6] << 48)
|
|
- | ((__varword)((unsigned char *) list.raddr)[7] << 56);
|
|
+ iret = ((__varword)((unsigned char *) list.raddr)[7])
|
|
+ | ((__varword)((unsigned char *) list.raddr)[6] << 8)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[5] << 16)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[4] << 24)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[3] << 32)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[2] << 40)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[1] << 48)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[0] << 56);
|
|
if (list.rsize == 8) {
|
|
} else
|
|
if (list.rsize == 9) {
|
|
- iret2 = (__varword)((unsigned char *) list.raddr)[8];
|
|
+ iret2 = (__varword)((unsigned char *) list.raddr)[8] << 56;
|
|
} else
|
|
if (list.rsize == 10) {
|
|
- iret2 = ((__varword)((unsigned char *) list.raddr)[8])
|
|
- | ((__varword)((unsigned char *) list.raddr)[9] << 8);
|
|
+ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[9] << 48);
|
|
} else
|
|
if (list.rsize == 11) {
|
|
- iret2 = ((__varword)((unsigned char *) list.raddr)[8])
|
|
- | ((__varword)((unsigned char *) list.raddr)[9] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[10] << 16);
|
|
+ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[9] << 48)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[10] << 40);
|
|
} else
|
|
if (list.rsize == 12) {
|
|
- iret2 = ((__varword)((unsigned char *) list.raddr)[8])
|
|
- | ((__varword)((unsigned char *) list.raddr)[9] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[10] << 16)
|
|
- | ((__varword)((unsigned char *) list.raddr)[11] << 24);
|
|
+ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[9] << 48)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[10] << 40)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[11] << 32);
|
|
} else
|
|
if (list.rsize == 13) {
|
|
- iret2 = ((__varword)((unsigned char *) list.raddr)[8])
|
|
- | ((__varword)((unsigned char *) list.raddr)[9] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[10] << 16)
|
|
- | ((__varword)((unsigned char *) list.raddr)[11] << 24)
|
|
- | ((__varword)((unsigned char *) list.raddr)[12] << 32);
|
|
+ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[9] << 48)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[10] << 40)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[11] << 32)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[12] << 24);
|
|
} else
|
|
if (list.rsize == 14) {
|
|
- iret2 = ((__varword)((unsigned char *) list.raddr)[8])
|
|
- | ((__varword)((unsigned char *) list.raddr)[9] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[10] << 16)
|
|
- | ((__varword)((unsigned char *) list.raddr)[11] << 24)
|
|
- | ((__varword)((unsigned char *) list.raddr)[12] << 32)
|
|
- | ((__varword)((unsigned char *) list.raddr)[13] << 40);
|
|
+ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[9] << 48)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[10] << 40)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[11] << 32)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[12] << 24)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[13] << 16);
|
|
} else
|
|
if (list.rsize == 15) {
|
|
- iret2 = ((__varword)((unsigned char *) list.raddr)[8])
|
|
- | ((__varword)((unsigned char *) list.raddr)[9] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[10] << 16)
|
|
- | ((__varword)((unsigned char *) list.raddr)[11] << 24)
|
|
- | ((__varword)((unsigned char *) list.raddr)[12] << 32)
|
|
- | ((__varword)((unsigned char *) list.raddr)[13] << 40)
|
|
- | ((__varword)((unsigned char *) list.raddr)[14] << 48);
|
|
+ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[9] << 48)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[10] << 40)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[11] << 32)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[12] << 24)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[13] << 16)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[14] << 8);
|
|
} else
|
|
if (list.rsize == 16) {
|
|
- iret2 = ((__varword)((unsigned char *) list.raddr)[8])
|
|
- | ((__varword)((unsigned char *) list.raddr)[9] << 8)
|
|
- | ((__varword)((unsigned char *) list.raddr)[10] << 16)
|
|
- | ((__varword)((unsigned char *) list.raddr)[11] << 24)
|
|
- | ((__varword)((unsigned char *) list.raddr)[12] << 32)
|
|
- | ((__varword)((unsigned char *) list.raddr)[13] << 40)
|
|
- | ((__varword)((unsigned char *) list.raddr)[14] << 48)
|
|
- | ((__varword)((unsigned char *) list.raddr)[15] << 56);
|
|
+ iret2 = ((__varword)((unsigned char *) list.raddr)[8] << 56)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[9] << 48)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[10] << 40)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[11] << 32)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[12] << 24)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[13] << 16)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[14] << 8)
|
|
+ | ((__varword)((unsigned char *) list.raddr)[15]);
|
|
}
|
|
}
|
|
#else /* Optimized: fewer conditional jumps, fewer memory accesses */
|
|
--- a/callback/vacall_r/vacall-powerpc64-elfv2-linux.S
|
|
+++ b/callback/vacall_r/vacall-powerpc64-elfv2-linux.S
|
|
@@ -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
|