2019-05-27 08:55:01 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2011-06-04 22:44:40 +03:00
/ *
* OpenRISC s t r i n g . S
*
* Linux a r c h i t e c t u r a l p o r t b o r r o w i n g l i b e r a l l y f r o m s i m i l a r w o r k s o f
* others. A l l o r i g i n a l c o p y r i g h t s a p p l y a s p e r t h e o r i g i n a l s o u r c e
* declaration.
*
* Modifications f o r t h e O p e n R I S C a r c h i t e c t u r e :
* Copyright ( C ) 2 0 0 3 M a t j a z B r e s k v a r < p h o e n i x @bsemi.com>
* Copyright ( C ) 2 0 1 0 - 2 0 1 1 J o n a s B o n n < j o n a s @southpole.se>
* /
# include < l i n u x / l i n k a g e . h >
# include < a s m / e r r n o . h >
/ *
* this c a n b e o p t i m i z e d b y d o i n g g c c i n l i n e a s s e m l b y w i t h
* proper c o n s t r a i n t s ( n o n e e d t o s a v e a r g s r e g i s t e r s . . . )
*
* /
/ *
*
* int _ _ c o p y _ t o f r o m _ u s e r ( v o i d * t o , c o n s t v o i d * f r o m , u n s i g n e d l o n g s i z e ) ;
*
* NOTE : it r e t u r n s n u m b e r o f b y t e s N O T c o p i e d ! ! !
*
* /
.global __copy_tofrom_user
__copy_tofrom_user :
l. a d d i r1 ,r1 ,- 1 2
l. s w 0 ( r1 ) ,r6
l. s w 4 ( r1 ) ,r4
l. s w 8 ( r1 ) ,r3
l. a d d i r11 ,r5 ,0
2 : l. s f e q r11 ,r0
l. b f 1 f
l. a d d i r11 ,r11 ,- 1
8 : l. l b z r6 ,0 ( r4 )
9 : l. s b 0 ( r3 ) ,r6
l. a d d i r3 ,r3 ,1
l. j 2 b
l. a d d i r4 ,r4 ,1
1 :
l. a d d i r11 ,r11 ,1 / / r11 h o l d s t h e r e t u r n v a l u e
l. l w z r6 ,0 ( r1 )
l. l w z r4 ,4 ( r1 )
l. l w z r3 ,8 ( r1 )
l. j r r9
l. a d d i r1 ,r1 ,1 2
.section .fixup , " ax"
99 :
l. j 1 b
l. n o p
.previous
.section _ _ ex_ t a b l e , " a "
.long 8 b, 9 9 b / / r e a d f a u l t
.long 9 b, 9 9 b / / w r i t e f a u l t
.previous
/ *
* unsigned l o n g c l e a r _ u s e r ( v o i d * a d d r , u n s i g n e d l o n g s i z e ) ;
*
* NOTE : it r e t u r n s n u m b e r o f b y t e s N O T c l e a r e d ! ! !
* /
.global __clear_user
__clear_user :
l. a d d i r1 ,r1 ,- 8
l. s w 0 ( r1 ) ,r4
l. s w 4 ( r1 ) ,r3
2 : l. s f e q r4 ,r0
l. b f 1 f
l. a d d i r4 ,r4 ,- 1
9 : l. s b 0 ( r3 ) ,r0
l. j 2 b
l. a d d i r3 ,r3 ,1
1 :
l. a d d i r11 ,r4 ,1
l. l w z r4 ,0 ( r1 )
l. l w z r3 ,4 ( r1 )
l. j r r9
l. a d d i r1 ,r1 ,8
.section .fixup , " ax"
99 :
l. j 1 b
l. n o p
.previous
.section _ _ ex_ t a b l e , " a "
.long 9 b, 9 9 b / / w r i t e f a u l t
.previous