| #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 */ |
| |
| #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 */ |
| |
| /* ===================================================================== |
| ** |
| ** 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 __p(x) __str(fp##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 */ |