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