2005-04-17 02:20:36 +04:00
/ * strlen_ u s e r . S : S p a r c64 o p t i m i z e d s t r l e n _ u s e r c o d e
*
* Return l e n g t h o f s t r i n g i n u s e r s p a c e i n c l u d i n g t e r m i n a t i n g 0
* or 0 f o r e r r o r
*
* Copyright ( C ) 1 9 9 1 ,1 9 9 6 F r e e S o f t w a r e F o u n d a t i o n
* Copyright ( C ) 1 9 9 6 ,1 9 9 9 D a v i d S . M i l l e r ( d a v e m @redhat.com)
* Copyright ( C ) 1 9 9 6 ,1 9 9 7 J a k u b J e l i n e k ( j j @sunsite.mff.cuni.cz)
* /
# include < a s m / a s i . h >
# define L O _ M A G I C 0 x01 0 1 0 1 0 1
# define H I _ M A G I C 0 x80 8 0 8 0 8 0
.align 4
.global _ _ strlen_ u s e r , _ _ s t r n l e n _ u s e r
__strlen_user :
sethi % h i ( 3 2 7 6 8 ) , % o 1
__strnlen_user :
mov % o 1 , % g 1
mov % o 0 , % o 1
andcc % o 0 , 3 , % g 0
be,p t % i c c , 9 f
sethi % h i ( H I _ M A G I C ) , % o 4
10 : lduba [ % o 0 ] % a s i , % o 5
brz,p n % o 5 , 2 1 f
add % o 0 , 1 , % o 0
andcc % o 0 , 3 , % g 0
be,p n % i c c , 4 f
or % o 4 , % l o ( H I _ M A G I C ) , % o 3
11 : lduba [ % o 0 ] % a s i , % o 5
brz,p n % o 5 , 2 2 f
add % o 0 , 1 , % o 0
andcc % o 0 , 3 , % g 0
be,p t % i c c , 1 3 f
srl % o 3 , 7 , % o 2
12 : lduba [ % o 0 ] % a s i , % o 5
brz,p n % o 5 , 2 3 f
add % o 0 , 1 , % o 0
ba,p t % i c c , 2 f
15 : lda [ % o 0 ] % a s i , % o 5
9 : or % o 4 , % l o ( H I _ M A G I C ) , % o 3
4 : srl % o 3 , 7 , % o 2
13 : lda [ % o 0 ] % a s i , % o 5
2 : sub % o 5 , % o 2 , % o 4
andcc % o 4 , % o 3 , % g 0
bne,p n % i c c , 8 2 f
add % o 0 , 4 , % o 0
sub % o 0 , % o 1 , % g 2
81 : cmp % g 2 , % g 1
blu,p t % i c c , 1 3 b
mov % o 0 , % o 4
ba,a ,p t % x c c , 1 f
/* Check every byte. */
82 : srl % o 5 , 2 4 , % g 7
andcc % g 7 , 0 x f f , % g 0
be,p n % i c c , 1 f
add % o 0 , - 3 , % o 4
srl % o 5 , 1 6 , % g 7
andcc % g 7 , 0 x f f , % g 0
be,p n % i c c , 1 f
add % o 4 , 1 , % o 4
srl % o 5 , 8 , % g 7
andcc % g 7 , 0 x f f , % g 0
be,p n % i c c , 1 f
add % o 4 , 1 , % o 4
andcc % o 5 , 0 x f f , % g 0
bne,p t % i c c , 8 1 b
sub % o 0 , % o 1 , % g 2
add % o 4 , 1 , % o 4
1 : retl
sub % o 4 , % o 1 , % o 0
21 : retl
mov 1 , % o 0
22 : retl
mov 2 , % o 0
23 : retl
mov 3 , % o 0
.section .fixup , # alloc,#e x e c i n s t r
.align 4
30 :
retl
clr % o 0
2006-03-05 10:23:56 +03:00
.section _ _ ex_ t a b l e ," a "
2005-04-17 02:20:36 +04:00
.align 4
.word 1 0 b, 3 0 b
.word 1 1 b, 3 0 b
.word 1 2 b, 3 0 b
.word 1 5 b, 3 0 b
.word 1 3 b, 3 0 b