patch-2.4.22 linux-2.4.22/include/asm-sh64/registers.h

Next file: linux-2.4.22/include/asm-sh64/resource.h
Previous file: linux-2.4.22/include/asm-sh64/ptrace.h
Back to the patch index
Back to the overall index

diff -urN linux-2.4.21/include/asm-sh64/registers.h linux-2.4.22/include/asm-sh64/registers.h
@@ -0,0 +1,199 @@
+#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
+ *
+ */
+
+#ifdef __ASSEMBLY__
+/* =====================================================================
+** 
+** Section 1: acts on assembly sources pre-processed by GPP ( <source.S>).
+**	      Assigns symbolic names to control & target registers.
+*/
+
+/*
+ * Concerning registers name, the assembly sources follows the
+ * CDC naming convention.
+ * This section converts CDC registers names into RedHat style.
+ */
+
+/*
+ * 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)
+ * Note: this set of registers name could be shared by the
+ *       CDC and RedHat toolchain
+ */
+#define RET	r2
+#define ARG1	r2
+#define ARG2	r3
+#define ARG3	r4
+#define ARG4	r5
+#define ARG5	r6
+#define ARG6	r7
+#define FBP	r14
+#define SP	r15
+#define GVDT	r26
+#define GCDT	r27
+#define LINK	r18
+#define OS	r40
+#define ZERO	r63
+
+/*
+ * Target registers need name convertion...
+ * (defines only those used by assembly code)
+ */
+#define t0	tr0
+#define t1	tr1
+#define t2	tr2
+#define t3	tr3
+#define t4	tr4
+#define t5	tr5
+#define t6	tr6
+#define t7	tr7
+
+/*
+** RedHat style compatibility macros:
+**
+**   _loada: loads the address the address  of the symbol (first
+**           argument) into the general purpose register (second
+**           argument)
+*/
+        .macro  _loada   symbol, gp_reg
+         movi   \symbol, \gp_reg
+        .endm
+
+        .macro  _ptar    symbol, tr_reg
+         pt     \symbol, \tr_reg
+        .endm
+
+        .macro  _ptaru   symbol, tr_reg
+         pt/u   \symbol, \tr_reg
+        .endm
+
+        .macro  _pta    disp_b,  tr_reg
+         pta    $+\disp_b, \tr_reg
+        .endm
+
+/*
+ * 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 */
+
+#ifdef ST_DEBUG
+#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 */
+
+/* =====================================================================
+** 
+** Section 2: this is required to manage __asm__ statement expanded
+**            by "C" compiler
+*/
+	/*
+	** RedHat style symbolic address resolution inside "asm" blocks
+	*/
+        asm ("\t.macro  _loada   symbol, gp_reg\n"
+             "\tmovi    \\symbol, \\gp_reg\n"
+             "\t.endm\n"
+             "\n"
+             "\t.macro  _ptar    symbol, tr_reg\n"
+             "\tpt      \\symbol, \\tr_reg\n"
+             "\t.endm\n"
+             "\n"
+             "\t.macro  _pta    disp_b, tr_reg\n"
+             "\tpta     $+\\disp_b, \\tr_reg\n"
+             "\t.endm\n"
+	     "\n"
+             "\t.macro  _fgetscr  f_reg63\n"
+	     "\tfgetscr \\f_reg63\n"
+             "\t.endm\n"
+	     "\n"
+             "\t.macro  _fputscr  f_reg63\n"
+	     "\tfputscr \\f_reg63\n"
+             "\t.endm\n"
+	     "\n"
+	    );
+
+	/*
+	** RedHat style target register name inside "asm" blocks
+	*/
+#	define __t0	__str(tr0)
+#	define __t1	__str(tr1)
+#	define __t2	__str(tr2)
+#	define __t3	__str(tr3)
+#	define __t4	__str(tr4)
+#	define __t5	__str(tr5)
+#	define __t6	__str(tr6)
+#	define __t7	__str(tr7)
+
+	/*
+	** RedHat style control register name inside "asm" blocks
+	*/
+#	define __c0	__str(cr0)		/* SR       */
+#	define __c1	__str(cr1)		/* SSR      */
+#	define __c2	__str(cr2)		/* PSSR     */
+#	define __c4	__str(cr4)		/* INTEVT   */
+#	define __c5	__str(cr5)		/* EXPEVT   */
+#	define __c6	__str(cr6)		/* PEXPEVT  */
+#	define __c8	__str(cr8)		/* SPC      */
+#	define __c9	__str(cr9)		/* PSPC     */
+#	define __c13	__str(cr13)		/* TEA      */
+#	define __c17	__str(cr17)		/* KCR0     */
+#	define __c18	__str(cr18)		/* KCR1     */
+
+	/*
+	** RedHat style float and double register name inside "asm" blocks
+	** defines below are used only in .../arch/sh5/kernel/fpu.c
+	*/
+#	define __f(x)	__str(fr##x)
+#	define __d(x)	__str(dr##x)
+
+	/*
+	** Stringify reg. name (common for CDC & RedHat)
+	*/
+#	define __str(x)  #x
+
+#endif /* __ASSEMBLY__ */
+#endif /* __ASM_SH64_REGISTERS_H */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)