/*
 * arch/score/lib/string.S
 *
 * Score Processor version.
 *
 * Copyright (C) 2009 Sunplus Core Technology Co., Ltd.
 *  Chen Liqin <liqin.chen@sunplusct.com>
 *  Lennox Wu <lennox.wu@sunplusct.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see the file COPYING, or write
 * to the Free Software Foundation, Inc.,
 * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

#include <linux/linkage.h>
#include <asm-generic/errno.h>

	.text
	.align 2
ENTRY(__strncpy_from_user)
	cmpi.c	r6, 0
	mv	r9, r6
	ble	.L2
0:	lbu	r7, [r5]
	ldi	r8, 0
1:	sb	r7, [r4]
2:	lb	r6, [r5]
	cmp.c	r6, r8
	beq	.L2

.L5:
	addi	r8, 1
	cmp.c	r8, r9
	beq	.L7
3:	lbu	r6, [r5, 1]+
4:	sb	r6, [r4, 1]+
5:	lb	r7, [r5]
	cmpi.c	r7, 0
	bne	.L5
.L7:
	mv	r4, r8
	br	r3
.L2:
	ldi	r8, 0
	mv	r4, r8
	br	r3
	.section .fixup, "ax"
99:
	ldi	r4, -EFAULT
	br	r3
	.previous
	.section __ex_table, "a"
	.align	2
	.word	0b ,99b
	.word	1b ,99b
	.word	2b ,99b
	.word	3b ,99b
	.word	4b ,99b
	.word	5b ,99b
	.previous

	.align 2
ENTRY(__strnlen_user)
	cmpi.c	r5, 0
	ble	.L11
0:	lb	r6, [r4]
	ldi	r7, 0
	cmp.c	r6, r7
	beq	.L11
.L15:
	addi	r7, 1
	cmp.c	r7, r5
	beq	.L23
1:	lb	r6, [r4,1]+
	cmpi.c	r6, 0
	bne	.L15
.L23:
	addri	r4, r7, 1
	br	r3

.L11:
	ldi	r4, 1
	br	r3
	.section .fixup, "ax"
99:
	ldi	r4, 0
	br	r3

	.section __ex_table,"a"
	.align 2
	.word	0b, 99b
	.word	1b, 99b
	.previous

	.align 2
ENTRY(__copy_tofrom_user)
	cmpi.c	r6, 0
	mv	r10,r6
	beq	.L32
	ldi	r9, 0
.L34:
	add	r6, r5, r9
0:	lbu	r8, [r6]
	add	r7, r4, r9
1:	sb	r8, [r7]
	addi	r9, 1
	cmp.c	r9, r10
	bne	.L34
.L32:
	ldi	r4, 0
	br	r3
	.section .fixup, "ax"
99:
	sub	r4, r10, r9
	br	r3
	.previous
	.section __ex_table, "a"
	.align	2
	.word	0b, 99b
	.word	1b, 99b
	.previous

	.align 2
ENTRY(__clear_user)
	cmpi.c	r5, 0
	beq	.L38
	ldi	r6, 0
	mv	r7, r6
.L40:
	addi	r6, 1
0:	sb	r7, [r4]+, 1
	cmp.c	r6, r5
	bne	.L40
.L38:
	ldi	r4, 0
	br	r3

	.section .fixup, "ax"
99:
	br	r3
	.previous
	.section __ex_table, "a"
	.align	2
	.word	0b, 99b
	.previous
