diff options
Diffstat (limited to 'arch/mips/lib/memset.S')
| -rw-r--r-- | arch/mips/lib/memset.S | 21 | 
1 files changed, 20 insertions, 1 deletions
diff --git a/arch/mips/lib/memset.S b/arch/mips/lib/memset.S index 1cc306520a55..3a6f34ef5ffc 100644 --- a/arch/mips/lib/memset.S +++ b/arch/mips/lib/memset.S @@ -195,6 +195,7 @@  #endif  #else  	 PTR_SUBU	t0, $0, a2 +	move		a2, zero		/* No remaining longs */  	PTR_ADDIU	t0, 1  	STORE_BYTE(0)  	STORE_BYTE(1) @@ -231,16 +232,25 @@  #ifdef CONFIG_CPU_MIPSR6  .Lbyte_fixup\@: -	PTR_SUBU	a2, $0, t0 +	/* +	 * unset_bytes = (#bytes - (#unaligned bytes)) - (-#unaligned bytes remaining + 1) + 1 +	 *      a2     =             a2                -              t0                   + 1 +	 */ +	PTR_SUBU	a2, t0  	jr		ra  	 PTR_ADDIU	a2, 1  #endif /* CONFIG_CPU_MIPSR6 */  .Lfirst_fixup\@: +	/* unset_bytes already in a2 */  	jr	ra  	 nop  .Lfwd_fixup\@: +	/* +	 * unset_bytes = partial_start_addr +  #bytes   -     fault_addr +	 *      a2     =         t1         + (a2 & 3f) - $28->task->BUADDR +	 */  	PTR_L		t0, TI_TASK($28)  	andi		a2, 0x3f  	LONG_L		t0, THREAD_BUADDR(t0) @@ -249,6 +259,10 @@  	 LONG_SUBU	a2, t0  .Lpartial_fixup\@: +	/* +	 * unset_bytes = partial_end_addr +      #bytes     -     fault_addr +	 *      a2     =       a0         + (a2 & STORMASK) - $28->task->BUADDR +	 */  	PTR_L		t0, TI_TASK($28)  	andi		a2, STORMASK  	LONG_L		t0, THREAD_BUADDR(t0) @@ -257,10 +271,15 @@  	 LONG_SUBU	a2, t0  .Llast_fixup\@: +	/* unset_bytes already in a2 */  	jr		ra  	 nop  .Lsmall_fixup\@: +	/* +	 * unset_bytes = end_addr - current_addr + 1 +	 *      a2     =    t1    -      a0      + 1 +	 */  	PTR_SUBU	a2, t1, a0  	jr		ra  	 PTR_ADDIU	a2, 1  |