/**
 * @file IA64entry.h
 *
 * @remark Copy of source code from linux kernel
 * @remark linux/arch/ia64/kernel/entry.h
 *
 */

#include <linux/config.h>

/*
 * Preserved registers that are shared between code in ivt.S and entry.S.  Be
 * careful not to step on these!
 */

#define pKern		p2 /**< will leave_kernel return to kernel-mode? */
#define pUser		p3 /**< will leave_kernel return to user-mode? */
#define pSys		p4 /**< are we processing a (synchronous) system call? */
#define pNonSys		p5 /**< complement of pSys */

#define PT(f)		(IA64_PT_REGS_##f##_OFFSET)
#define SW(f)		(IA64_SWITCH_STACK_##f##_OFFSET)

#define PT_REGS_SAVES(off)			\
	.unwabi @svr4, 'i';			\
	.fframe IA64_PT_REGS_SIZE+16+(off);	\
	.spillsp rp, PT(CR_IIP)+16+(off);	\
	.spillsp ar.pfs, PT(CR_IFS)+16+(off);	\
	.spillsp ar.unat, PT(AR_UNAT)+16+(off);	\
	.spillsp ar.fpsr, PT(AR_FPSR)+16+(off);	\
	.spillsp pr, PT(PR)+16+(off);

#define PT_REGS_UNWIND_INFO(off)		\
	.prologue;				\
	PT_REGS_SAVES(off);			\
	.body

#define SWITCH_STACK_SAVES(off)						\
	.savesp ar.unat,SW(CALLER_UNAT)+16+(off);			\
	.savesp ar.fpsr,SW(AR_FPSR)+16+(off);				\
	.spillsp f2,SW(F2)+16+(off); .spillsp f3,SW(F3)+16+(off);	\
	.spillsp f4,SW(F4)+16+(off); .spillsp f5,SW(F5)+16+(off);	\
	.spillsp f16,SW(F16)+16+(off); .spillsp f17,SW(F17)+16+(off);	\
	.spillsp f18,SW(F18)+16+(off); .spillsp f19,SW(F19)+16+(off);	\
	.spillsp f20,SW(F20)+16+(off); .spillsp f21,SW(F21)+16+(off);	\
	.spillsp f22,SW(F22)+16+(off); .spillsp f23,SW(F23)+16+(off);	\
	.spillsp f24,SW(F24)+16+(off); .spillsp f25,SW(F25)+16+(off);	\
	.spillsp f26,SW(F26)+16+(off); .spillsp f27,SW(F27)+16+(off);	\
	.spillsp f28,SW(F28)+16+(off); .spillsp f29,SW(F29)+16+(off);	\
	.spillsp f30,SW(F30)+16+(off); .spillsp f31,SW(F31)+16+(off);	\
	.spillsp r4,SW(R4)+16+(off); .spillsp r5,SW(R5)+16+(off);	\
	.spillsp r6,SW(R6)+16+(off); .spillsp r7,SW(R7)+16+(off);	\
	.spillsp b0,SW(B0)+16+(off); .spillsp b1,SW(B1)+16+(off);	\
	.spillsp b2,SW(B2)+16+(off); .spillsp b3,SW(B3)+16+(off);	\
	.spillsp b4,SW(B4)+16+(off); .spillsp b5,SW(B5)+16+(off);	\
	.spillsp ar.pfs,SW(AR_PFS)+16+(off); .spillsp ar.lc,SW(AR_LC)+16+(off);	\
	.spillsp @priunat,SW(AR_UNAT)+16+(off);				\
	.spillsp ar.rnat,SW(AR_RNAT)+16+(off);				\
	.spillsp ar.bspstore,SW(AR_BSPSTORE)+16+(off);			\
	.spillsp pr,SW(PR)+16+(off))

#define DO_SAVE_SWITCH_STACK			\
	movl r28=1f;				\
	;;					\
	.fframe IA64_SWITCH_STACK_SIZE;		\
	adds sp=-IA64_SWITCH_STACK_SIZE,sp;	\
	mov.ret.sptk b7=r28,1f;			\
	SWITCH_STACK_SAVES(0);			\
	br.cond.sptk.many save_switch_stack;	\
1:

#define DO_LOAD_SWITCH_STACK			\
	movl r28=1f;				\
	;;					\
	invala;					\
	mov.ret.sptk b7=r28,1f;			\
	br.cond.sptk.many load_switch_stack;	\
1:	.restore sp;				\
	adds sp=IA64_SWITCH_STACK_SIZE,sp
