1/* 2 * arch/score/lib/string.S 3 * 4 * Score Processor version. 5 * 6 * Copyright (C) 2009 Sunplus Core Technology Co., Ltd. 7 * Chen Liqin <liqin.chen@sunplusct.com> 8 * Lennox Wu <lennox.wu@sunplusct.com> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, see the file COPYING, or write 22 * to the Free Software Foundation, Inc., 23 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 24 */ 25 26#include <linux/linkage.h> 27#include <asm-generic/errno.h> 28 29 .text 30 .align 2 31ENTRY(__strncpy_from_user) 32 cmpi.c r6, 0 33 mv r9, r6 34 ble .L2 350: lbu r7, [r5] 36 ldi r8, 0 371: sb r7, [r4] 382: lb r6, [r5] 39 cmp.c r6, r8 40 beq .L2 41 42.L5: 43 addi r8, 1 44 cmp.c r8, r9 45 beq .L7 463: lbu r6, [r5, 1]+ 474: sb r6, [r4, 1]+ 485: lb r7, [r5] 49 cmpi.c r7, 0 50 bne .L5 51.L7: 52 mv r4, r8 53 br r3 54.L2: 55 ldi r8, 0 56 mv r4, r8 57 br r3 58 .section .fixup, "ax" 5999: 60 ldi r4, -EFAULT 61 br r3 62 .previous 63 .section __ex_table, "a" 64 .align 2 65 .word 0b ,99b 66 .word 1b ,99b 67 .word 2b ,99b 68 .word 3b ,99b 69 .word 4b ,99b 70 .word 5b ,99b 71 .previous 72 73 .align 2 74ENTRY(__strnlen_user) 75 cmpi.c r5, 0 76 ble .L11 770: lb r6, [r4] 78 ldi r7, 0 79 cmp.c r6, r7 80 beq .L11 81.L15: 82 addi r7, 1 83 cmp.c r7, r5 84 beq .L23 851: lb r6, [r4,1]+ 86 cmpi.c r6, 0 87 bne .L15 88.L23: 89 addri r4, r7, 1 90 br r3 91 92.L11: 93 ldi r4, 1 94 br r3 95 .section .fixup, "ax" 9699: 97 ldi r4, 0 98 br r3 99 100 .section __ex_table,"a" 101 .align 2 102 .word 0b, 99b 103 .word 1b, 99b 104 .previous 105 106 .align 2 107ENTRY(__strlen_user) 1080: lb r6, [r4] 109 mv r7, r4 110 extsb r6, r6 111 cmpi.c r6, 0 112 mv r4, r6 113 beq .L27 114.L28: 1151: lb r6, [r7, 1]+ 116 addi r6, 1 117 cmpi.c r6, 0 118 bne .L28 119.L27: 120 br r3 121 .section .fixup, "ax" 122 ldi r4, 0x0 123 br r3 12499: 125 ldi r4, 0 126 br r3 127 .previous 128 .section __ex_table, "a" 129 .align 2 130 .word 0b ,99b 131 .word 1b ,99b 132 .previous 133 134 .align 2 135ENTRY(__copy_tofrom_user) 136 cmpi.c r6, 0 137 mv r10,r6 138 beq .L32 139 ldi r9, 0 140.L34: 141 add r6, r5, r9 1420: lbu r8, [r6] 143 add r7, r4, r9 1441: sb r8, [r7] 145 addi r9, 1 146 cmp.c r9, r10 147 bne .L34 148.L32: 149 ldi r4, 0 150 br r3 151 .section .fixup, "ax" 15299: 153 sub r4, r10, r9 154 br r3 155 .previous 156 .section __ex_table, "a" 157 .align 2 158 .word 0b, 99b 159 .word 1b, 99b 160 .previous 161 162 .align 2 163ENTRY(__clear_user) 164 cmpi.c r5, 0 165 beq .L38 166 ldi r6, 0 167 mv r7, r6 168.L40: 169 addi r6, 1 1700: sb r7, [r4]+, 1 171 cmp.c r6, r5 172 bne .L40 173.L38: 174 ldi r4, 0 175 br r3 176 177 .section .fixup, "ax" 178 br r3 179 .previous 180 .section __ex_table, "a" 181 .align 2 18299: 183 .word 0b, 99b 184 .previous 185