Unified - adapt the generation of cpuid, uplink and buildinf to use GENERATE
[openssl.git] / crypto / alphacpuid.pl
1 #!/usr/bin/env perl
2
3 $output = pop;
4 open STDOUT,">$stdout";
5
6 print <<'___';
7 .text
8
9 .set    noat
10
11 .globl  OPENSSL_cpuid_setup
12 .ent    OPENSSL_cpuid_setup
13 OPENSSL_cpuid_setup:
14         .frame  $30,0,$26
15         .prologue 0
16         ret     ($26)
17 .end    OPENSSL_cpuid_setup
18
19 .globl  OPENSSL_wipe_cpu
20 .ent    OPENSSL_wipe_cpu
21 OPENSSL_wipe_cpu:
22         .frame  $30,0,$26
23         .prologue 0
24         clr     $1
25         clr     $2
26         clr     $3
27         clr     $4
28         clr     $5
29         clr     $6
30         clr     $7
31         clr     $8
32         clr     $16
33         clr     $17
34         clr     $18
35         clr     $19
36         clr     $20
37         clr     $21
38         clr     $22
39         clr     $23
40         clr     $24
41         clr     $25
42         clr     $27
43         clr     $at
44         clr     $29
45         fclr    $f0
46         fclr    $f1
47         fclr    $f10
48         fclr    $f11
49         fclr    $f12
50         fclr    $f13
51         fclr    $f14
52         fclr    $f15
53         fclr    $f16
54         fclr    $f17
55         fclr    $f18
56         fclr    $f19
57         fclr    $f20
58         fclr    $f21
59         fclr    $f22
60         fclr    $f23
61         fclr    $f24
62         fclr    $f25
63         fclr    $f26
64         fclr    $f27
65         fclr    $f28
66         fclr    $f29
67         fclr    $f30
68         mov     $sp,$0
69         ret     ($26)
70 .end    OPENSSL_wipe_cpu
71
72 .globl  OPENSSL_atomic_add
73 .ent    OPENSSL_atomic_add
74 OPENSSL_atomic_add:
75         .frame  $30,0,$26
76         .prologue 0
77 1:      ldl_l   $0,0($16)
78         addl    $0,$17,$1
79         stl_c   $1,0($16)
80         beq     $1,1b
81         addl    $0,$17,$0
82         ret     ($26)
83 .end    OPENSSL_atomic_add
84
85 .globl  OPENSSL_rdtsc
86 .ent    OPENSSL_rdtsc
87 OPENSSL_rdtsc:
88         .frame  $30,0,$26
89         .prologue 0
90         rpcc    $0
91         ret     ($26)
92 .end    OPENSSL_rdtsc
93
94 .globl  OPENSSL_cleanse
95 .ent    OPENSSL_cleanse
96 OPENSSL_cleanse:
97         .frame  $30,0,$26
98         .prologue 0
99         beq     $17,.Ldone
100         and     $16,7,$0
101         bic     $17,7,$at
102         beq     $at,.Little
103         beq     $0,.Laligned
104
105 .Little:
106         subq    $0,8,$0
107         ldq_u   $1,0($16)
108         mov     $16,$2
109 .Lalign:
110         mskbl   $1,$16,$1
111         lda     $16,1($16)
112         subq    $17,1,$17
113         addq    $0,1,$0
114         beq     $17,.Lout
115         bne     $0,.Lalign
116 .Lout:  stq_u   $1,0($2)
117         beq     $17,.Ldone
118         bic     $17,7,$at
119         beq     $at,.Little
120
121 .Laligned:
122         stq     $31,0($16)
123         subq    $17,8,$17
124         lda     $16,8($16)
125         bic     $17,7,$at
126         bne     $at,.Laligned
127         bne     $17,.Little
128 .Ldone: ret     ($26)
129 .end    OPENSSL_cleanse
130 ___
131 {
132 my ($out,$cnt,$max)=("\$16","\$17","\$18");
133 my ($tick,$lasttick)=("\$19","\$20");
134 my ($diff,$lastdiff)=("\$21","\$22");
135 my ($v0,$ra,$sp,$zero)=("\$0","\$26","\$30","\$31");
136
137 print <<___;
138 .globl  OPENSSL_instrument_bus
139 .ent    OPENSSL_instrument_bus
140 OPENSSL_instrument_bus:
141         .frame  $sp,0,$ra
142         .prologue 0
143         mov     $cnt,$v0
144
145         rpcc    $lasttick
146         mov     0,$diff
147
148         ecb     ($out)
149         ldl_l   $tick,0($out)
150         addl    $diff,$tick,$tick
151         mov     $tick,$diff
152         stl_c   $tick,0($out)
153         stl     $diff,0($out)
154
155 .Loop:  rpcc    $tick
156         subq    $tick,$lasttick,$diff
157         mov     $tick,$lasttick
158
159         ecb     ($out)
160         ldl_l   $tick,0($out)
161         addl    $diff,$tick,$tick
162         mov     $tick,$diff
163         stl_c   $tick,0($out)
164         stl     $diff,0($out)
165
166         subl    $cnt,1,$cnt
167         lda     $out,4($out)
168         bne     $cnt,.Loop
169
170         ret     ($ra)
171 .end    OPENSSL_instrument_bus
172
173 .globl  OPENSSL_instrument_bus2
174 .ent    OPENSSL_instrument_bus2
175 OPENSSL_instrument_bus2:
176         .frame  $sp,0,$ra
177         .prologue 0
178         mov     $cnt,$v0
179
180         rpcc    $lasttick
181         mov     0,$diff
182
183         ecb     ($out)
184         ldl_l   $tick,0($out)
185         addl    $diff,$tick,$tick
186         mov     $tick,$diff
187         stl_c   $tick,0($out)
188         stl     $diff,0($out)
189
190         rpcc    $tick
191         subq    $tick,$lasttick,$diff
192         mov     $tick,$lasttick
193         mov     $diff,$lastdiff
194 .Loop2:
195         ecb     ($out)
196         ldl_l   $tick,0($out)
197         addl    $diff,$tick,$tick
198         mov     $tick,$diff
199         stl_c   $tick,0($out)
200         stl     $diff,0($out)
201
202         subl    $max,1,$max
203         beq     $max,.Ldone2
204
205         rpcc    $tick
206         subq    $tick,$lasttick,$diff
207         mov     $tick,$lasttick
208         subq    $lastdiff,$diff,$tick
209         mov     $diff,$lastdiff
210         cmovne  $tick,1,$tick
211         subl    $cnt,$tick,$cnt
212         s4addq  $tick,$out,$out
213         bne     $cnt,.Loop2
214
215 .Ldone2:
216         subl    $v0,$cnt,$v0
217         ret     ($ra)
218 .end    OPENSSL_instrument_bus2
219 ___
220 }
221
222 close STDOUT;