sha1-armv4-large.pl: comply with ABI [from HEAD].
[mirror-openssl.git] / crypto / ppccpuid.pl
blob39473922f32df9bbaa83713916d3063d28f72d7f
1 #!/usr/bin/env perl
3 $flavour = shift;
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";
10 open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
12 if ($flavour=~/64/) {
13 $CMPLI="cmpldi";
14 $SHRLI="srdi";
15 $SIGNX="extsw";
16 } else {
17 $CMPLI="cmplwi";
18 $SHRLI="srwi";
19 $SIGNX="mr";
22 $code=<<___;
23 .machine "any"
24 .text
26 .globl .OPENSSL_cpuid_setup
27 .align 4
28 .OPENSSL_cpuid_setup:
29 blr
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
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
57 .globl .OPENSSL_rdtsc
58 .align 4
59 .OPENSSL_rdtsc:
60 mftb r3
61 mftbu r4
62 blr
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 ___
94 $code =~ s/\`([^\`]*)\`/eval $1/gem;
95 print $code;
96 close STDOUT;