2006-09-26 10:52:32 +02:00
# include < l i n u x / l i n k a g e . h >
# include < a s m / d w a r f2 . h >
2011-05-17 15:29:14 -07:00
# include < a s m / a l t e r n a t i v e - a s m . h >
2006-09-26 10:52:32 +02:00
2005-04-16 15:20:36 -07:00
/ *
* Zero a p a g e .
* rdi p a g e
* /
2009-06-30 15:00:20 +02:00
ENTRY( c l e a r _ p a g e _ c )
2006-09-26 10:52:32 +02:00
CFI_ S T A R T P R O C
movl $ 4 0 9 6 / 8 ,% e c x
xorl % e a x ,% e a x
rep s t o s q
ret
CFI_ E N D P R O C
2009-06-30 15:00:20 +02:00
ENDPROC( c l e a r _ p a g e _ c )
2006-09-26 10:52:32 +02:00
2011-05-17 15:29:14 -07:00
ENTRY( c l e a r _ p a g e _ c _ e )
CFI_ S T A R T P R O C
movl $ 4 0 9 6 ,% e c x
xorl % e a x ,% e a x
rep s t o s b
ret
CFI_ E N D P R O C
ENDPROC( c l e a r _ p a g e _ c _ e )
2006-09-26 10:52:32 +02:00
ENTRY( c l e a r _ p a g e )
CFI_ S T A R T P R O C
2006-02-03 21:51:02 +01:00
xorl % e a x ,% e a x
movl $ 4 0 9 6 / 6 4 ,% e c x
.p2align 4
.Lloop :
decl % e c x
# define P U T ( x ) m o v q % r a x ,x * 8 ( % r d i )
movq % r a x ,( % r d i )
PUT( 1 )
PUT( 2 )
PUT( 3 )
PUT( 4 )
PUT( 5 )
PUT( 6 )
PUT( 7 )
leaq 6 4 ( % r d i ) ,% r d i
jnz . L l o o p
nop
ret
2006-09-26 10:52:32 +02:00
CFI_ E N D P R O C
.Lclear_page_end :
ENDPROC( c l e a r _ p a g e )
2006-02-03 21:51:02 +01:00
2011-05-17 15:29:14 -07:00
/ *
* Some C P U s s u p p o r t e n h a n c e d R E P M O V S B / S T O S B i n s t r u c t i o n s .
* It i s r e c o m m e n d e d t o u s e t h i s w h e n p o s s i b l e .
* If e n h a n c e d R E P M O V S B / S T O S B i s n o t a v a i l a b l e , t r y t o u s e f a s t s t r i n g .
* Otherwise, u s e o r i g i n a l f u n c t i o n .
*
* /
2006-02-03 21:51:02 +01:00
# include < a s m / c p u f e a t u r e . h >
2006-09-26 10:52:32 +02:00
.section .altinstr_replacement , " ax"
1 : .byte 0xeb /* jmp <disp8> */
.byte ( clear_ p a g e _ c - c l e a r _ p a g e ) - ( 2 f - 1 b ) / * o f f s e t * /
2011-05-17 15:29:14 -07:00
2 : .byte 0xeb /* jmp <disp8> */
.byte ( clear_ p a g e _ c _ e - c l e a r _ p a g e ) - ( 3 f - 2 b ) / * o f f s e t * /
3 :
2006-09-26 10:52:32 +02:00
.previous
2006-02-03 21:51:02 +01:00
.section .altinstructions , " a"
2011-05-17 15:29:14 -07:00
altinstruction_ e n t r y c l e a r _ p a g e ,1 b ,X 8 6 _ F E A T U R E _ R E P _ G O O D ,\
.Lclear_page_end - clear_ p a g e , 2 b - 1 b
altinstruction_ e n t r y c l e a r _ p a g e ,2 b ,X 8 6 _ F E A T U R E _ E R M S , \
.Lclear_page_end - clear_ p a g e ,3 b - 2 b
2006-02-03 21:51:02 +01:00
.previous