1/* 2 * linux/arch/arm/lib/io-writesl.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_writesl) 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: ldmia r1!, {r3, r4, ip, lr} 23 subs r2, r2, #4 24 str r3, [r0, #0] 25 str r4, [r0, #0] 26 str ip, [r0, #0] 27 str lr, [r0, #0] 28 bpl 1b 29 ldmfd sp!, {r4, lr} 302: movs r2, r2, lsl #31 31 ldmcsia r1!, {r3, ip} 32 strcs r3, [r0, #0] 33 ldrne r3, [r1, #0] 34 strcs ip, [r0, #0] 35 strne r3, [r0, #0] 36 mov pc, lr 37 383: bic r1, r1, #3 39 ldr r3, [r1], #4 40 cmp ip, #2 41 blt 5f 42 bgt 6f 43 444: mov ip, r3, pull #16 45 ldr r3, [r1], #4 46 subs r2, r2, #1 47 orr ip, ip, r3, push #16 48 str ip, [r0] 49 bne 4b 50 mov pc, lr 51 525: mov ip, r3, pull #8 53 ldr r3, [r1], #4 54 subs r2, r2, #1 55 orr ip, ip, r3, push #24 56 str ip, [r0] 57 bne 5b 58 mov pc, lr 59 606: mov ip, r3, pull #24 61 ldr r3, [r1], #4 62 subs r2, r2, #1 63 orr ip, ip, r3, push #8 64 str ip, [r0] 65 bne 6b 66 mov pc, lr 67ENDPROC(__raw_writesl) 68