root/tests/lib/csu/arch/ia64/h_initfini_align.S
/*      $NetBSD: h_initfini_align.S,v 1.2 2014/03/16 09:27:04 cherry Exp $      */

#include <machine/asm.h>

RCSID("$NetBSD: h_initfini_align.S,v 1.2 2014/03/16 09:27:04 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.bsp 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