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#include <asm/export.h> 13 14ENTRY(__raw_readsl) 15 teq r2, #0 @ do we have to check for the zero len? 16 reteq lr 17 ands ip, r1, #3 18 bne 3f 19 20 subs r2, r2, #4 21 bmi 2f 22 stmfd sp!, {r4, lr} 231: ldr r3, [r0, #0] 24 ldr r4, [r0, #0] 25 ldr ip, [r0, #0] 26 ldr lr, [r0, #0] 27 subs r2, r2, #4 28 stmia r1!, {r3, r4, ip, lr} 29 bpl 1b 30 ldmfd sp!, {r4, lr} 312: movs r2, r2, lsl #31 32 ldrcs r3, [r0, #0] 33 ldrcs ip, [r0, #0] 34 stmcsia r1!, {r3, ip} 35 ldrne r3, [r0, #0] 36 strne r3, [r1, #0] 37 ret lr 38 393: ldr r3, [r0] 40 cmp ip, #2 41 mov ip, r3, get_byte_0 42 strb ip, [r1], #1 43 bgt 6f 44 mov ip, r3, get_byte_1 45 strb ip, [r1], #1 46 beq 5f 47 mov ip, r3, get_byte_2 48 strb ip, [r1], #1 49 504: subs r2, r2, #1 51 mov ip, r3, lspull #24 52 ldrne r3, [r0] 53 orrne ip, ip, r3, lspush #8 54 strne ip, [r1], #4 55 bne 4b 56 b 8f 57 585: subs r2, r2, #1 59 mov ip, r3, lspull #16 60 ldrne r3, [r0] 61 orrne ip, ip, r3, lspush #16 62 strne ip, [r1], #4 63 bne 5b 64 b 7f 65 666: subs r2, r2, #1 67 mov ip, r3, lspull #8 68 ldrne r3, [r0] 69 orrne ip, ip, r3, lspush #24 70 strne ip, [r1], #4 71 bne 6b 72 73 mov r3, ip, get_byte_2 74 strb r3, [r1, #2] 757: mov r3, ip, get_byte_1 76 strb r3, [r1, #1] 778: mov r3, ip, get_byte_0 78 strb r3, [r1, #0] 79 ret lr 80ENDPROC(__raw_readsl) 81EXPORT_SYMBOL(__raw_readsl) 82