linux/arch/score/lib/string.S
<<
>>
Prefs
   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"
 17899:
 179        br      r3
 180        .previous
 181        .section __ex_table, "a"
 182        .align  2
 183        .word   0b, 99b
 184        .previous
 185