blob: 89ef7be61421918f8c6cc74769ba7c22ca2e3382 [file] [log] [blame]
Thomas Gleixnerd2912cb2019-06-04 10:11:33 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002/*
3 * linux/arch/arm/lib/io-writesl.S
4 *
5 * Copyright (C) 1995-2000 Russell King
Linus Torvalds1da177e2005-04-16 15:20:36 -07006 */
7#include <linux/linkage.h>
8#include <asm/assembler.h>
9
10ENTRY(__raw_writesl)
11 teq r2, #0 @ do we have to check for the zero len?
Russell King6ebbf2c2014-06-30 16:29:12 +010012 reteq lr
Linus Torvalds1da177e2005-04-16 15:20:36 -070013 ands ip, r1, #3
14 bne 3f
15
16 subs r2, r2, #4
17 bmi 2f
18 stmfd sp!, {r4, lr}
191: ldmia r1!, {r3, r4, ip, lr}
20 subs r2, r2, #4
21 str r3, [r0, #0]
22 str r4, [r0, #0]
23 str ip, [r0, #0]
24 str lr, [r0, #0]
25 bpl 1b
26 ldmfd sp!, {r4, lr}
272: movs r2, r2, lsl #31
Stefan Agnere44fc382019-02-18 00:57:38 +010028 ldmiacs r1!, {r3, ip}
Linus Torvalds1da177e2005-04-16 15:20:36 -070029 strcs r3, [r0, #0]
30 ldrne r3, [r1, #0]
31 strcs ip, [r0, #0]
32 strne r3, [r0, #0]
Russell King6ebbf2c2014-06-30 16:29:12 +010033 ret lr
Linus Torvalds1da177e2005-04-16 15:20:36 -070034
353: bic r1, r1, #3
36 ldr r3, [r1], #4
37 cmp ip, #2
38 blt 5f
39 bgt 6f
40
Victor Kamenskyd98b90e2014-02-25 08:41:09 +0100414: mov ip, r3, lspull #16
Linus Torvalds1da177e2005-04-16 15:20:36 -070042 ldr r3, [r1], #4
43 subs r2, r2, #1
Victor Kamenskyd98b90e2014-02-25 08:41:09 +010044 orr ip, ip, r3, lspush #16
Linus Torvalds1da177e2005-04-16 15:20:36 -070045 str ip, [r0]
46 bne 4b
Russell King6ebbf2c2014-06-30 16:29:12 +010047 ret lr
Linus Torvalds1da177e2005-04-16 15:20:36 -070048
Victor Kamenskyd98b90e2014-02-25 08:41:09 +0100495: mov ip, r3, lspull #8
Linus Torvalds1da177e2005-04-16 15:20:36 -070050 ldr r3, [r1], #4
51 subs r2, r2, #1
Victor Kamenskyd98b90e2014-02-25 08:41:09 +010052 orr ip, ip, r3, lspush #24
Linus Torvalds1da177e2005-04-16 15:20:36 -070053 str ip, [r0]
54 bne 5b
Russell King6ebbf2c2014-06-30 16:29:12 +010055 ret lr
Linus Torvalds1da177e2005-04-16 15:20:36 -070056
Victor Kamenskyd98b90e2014-02-25 08:41:09 +0100576: mov ip, r3, lspull #24
Linus Torvalds1da177e2005-04-16 15:20:36 -070058 ldr r3, [r1], #4
59 subs r2, r2, #1
Victor Kamenskyd98b90e2014-02-25 08:41:09 +010060 orr ip, ip, r3, lspush #8
Linus Torvalds1da177e2005-04-16 15:20:36 -070061 str ip, [r0]
62 bne 6b
Russell King6ebbf2c2014-06-30 16:29:12 +010063 ret lr
Catalin Marinas93ed3972008-08-28 11:22:32 +010064ENDPROC(__raw_writesl)