PR: 2149
[oweals/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_wipe_cpu
34 .align  4
35 .OPENSSL_wipe_cpu:
36         xor     r0,r0,r0
37         fmr     f0,f31
38         fmr     f1,f31
39         fmr     f2,f31
40         mr      r3,r1
41         fmr     f3,f31
42         xor     r4,r4,r4
43         fmr     f4,f31
44         xor     r5,r5,r5
45         fmr     f5,f31
46         xor     r6,r6,r6
47         fmr     f6,f31
48         xor     r7,r7,r7
49         fmr     f7,f31
50         xor     r8,r8,r8
51         fmr     f8,f31
52         xor     r9,r9,r9
53         fmr     f9,f31
54         xor     r10,r10,r10
55         fmr     f10,f31
56         xor     r11,r11,r11
57         fmr     f11,f31
58         xor     r12,r12,r12
59         fmr     f12,f31
60         fmr     f13,f31
61         blr
62
63 .globl  .OPENSSL_atomic_add
64 .align  4
65 .OPENSSL_atomic_add:
66 Loop:   lwarx   r5,0,r3
67         add     r0,r4,r5
68         stwcx.  r0,0,r3
69         bne-    Loop
70         $SIGNX  r3,r0
71         blr
72
73 .globl  .OPENSSL_rdtsc
74 .align  4
75 .OPENSSL_rdtsc:
76         mftb    r3
77         mftbu   r4
78         blr
79
80 .globl  .OPENSSL_cleanse
81 .align  4
82 .OPENSSL_cleanse:
83         $CMPLI  r4,7
84         li      r0,0
85         bge     Lot
86         $CMPLI  r4,0
87         beqlr-
88 Little: mtctr   r4
89         stb     r0,0(r3)
90         addi    r3,r3,1
91         bdnz-   \$-8
92         blr
93 Lot:    andi.   r5,r3,3
94         beq     Laligned
95         stb     r0,0(r3)
96         subi    r4,r4,1
97         addi    r3,r3,1
98         b       Lot
99 Laligned:
100         $SHRLI  r5,r4,2
101         mtctr   r5
102         stw     r0,0(r3)
103         addi    r3,r3,4
104         bdnz-   \$-8
105         andi.   r4,r4,3
106         bne     Little
107         blr
108 ___
109
110 $code =~ s/\`([^\`]*)\`/eval $1/gem;
111 print $code;
112 close STDOUT;