@ -98,19 +98,23 @@
* RETURNS : N/ A
*
* /
# define R _ I C _ S I Z E t 2
# define R _ I C _ L I N E t 8
# define R _ D C _ S I Z E t 3
# define R _ D C _ L I N E t 9
LEAF( m i p s _ c a c h e _ r e s e t )
# ifndef C O N F I G _ S Y S _ C A C H E _ S I Z E _ A U T O
li t 2 , C O N F I G _ S Y S _ I C A C H E _ S I Z E
li t 8 , C O N F I G _ S Y S _ I C A C H E _ L I N E _ S I Z E
li R _ I C _ S I Z E , C O N F I G _ S Y S _ I C A C H E _ S I Z E
li R _ I C _ L I N E , C O N F I G _ S Y S _ I C A C H E _ L I N E _ S I Z E
# else
l1 _ i n f o t 2 , t 8 , M I P S _ C O N F 1 _ I A _ S H F
l1 _ i n f o R _ I C _ S I Z E , R _ I C _ L I N E , M I P S _ C O N F 1 _ I A _ S H F
# endif
# ifndef C O N F I G _ S Y S _ C A C H E _ S I Z E _ A U T O
li t 3 , C O N F I G _ S Y S _ D C A C H E _ S I Z E
li t 9 , C O N F I G _ S Y S _ D C A C H E _ L I N E _ S I Z E
li R _ D C _ S I Z E , C O N F I G _ S Y S _ D C A C H E _ S I Z E
li R _ D C _ L I N E , C O N F I G _ S Y S _ D C A C H E _ L I N E _ S I Z E
# else
l1 _ i n f o t 3 , t 9 , M I P S _ C O N F 1 _ D A _ S H F
l1 _ i n f o R _ D C _ S I Z E , R _ D C _ L I N E , M I P S _ C O N F 1 _ D A _ S H F
# endif
# ifdef C O N F I G _ S Y S _ M I P S _ C A C H E _ I N I T _ R A M _ L O A D
@ -123,9 +127,9 @@ LEAF(mips_cache_reset)
li v0 , C O N F I G _ S Y S _ D C A C H E _ S I Z E
# endif
# else
move v0 , t 2
sltu t 1 , t 2 , t 3
movn v0 , t 3 , t 1
move v0 , R _ I C _ S I Z E
sltu t 1 , R _ I C _ S I Z E , R _ D C _ S I Z E
movn v0 , R _ D C _ S I Z E , t 1
# endif
/ *
* Now c l e a r t h a t m u c h m e m o r y s t a r t i n g f r o m z e r o .
@ -158,18 +162,18 @@ LEAF(mips_cache_reset)
/ *
* Initialize t h e I - c a c h e f i r s t ,
* /
blez t 2 , 1 f
blez R _ I C _ S I Z E , 1 f
PTR_ L I t 0 , I N D E X _ B A S E
PTR_ A D D U t 1 , t 0 , t 2
PTR_ A D D U t 1 , t 0 , R _ I C _ S I Z E
/* clear tag to invalidate */
cache_ l o o p t 0 , t 1 , t 8 , I N D E X _ S T O R E _ T A G _ I
cache_ l o o p t 0 , t 1 , R _ I C _ L I N E , I N D E X _ S T O R E _ T A G _ I
# ifdef C O N F I G _ S Y S _ M I P S _ C A C H E _ I N I T _ R A M _ L O A D
/* fill once, so data field parity is correct */
PTR_ L I t 0 , I N D E X _ B A S E
cache_ l o o p t 0 , t 1 , t 8 , F I L L
cache_ l o o p t 0 , t 1 , R _ I C _ L I N E , F I L L
/* invalidate again - prudent but not strictly neccessary */
PTR_ L I t 0 , I N D E X _ B A S E
cache_ l o o p t 0 , t 1 , t 8 , I N D E X _ S T O R E _ T A G _ I
cache_ l o o p t 0 , t 1 , R _ I C _ L I N E , I N D E X _ S T O R E _ T A G _ I
# endif
/* Enable use of the I-cache by setting Config.K0 */
@ -188,20 +192,20 @@ LEAF(mips_cache_reset)
/ *
* then i n i t i a l i z e D - c a c h e .
* /
1 : blez t 3 , 3 f
1 : blez R _ D C _ S I Z E , 3 f
PTR_ L I t 0 , I N D E X _ B A S E
PTR_ A D D U t 1 , t 0 , t 3
PTR_ A D D U t 1 , t 0 , R _ D C _ S I Z E
/* clear all tags */
cache_ l o o p t 0 , t 1 , t 9 , I N D E X _ S T O R E _ T A G _ D
cache_ l o o p t 0 , t 1 , R _ D C _ L I N E , I N D E X _ S T O R E _ T A G _ D
# ifdef C O N F I G _ S Y S _ M I P S _ C A C H E _ I N I T _ R A M _ L O A D
/* load from each line (in cached space) */
PTR_ L I t 0 , I N D E X _ B A S E
2 : LONG_ L z e r o , 0 ( t 0 )
PTR_ A D D U t 0 , t 9
PTR_ A D D U t 0 , R _ D C _ L I N E
bne t 0 , t 1 , 2 b
/* clear all tags */
PTR_ L I t 0 , I N D E X _ B A S E
cache_ l o o p t 0 , t 1 , t 9 , I N D E X _ S T O R E _ T A G _ D
cache_ l o o p t 0 , t 1 , R _ D C _ L I N E , I N D E X _ S T O R E _ T A G _ D
# endif
3 : jr r a