#ifndef __ASM_SH64_REGISTERS_H
#define __ASM_SH64_REGISTERS_H

/*
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * include/asm-sh64/registers.h
 *
 * Copyright (C) 2000, 2001  Paolo Alberelli
 * Copyright (C) 2004  Richard Curnow
 */

#ifdef __ASSEMBLY__
/* =====================================================================
**
** Section 1: acts on assembly sources pre-processed by GPP ( <source.S>).
**	      Assigns symbolic names to control & target registers.
*/

/*
 * Define some useful aliases for control registers.
 */
#define SR	cr0
#define SSR	cr1
#define PSSR	cr2
			/* cr3 UNDEFINED */
#define INTEVT	cr4
#define EXPEVT	cr5
#define PEXPEVT	cr6
#define TRA	cr7
#define SPC	cr8
#define PSPC	cr9
#define RESVEC	cr10
#define VBR	cr11
			/* cr12 UNDEFINED */
#define TEA	cr13
			/* cr14-cr15 UNDEFINED */
#define DCR	cr16
#define KCR0	cr17
#define KCR1	cr18
			/* cr19-cr31 UNDEFINED */
			/* cr32-cr61 RESERVED */
#define CTC	cr62
#define USR	cr63

/*
 * ABI dependent registers (general purpose set)
 */
#define RET	r2
#define ARG1	r2
#define ARG2	r3
#define ARG3	r4
#define ARG4	r5
#define ARG5	r6
#define ARG6	r7
#define SP	r15
#define LINK	r18
#define ZERO	r63

/*
 * Status register defines: used only by assembly sources (and
 * 			    syntax independednt)
 */
#define SR_RESET_VAL	0x0000000050008000
#define SR_HARMLESS	0x00000000500080f0	/* Write ignores for most */
#define SR_ENABLE_FPU	0xffffffffffff7fff	/* AND with this */

#if defined (CONFIG_SH64_SR_WATCH)
#define SR_ENABLE_MMU	0x0000000084000000	/* OR with this */
#else
#define SR_ENABLE_MMU	0x0000000080000000	/* OR with this */
#endif

#define SR_UNBLOCK_EXC	0xffffffffefffffff	/* AND with this */
#define SR_BLOCK_EXC	0x0000000010000000	/* OR with this */

#else	/* Not __ASSEMBLY__ syntax */

/*
** Stringify reg. name
*/
#define __str(x)  #x

/* Stringify control register names for use in inline assembly */
#define __SR __str(SR)
#define __SSR __str(SSR)
#define __PSSR __str(PSSR)
#define __INTEVT __str(INTEVT)
#define __EXPEVT __str(EXPEVT)
#define __PEXPEVT __str(PEXPEVT)
#define __TRA __str(TRA)
#define __SPC __str(SPC)
#define __PSPC __str(PSPC)
#define __RESVEC __str(RESVEC)
#define __VBR __str(VBR)
#define __TEA __str(TEA)
#define __DCR __str(DCR)
#define __KCR0 __str(KCR0)
#define __KCR1 __str(KCR1)
#define __CTC __str(CTC)
#define __USR __str(USR)

#endif /* __ASSEMBLY__ */
#endif /* __ASM_SH64_REGISTERS_H */