2005-04-16 15:20:36 -07:00
/ *
* linux/ a r c h / a r m / l i b / i o - r e a d s l . S
*
* Copyright ( C ) 1 9 9 5 - 2 0 0 0 R u s s e l l K i n g
*
* 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 a s
* published 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 < l i n u x / l i n k a g e . h >
# include < a s m / a s s e m b l e r . h >
ENTRY( _ _ r a w _ r e a d s l )
teq r2 , #0 @ do we have to check for the zero len?
2014-06-30 16:29:12 +01:00
reteq l r
2005-04-16 15:20:36 -07:00
ands i p , r1 , #3
bne 3 f
subs r2 , r2 , #4
bmi 2 f
stmfd s p ! , { r4 , l r }
1 : ldr r3 , [ r0 , #0 ]
ldr r4 , [ r0 , #0 ]
ldr i p , [ r0 , #0 ]
ldr l r , [ r0 , #0 ]
subs r2 , r2 , #4
stmia r1 ! , { r3 , r4 , i p , l r }
bpl 1 b
ldmfd s p ! , { r4 , l r }
2 : movs r2 , r2 , l s l #31
ldrcs r3 , [ r0 , #0 ]
ldrcs i p , [ r0 , #0 ]
stmcsia r1 ! , { r3 , i p }
ldrne r3 , [ r0 , #0 ]
strne r3 , [ r1 , #0 ]
2014-06-30 16:29:12 +01:00
ret l r
2005-04-16 15:20:36 -07:00
3 : ldr r3 , [ r0 ]
cmp i p , #2
mov i p , r3 , g e t _ b y t e _ 0
strb i p , [ r1 ] , #1
bgt 6 f
mov i p , r3 , g e t _ b y t e _ 1
strb i p , [ r1 ] , #1
beq 5 f
mov i p , r3 , g e t _ b y t e _ 2
strb i p , [ r1 ] , #1
4 : subs r2 , r2 , #1
2014-02-25 08:41:09 +01:00
mov i p , r3 , l s p u l l #24
2005-04-16 15:20:36 -07:00
ldrne r3 , [ r0 ]
2014-02-25 08:41:09 +01:00
orrne i p , i p , r3 , l s p u s h #8
2005-04-16 15:20:36 -07:00
strne i p , [ r1 ] , #4
bne 4 b
b 8 f
5 : subs r2 , r2 , #1
2014-02-25 08:41:09 +01:00
mov i p , r3 , l s p u l l #16
2005-04-16 15:20:36 -07:00
ldrne r3 , [ r0 ]
2014-02-25 08:41:09 +01:00
orrne i p , i p , r3 , l s p u s h #16
2005-04-16 15:20:36 -07:00
strne i p , [ r1 ] , #4
bne 5 b
b 7 f
6 : subs r2 , r2 , #1
2014-02-25 08:41:09 +01:00
mov i p , r3 , l s p u l l #8
2005-04-16 15:20:36 -07:00
ldrne r3 , [ r0 ]
2014-02-25 08:41:09 +01:00
orrne i p , i p , r3 , l s p u s h #24
2005-04-16 15:20:36 -07:00
strne i p , [ r1 ] , #4
bne 6 b
mov r3 , i p , g e t _ b y t e _ 2
strb r3 , [ r1 , #2 ]
7 : mov r3 , i p , g e t _ b y t e _ 1
strb r3 , [ r1 , #1 ]
8 : mov r3 , i p , g e t _ b y t e _ 0
strb r3 , [ r1 , #0 ]
2014-06-30 16:29:12 +01:00
ret l r
2008-08-28 11:22:32 +01:00
ENDPROC( _ _ r a w _ r e a d s l )