• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#! /usr/bin/env perl
2# Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved.
3#
4# Licensed under the OpenSSL license (the "License").  You may not use
5# this file except in compliance with the License.  You can obtain a copy
6# in the file LICENSE in the source distribution or at
7# https://www.openssl.org/source/license.html
8
9
10$output = pop;
11open STDOUT,">$output";
12
13print <<'___';
14.text
15
16.set	noat
17
18.globl	OPENSSL_cpuid_setup
19.ent	OPENSSL_cpuid_setup
20OPENSSL_cpuid_setup:
21	.frame	$30,0,$26
22	.prologue 0
23	ret	($26)
24.end	OPENSSL_cpuid_setup
25
26.globl	OPENSSL_wipe_cpu
27.ent	OPENSSL_wipe_cpu
28OPENSSL_wipe_cpu:
29	.frame	$30,0,$26
30	.prologue 0
31	clr	$1
32	clr	$2
33	clr	$3
34	clr	$4
35	clr	$5
36	clr	$6
37	clr	$7
38	clr	$8
39	clr	$16
40	clr	$17
41	clr	$18
42	clr	$19
43	clr	$20
44	clr	$21
45	clr	$22
46	clr	$23
47	clr	$24
48	clr	$25
49	clr	$27
50	clr	$at
51	clr	$29
52	fclr	$f0
53	fclr	$f1
54	fclr	$f10
55	fclr	$f11
56	fclr	$f12
57	fclr	$f13
58	fclr	$f14
59	fclr	$f15
60	fclr	$f16
61	fclr	$f17
62	fclr	$f18
63	fclr	$f19
64	fclr	$f20
65	fclr	$f21
66	fclr	$f22
67	fclr	$f23
68	fclr	$f24
69	fclr	$f25
70	fclr	$f26
71	fclr	$f27
72	fclr	$f28
73	fclr	$f29
74	fclr	$f30
75	mov	$sp,$0
76	ret	($26)
77.end	OPENSSL_wipe_cpu
78
79.globl	OPENSSL_atomic_add
80.ent	OPENSSL_atomic_add
81OPENSSL_atomic_add:
82	.frame	$30,0,$26
83	.prologue 0
841:	ldl_l	$0,0($16)
85	addl	$0,$17,$1
86	stl_c	$1,0($16)
87	beq	$1,1b
88	addl	$0,$17,$0
89	ret	($26)
90.end	OPENSSL_atomic_add
91
92.globl	OPENSSL_rdtsc
93.ent	OPENSSL_rdtsc
94OPENSSL_rdtsc:
95	.frame	$30,0,$26
96	.prologue 0
97	rpcc	$0
98	ret	($26)
99.end	OPENSSL_rdtsc
100
101.globl	OPENSSL_cleanse
102.ent	OPENSSL_cleanse
103OPENSSL_cleanse:
104	.frame	$30,0,$26
105	.prologue 0
106	beq	$17,.Ldone
107	and	$16,7,$0
108	bic	$17,7,$at
109	beq	$at,.Little
110	beq	$0,.Laligned
111
112.Little:
113	subq	$0,8,$0
114	ldq_u	$1,0($16)
115	mov	$16,$2
116.Lalign:
117	mskbl	$1,$16,$1
118	lda	$16,1($16)
119	subq	$17,1,$17
120	addq	$0,1,$0
121	beq	$17,.Lout
122	bne	$0,.Lalign
123.Lout:	stq_u	$1,0($2)
124	beq	$17,.Ldone
125	bic	$17,7,$at
126	beq	$at,.Little
127
128.Laligned:
129	stq	$31,0($16)
130	subq	$17,8,$17
131	lda	$16,8($16)
132	bic	$17,7,$at
133	bne	$at,.Laligned
134	bne	$17,.Little
135.Ldone: ret	($26)
136.end	OPENSSL_cleanse
137
138.globl	CRYPTO_memcmp
139.ent	CRYPTO_memcmp
140CRYPTO_memcmp:
141	.frame	$30,0,$26
142	.prologue 0
143	xor	$0,$0,$0
144	beq	$18,.Lno_data
145
146	xor	$1,$1,$1
147	nop
148.Loop_cmp:
149	ldq_u	$2,0($16)
150	subq	$18,1,$18
151	ldq_u	$3,0($17)
152	extbl	$2,$16,$2
153	lda	$16,1($16)
154	extbl	$3,$17,$3
155	lda	$17,1($17)
156	xor	$3,$2,$2
157	or	$2,$0,$0
158	bne	$18,.Loop_cmp
159
160	subq	$31,$0,$0
161	srl	$0,63,$0
162.Lno_data:
163	ret	($26)
164.end	CRYPTO_memcmp
165___
166{
167my ($out,$cnt,$max)=("\$16","\$17","\$18");
168my ($tick,$lasttick)=("\$19","\$20");
169my ($diff,$lastdiff)=("\$21","\$22");
170my ($v0,$ra,$sp,$zero)=("\$0","\$26","\$30","\$31");
171
172print <<___;
173.globl	OPENSSL_instrument_bus
174.ent	OPENSSL_instrument_bus
175OPENSSL_instrument_bus:
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.Loop:	rpcc	$tick
191	subq	$tick,$lasttick,$diff
192	mov	$tick,$lasttick
193
194	ecb	($out)
195	ldl_l	$tick,0($out)
196	addl	$diff,$tick,$tick
197	mov	$tick,$diff
198	stl_c	$tick,0($out)
199	stl	$diff,0($out)
200
201	subl	$cnt,1,$cnt
202	lda	$out,4($out)
203	bne	$cnt,.Loop
204
205	ret	($ra)
206.end	OPENSSL_instrument_bus
207
208.globl	OPENSSL_instrument_bus2
209.ent	OPENSSL_instrument_bus2
210OPENSSL_instrument_bus2:
211	.frame	$sp,0,$ra
212	.prologue 0
213	mov	$cnt,$v0
214
215	rpcc	$lasttick
216	mov	0,$diff
217
218	ecb	($out)
219	ldl_l	$tick,0($out)
220	addl	$diff,$tick,$tick
221	mov	$tick,$diff
222	stl_c	$tick,0($out)
223	stl	$diff,0($out)
224
225	rpcc	$tick
226	subq	$tick,$lasttick,$diff
227	mov	$tick,$lasttick
228	mov	$diff,$lastdiff
229.Loop2:
230	ecb	($out)
231	ldl_l	$tick,0($out)
232	addl	$diff,$tick,$tick
233	mov	$tick,$diff
234	stl_c	$tick,0($out)
235	stl	$diff,0($out)
236
237	subl	$max,1,$max
238	beq	$max,.Ldone2
239
240	rpcc	$tick
241	subq	$tick,$lasttick,$diff
242	mov	$tick,$lasttick
243	subq	$lastdiff,$diff,$tick
244	mov	$diff,$lastdiff
245	cmovne	$tick,1,$tick
246	subl	$cnt,$tick,$cnt
247	s4addq	$tick,$out,$out
248	bne	$cnt,.Loop2
249
250.Ldone2:
251	subl	$v0,$cnt,$v0
252	ret	($ra)
253.end	OPENSSL_instrument_bus2
254___
255}
256
257close STDOUT or die "error closing STDOUT: $!";
258