1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
#!/usr/bin/env perl
$flavour = shift;
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
( $xlate="${dir}perlasm/ppc-xlate.pl" and -f $xlate) or
die "can't locate ppc-xlate.pl";
open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
if ($flavour=~/64/) {
$CMPLI="cmpldi";
$SHRLI="srdi";
$SIGNX="extsw";
} else {
$CMPLI="cmplwi";
$SHRLI="srwi";
$SIGNX="mr";
}
$code=<<___;
.machine "any"
.text
.globl .OPENSSL_ppc64_probe
.align 4
.OPENSSL_ppc64_probe:
fcfid f1,f1
extrdi r0,r0,32,0
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
.size .OPENSSL_ppc64_probe,.-.OPENSSL_ppc64_probe
.globl .OPENSSL_altivec_probe
.align 4
.OPENSSL_altivec_probe:
.long 0x10000484 # vor v0,v0,v0
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
.size .OPENSSL_altivec_probe,.-..OPENSSL_altivec_probe
.globl .OPENSSL_wipe_cpu
.align 4
.OPENSSL_wipe_cpu:
xor r0,r0,r0
fmr f0,f31
fmr f1,f31
fmr f2,f31
mr r3,r1
fmr f3,f31
xor r4,r4,r4
fmr f4,f31
xor r5,r5,r5
fmr f5,f31
xor r6,r6,r6
fmr f6,f31
xor r7,r7,r7
fmr f7,f31
xor r8,r8,r8
fmr f8,f31
xor r9,r9,r9
fmr f9,f31
xor r10,r10,r10
fmr f10,f31
xor r11,r11,r11
fmr f11,f31
xor r12,r12,r12
fmr f12,f31
fmr f13,f31
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
.size .OPENSSL_wipe_cpu,.-.OPENSSL_wipe_cpu
.globl .OPENSSL_atomic_add
.align 4
.OPENSSL_atomic_add:
Ladd: lwarx r5,0,r3
add r0,r4,r5
stwcx. r0,0,r3
bne- Ladd
$SIGNX r3,r0
blr
.long 0
.byte 0,12,0x14,0,0,0,2,0
.long 0
.size .OPENSSL_atomic_add,.-.OPENSSL_atomic_add
.globl .OPENSSL_rdtsc
.align 4
.OPENSSL_rdtsc:
mftb r3
mftbu r4
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
.size .OPENSSL_rdtsc,.-.OPENSSL_rdtsc
.globl .OPENSSL_cleanse
.align 4
.OPENSSL_cleanse:
$CMPLI r4,7
li r0,0
bge Lot
$CMPLI r4,0
beqlr-
Little: mtctr r4
stb r0,0(r3)
addi r3,r3,1
bdnz \$-8
blr
Lot: andi. r5,r3,3
beq Laligned
stb r0,0(r3)
subi r4,r4,1
addi r3,r3,1
b Lot
Laligned:
$SHRLI r5,r4,2
mtctr r5
stw r0,0(r3)
addi r3,r3,4
bdnz \$-8
andi. r4,r4,3
bne Little
blr
.long 0
.byte 0,12,0x14,0,0,0,2,0
.long 0
.size .OPENSSL_cleanse,.-.OPENSSL_cleanse
___
$code =~ s/\`([^\`]*)\`/eval $1/gem;
print $code;
close STDOUT;
|