Commit c5ec1983 authored by Ralf Baechle's avatar Ralf Baechle

[MIPS] Eleminate local symbols from the symbol table.

These symbols appear in oprofile output, stacktraces and similar but only
make the output harder to read.  Many identical symbol names such as
"both_aligned" were also being used in multiple source files making it
impossible to see which file actually was meant.  So let's get rid of them.
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent f21d8508
This diff is collapsed.
...@@ -209,36 +209,36 @@ LEAF(__copy_user_inatomic) ...@@ -209,36 +209,36 @@ LEAF(__copy_user_inatomic)
and t1, dst, ADDRMASK and t1, dst, ADDRMASK
PREF( 0, 1*32(src) ) PREF( 0, 1*32(src) )
PREF( 1, 1*32(dst) ) PREF( 1, 1*32(dst) )
bnez t2, copy_bytes_checklen bnez t2, .Lcopy_bytes_checklen
and t0, src, ADDRMASK and t0, src, ADDRMASK
PREF( 0, 2*32(src) ) PREF( 0, 2*32(src) )
PREF( 1, 2*32(dst) ) PREF( 1, 2*32(dst) )
bnez t1, dst_unaligned bnez t1, .Ldst_unaligned
nop nop
bnez t0, src_unaligned_dst_aligned bnez t0, .Lsrc_unaligned_dst_aligned
/* /*
* use delay slot for fall-through * use delay slot for fall-through
* src and dst are aligned; need to compute rem * src and dst are aligned; need to compute rem
*/ */
both_aligned: .Lboth_aligned:
SRL t0, len, LOG_NBYTES+3 # +3 for 8 units/iter SRL t0, len, LOG_NBYTES+3 # +3 for 8 units/iter
beqz t0, cleanup_both_aligned # len < 8*NBYTES beqz t0, .Lcleanup_both_aligned # len < 8*NBYTES
and rem, len, (8*NBYTES-1) # rem = len % (8*NBYTES) and rem, len, (8*NBYTES-1) # rem = len % (8*NBYTES)
PREF( 0, 3*32(src) ) PREF( 0, 3*32(src) )
PREF( 1, 3*32(dst) ) PREF( 1, 3*32(dst) )
.align 4 .align 4
1: 1:
EXC( LOAD t0, UNIT(0)(src), l_exc) EXC( LOAD t0, UNIT(0)(src), .Ll_exc)
EXC( LOAD t1, UNIT(1)(src), l_exc_copy) EXC( LOAD t1, UNIT(1)(src), .Ll_exc_copy)
EXC( LOAD t2, UNIT(2)(src), l_exc_copy) EXC( LOAD t2, UNIT(2)(src), .Ll_exc_copy)
EXC( LOAD t3, UNIT(3)(src), l_exc_copy) EXC( LOAD t3, UNIT(3)(src), .Ll_exc_copy)
SUB len, len, 8*NBYTES SUB len, len, 8*NBYTES
EXC( LOAD t4, UNIT(4)(src), l_exc_copy) EXC( LOAD t4, UNIT(4)(src), .Ll_exc_copy)
EXC( LOAD t7, UNIT(5)(src), l_exc_copy) EXC( LOAD t7, UNIT(5)(src), .Ll_exc_copy)
STORE t0, UNIT(0)(dst) STORE t0, UNIT(0)(dst)
STORE t1, UNIT(1)(dst) STORE t1, UNIT(1)(dst)
EXC( LOAD t0, UNIT(6)(src), l_exc_copy) EXC( LOAD t0, UNIT(6)(src), .Ll_exc_copy)
EXC( LOAD t1, UNIT(7)(src), l_exc_copy) EXC( LOAD t1, UNIT(7)(src), .Ll_exc_copy)
ADD src, src, 8*NBYTES ADD src, src, 8*NBYTES
ADD dst, dst, 8*NBYTES ADD dst, dst, 8*NBYTES
STORE t2, UNIT(-6)(dst) STORE t2, UNIT(-6)(dst)
...@@ -255,18 +255,18 @@ EXC( LOAD t1, UNIT(7)(src), l_exc_copy) ...@@ -255,18 +255,18 @@ EXC( LOAD t1, UNIT(7)(src), l_exc_copy)
/* /*
* len == rem == the number of bytes left to copy < 8*NBYTES * len == rem == the number of bytes left to copy < 8*NBYTES
*/ */
cleanup_both_aligned: .Lcleanup_both_aligned:
beqz len, done beqz len, .Ldone
sltu t0, len, 4*NBYTES sltu t0, len, 4*NBYTES
bnez t0, less_than_4units bnez t0, .Lless_than_4units
and rem, len, (NBYTES-1) # rem = len % NBYTES and rem, len, (NBYTES-1) # rem = len % NBYTES
/* /*
* len >= 4*NBYTES * len >= 4*NBYTES
*/ */
EXC( LOAD t0, UNIT(0)(src), l_exc) EXC( LOAD t0, UNIT(0)(src), .Ll_exc)
EXC( LOAD t1, UNIT(1)(src), l_exc_copy) EXC( LOAD t1, UNIT(1)(src), .Ll_exc_copy)
EXC( LOAD t2, UNIT(2)(src), l_exc_copy) EXC( LOAD t2, UNIT(2)(src), .Ll_exc_copy)
EXC( LOAD t3, UNIT(3)(src), l_exc_copy) EXC( LOAD t3, UNIT(3)(src), .Ll_exc_copy)
SUB len, len, 4*NBYTES SUB len, len, 4*NBYTES
ADD src, src, 4*NBYTES ADD src, src, 4*NBYTES
STORE t0, UNIT(0)(dst) STORE t0, UNIT(0)(dst)
...@@ -275,16 +275,16 @@ EXC( LOAD t3, UNIT(3)(src), l_exc_copy) ...@@ -275,16 +275,16 @@ EXC( LOAD t3, UNIT(3)(src), l_exc_copy)
STORE t3, UNIT(3)(dst) STORE t3, UNIT(3)(dst)
.set reorder /* DADDI_WAR */ .set reorder /* DADDI_WAR */
ADD dst, dst, 4*NBYTES ADD dst, dst, 4*NBYTES
beqz len, done beqz len, .Ldone
.set noreorder .set noreorder
less_than_4units: .Lless_than_4units:
/* /*
* rem = len % NBYTES * rem = len % NBYTES
*/ */
beq rem, len, copy_bytes beq rem, len, .Lcopy_bytes
nop nop
1: 1:
EXC( LOAD t0, 0(src), l_exc) EXC( LOAD t0, 0(src), .Ll_exc)
ADD src, src, NBYTES ADD src, src, NBYTES
SUB len, len, NBYTES SUB len, len, NBYTES
STORE t0, 0(dst) STORE t0, 0(dst)
...@@ -305,17 +305,17 @@ EXC( LOAD t0, 0(src), l_exc) ...@@ -305,17 +305,17 @@ EXC( LOAD t0, 0(src), l_exc)
* more instruction-level parallelism. * more instruction-level parallelism.
*/ */
#define bits t2 #define bits t2
beqz len, done beqz len, .Ldone
ADD t1, dst, len # t1 is just past last byte of dst ADD t1, dst, len # t1 is just past last byte of dst
li bits, 8*NBYTES li bits, 8*NBYTES
SLL rem, len, 3 # rem = number of bits to keep SLL rem, len, 3 # rem = number of bits to keep
EXC( LOAD t0, 0(src), l_exc) EXC( LOAD t0, 0(src), .Ll_exc)
SUB bits, bits, rem # bits = number of bits to discard SUB bits, bits, rem # bits = number of bits to discard
SHIFT_DISCARD t0, t0, bits SHIFT_DISCARD t0, t0, bits
STREST t0, -1(t1) STREST t0, -1(t1)
jr ra jr ra
move len, zero move len, zero
dst_unaligned: .Ldst_unaligned:
/* /*
* dst is unaligned * dst is unaligned
* t0 = src & ADDRMASK * t0 = src & ADDRMASK
...@@ -326,22 +326,22 @@ dst_unaligned: ...@@ -326,22 +326,22 @@ dst_unaligned:
* Set match = (src and dst have same alignment) * Set match = (src and dst have same alignment)
*/ */
#define match rem #define match rem
EXC( LDFIRST t3, FIRST(0)(src), l_exc) EXC( LDFIRST t3, FIRST(0)(src), .Ll_exc)
ADD t2, zero, NBYTES ADD t2, zero, NBYTES
EXC( LDREST t3, REST(0)(src), l_exc_copy) EXC( LDREST t3, REST(0)(src), .Ll_exc_copy)
SUB t2, t2, t1 # t2 = number of bytes copied SUB t2, t2, t1 # t2 = number of bytes copied
xor match, t0, t1 xor match, t0, t1
STFIRST t3, FIRST(0)(dst) STFIRST t3, FIRST(0)(dst)
beq len, t2, done beq len, t2, .Ldone
SUB len, len, t2 SUB len, len, t2
ADD dst, dst, t2 ADD dst, dst, t2
beqz match, both_aligned beqz match, .Lboth_aligned
ADD src, src, t2 ADD src, src, t2
src_unaligned_dst_aligned: .Lsrc_unaligned_dst_aligned:
SRL t0, len, LOG_NBYTES+2 # +2 for 4 units/iter SRL t0, len, LOG_NBYTES+2 # +2 for 4 units/iter
PREF( 0, 3*32(src) ) PREF( 0, 3*32(src) )
beqz t0, cleanup_src_unaligned beqz t0, .Lcleanup_src_unaligned
and rem, len, (4*NBYTES-1) # rem = len % 4*NBYTES and rem, len, (4*NBYTES-1) # rem = len % 4*NBYTES
PREF( 1, 3*32(dst) ) PREF( 1, 3*32(dst) )
1: 1:
...@@ -351,15 +351,15 @@ src_unaligned_dst_aligned: ...@@ -351,15 +351,15 @@ src_unaligned_dst_aligned:
* It's OK to load FIRST(N+1) before REST(N) because the two addresses * It's OK to load FIRST(N+1) before REST(N) because the two addresses
* are to the same unit (unless src is aligned, but it's not). * are to the same unit (unless src is aligned, but it's not).
*/ */
EXC( LDFIRST t0, FIRST(0)(src), l_exc) EXC( LDFIRST t0, FIRST(0)(src), .Ll_exc)
EXC( LDFIRST t1, FIRST(1)(src), l_exc_copy) EXC( LDFIRST t1, FIRST(1)(src), .Ll_exc_copy)
SUB len, len, 4*NBYTES SUB len, len, 4*NBYTES
EXC( LDREST t0, REST(0)(src), l_exc_copy) EXC( LDREST t0, REST(0)(src), .Ll_exc_copy)
EXC( LDREST t1, REST(1)(src), l_exc_copy) EXC( LDREST t1, REST(1)(src), .Ll_exc_copy)
EXC( LDFIRST t2, FIRST(2)(src), l_exc_copy) EXC( LDFIRST t2, FIRST(2)(src), .Ll_exc_copy)
EXC( LDFIRST t3, FIRST(3)(src), l_exc_copy) EXC( LDFIRST t3, FIRST(3)(src), .Ll_exc_copy)
EXC( LDREST t2, REST(2)(src), l_exc_copy) EXC( LDREST t2, REST(2)(src), .Ll_exc_copy)
EXC( LDREST t3, REST(3)(src), l_exc_copy) EXC( LDREST t3, REST(3)(src), .Ll_exc_copy)
PREF( 0, 9*32(src) ) # 0 is PREF_LOAD (not streamed) PREF( 0, 9*32(src) ) # 0 is PREF_LOAD (not streamed)
ADD src, src, 4*NBYTES ADD src, src, 4*NBYTES
#ifdef CONFIG_CPU_SB1 #ifdef CONFIG_CPU_SB1
...@@ -375,14 +375,14 @@ EXC( LDREST t3, REST(3)(src), l_exc_copy) ...@@ -375,14 +375,14 @@ EXC( LDREST t3, REST(3)(src), l_exc_copy)
bne len, rem, 1b bne len, rem, 1b
.set noreorder .set noreorder
cleanup_src_unaligned: .Lcleanup_src_unaligned:
beqz len, done beqz len, .Ldone
and rem, len, NBYTES-1 # rem = len % NBYTES and rem, len, NBYTES-1 # rem = len % NBYTES
beq rem, len, copy_bytes beq rem, len, .Lcopy_bytes
nop nop
1: 1:
EXC( LDFIRST t0, FIRST(0)(src), l_exc) EXC( LDFIRST t0, FIRST(0)(src), .Ll_exc)
EXC( LDREST t0, REST(0)(src), l_exc_copy) EXC( LDREST t0, REST(0)(src), .Ll_exc_copy)
ADD src, src, NBYTES ADD src, src, NBYTES
SUB len, len, NBYTES SUB len, len, NBYTES
STORE t0, 0(dst) STORE t0, 0(dst)
...@@ -391,15 +391,15 @@ EXC( LDREST t0, REST(0)(src), l_exc_copy) ...@@ -391,15 +391,15 @@ EXC( LDREST t0, REST(0)(src), l_exc_copy)
bne len, rem, 1b bne len, rem, 1b
.set noreorder .set noreorder
copy_bytes_checklen: .Lcopy_bytes_checklen:
beqz len, done beqz len, .Ldone
nop nop
copy_bytes: .Lcopy_bytes:
/* 0 < len < NBYTES */ /* 0 < len < NBYTES */
#define COPY_BYTE(N) \ #define COPY_BYTE(N) \
EXC( lb t0, N(src), l_exc); \ EXC( lb t0, N(src), .Ll_exc); \
SUB len, len, 1; \ SUB len, len, 1; \
beqz len, done; \ beqz len, .Ldone; \
sb t0, N(dst) sb t0, N(dst)
COPY_BYTE(0) COPY_BYTE(0)
...@@ -410,16 +410,16 @@ EXC( lb t0, N(src), l_exc); \ ...@@ -410,16 +410,16 @@ EXC( lb t0, N(src), l_exc); \
COPY_BYTE(4) COPY_BYTE(4)
COPY_BYTE(5) COPY_BYTE(5)
#endif #endif
EXC( lb t0, NBYTES-2(src), l_exc) EXC( lb t0, NBYTES-2(src), .Ll_exc)
SUB len, len, 1 SUB len, len, 1
jr ra jr ra
sb t0, NBYTES-2(dst) sb t0, NBYTES-2(dst)
done: .Ldone:
jr ra jr ra
nop nop
END(__copy_user_inatomic) END(__copy_user_inatomic)
l_exc_copy: .Ll_exc_copy:
/* /*
* Copy bytes from src until faulting load address (or until a * Copy bytes from src until faulting load address (or until a
* lb faults) * lb faults)
...@@ -434,14 +434,14 @@ l_exc_copy: ...@@ -434,14 +434,14 @@ l_exc_copy:
nop nop
LOAD t0, THREAD_BUADDR(t0) LOAD t0, THREAD_BUADDR(t0)
1: 1:
EXC( lb t1, 0(src), l_exc) EXC( lb t1, 0(src), .Ll_exc)
ADD src, src, 1 ADD src, src, 1
sb t1, 0(dst) # can't fault -- we're copy_from_user sb t1, 0(dst) # can't fault -- we're copy_from_user
.set reorder /* DADDI_WAR */ .set reorder /* DADDI_WAR */
ADD dst, dst, 1 ADD dst, dst, 1
bne src, t0, 1b bne src, t0, 1b
.set noreorder .set noreorder
l_exc: .Ll_exc:
LOAD t0, TI_TASK($28) LOAD t0, TI_TASK($28)
nop nop
LOAD t0, THREAD_BUADDR(t0) # t0 is just past last good address LOAD t0, THREAD_BUADDR(t0) # t0 is just past last good address
......
This diff is collapsed.
...@@ -72,7 +72,7 @@ LEAF(memset) ...@@ -72,7 +72,7 @@ LEAF(memset)
FEXPORT(__bzero) FEXPORT(__bzero)
sltiu t0, a2, LONGSIZE /* very small region? */ sltiu t0, a2, LONGSIZE /* very small region? */
bnez t0, small_memset bnez t0, .Lsmall_memset
andi t0, a0, LONGMASK /* aligned? */ andi t0, a0, LONGMASK /* aligned? */
#ifndef CONFIG_CPU_DADDI_WORKAROUNDS #ifndef CONFIG_CPU_DADDI_WORKAROUNDS
...@@ -88,28 +88,28 @@ FEXPORT(__bzero) ...@@ -88,28 +88,28 @@ FEXPORT(__bzero)
R10KCBARRIER(0(ra)) R10KCBARRIER(0(ra))
#ifdef __MIPSEB__ #ifdef __MIPSEB__
EX(LONG_S_L, a1, (a0), first_fixup) /* make word/dword aligned */ EX(LONG_S_L, a1, (a0), .Lfirst_fixup) /* make word/dword aligned */
#endif #endif
#ifdef __MIPSEL__ #ifdef __MIPSEL__
EX(LONG_S_R, a1, (a0), first_fixup) /* make word/dword aligned */ EX(LONG_S_R, a1, (a0), .Lfirst_fixup) /* make word/dword aligned */
#endif #endif
PTR_SUBU a0, t0 /* long align ptr */ PTR_SUBU a0, t0 /* long align ptr */
PTR_ADDU a2, t0 /* correct size */ PTR_ADDU a2, t0 /* correct size */
1: ori t1, a2, 0x3f /* # of full blocks */ 1: ori t1, a2, 0x3f /* # of full blocks */
xori t1, 0x3f xori t1, 0x3f
beqz t1, memset_partial /* no block to fill */ beqz t1, .Lmemset_partial /* no block to fill */
andi t0, a2, 0x40-LONGSIZE andi t0, a2, 0x40-LONGSIZE
PTR_ADDU t1, a0 /* end address */ PTR_ADDU t1, a0 /* end address */
.set reorder .set reorder
1: PTR_ADDIU a0, 64 1: PTR_ADDIU a0, 64
R10KCBARRIER(0(ra)) R10KCBARRIER(0(ra))
f_fill64 a0, -64, a1, fwd_fixup f_fill64 a0, -64, a1, .Lfwd_fixup
bne t1, a0, 1b bne t1, a0, 1b
.set noreorder .set noreorder
memset_partial: .Lmemset_partial:
R10KCBARRIER(0(ra)) R10KCBARRIER(0(ra))
PTR_LA t1, 2f /* where to start */ PTR_LA t1, 2f /* where to start */
#if LONGSIZE == 4 #if LONGSIZE == 4
...@@ -126,7 +126,7 @@ memset_partial: ...@@ -126,7 +126,7 @@ memset_partial:
.set push .set push
.set noreorder .set noreorder
.set nomacro .set nomacro
f_fill64 a0, -64, a1, partial_fixup /* ... but first do longs ... */ f_fill64 a0, -64, a1, .Lpartial_fixup /* ... but first do longs ... */
2: .set pop 2: .set pop
andi a2, LONGMASK /* At most one long to go */ andi a2, LONGMASK /* At most one long to go */
...@@ -134,15 +134,15 @@ memset_partial: ...@@ -134,15 +134,15 @@ memset_partial:
PTR_ADDU a0, a2 /* What's left */ PTR_ADDU a0, a2 /* What's left */
R10KCBARRIER(0(ra)) R10KCBARRIER(0(ra))
#ifdef __MIPSEB__ #ifdef __MIPSEB__
EX(LONG_S_R, a1, -1(a0), last_fixup) EX(LONG_S_R, a1, -1(a0), .Llast_fixup)
#endif #endif
#ifdef __MIPSEL__ #ifdef __MIPSEL__
EX(LONG_S_L, a1, -1(a0), last_fixup) EX(LONG_S_L, a1, -1(a0), .Llast_fixup)
#endif #endif
1: jr ra 1: jr ra
move a2, zero move a2, zero
small_memset: .Lsmall_memset:
beqz a2, 2f beqz a2, 2f
PTR_ADDU t1, a0, a2 PTR_ADDU t1, a0, a2
...@@ -155,11 +155,11 @@ small_memset: ...@@ -155,11 +155,11 @@ small_memset:
move a2, zero move a2, zero
END(memset) END(memset)
first_fixup: .Lfirst_fixup:
jr ra jr ra
nop nop
fwd_fixup: .Lfwd_fixup:
PTR_L t0, TI_TASK($28) PTR_L t0, TI_TASK($28)
LONG_L t0, THREAD_BUADDR(t0) LONG_L t0, THREAD_BUADDR(t0)
andi a2, 0x3f andi a2, 0x3f
...@@ -167,7 +167,7 @@ fwd_fixup: ...@@ -167,7 +167,7 @@ fwd_fixup:
jr ra jr ra
LONG_SUBU a2, t0 LONG_SUBU a2, t0
partial_fixup: .Lpartial_fixup:
PTR_L t0, TI_TASK($28) PTR_L t0, TI_TASK($28)
LONG_L t0, THREAD_BUADDR(t0) LONG_L t0, THREAD_BUADDR(t0)
andi a2, LONGMASK andi a2, LONGMASK
...@@ -175,6 +175,6 @@ partial_fixup: ...@@ -175,6 +175,6 @@ partial_fixup:
jr ra jr ra
LONG_SUBU a2, t0 LONG_SUBU a2, t0
last_fixup: .Llast_fixup:
jr ra jr ra
andi v1, a2, LONGMASK andi v1, a2, LONGMASK
...@@ -24,16 +24,16 @@ ...@@ -24,16 +24,16 @@
LEAF(__strlen_user_asm) LEAF(__strlen_user_asm)
LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok? LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok?
and v0, a0 and v0, a0
bnez v0, fault bnez v0, .Lfault
FEXPORT(__strlen_user_nocheck_asm) FEXPORT(__strlen_user_nocheck_asm)
move v0, a0 move v0, a0
1: EX(lb, t0, (v0), fault) 1: EX(lb, t0, (v0), .Lfault)
PTR_ADDIU v0, 1 PTR_ADDIU v0, 1
bnez t0, 1b bnez t0, 1b
PTR_SUBU v0, a0 PTR_SUBU v0, a0
jr ra jr ra
END(__strlen_user_asm) END(__strlen_user_asm)
fault: move v0, zero .Lfault: move v0, zero
jr ra jr ra
...@@ -30,13 +30,13 @@ ...@@ -30,13 +30,13 @@
LEAF(__strncpy_from_user_asm) LEAF(__strncpy_from_user_asm)
LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok? LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok?
and v0, a1 and v0, a1
bnez v0, fault bnez v0, .Lfault
FEXPORT(__strncpy_from_user_nocheck_asm) FEXPORT(__strncpy_from_user_nocheck_asm)
move v0, zero move v0, zero
move v1, a1 move v1, a1
.set noreorder .set noreorder
1: EX(lbu, t0, (v1), fault) 1: EX(lbu, t0, (v1), .Lfault)
PTR_ADDIU v1, 1 PTR_ADDIU v1, 1
R10KCBARRIER(0(ra)) R10KCBARRIER(0(ra))
beqz t0, 2f beqz t0, 2f
...@@ -47,13 +47,13 @@ FEXPORT(__strncpy_from_user_nocheck_asm) ...@@ -47,13 +47,13 @@ FEXPORT(__strncpy_from_user_nocheck_asm)
bne v0, a2, 1b bne v0, a2, 1b
2: PTR_ADDU t0, a1, v0 2: PTR_ADDU t0, a1, v0
xor t0, a1 xor t0, a1
bltz t0, fault bltz t0, .Lfault
jr ra # return n jr ra # return n
END(__strncpy_from_user_asm) END(__strncpy_from_user_asm)
fault: li v0, -EFAULT .Lfault: li v0, -EFAULT
jr ra jr ra
.section __ex_table,"a" .section __ex_table,"a"
PTR 1b, fault PTR 1b, .Lfault
.previous .previous
...@@ -28,18 +28,19 @@ ...@@ -28,18 +28,19 @@
LEAF(__strnlen_user_asm) LEAF(__strnlen_user_asm)
LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok? LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok?
and v0, a0 and v0, a0
bnez v0, fault bnez v0, .Lfault
FEXPORT(__strnlen_user_nocheck_asm) FEXPORT(__strnlen_user_nocheck_asm)
move v0, a0 move v0, a0
PTR_ADDU a1, a0 # stop pointer PTR_ADDU a1, a0 # stop pointer
1: beq v0, a1, 1f # limit reached? 1: beq v0, a1, 1f # limit reached?
EX(lb, t0, (v0), fault) EX(lb, t0, (v0), .Lfault)
PTR_ADDU v0, 1 PTR_ADDU v0, 1
bnez t0, 1b bnez t0, 1b
1: PTR_SUBU v0, a0 1: PTR_SUBU v0, a0
jr ra jr ra
END(__strnlen_user_asm) END(__strnlen_user_asm)
fault: move v0, zero .Lfault:
move v0, zero
jr ra jr ra
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment