aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/lib
diff options
context:
space:
mode:
authorMarkos Chandras <markos.chandras@imgtec.com>2014-01-02 10:55:58 -0500
committerRalf Baechle <ralf@linux-mips.org>2014-03-26 18:09:13 -0400
commit5cc494972adbaeff08a1b7544acaa608c68cd527 (patch)
treed8f0f46710258c6aa70a7b4102cd11686fba603e /arch/mips/lib
parent4968db4b9c4528b097ab4e549c4e0d0420dd1efc (diff)
MIPS: lib: strlen_user: Use macro to build the strlen_user symbol
Build the __strlen_user symbol using a macro. In EVA mode we will need to use similar code to do the userspace load operations so it is better if we use a macro to avoid code duplications. Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Diffstat (limited to 'arch/mips/lib')
-rw-r--r--arch/mips/lib/strlen_user.S16
1 files changed, 10 insertions, 6 deletions
diff --git a/arch/mips/lib/strlen_user.S b/arch/mips/lib/strlen_user.S
index e362dcdc69d1..6e8bdb373213 100644
--- a/arch/mips/lib/strlen_user.S
+++ b/arch/mips/lib/strlen_user.S
@@ -22,19 +22,23 @@
22 * 22 *
23 * Return 0 for error 23 * Return 0 for error
24 */ 24 */
25LEAF(__strlen_user_asm) 25 .macro __BUILD_STRLEN_ASM func
26LEAF(__strlen_\func\()_asm)
26 LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok? 27 LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok?
27 and v0, a0 28 and v0, a0
28 bnez v0, .Lfault 29 bnez v0, .Lfault\@
29 30
30FEXPORT(__strlen_user_nocheck_asm) 31FEXPORT(__strlen_\func\()_nocheck_asm)
31 move v0, a0 32 move v0, a0
321: EX(lbu, v1, (v0), .Lfault) 331: EX(lbu, v1, (v0), .Lfault\@)
33 PTR_ADDIU v0, 1 34 PTR_ADDIU v0, 1
34 bnez v1, 1b 35 bnez v1, 1b
35 PTR_SUBU v0, a0 36 PTR_SUBU v0, a0
36 jr ra 37 jr ra
37 END(__strlen_user_asm) 38 END(__strlen_\func\()_asm)
38 39
39.Lfault: move v0, zero 40.Lfault\@: move v0, zero
40 jr ra 41 jr ra
42 .endm
43
44__BUILD_STRLEN_ASM user