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