ppc64-mont.pl: adapt for 32-bit and engage for all builds.
[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         mr      r3,r1
38         xor     r4,r4,r4
39         xor     r5,r5,r5
40         xor     r6,r6,r6
41         xor     r7,r7,r7
42         xor     r8,r8,r8
43         xor     r9,r9,r9
44         xor     r10,r10,r10
45         xor     r11,r11,r11
46         xor     r12,r12,r12
47         blr
48
49 .globl  .OPENSSL_atomic_add
50 .align  4
51 .OPENSSL_atomic_add:
52 Loop:   lwarx   r5,0,r3
53         add     r0,r4,r5
54         stwcx.  r0,0,r3
55         bne-    Loop
56         $SIGNX  r3,r0
57         blr
58
59 .globl  .OPENSSL_rdtsc
60 .align  4
61 .OPENSSL_rdtsc:
62         mftb    r3
63         mftbu   r4
64         blr
65
66 .globl  .OPENSSL_cleanse
67 .align  4
68 .OPENSSL_cleanse:
69         $CMPLI  r4,7
70         li      r0,0
71         bge     Lot
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;