2008-12-25 13:38:36 +01:00
/ *
* Userland i m p l e m e n t a t i o n o f g e t t i m e o f d a y ( ) f o r 6 4 b i t s p r o c e s s e s i n a
* s3 9 0 k e r n e l f o r u s e i n t h e v D S O
*
* Copyright I B M C o r p . 2 0 0 8
* Author( s ) : M a r t i n S c h w i d e f s k y ( s c h w i d e f s k y @de.ibm.com)
*
* This p r o g r a m i s f r e e s o f t w a r e ; you can redistribute it and/or modify
* it u n d e r t h e t e r m s o f t h e G N U G e n e r a l P u b l i c L i c e n s e ( v e r s i o n 2 o n l y )
* as p u b l i s h e d b y t h e F r e e S o f t w a r e F o u n d a t i o n .
* /
# include < a s m / v d s o . h >
# include < a s m / a s m - o f f s e t s . h >
# include < a s m / u n i s t d . h >
.text
.align 4
.globl __kernel_gettimeofday
.type _ _ kernel_ g e t t i m e o f d a y ,@function
__kernel_gettimeofday :
.cfi_startproc
larl % r5 ,_ v d s o _ d a t a
0 : ltgr % r3 ,% r3 / * c h e c k i f t z i s N U L L * /
je 1 f
mvc 0 ( 8 ,% r3 ) ,_ _ V D S O _ T I M E Z O N E ( % r5 )
1 : ltgr % r2 ,% r2 / * c h e c k i f t v i s N U L L * /
je 4 f
lg % r4 ,_ _ V D S O _ U P D _ C O U N T ( % r5 ) / * l o a d u p d a t e c o u n t e r * /
tmll % r4 ,0 x00 0 1 / * p e n d i n g u p d a t e ? l o o p * /
jnz 0 b
stck 4 8 ( % r15 ) / * S t o r e T O D c l o c k * /
lg % r1 ,4 8 ( % r15 )
sg % r1 ,_ _ V D S O _ X T I M E _ S T A M P ( % r5 ) / * T O D - c y c l e _ l a s t * /
2010-04-22 17:17:06 +02:00
msgf % r1 ,_ _ V D S O _ N T P _ M U L T ( % r5 ) / * * N T P a d j u s t m e n t * /
2008-12-25 13:38:36 +01:00
srlg % r1 ,% r1 ,1 2 / * c y c2 n s ( c l o c k ,c y c l e _ d e l t a ) * /
alg % r1 ,_ _ V D S O _ X T I M E _ N S E C ( % r5 ) / * + x t i m e . t v _ n s e c * /
lg % r0 ,_ _ V D S O _ X T I M E _ S E C ( % r5 ) / * x t i m e . t v _ s e c * /
clg % r4 ,_ _ V D S O _ U P D _ C O U N T ( % r5 ) / * c h e c k u p d a t e c o u n t e r * /
jne 0 b
larl % r5 ,5 f
2 : clg % r1 ,0 ( % r5 )
jl 3 f
slg % r1 ,0 ( % r5 )
aghi % r0 ,1
j 2 b
3 : stg % r0 ,0 ( % r2 ) / * s t o r e t v - > t v _ s e c * /
slgr % r0 ,% r0 / * t v _ n s e c - > t v _ u s e c * /
ml % r0 ,8 ( % r5 )
srlg % r0 ,% r0 ,6
stg % r0 ,8 ( % r2 ) / * s t o r e t v - > t v _ u s e c * /
4 : lghi % r2 ,0
br % r14
5 : .quad 1000000000
.long 274877907
.cfi_endproc
.size _ _ kernel_ g e t t i m e o f d a y ,. - _ _ k e r n e l _ g e t t i m e o f d a y