2008-05-20 03:53:02 +04:00
/ *
2005-04-17 02:20:36 +04:00
* blockops. S : C o m m o n b l o c k z e r o o p t i m i z e d r o u t i n e s .
*
* Copyright ( C ) 1 9 9 6 D a v i d S . M i l l e r ( d a v e m @caip.rutgers.edu)
* /
# include < a s m / p a g e . h >
/ * Zero o u t 6 4 b y t e s o f m e m o r y a t ( b u f + o f f s e t ) .
* Assumes % g 1 c o n t a i n s z e r o .
* /
# define B L A S T _ B L O C K ( b u f , o f f s e t ) \
std % g 0 , [ b u f + o f f s e t + 0 x38 ] ; \
std % g 0 , [ b u f + o f f s e t + 0 x30 ] ; \
std % g 0 , [ b u f + o f f s e t + 0 x28 ] ; \
std % g 0 , [ b u f + o f f s e t + 0 x20 ] ; \
std % g 0 , [ b u f + o f f s e t + 0 x18 ] ; \
std % g 0 , [ b u f + o f f s e t + 0 x10 ] ; \
std % g 0 , [ b u f + o f f s e t + 0 x08 ] ; \
std % g 0 , [ b u f + o f f s e t + 0 x00 ] ;
/ * Copy 3 2 b y t e s o f m e m o r y a t ( s r c + o f f s e t ) t o
* ( dst + o f f s e t ) .
* /
# define M I R R O R _ B L O C K ( d s t , s r c , o f f s e t , t 0 , t 1 , t 2 , t 3 , t 4 , t 5 , t 6 , t 7 ) \
ldd [ s r c + o f f s e t + 0 x18 ] , t 0 ; \
ldd [ s r c + o f f s e t + 0 x10 ] , t 2 ; \
ldd [ s r c + o f f s e t + 0 x08 ] , t 4 ; \
ldd [ s r c + o f f s e t + 0 x00 ] , t 6 ; \
std t 0 , [ d s t + o f f s e t + 0 x18 ] ; \
std t 2 , [ d s t + o f f s e t + 0 x10 ] ; \
std t 4 , [ d s t + o f f s e t + 0 x08 ] ; \
std t 6 , [ d s t + o f f s e t + 0 x00 ] ;
/ * Profiling e v i d e n c e i n d i c a t e s t h a t m e m s e t ( ) i s
* commonly c a l l e d f o r b l o c k s o f s i z e P A G E _ S I Z E ,
* and ( 2 * P A G E _ S I Z E ) ( f o r k e r n e l s t a c k s )
* and w i t h a s e c o n d a r g o f z e r o . W e a s s u m e i n
* all o f t h e s e c a s e s t h a t t h e b u f f e r i s a l i g n e d
* on a t l e a s t a n 8 b y t e b o u n d a r y .
*
* Therefore w e s p e c i a l c a s e t h e m t o m a k e t h e m
* as f a s t a s p o s s i b l e .
* /
.text
.align 4
.globl bzero_ 1 p a g e , _ _ c o p y _ 1 p a g e
bzero_1page :
/ * NOTE : If y o u c h a n g e t h e n u m b e r o f i n s n s o f t h i s r o u t i n e , p l e a s e c h e c k
* arch/ s p a r c / m m / h y p e r s p a r c . S * /
/* %o0 = buf */
or % g 0 , % g 0 , % g 1
or % o 0 , % g 0 , % o 1
or % g 0 , ( P A G E _ S I Z E > > 8 ) , % g 2
1 :
BLAST_ B L O C K ( % o 0 , 0 x00 )
BLAST_ B L O C K ( % o 0 , 0 x40 )
BLAST_ B L O C K ( % o 0 , 0 x80 )
BLAST_ B L O C K ( % o 0 , 0 x c0 )
subcc % g 2 , 1 , % g 2
bne 1 b
add % o 0 , 0 x10 0 , % o 0
retl
nop
__copy_1page :
/ * NOTE : If y o u c h a n g e t h e n u m b e r o f i n s n s o f t h i s r o u t i n e , p l e a s e c h e c k
* arch/ s p a r c / m m / h y p e r s p a r c . S * /
/* %o0 = dst, %o1 = src */
or % g 0 , ( P A G E _ S I Z E > > 8 ) , % g 1
1 :
MIRROR_ B L O C K ( % o 0 , % o 1 , 0 x00 , % o 2 , % o 3 , % o 4 , % o 5 , % g 2 , % g 3 , % g 4 , % g 5 )
MIRROR_ B L O C K ( % o 0 , % o 1 , 0 x20 , % o 2 , % o 3 , % o 4 , % o 5 , % g 2 , % g 3 , % g 4 , % g 5 )
MIRROR_ B L O C K ( % o 0 , % o 1 , 0 x40 , % o 2 , % o 3 , % o 4 , % o 5 , % g 2 , % g 3 , % g 4 , % g 5 )
MIRROR_ B L O C K ( % o 0 , % o 1 , 0 x60 , % o 2 , % o 3 , % o 4 , % o 5 , % g 2 , % g 3 , % g 4 , % g 5 )
MIRROR_ B L O C K ( % o 0 , % o 1 , 0 x80 , % o 2 , % o 3 , % o 4 , % o 5 , % g 2 , % g 3 , % g 4 , % g 5 )
MIRROR_ B L O C K ( % o 0 , % o 1 , 0 x a0 , % o 2 , % o 3 , % o 4 , % o 5 , % g 2 , % g 3 , % g 4 , % g 5 )
MIRROR_ B L O C K ( % o 0 , % o 1 , 0 x c0 , % o 2 , % o 3 , % o 4 , % o 5 , % g 2 , % g 3 , % g 4 , % g 5 )
MIRROR_ B L O C K ( % o 0 , % o 1 , 0 x e 0 , % o 2 , % o 3 , % o 4 , % o 5 , % g 2 , % g 3 , % g 4 , % g 5 )
subcc % g 1 , 1 , % g 1
add % o 0 , 0 x10 0 , % o 0
bne 1 b
add % o 1 , 0 x10 0 , % o 1
retl
nop