linux/arch/arm/lib/io-readsl.S
<<
>>
Prefs
   1/*
   2 *  linux/arch/arm/lib/io-readsl.S
   3 *
   4 *  Copyright (C) 1995-2000 Russell King
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10#include <linux/linkage.h>
  11#include <asm/assembler.h>
  12
  13ENTRY(__raw_readsl)
  14                teq     r2, #0          @ do we have to check for the zero len?
  15                reteq   lr
  16                ands    ip, r1, #3
  17                bne     3f
  18
  19                subs    r2, r2, #4
  20                bmi     2f
  21                stmfd   sp!, {r4, lr}
  221:              ldr     r3, [r0, #0]
  23                ldr     r4, [r0, #0]
  24                ldr     ip, [r0, #0]
  25                ldr     lr, [r0, #0]
  26                subs    r2, r2, #4
  27                stmia   r1!, {r3, r4, ip, lr}
  28                bpl     1b
  29                ldmfd   sp!, {r4, lr}
  302:              movs    r2, r2, lsl #31
  31                ldrcs   r3, [r0, #0]
  32                ldrcs   ip, [r0, #0]
  33                stmcsia r1!, {r3, ip}
  34                ldrne   r3, [r0, #0]
  35                strne   r3, [r1, #0]
  36                ret     lr
  37
  383:              ldr     r3, [r0]
  39                cmp     ip, #2
  40                mov     ip, r3, get_byte_0
  41                strb    ip, [r1], #1
  42                bgt     6f
  43                mov     ip, r3, get_byte_1
  44                strb    ip, [r1], #1
  45                beq     5f
  46                mov     ip, r3, get_byte_2
  47                strb    ip, [r1], #1
  48
  494:              subs    r2, r2, #1
  50                mov     ip, r3, lspull #24
  51                ldrne   r3, [r0]
  52                orrne   ip, ip, r3, lspush #8
  53                strne   ip, [r1], #4
  54                bne     4b
  55                b       8f
  56
  575:              subs    r2, r2, #1
  58                mov     ip, r3, lspull #16
  59                ldrne   r3, [r0]
  60                orrne   ip, ip, r3, lspush #16
  61                strne   ip, [r1], #4
  62                bne     5b
  63                b       7f
  64
  656:              subs    r2, r2, #1
  66                mov     ip, r3, lspull #8
  67                ldrne   r3, [r0]
  68                orrne   ip, ip, r3, lspush #24
  69                strne   ip, [r1], #4
  70                bne     6b
  71
  72                mov     r3, ip, get_byte_2
  73                strb    r3, [r1, #2]
  747:              mov     r3, ip, get_byte_1
  75                strb    r3, [r1, #1]
  768:              mov     r3, ip, get_byte_0
  77                strb    r3, [r1, #0]
  78                ret     lr
  79ENDPROC(__raw_readsl)
  80