2006-02-08 03:09:12 +03:00
/ * NGpage. S : N i a g a r a o p t i m i z e c l e a r a n d c o p y p a g e .
*
* Copyright ( C ) 2 0 0 6 ( d a v e m @davemloft.net)
* /
# include < a s m / a s i . h >
# include < a s m / p a g e . h >
.text
.align 32
/ * This i s h e a v i l y s i m p l i f i e d f r o m t h e s u n 4 u v a r i a n t s
* because N i a g a r a d o e s n o t h a v e a n y D - c a c h e a l i a s i n g i s s u e s
* and a l s o w e d o n ' t n e e d t o u s e t h e F P U i n o r d e r t o i m p l e m e n t
* an o p t i m a l p a g e c o p y / c l e a r .
* /
NGcopy_user_page : /* %o0=dest, %o1=src, %o2=vaddr */
prefetch [ % o 1 + 0 x00 ] , #o n e _ r e a d
mov 8 , % g 1
mov 1 6 , % g 2
mov 2 4 , % g 3
set P A G E _ S I Z E , % g 7
1 : ldda [ % o 1 + % g 0 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P , % o 2
ldda [ % o 1 + % g 2 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P , % o 4
prefetch [ % o 1 + 0 x40 ] , #o n e _ r e a d
add % o 1 , 3 2 , % o 1
stxa % o 2 , [ % o 0 + % g 0 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % o 3 , [ % o 0 + % g 1 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
ldda [ % o 1 + % g 0 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P , % o 2
stxa % o 4 , [ % o 0 + % g 2 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % o 5 , [ % o 0 + % g 3 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
ldda [ % o 1 + % g 2 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P , % o 4
add % o 1 , 3 2 , % o 1
add % o 0 , 3 2 , % o 0
stxa % o 2 , [ % o 0 + % g 0 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % o 3 , [ % o 0 + % g 1 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % o 4 , [ % o 0 + % g 2 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % o 5 , [ % o 0 + % g 3 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
subcc % g 7 , 6 4 , % g 7
bne,p t % x c c , 1 b
add % o 0 , 3 2 , % o 0
2007-03-19 23:27:33 +03:00
membar #S y n c
2006-02-08 03:09:12 +03:00
retl
nop
2007-08-16 12:47:25 +04:00
.globl NGclear_ p a g e , N G c l e a r _ u s e r _ p a g e
2006-02-08 03:09:12 +03:00
NGclear_page : /* %o0=dest */
NGclear_user_page : /* %o0=dest, %o1=vaddr */
mov 8 , % g 1
mov 1 6 , % g 2
mov 2 4 , % g 3
set P A G E _ S I Z E , % g 7
1 : stxa % g 0 , [ % o 0 + % g 0 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % g 0 , [ % o 0 + % g 1 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % g 0 , [ % o 0 + % g 2 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % g 0 , [ % o 0 + % g 3 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
add % o 0 , 3 2 , % o 0
stxa % g 0 , [ % o 0 + % g 0 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % g 0 , [ % o 0 + % g 1 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % g 0 , [ % o 0 + % g 2 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
stxa % g 0 , [ % o 0 + % g 3 ] A S I _ B L K _ I N I T _ Q U A D _ L D D _ P
subcc % g 7 , 6 4 , % g 7
bne,p t % x c c , 1 b
add % o 0 , 3 2 , % o 0
2007-03-19 23:27:33 +03:00
membar #S y n c
2006-02-08 03:09:12 +03:00
retl
nop
# define B R A N C H _ A L W A Y S 0 x10 6 8 0 0 0 0
# define N O P 0 x01 0 0 0 0 0 0
# define N G _ D O _ P A T C H ( O L D , N E W ) \
sethi % h i ( N E W ) , % g 1 ; \
or % g 1 , % l o ( N E W ) , % g 1 ; \
sethi % h i ( O L D ) , % g 2 ; \
or % g 2 , % l o ( O L D ) , % g 2 ; \
sub % g 1 , % g 2 , % g 1 ; \
sethi % h i ( B R A N C H _ A L W A Y S ) , % g 3 ; \
2006-02-12 10:28:40 +03:00
sll % g 1 , 1 1 , % g 1 ; \
srl % g 1 , 1 1 + 2 , % g 1 ; \
2006-02-08 03:09:12 +03:00
or % g 3 , % l o ( B R A N C H _ A L W A Y S ) , % g 3 ; \
or % g 3 , % g 1 , % g 3 ; \
stw % g 3 , [ % g 2 ] ; \
sethi % h i ( N O P ) , % g 3 ; \
or % g 3 , % l o ( N O P ) , % g 3 ; \
stw % g 3 , [ % g 2 + 0 x4 ] ; \
flush % g 2 ;
.globl niagara_patch_pageops
.type niagara_ p a t c h _ p a g e o p s ,#f u n c t i o n
niagara_patch_pageops :
NG_ D O _ P A T C H ( c o p y _ u s e r _ p a g e , N G c o p y _ u s e r _ p a g e )
NG_ D O _ P A T C H ( _ c l e a r _ p a g e , N G c l e a r _ p a g e )
NG_ D O _ P A T C H ( c l e a r _ u s e r _ p a g e , N G c l e a r _ u s e r _ p a g e )
retl
nop
.size niagara_ p a t c h _ p a g e o p s ,. - n i a g a r a _ p a t c h _ p a g e o p s