1
2
3
4
5
6
7
8
9
10#include <asm/asm.h>
11#include <asm/asm-offsets.h>
12#include <asm/regdef.h>
13
14#define EX(insn,reg,addr,handler) \
159: insn reg, addr; \
16 .section __ex_table,"a"; \
17 PTR 9b, handler; \
18 .previous
19
20
21
22
23
24
25LEAF(__strlen_user_asm)
26 LONG_L v0, TI_ADDR_LIMIT($28)
27 and v0, a0
28 bnez v0, .Lfault
29
30FEXPORT(__strlen_user_nocheck_asm)
31 move v0, a0
321: EX(lbu, v1, (v0), .Lfault)
33 PTR_ADDIU v0, 1
34 bnez v1, 1b
35 PTR_SUBU v0, a0
36 jr ra
37 END(__strlen_user_asm)
38
39.Lfault: move v0, zero
40 jr ra
41