/*	$NetBSD: h_initfini_align.S,v 1.1 2014/03/16 09:20:05 cherry Exp $	*/

#include <machine/asm.h>

RCSID("$NetBSD: h_initfini_align.S,v 1.1 2014/03/16 09:20:05 cherry Exp $")

ENTRY(check_stack_alignment, 0)
	.prologue
	.regstk 0, 2, 0, 0

	alloc loc0 = ar.pfs, 0, 2, 0, 0

	.body
	mov ret0 = 1
	;;
	
	/* ar.bspstore has an 8-byte alignment requirement */
 	mov loc1 = ar.bsp
	;;
	
	and loc1 = 7, loc1
	;;
	
	cmp.eq	p1, p0 = 0, loc1
	(p0)	mov ret0 = 0
	;;
	
	/* sp has a 16-byte alignment requirement */
	(p1)	mov loc1 = sp
	;;
	(p1)	and loc1 = 15, loc1
	;;
	
	(p1)	cmp.eq p1, p0 = 0, loc1
	(p0)	mov ret0 = 0

	br.ret.sptk.few rp
