Backport of password based CMS support from HEAD.
[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_cpuid_setup
27 .align  4
28 .OPENSSL_cpuid_setup:
29         blr
30
31 .globl  .OPENSSL_wipe_cpu
32 .align  4
33 .OPENSSL_wipe_cpu:
34         xor     r0,r0,r0
35         mr      r3,r1
36         xor     r4,r4,r4
37         xor     r5,r5,r5
38         xor     r6,r6,r6
39         xor     r7,r7,r7
40         xor     r8,r8,r8
41         xor     r9,r9,r9
42         xor     r10,r10,r10
43         xor     r11,r11,r11
44         xor     r12,r12,r12
45         blr
46
47 .globl  .OPENSSL_atomic_add
48 .align  4
49 .OPENSSL_atomic_add:
50 Loop:   lwarx   r5,0,r3
51         add     r0,r4,r5
52         stwcx.  r0,0,r3
53         bne-    Loop
54         $SIGNX  r3,r0
55         blr
56
57 .globl  .OPENSSL_rdtsc
58 .align  4
59 .OPENSSL_rdtsc:
60         mftb    r3
61         mftbu   r4
62         blr
63
64 .globl  .OPENSSL_cleanse
65 .align  4
66 .OPENSSL_cleanse:
67         $CMPLI  r4,7
68         li      r0,0
69         bge     Lot
70         $CMPLI  r4,0
71         beqlr-
72 Little: mtctr   r4
73         stb     r0,0(r3)
74         addi    r3,r3,1
75         bdnz-   \$-8
76         blr
77 Lot:    andi.   r5,r3,3
78         beq     Laligned
79         stb     r0,0(r3)
80         subi    r4,r4,1
81         addi    r3,r3,1
82         b       Lot
83 Laligned:
84         $SHRLI  r5,r4,2
85         mtctr   r5
86         stw     r0,0(r3)
87         addi    r3,r3,4
88         bdnz-   \$-8
89         andi.   r4,r4,3
90         bne     Little
91         blr
92 ___
93
94 $code =~ s/\`([^\`]*)\`/eval $1/gem;
95 print $code;
96 close STDOUT;