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