📄 cpu_s.s
字号:
* Return values :
* ---------------
*
* None
*
************************************************************************/
LEAF(sys_enable_int_mask)
.set noreorder
MFC0( v0, C0_STATUS)
li t0, 1
addiu a0, C0_STATUS_IM_SHF
sllv t0, t0, a0
or v0, t0
MTC0( v0, C0_STATUS)
j ra
nop
.set reorder
END(sys_enable_int_mask)
/************************************************************************
*
* sys_disable_int_mask
* Description :
* -------------
*
* Disable specific interrupt: set IM[x] bit in CP0-status.
*
* Return values :
* ---------------
*
* None
*
************************************************************************/
LEAF(sys_disable_int_mask)
.set noreorder
MFC0( v0, C0_STATUS)
li t0, 1
addiu a0, C0_STATUS_IM_SHF
sllv t0, t0, a0
li t1, 0xffffffff
xor t0, t1
and v0, t0
MTC0( v0, C0_STATUS)
j ra
nop
.set reorder
END(sys_disable_int_mask)
/************************************************************************
*
* sys_cpu_k0_config
* Description :
* -------------
*
* Configure K0 field of CP0 CONFIG register
*
* a0 holds the requested K0 setting
*
* Return values :
* ---------------
*
* None
*
************************************************************************/
LEAF( sys_cpu_k0_config )
.set noreorder
/* Reserve space on stack */
addiu sp, -8*4
/* Store registers */
sw ra, 0(sp)
sw s0, 4(sp)
sw s1, 8(sp)
/* Copy registers to preserved registers */
move s0, a0
/* Disable interrupts */
MFC0( s1, C0_STATUS )
li t0, ~C0_STATUS_IE_MSK
and t0, s1
MTC0( t0, C0_STATUS )
/* Flush D-Cache */
addiu sp, -4*4
la t0, sys_dcache_flush_all
jal t0
nop
addiu sp, 4*4
/* Shift to uncached */
la t0, sys_cpu_k0_config_uncached
KSEG1A( t0)
jr t0
nop
sys_cpu_k0_config_uncached :
/* Set K0 field */
sll s0, C0_CONFIG_K0_SHF
MFC0( t1, C0_CONFIG )
li t0, ~C0_CONFIG_K0_MSK
and t1, t0
or t1, s0
MTC0( t1, C0_CONFIG )
/* Restore CP0 STATUS */
MTC0( s1, C0_STATUS )
/* Restore registers */
lw ra, 0(sp)
lw s0, 4(sp)
lw s1, 8(sp)
jr ra
addiu sp, 8*4
.set reorder
END( sys_cpu_k0_config )
/******* Functions for access to CP0 registers ******/
/*------------------------------------------------------------------------------
UINT32 CP0_index_read( void )
Read CP0 index ($0) reister
------------------------------------------------------------------------------*/
LEAF(CP0_index_read)
.set noreorder
MFC0( v0,C0_INDEX)
j ra
nop
.set reorder
END(CP0_index_read)
/*------------------------------------------------------------------------------
UINT32 CP0_random_read( void )
Read CP0 random ($1) register
------------------------------------------------------------------------------*/
LEAF(CP0_random_read)
.set noreorder
MFC0( v0,C0_RANDOM)
j ra
nop
.set reorder
END(CP0_random_read)
/*------------------------------------------------------------------------------
UINT32 CP0_entrylo0_read( void )
Read CP0 entrylo0 ($2) register
------------------------------------------------------------------------------*/
LEAF(CP0_entrylo0_read)
.set noreorder
MFC0( v0,C0_ENTRYLO0)
j ra
nop
.set reorder
END(CP0_entrylo0_read)
/*------------------------------------------------------------------------------
UINT32 CP0_entrylo1_read( void )
Read CP0 entrylo1 ($3) register
------------------------------------------------------------------------------*/
LEAF(CP0_entrylo1_read)
.set noreorder
MFC0( v0,C0_ENTRYLO1)
j ra
nop
.set reorder
END(CP0_entrylo1_read)
/*------------------------------------------------------------------------------
UINT32 CP0_context_read( void )
Read CP0 context ($4) register
------------------------------------------------------------------------------*/
LEAF(CP0_context_read)
.set noreorder
MFC0( v0,C0_CONTEXT)
j ra
nop
.set reorder
END(CP0_context_read)
/*------------------------------------------------------------------------------
UINT32 CP0_pagemask_read( void )
Read CP0 pagemask ($5) register
------------------------------------------------------------------------------*/
LEAF(CP0_pagemask_read)
.set noreorder
MFC0( v0,C0_PAGEMASK)
j ra
nop
.set reorder
END(CP0_pagemask_read)
/*------------------------------------------------------------------------------
UINT32 CP0_wired_read( void )
Read CP0 wired ($6) register
------------------------------------------------------------------------------*/
LEAF(CP0_wired_read)
.set noreorder
MFC0( v0,C0_WIRED)
j ra
nop
.set reorder
END(CP0_wired_read)
/*------------------------------------------------------------------------------
UINT32 CP0_badvaddr_read( void )
Read CP0 badvaddr ($8) register
------------------------------------------------------------------------------*/
LEAF(CP0_badvaddr_read)
.set noreorder
MFC0( v0,C0_BADVADDR)
j ra
nop
.set reorder
END(CP0_badvaddr_read)
/*------------------------------------------------------------------------------
UINT32 CP0_count_read( void )
Read CP0 count ($9) register
------------------------------------------------------------------------------*/
LEAF(CP0_count_read)
.set noreorder
MFC0( v0,C0_COUNT)
j ra
nop
.set reorder
END(CP0_count_read)
/*------------------------------------------------------------------------------
UINT32 CP0_entryhi_read( void )
Read CP0 entryhi ($10) register
------------------------------------------------------------------------------*/
LEAF(CP0_entryhi_read)
.set noreorder
MFC0( v0,C0_ENTRYHI)
j ra
nop
.set reorder
END(CP0_entryhi_read)
/*------------------------------------------------------------------------------
UINT32 CP0_compare_read( void )
Read CP0 compare ($11) register
------------------------------------------------------------------------------*/
LEAF(CP0_compare_read)
.set noreorder
MFC0( v0,C0_COMPARE)
j ra
nop
.set reorder
END(CP0_compare_read)
/*------------------------------------------------------------------------------
UINT32 CP0_status_read( void )
Read CP0 status ($12) register
------------------------------------------------------------------------------*/
LEAF(CP0_status_read)
.set noreorder
MFC0( v0,C0_STATUS)
j ra
nop
.set reorder
END(CP0_status_read)
/*------------------------------------------------------------------------------
UINT32 CP0_cause_read( void )
Read CP0 cause ($13) register
------------------------------------------------------------------------------*/
LEAF(CP0_cause_read)
.set noreorder
MFC0( v0,C0_CAUSE)
j ra
nop
.set reorder
END(CP0_cause_read)
/*------------------------------------------------------------------------------
UINT32 CP0_epc_read( void )
Read CP0 epc ($14) register
------------------------------------------------------------------------------*/
LEAF(CP0_epc_read)
.set noreorder
MFC0( v0,C0_EPC)
j ra
nop
.set reorder
END(CP0_epc_read)
/*------------------------------------------------------------------------------
UINT32 CP0_prid_read( void )
Read CP0 prid ($15) register
------------------------------------------------------------------------------*/
LEAF(CP0_prid_read)
.set noreorder
MFC0( v0,C0_PRID)
j ra
nop
.set reorder
END(CP0_prid_read)
/*------------------------------------------------------------------------------
UINT32 CP0_config_read( void )
Read CP0 config ($16) register
------------------------------------------------------------------------------*/
LEAF(CP0_config_read)
.set noreorder
MFC0( v0,C0_CONFIG)
j ra
nop
.set reorder
END(CP0_config_read)
/*------------------------------------------------------------------------------
UINT32 CP0_config1_read( void )
Read CP0 config1 ($16, select 1) register (MIPS32 only !!)
------------------------------------------------------------------------------*/
LEAF(CP0_config1_read)
.set noreorder
/*
mfc0 v0,config,sel1: decodes to
'sel'-bitfield 2-0 : select 1 = 001
-bitfield 10-3 : fixed = 000 0000 0
'rd' -bitfield 15-11: cp0 config (16) = 1000 0
'rt' -bitfield 20-16: cpu v0 (2) = 0 0010
'rs' -bitfield 25-21: rs = 'MF' = 00 000
'op' -bitfield 31-26: cop0 = 0100 00
mfc0 v0,config,1 = 0100 0000 0000 0010 1000 0000 0000 0001
*/
/* get config1 into v0 */
.word 0x40028001
nop
nop
j ra
nop
.set reorder
END(CP0_config1_read)
/*------------------------------------------------------------------------------
UINT32 CP0_lladdr_read( void )
Read CP0 lladdr ($17) register
------------------------------------------------------------------------------*/
LEAF(CP0_lladdr_read)
.set noreorder
MFC0( v0,C0_LLADDR)
j ra
nop
.set reorder
END(CP0_lladdr_read)
/*------------------------------------------------------------------------------
UINT32 CP0_watchlo_read( void )
Read CP0 watchlo ($18) register
------------------------------------------------------------------------------*/
LEAF(CP0_watchlo_read)
.set noreorder
MFC0( v0,C0_WATCHLO)
j ra
nop
.set reorder
END(CP0_watchlo_read)
/*------------------------------------------------------------------------------
UINT32 CP0_watchhi_read( void )
Read CP0 watchhi ($19) register
------------------------------------------------------------------------------*/
LEAF(CP0_watchhi_read)
.set noreorder
MFC0( v0,C0_WATCHHI)
j ra
nop
.set reorder
END(CP0_watchhi_read)
/*------------------------------------------------------------------------------
UINT32 CP0_debug_read( void )
Read CP0 debug ($23) register (MIPS32 only !!)
------------------------------------------------------------------------------*/
LEAF(CP0_debug_read)
.set noreorder
MFC0( v0,C0_DEBUG)
j ra
nop
.set reorder
END(CP0_debug_read)
/*------------------------------------------------------------------------------
UINT32 CP0_depc_read( void )
Read CP0 depc ($24) register (MIPS32 only !!)
------------------------------------------------------------------------------*/
LEAF(CP0_depc_read)
.set noreorder
MFC0( v0,C0_DEPC)
j ra
nop
.set reorder
END(CP0_depc_read)
/*------------------------------------------------------------------------------
UINT32 CP0_perfcount_read( void )
Read CP0 perfcount ($25) register (MIPS32 only !!)
------------------------------------------------------------------------------*/
LEAF(CP0_perfcount_read)
.set noreorder
MFC0( v0,C0_PERFCNT)
j ra
nop
.set reorder
END(CP0_perfcount_read)
/*------------------------------------------------------------------------------
UINT32 CP0_ecc_read( void )
Read CP0 ecc ($26) register
------------------------------------------------------------------------------*/
LEAF(CP0_ecc_read)
.set noreorder
MFC0( v0,C0_ERRCTL)
j ra
nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -