Tolerate PKCS#8 DSA format with negative private key.
[openssl.git] / crypto / pariscid.pl
1 #!/usr/bin/env perl
2
3 $flavour = shift;
4 $output = shift;
5 open STDOUT,">$output";
6
7 if ($flavour =~ /64/) {
8         $LEVEL          ="2.0W";
9         $SIZE_T         =8;
10         $ST             ="std";
11 } else {
12         $LEVEL          ="1.1";
13         $SIZE_T         =4;
14         $ST             ="stw";
15 }
16
17 $rp="%r2";
18 $sp="%r30";
19 $rv="%r28";
20
21 $code=<<___;
22         .LEVEL  $LEVEL
23         .SPACE  \$TEXT\$
24         .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
25
26         .EXPORT OPENSSL_cpuid_setup,ENTRY
27         .ALIGN  8
28 OPENSSL_cpuid_setup
29         .PROC
30         .CALLINFO       NO_CALLS
31         .ENTRY
32         bv      ($rp)
33         .EXIT
34         nop
35         .PROCEND
36
37         .EXPORT OPENSSL_rdtsc,ENTRY
38         .ALIGN  8
39 OPENSSL_rdtsc
40         .PROC
41         .CALLINFO       NO_CALLS
42         .ENTRY
43         mfctl   %cr16,$rv
44         bv      ($rp)
45         .EXIT
46         nop
47         .PROCEND
48
49         .EXPORT OPENSSL_wipe_cpu,ENTRY
50         .ALIGN  8
51 OPENSSL_wipe_cpu
52         .PROC
53         .CALLINFO       NO_CALLS
54         .ENTRY
55         xor             %r0,%r0,%r1
56         fcpy,dbl        %fr0,%fr4
57         xor             %r0,%r0,%r19
58         fcpy,dbl        %fr0,%fr5
59         xor             %r0,%r0,%r20
60         fcpy,dbl        %fr0,%fr6
61         xor             %r0,%r0,%r21
62         fcpy,dbl        %fr0,%fr7
63         xor             %r0,%r0,%r22
64         fcpy,dbl        %fr0,%fr8
65         xor             %r0,%r0,%r23
66         fcpy,dbl        %fr0,%fr9
67         xor             %r0,%r0,%r24
68         fcpy,dbl        %fr0,%fr10
69         xor             %r0,%r0,%r25
70         fcpy,dbl        %fr0,%fr11
71         xor             %r0,%r0,%r26
72         fcpy,dbl        %fr0,%fr22
73         xor             %r0,%r0,%r29
74         fcpy,dbl        %fr0,%fr23
75         xor             %r0,%r0,%r31
76         fcpy,dbl        %fr0,%fr24
77         fcpy,dbl        %fr0,%fr25
78         fcpy,dbl        %fr0,%fr26
79         fcpy,dbl        %fr0,%fr27
80         fcpy,dbl        %fr0,%fr28
81         fcpy,dbl        %fr0,%fr29
82         fcpy,dbl        %fr0,%fr30
83         fcpy,dbl        %fr0,%fr31
84         bv              ($rp)
85         .EXIT
86         ldo             0($sp),$rv
87         .PROCEND
88 ___
89 {
90 $inp="%r26";
91 $len="%r25";
92
93 $code.=<<___;
94         .EXPORT OPENSSL_cleanse,ENTRY,ARGW0=GR,ARGW1=GR
95         .ALIGN  8
96 OPENSSL_cleanse
97         .PROC
98         .CALLINFO       NO_CALLS
99         .ENTRY
100         cmpib,*>>       15,$len,Little
101         ldi             $SIZE_T-1,%r1
102
103 Lalign
104         and,*<>         $inp,%r1,%r28
105         b,n             Laligned
106         stb             %r0,0($inp)
107         ldo             -1($len),$len
108         b               Lalign
109         ldo             1($inp),$inp
110
111 Laligned
112         andcm           $len,%r1,%r28
113 Loop
114         $ST             %r0,0($inp)
115         addib,*vnz      -$SIZE_T,%r28,Loop
116         ldo             $SIZE_T($inp),$inp
117
118         and,*<>         $len,%r1,$len
119         b,n             Ldone
120 Little
121         stb             %r0,0($inp)
122         addib,*vnz      -1,$len,Little
123         ldo             1($inp),$inp
124 Ldone
125         bv              ($rp)
126         .EXIT
127         nop
128         .PROCEND
129 ___
130 }
131
132 $code =~ s/cmpib,\*/comib,/gm if ($SIZE_T==4);
133 $code =~ s/,\*/,/gm if ($SIZE_T==4);
134 print $code;
135 close STDOUT;
136