2008-03-03 15:01:05 -08:00
/ * una_ a s m . S : K e r n e l u n a l i g n e d t r a p a s s e m b l e r h e l p e r s .
*
* Copyright ( C ) 1 9 9 6 ,2 0 0 5 ,2 0 0 8 D a v i d S . M i l l e r ( d a v e m @davemloft.net)
* 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 < l i n u x / e r r n o . h >
.text
retl_efault :
retl
mov - E F A U L T , % o 0
/ * int _ _ d o _ i n t _ s t o r e ( u n s i g n e d l o n g * d s t _ a d d r , i n t s i z e ,
* unsigned l o n g * s r c _ v a l )
*
* % o0 = d e s t _ a d d r
* % o1 = s i z e
* % o2 = s r c _ v a l
*
* Return ' 0 ' o n s u c c e s s , - E F A U L T o n f a i l u r e .
* /
.globl __do_int_store
__do_int_store :
ld [ % o 2 ] , % g 1
2011-02-01 12:39:59 -08:00
cmp % o 1 , 2
2008-03-03 15:01:05 -08:00
be 2 f
2011-02-01 12:39:59 -08:00
cmp % o 1 , 4
2008-03-03 15:01:05 -08:00
be 1 f
srl % g 1 , 2 4 , % g 2
srl % g 1 , 1 6 , % g 7
4 : stb % g 2 , [ % o 0 ]
srl % g 1 , 8 , % g 2
5 : stb % g 7 , [ % o 0 + 1 ]
ld [ % o 2 + 4 ] , % g 7
6 : stb % g 2 , [ % o 0 + 2 ]
srl % g 7 , 2 4 , % g 2
7 : stb % g 1 , [ % o 0 + 3 ]
srl % g 7 , 1 6 , % g 1
8 : stb % g 2 , [ % o 0 + 4 ]
srl % g 7 , 8 , % g 2
9 : stb % g 1 , [ % o 0 + 5 ]
10 : stb % g 2 , [ % o 0 + 6 ]
b 0 f
11 : stb % g 7 , [ % o 0 + 7 ]
1 : srl % g 1 , 1 6 , % g 7
12 : stb % g 2 , [ % o 0 ]
srl % g 1 , 8 , % g 2
13 : stb % g 7 , [ % o 0 + 1 ]
14 : stb % g 2 , [ % o 0 + 2 ]
b 0 f
15 : stb % g 1 , [ % o 0 + 3 ]
2 : srl % g 1 , 8 , % g 2
16 : stb % g 2 , [ % o 0 ]
17 : stb % g 1 , [ % o 0 + 1 ]
0 : retl
mov 0 , % o 0
.section _ _ ex_ t a b l e ,#a l l o c
.word 4 b, r e t l _ e f a u l t
.word 5 b, r e t l _ e f a u l t
.word 6 b, r e t l _ e f a u l t
.word 7 b, r e t l _ e f a u l t
.word 8 b, r e t l _ e f a u l t
.word 9 b, r e t l _ e f a u l t
.word 1 0 b, r e t l _ e f a u l t
.word 1 1 b, r e t l _ e f a u l t
.word 1 2 b, r e t l _ e f a u l t
.word 1 3 b, r e t l _ e f a u l t
.word 1 4 b, r e t l _ e f a u l t
.word 1 5 b, r e t l _ e f a u l t
.word 1 6 b, r e t l _ e f a u l t
.word 1 7 b, r e t l _ e f a u l t
.previous
/ * int d o _ i n t _ l o a d ( u n s i g n e d l o n g * d e s t _ r e g , i n t s i z e ,
* unsigned l o n g * s a d d r , i n t i s _ s i g n e d )
*
* % o0 = d e s t _ r e g
* % o1 = s i z e
* % o2 = s a d d r
* % o3 = i s _ s i g n e d
*
* Return ' 0 ' o n s u c c e s s , - E F A U L T o n f a i l u r e .
* /
.globl do_int_load
do_int_load :
cmp % o 1 , 8
be 9 f
cmp % o 1 , 4
be 6 f
4 : ldub [ % o 2 ] , % g 1
5 : ldub [ % o 2 + 1 ] , % g 2
sll % g 1 , 8 , % g 1
tst % o 3
be 3 f
or % g 1 , % g 2 , % g 1
sll % g 1 , 1 6 , % g 1
sra % g 1 , 1 6 , % g 1
3 : b 0 f
st % g 1 , [ % o 0 ]
6 : ldub [ % o 2 + 1 ] , % g 2
sll % g 1 , 2 4 , % g 1
7 : ldub [ % o 2 + 2 ] , % g 7
sll % g 2 , 1 6 , % g 2
8 : ldub [ % o 2 + 3 ] , % g 3
sll % g 7 , 8 , % g 7
or % g 3 , % g 2 , % g 3
or % g 7 , % g 3 , % g 7
or % g 1 , % g 7 , % g 1
b 0 f
st % g 1 , [ % o 0 ]
9 : ldub [ % o 2 ] , % g 1
10 : ldub [ % o 2 + 1 ] , % g 2
sll % g 1 , 2 4 , % g 1
11 : ldub [ % o 2 + 2 ] , % g 7
sll % g 2 , 1 6 , % g 2
12 : ldub [ % o 2 + 3 ] , % g 3
sll % g 7 , 8 , % g 7
or % g 1 , % g 2 , % g 1
or % g 7 , % g 3 , % g 7
or % g 1 , % g 7 , % g 7
13 : ldub [ % o 2 + 4 ] , % g 1
st % g 7 , [ % o 0 ]
14 : ldub [ % o 2 + 5 ] , % g 2
sll % g 1 , 2 4 , % g 1
15 : ldub [ % o 2 + 6 ] , % g 7
sll % g 2 , 1 6 , % g 2
16 : ldub [ % o 2 + 7 ] , % g 3
sll % g 7 , 8 , % g 7
or % g 1 , % g 2 , % g 1
or % g 7 , % g 3 , % g 7
or % g 1 , % g 7 , % g 7
st % g 7 , [ % o 0 + 4 ]
0 : retl
mov 0 , % o 0
.section _ _ ex_ t a b l e ,#a l l o c
.word 4 b, r e t l _ e f a u l t
.word 5 b, r e t l _ e f a u l t
.word 6 b, r e t l _ e f a u l t
.word 7 b, r e t l _ e f a u l t
.word 8 b, r e t l _ e f a u l t
.word 9 b, r e t l _ e f a u l t
.word 1 0 b, r e t l _ e f a u l t
.word 1 1 b, r e t l _ e f a u l t
.word 1 2 b, r e t l _ e f a u l t
.word 1 3 b, r e t l _ e f a u l t
.word 1 4 b, r e t l _ e f a u l t
.word 1 5 b, r e t l _ e f a u l t
.word 1 6 b, r e t l _ e f a u l t
.previous