Mercurial > flash_v2
diff packages/hal/mips/arch/current/include/arch.inc @ 62:7a6ac9edc838 ecos-sw-2000-01-24
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
| author | jlarmour |
|---|---|
| date | Mon, 24 Jan 2000 21:43:17 +0000 |
| parents | 1370c5e55234 |
| children | c38311975d4f |
line wrap: on
line diff
--- a/packages/hal/mips/arch/current/include/arch.inc +++ b/packages/hal/mips/arch/current/include/arch.inc @@ -56,7 +56,7 @@ #ifndef INITIAL_SR #if defined(CYG_HAL_STARTUP_RAM) -# if defined(CYG_HAL_MIPS_SIM) || !defined(CYG_HAL_USE_ROM_MONITOR) +# if defined(CYG_HAL_MIPS_SIM) || !defined(CYGSEM_HAL_USE_ROM_MONITOR) # define INITIAL_SR 0x1000ff00 /* CP0 usable, Ints enabled */ # else # define INITIAL_SR 0x1040ff00 /* as above + ROM vectors used */ @@ -87,6 +87,8 @@ # define mips_regsize 4 #endif +# define mips_regsize32 4 + #if defined(CYGHWR_HAL_MIPS_FPU) # if defined(CYGHWR_HAL_MIPS_FPU_64BIT) # define mips_fpuregsize 8 @@ -104,19 +106,19 @@ #ifdef CYGHWR_HAL_MIPS_FPU # define mipsreg_fpureg (mipsreg_lo+mips_regsize) # define mipsreg_fcr31 (mipsreg_fpureg+(mips_fpuregsize*32)) -# define mipsreg_fppad (mipsreg_fcr31+mips_regsize) -# define mipsreg_vector (mipsreg_fppad+mips_regsize) +# define mipsreg_fppad (mipsreg_fcr31+mips_regsize32) +# define mipsreg_vector (mipsreg_fppad+mips_regsize32) #else -# define mipsreg_vector (mipsreg_lo+mips_regsize) +# define mipsreg_vector (mipsreg_lo+mips_regsize32) #endif -#define mipsreg_pc (mipsreg_vector+mips_regsize) -#define mipsreg_sr (mipsreg_pc+mips_regsize) -#define mipsreg_cachectrl (mipsreg_sr+mips_regsize) -#define mipsreg_cause (mipsreg_cachectrl+mips_regsize) -#define mipsreg_badvr (mipsreg_cause+mips_regsize) -#define mipsreg_prid (mipsreg_badvr+mips_regsize) -#define mipsreg_config (mipsreg_prid+mips_regsize) -#define mipsreg_size (mipsreg_config+mips_regsize) +#define mipsreg_pc (mipsreg_vector+mips_regsize32) +#define mipsreg_sr (mipsreg_pc+mips_regsize32) +#define mipsreg_cachectrl (mipsreg_sr+mips_regsize32) +#define mipsreg_cause (mipsreg_cachectrl+mips_regsize32) +#define mipsreg_badvr (mipsreg_cause+mips_regsize32) +#define mipsreg_prid (mipsreg_badvr+mips_regsize32) +#define mipsreg_config (mipsreg_prid+mips_regsize32) +#define mipsreg_size (mipsreg_config+mips_regsize32) #define mips_exception_decrement (mipsreg_size*2) @@ -329,6 +331,81 @@ hal_intc_translation_table: #endif #------------------------------------------------------------------------------ +# Register save and restore macros. These expect a pointer to a CPU save state +# area in the register \ptr. The GPR indicated by \reg will be saved into its +# slot in that structure. + +#ifdef CYGHWR_HAL_MIPS_64BIT + + .macro sgpr reg,ptr + sd $\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr) + .endm + + .macro lgpr reg,ptr + ld $\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr) + .endm + + .macro slo reg,ptr + sd \reg,(mipsreg_lo)(\ptr) + .endm + + .macro shi reg,ptr + sd \reg,(mipsreg_hi)(\ptr) + .endm + + .macro llo reg,ptr + ld \reg,(mipsreg_lo)(\ptr) + .endm + + .macro lhi reg,ptr + ld \reg,(mipsreg_hi)(\ptr) + .endm + + .macro ssp reg,ptr + sd \reg,(mipsreg_regs+29*mips_regsize)(\ptr) + .endm + + .macro lsp reg,ptr + ld \reg,(mipsreg_regs+29*mips_regsize)(\ptr) + .endm + +#else + + .macro sgpr reg,ptr + sw $\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr) + .endm + + .macro lgpr reg,ptr + lw $\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr) + .endm + + .macro slo reg,ptr + sw \reg,(mipsreg_lo)(\ptr) + .endm + + .macro shi reg,ptr + sw \reg,(mipsreg_hi)(\ptr) + .endm + + .macro llo reg,ptr + lw \reg,(mipsreg_lo)(\ptr) + .endm + + .macro lhi reg,ptr + lw \reg,(mipsreg_hi)(\ptr) + .endm + + .macro ssp reg,ptr + sw \reg,(mipsreg_regs+29*mips_regsize)(\ptr) + .endm + + .macro lsp reg,ptr + lw \reg,(mipsreg_regs+29*mips_regsize)(\ptr) + .endm + +#endif + +#------------------------------------------------------------------------------ # FPU macros. # The MIPS floating point unit essentially operates in two modes. In the first # it supplies 32 32bit FP registers that may be paired into 16 64 bit registers.
