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 moveq pc, 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 mov pc, 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 mov pc, lr 79ENDPROC(__raw_readsl) 80