• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// This file is generated from a similarly-named Perl script in the BoringSSL
2// source tree. Do not edit by hand.
3
4#if !defined(__has_feature)
5#define __has_feature(x) 0
6#endif
7#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
8#define OPENSSL_NO_ASM
9#endif
10
11#if !defined(OPENSSL_NO_ASM)
12#if defined(BORINGSSL_PREFIX)
13#include <boringssl_prefix_symbols_asm.h>
14#endif
15.text
16
17// abi_test_trampoline loads callee-saved registers from |state|, calls |func|
18// with |argv|, then saves the callee-saved registers into |state|. It returns
19// the result of |func|. The |unwind| argument is unused.
20// uint64_t abi_test_trampoline(void (*func)(...), CallerState *state,
21//                              const uint64_t *argv, size_t argc,
22//                              uint64_t unwind);
23
24.globl	_abi_test_trampoline
25.private_extern	_abi_test_trampoline
26.align	4
27_abi_test_trampoline:
28Labi_test_trampoline_begin:
29	// Stack layout (low to high addresses)
30	//   x29,x30 (16 bytes)
31	//    d8-d15 (64 bytes)
32	//   x19-x28 (80 bytes)
33	//    x1 (8 bytes)
34	//   padding (8 bytes)
35	stp	x29, x30, [sp, #-176]!
36	mov	x29, sp
37
38	// Saved callee-saved registers and |state|.
39	stp	d8, d9, [sp, #16]
40	stp	d10, d11, [sp, #32]
41	stp	d12, d13, [sp, #48]
42	stp	d14, d15, [sp, #64]
43	stp	x19, x20, [sp, #80]
44	stp	x21, x22, [sp, #96]
45	stp	x23, x24, [sp, #112]
46	stp	x25, x26, [sp, #128]
47	stp	x27, x28, [sp, #144]
48	str	x1, [sp, #160]
49
50	// Load registers from |state|, with the exception of x29. x29 is the
51	// frame pointer and also callee-saved, but AAPCS64 allows platforms to
52	// mandate that x29 always point to a frame. iOS64 does so, which means
53	// we cannot fill x29 with entropy without violating ABI rules
54	// ourselves. x29 is tested separately below.
55	ldp	d8, d9, [x1], #16
56	ldp	d10, d11, [x1], #16
57	ldp	d12, d13, [x1], #16
58	ldp	d14, d15, [x1], #16
59	ldp	x19, x20, [x1], #16
60	ldp	x21, x22, [x1], #16
61	ldp	x23, x24, [x1], #16
62	ldp	x25, x26, [x1], #16
63	ldp	x27, x28, [x1], #16
64
65	// Move parameters into temporary registers.
66	mov	x9, x0
67	mov	x10, x2
68	mov	x11, x3
69
70	// Load parameters into registers.
71	cbz	x11, Largs_done
72	ldr	x0, [x10], #8
73	subs	x11, x11, #1
74	b.eq	Largs_done
75	ldr	x1, [x10], #8
76	subs	x11, x11, #1
77	b.eq	Largs_done
78	ldr	x2, [x10], #8
79	subs	x11, x11, #1
80	b.eq	Largs_done
81	ldr	x3, [x10], #8
82	subs	x11, x11, #1
83	b.eq	Largs_done
84	ldr	x4, [x10], #8
85	subs	x11, x11, #1
86	b.eq	Largs_done
87	ldr	x5, [x10], #8
88	subs	x11, x11, #1
89	b.eq	Largs_done
90	ldr	x6, [x10], #8
91	subs	x11, x11, #1
92	b.eq	Largs_done
93	ldr	x7, [x10], #8
94
95Largs_done:
96	blr	x9
97
98	// Reload |state| and store registers.
99	ldr	x1, [sp, #160]
100	stp	d8, d9, [x1], #16
101	stp	d10, d11, [x1], #16
102	stp	d12, d13, [x1], #16
103	stp	d14, d15, [x1], #16
104	stp	x19, x20, [x1], #16
105	stp	x21, x22, [x1], #16
106	stp	x23, x24, [x1], #16
107	stp	x25, x26, [x1], #16
108	stp	x27, x28, [x1], #16
109
110	// |func| is required to preserve x29, the frame pointer. We cannot load
111	// random values into x29 (see comment above), so compare it against the
112	// expected value and zero the field of |state| if corrupted.
113	mov	x9, sp
114	cmp	x29, x9
115	b.eq	Lx29_ok
116	str	xzr, [x1]
117
118Lx29_ok:
119	// Restore callee-saved registers.
120	ldp	d8, d9, [sp, #16]
121	ldp	d10, d11, [sp, #32]
122	ldp	d12, d13, [sp, #48]
123	ldp	d14, d15, [sp, #64]
124	ldp	x19, x20, [sp, #80]
125	ldp	x21, x22, [sp, #96]
126	ldp	x23, x24, [sp, #112]
127	ldp	x25, x26, [sp, #128]
128	ldp	x27, x28, [sp, #144]
129
130	ldp	x29, x30, [sp], #176
131	ret
132
133
134.globl	_abi_test_clobber_x0
135.private_extern	_abi_test_clobber_x0
136.align	4
137_abi_test_clobber_x0:
138	mov	x0, xzr
139	ret
140
141
142.globl	_abi_test_clobber_x1
143.private_extern	_abi_test_clobber_x1
144.align	4
145_abi_test_clobber_x1:
146	mov	x1, xzr
147	ret
148
149
150.globl	_abi_test_clobber_x2
151.private_extern	_abi_test_clobber_x2
152.align	4
153_abi_test_clobber_x2:
154	mov	x2, xzr
155	ret
156
157
158.globl	_abi_test_clobber_x3
159.private_extern	_abi_test_clobber_x3
160.align	4
161_abi_test_clobber_x3:
162	mov	x3, xzr
163	ret
164
165
166.globl	_abi_test_clobber_x4
167.private_extern	_abi_test_clobber_x4
168.align	4
169_abi_test_clobber_x4:
170	mov	x4, xzr
171	ret
172
173
174.globl	_abi_test_clobber_x5
175.private_extern	_abi_test_clobber_x5
176.align	4
177_abi_test_clobber_x5:
178	mov	x5, xzr
179	ret
180
181
182.globl	_abi_test_clobber_x6
183.private_extern	_abi_test_clobber_x6
184.align	4
185_abi_test_clobber_x6:
186	mov	x6, xzr
187	ret
188
189
190.globl	_abi_test_clobber_x7
191.private_extern	_abi_test_clobber_x7
192.align	4
193_abi_test_clobber_x7:
194	mov	x7, xzr
195	ret
196
197
198.globl	_abi_test_clobber_x8
199.private_extern	_abi_test_clobber_x8
200.align	4
201_abi_test_clobber_x8:
202	mov	x8, xzr
203	ret
204
205
206.globl	_abi_test_clobber_x9
207.private_extern	_abi_test_clobber_x9
208.align	4
209_abi_test_clobber_x9:
210	mov	x9, xzr
211	ret
212
213
214.globl	_abi_test_clobber_x10
215.private_extern	_abi_test_clobber_x10
216.align	4
217_abi_test_clobber_x10:
218	mov	x10, xzr
219	ret
220
221
222.globl	_abi_test_clobber_x11
223.private_extern	_abi_test_clobber_x11
224.align	4
225_abi_test_clobber_x11:
226	mov	x11, xzr
227	ret
228
229
230.globl	_abi_test_clobber_x12
231.private_extern	_abi_test_clobber_x12
232.align	4
233_abi_test_clobber_x12:
234	mov	x12, xzr
235	ret
236
237
238.globl	_abi_test_clobber_x13
239.private_extern	_abi_test_clobber_x13
240.align	4
241_abi_test_clobber_x13:
242	mov	x13, xzr
243	ret
244
245
246.globl	_abi_test_clobber_x14
247.private_extern	_abi_test_clobber_x14
248.align	4
249_abi_test_clobber_x14:
250	mov	x14, xzr
251	ret
252
253
254.globl	_abi_test_clobber_x15
255.private_extern	_abi_test_clobber_x15
256.align	4
257_abi_test_clobber_x15:
258	mov	x15, xzr
259	ret
260
261
262.globl	_abi_test_clobber_x16
263.private_extern	_abi_test_clobber_x16
264.align	4
265_abi_test_clobber_x16:
266	mov	x16, xzr
267	ret
268
269
270.globl	_abi_test_clobber_x17
271.private_extern	_abi_test_clobber_x17
272.align	4
273_abi_test_clobber_x17:
274	mov	x17, xzr
275	ret
276
277
278.globl	_abi_test_clobber_x19
279.private_extern	_abi_test_clobber_x19
280.align	4
281_abi_test_clobber_x19:
282	mov	x19, xzr
283	ret
284
285
286.globl	_abi_test_clobber_x20
287.private_extern	_abi_test_clobber_x20
288.align	4
289_abi_test_clobber_x20:
290	mov	x20, xzr
291	ret
292
293
294.globl	_abi_test_clobber_x21
295.private_extern	_abi_test_clobber_x21
296.align	4
297_abi_test_clobber_x21:
298	mov	x21, xzr
299	ret
300
301
302.globl	_abi_test_clobber_x22
303.private_extern	_abi_test_clobber_x22
304.align	4
305_abi_test_clobber_x22:
306	mov	x22, xzr
307	ret
308
309
310.globl	_abi_test_clobber_x23
311.private_extern	_abi_test_clobber_x23
312.align	4
313_abi_test_clobber_x23:
314	mov	x23, xzr
315	ret
316
317
318.globl	_abi_test_clobber_x24
319.private_extern	_abi_test_clobber_x24
320.align	4
321_abi_test_clobber_x24:
322	mov	x24, xzr
323	ret
324
325
326.globl	_abi_test_clobber_x25
327.private_extern	_abi_test_clobber_x25
328.align	4
329_abi_test_clobber_x25:
330	mov	x25, xzr
331	ret
332
333
334.globl	_abi_test_clobber_x26
335.private_extern	_abi_test_clobber_x26
336.align	4
337_abi_test_clobber_x26:
338	mov	x26, xzr
339	ret
340
341
342.globl	_abi_test_clobber_x27
343.private_extern	_abi_test_clobber_x27
344.align	4
345_abi_test_clobber_x27:
346	mov	x27, xzr
347	ret
348
349
350.globl	_abi_test_clobber_x28
351.private_extern	_abi_test_clobber_x28
352.align	4
353_abi_test_clobber_x28:
354	mov	x28, xzr
355	ret
356
357
358.globl	_abi_test_clobber_x29
359.private_extern	_abi_test_clobber_x29
360.align	4
361_abi_test_clobber_x29:
362	mov	x29, xzr
363	ret
364
365
366.globl	_abi_test_clobber_d0
367.private_extern	_abi_test_clobber_d0
368.align	4
369_abi_test_clobber_d0:
370	fmov	d0, xzr
371	ret
372
373
374.globl	_abi_test_clobber_d1
375.private_extern	_abi_test_clobber_d1
376.align	4
377_abi_test_clobber_d1:
378	fmov	d1, xzr
379	ret
380
381
382.globl	_abi_test_clobber_d2
383.private_extern	_abi_test_clobber_d2
384.align	4
385_abi_test_clobber_d2:
386	fmov	d2, xzr
387	ret
388
389
390.globl	_abi_test_clobber_d3
391.private_extern	_abi_test_clobber_d3
392.align	4
393_abi_test_clobber_d3:
394	fmov	d3, xzr
395	ret
396
397
398.globl	_abi_test_clobber_d4
399.private_extern	_abi_test_clobber_d4
400.align	4
401_abi_test_clobber_d4:
402	fmov	d4, xzr
403	ret
404
405
406.globl	_abi_test_clobber_d5
407.private_extern	_abi_test_clobber_d5
408.align	4
409_abi_test_clobber_d5:
410	fmov	d5, xzr
411	ret
412
413
414.globl	_abi_test_clobber_d6
415.private_extern	_abi_test_clobber_d6
416.align	4
417_abi_test_clobber_d6:
418	fmov	d6, xzr
419	ret
420
421
422.globl	_abi_test_clobber_d7
423.private_extern	_abi_test_clobber_d7
424.align	4
425_abi_test_clobber_d7:
426	fmov	d7, xzr
427	ret
428
429
430.globl	_abi_test_clobber_d8
431.private_extern	_abi_test_clobber_d8
432.align	4
433_abi_test_clobber_d8:
434	fmov	d8, xzr
435	ret
436
437
438.globl	_abi_test_clobber_d9
439.private_extern	_abi_test_clobber_d9
440.align	4
441_abi_test_clobber_d9:
442	fmov	d9, xzr
443	ret
444
445
446.globl	_abi_test_clobber_d10
447.private_extern	_abi_test_clobber_d10
448.align	4
449_abi_test_clobber_d10:
450	fmov	d10, xzr
451	ret
452
453
454.globl	_abi_test_clobber_d11
455.private_extern	_abi_test_clobber_d11
456.align	4
457_abi_test_clobber_d11:
458	fmov	d11, xzr
459	ret
460
461
462.globl	_abi_test_clobber_d12
463.private_extern	_abi_test_clobber_d12
464.align	4
465_abi_test_clobber_d12:
466	fmov	d12, xzr
467	ret
468
469
470.globl	_abi_test_clobber_d13
471.private_extern	_abi_test_clobber_d13
472.align	4
473_abi_test_clobber_d13:
474	fmov	d13, xzr
475	ret
476
477
478.globl	_abi_test_clobber_d14
479.private_extern	_abi_test_clobber_d14
480.align	4
481_abi_test_clobber_d14:
482	fmov	d14, xzr
483	ret
484
485
486.globl	_abi_test_clobber_d15
487.private_extern	_abi_test_clobber_d15
488.align	4
489_abi_test_clobber_d15:
490	fmov	d15, xzr
491	ret
492
493
494.globl	_abi_test_clobber_d16
495.private_extern	_abi_test_clobber_d16
496.align	4
497_abi_test_clobber_d16:
498	fmov	d16, xzr
499	ret
500
501
502.globl	_abi_test_clobber_d17
503.private_extern	_abi_test_clobber_d17
504.align	4
505_abi_test_clobber_d17:
506	fmov	d17, xzr
507	ret
508
509
510.globl	_abi_test_clobber_d18
511.private_extern	_abi_test_clobber_d18
512.align	4
513_abi_test_clobber_d18:
514	fmov	d18, xzr
515	ret
516
517
518.globl	_abi_test_clobber_d19
519.private_extern	_abi_test_clobber_d19
520.align	4
521_abi_test_clobber_d19:
522	fmov	d19, xzr
523	ret
524
525
526.globl	_abi_test_clobber_d20
527.private_extern	_abi_test_clobber_d20
528.align	4
529_abi_test_clobber_d20:
530	fmov	d20, xzr
531	ret
532
533
534.globl	_abi_test_clobber_d21
535.private_extern	_abi_test_clobber_d21
536.align	4
537_abi_test_clobber_d21:
538	fmov	d21, xzr
539	ret
540
541
542.globl	_abi_test_clobber_d22
543.private_extern	_abi_test_clobber_d22
544.align	4
545_abi_test_clobber_d22:
546	fmov	d22, xzr
547	ret
548
549
550.globl	_abi_test_clobber_d23
551.private_extern	_abi_test_clobber_d23
552.align	4
553_abi_test_clobber_d23:
554	fmov	d23, xzr
555	ret
556
557
558.globl	_abi_test_clobber_d24
559.private_extern	_abi_test_clobber_d24
560.align	4
561_abi_test_clobber_d24:
562	fmov	d24, xzr
563	ret
564
565
566.globl	_abi_test_clobber_d25
567.private_extern	_abi_test_clobber_d25
568.align	4
569_abi_test_clobber_d25:
570	fmov	d25, xzr
571	ret
572
573
574.globl	_abi_test_clobber_d26
575.private_extern	_abi_test_clobber_d26
576.align	4
577_abi_test_clobber_d26:
578	fmov	d26, xzr
579	ret
580
581
582.globl	_abi_test_clobber_d27
583.private_extern	_abi_test_clobber_d27
584.align	4
585_abi_test_clobber_d27:
586	fmov	d27, xzr
587	ret
588
589
590.globl	_abi_test_clobber_d28
591.private_extern	_abi_test_clobber_d28
592.align	4
593_abi_test_clobber_d28:
594	fmov	d28, xzr
595	ret
596
597
598.globl	_abi_test_clobber_d29
599.private_extern	_abi_test_clobber_d29
600.align	4
601_abi_test_clobber_d29:
602	fmov	d29, xzr
603	ret
604
605
606.globl	_abi_test_clobber_d30
607.private_extern	_abi_test_clobber_d30
608.align	4
609_abi_test_clobber_d30:
610	fmov	d30, xzr
611	ret
612
613
614.globl	_abi_test_clobber_d31
615.private_extern	_abi_test_clobber_d31
616.align	4
617_abi_test_clobber_d31:
618	fmov	d31, xzr
619	ret
620
621
622.globl	_abi_test_clobber_v8_upper
623.private_extern	_abi_test_clobber_v8_upper
624.align	4
625_abi_test_clobber_v8_upper:
626	fmov	v8.d[1], xzr
627	ret
628
629
630.globl	_abi_test_clobber_v9_upper
631.private_extern	_abi_test_clobber_v9_upper
632.align	4
633_abi_test_clobber_v9_upper:
634	fmov	v9.d[1], xzr
635	ret
636
637
638.globl	_abi_test_clobber_v10_upper
639.private_extern	_abi_test_clobber_v10_upper
640.align	4
641_abi_test_clobber_v10_upper:
642	fmov	v10.d[1], xzr
643	ret
644
645
646.globl	_abi_test_clobber_v11_upper
647.private_extern	_abi_test_clobber_v11_upper
648.align	4
649_abi_test_clobber_v11_upper:
650	fmov	v11.d[1], xzr
651	ret
652
653
654.globl	_abi_test_clobber_v12_upper
655.private_extern	_abi_test_clobber_v12_upper
656.align	4
657_abi_test_clobber_v12_upper:
658	fmov	v12.d[1], xzr
659	ret
660
661
662.globl	_abi_test_clobber_v13_upper
663.private_extern	_abi_test_clobber_v13_upper
664.align	4
665_abi_test_clobber_v13_upper:
666	fmov	v13.d[1], xzr
667	ret
668
669
670.globl	_abi_test_clobber_v14_upper
671.private_extern	_abi_test_clobber_v14_upper
672.align	4
673_abi_test_clobber_v14_upper:
674	fmov	v14.d[1], xzr
675	ret
676
677
678.globl	_abi_test_clobber_v15_upper
679.private_extern	_abi_test_clobber_v15_upper
680.align	4
681_abi_test_clobber_v15_upper:
682	fmov	v15.d[1], xzr
683	ret
684
685#endif  // !OPENSSL_NO_ASM
686