xref: /freebsd-src/contrib/netbsd-tests/lib/csu/arch/ia64/h_initfini_align.S (revision 9268022b74279434ed6300244e3f977e56a8ceb5)
1*57718be8SEnji Cooper/*	$NetBSD: h_initfini_align.S,v 1.2 2014/03/16 09:27:04 cherry Exp $	*/
2*57718be8SEnji Cooper
3*57718be8SEnji Cooper#include <machine/asm.h>
4*57718be8SEnji Cooper
5*57718be8SEnji CooperRCSID("$NetBSD: h_initfini_align.S,v 1.2 2014/03/16 09:27:04 cherry Exp $")
6*57718be8SEnji Cooper
7*57718be8SEnji CooperENTRY(check_stack_alignment, 0)
8*57718be8SEnji Cooper	.prologue
9*57718be8SEnji Cooper	.regstk 0, 2, 0, 0
10*57718be8SEnji Cooper
11*57718be8SEnji Cooper	alloc loc0 = ar.pfs, 0, 2, 0, 0
12*57718be8SEnji Cooper
13*57718be8SEnji Cooper	.body
14*57718be8SEnji Cooper	mov ret0 = 1
15*57718be8SEnji Cooper	;;
16*57718be8SEnji Cooper
17*57718be8SEnji Cooper	/* ar.bsp has an 8-byte alignment requirement */
18*57718be8SEnji Cooper 	mov loc1 = ar.bsp
19*57718be8SEnji Cooper	;;
20*57718be8SEnji Cooper
21*57718be8SEnji Cooper	and loc1 = 7, loc1
22*57718be8SEnji Cooper	;;
23*57718be8SEnji Cooper
24*57718be8SEnji Cooper	cmp.eq	p1, p0 = 0, loc1
25*57718be8SEnji Cooper	(p0)	mov ret0 = 0
26*57718be8SEnji Cooper	;;
27*57718be8SEnji Cooper
28*57718be8SEnji Cooper	/* sp has a 16-byte alignment requirement */
29*57718be8SEnji Cooper	(p1)	mov loc1 = sp
30*57718be8SEnji Cooper	;;
31*57718be8SEnji Cooper	(p1)	and loc1 = 15, loc1
32*57718be8SEnji Cooper	;;
33*57718be8SEnji Cooper
34*57718be8SEnji Cooper	(p1)	cmp.eq p1, p0 = 0, loc1
35*57718be8SEnji Cooper	(p0)	mov ret0 = 0
36*57718be8SEnji Cooper
37*57718be8SEnji Cooper	br.ret.sptk.few rp
38