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#include <asm/hardware.h> 13 14ENTRY(__raw_writesl) 15 teq r2, #0 @ do we have to check for the zero len? 16 moveq pc, lr 17 ands ip, r1, #3 18 bne 2f 19 201: ldr r3, [r1], #4 21 str r3, [r0] 22 subs r2, r2, #1 23 bne 1b 24 mov pc, lr 25 262: bic r1, r1, #3 27 cmp ip, #2 28 ldr r3, [r1], #4 29 bgt 4f 30 blt 5f 31 323: mov ip, r3, lsr #16 33 ldr r3, [r1], #4 34 orr ip, ip, r3, lsl #16 35 str ip, [r0] 36 subs r2, r2, #1 37 bne 3b 38 mov pc, lr 39 404: mov ip, r3, lsr #24 41 ldr r3, [r1], #4 42 orr ip, ip, r3, lsl #8 43 str ip, [r0] 44 subs r2, r2, #1 45 bne 4b 46 mov pc, lr 47 485: mov ip, r3, lsr #8 49 ldr r3, [r1], #4 50 orr ip, ip, r3, lsl #24 51 str ip, [r0] 52 subs r2, r2, #1 53 bne 5b 54 mov pc, lr 55 56 57