summaryrefslogtreecommitdiff
path: root/firmware/target/arm/bits-armv6.S
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2010-06-30 02:02:46 +0000
committerMichael Sevakis <jethead71@rockbox.org>2010-06-30 02:02:46 +0000
commite286b0bbc04a34c181978efce19c6d0814e228c0 (patch)
tree841288761e20dc9a7a25e5ba83306adf52547d65 /firmware/target/arm/bits-armv6.S
parentf4a00174b50c209f2a23b7a73fe7cb544ef59d02 (diff)
downloadrockbox-e286b0bbc04a34c181978efce19c6d0814e228c0.tar.gz
rockbox-e286b0bbc04a34c181978efce19c6d0814e228c0.zip
Remove atomic register bit manipulation functions from i.MX and s3c target code and introduce generic functions for ARM (bitmod32, bitset32, and bitclr32). Multiprocessor support is possible but just not implemented at the moment, only interrupt lockout.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27188 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/bits-armv6.S')
-rw-r--r--firmware/target/arm/bits-armv6.S74
1 files changed, 74 insertions, 0 deletions
diff --git a/firmware/target/arm/bits-armv6.S b/firmware/target/arm/bits-armv6.S
new file mode 100644
index 0000000000..0a15805f87
--- /dev/null
+++ b/firmware/target/arm/bits-armv6.S
@@ -0,0 +1,74 @@
1/***************************************************************************
2* __________ __ ___.
3* Open \______ \ ____ ____ | | _\_ |__ _______ ___
4* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7* \/ \/ \/ \/ \/
8* $Id$
9*
10* Copyright (C) 2010 by Michael Sevakis
11*
12* This program is free software; you can redistribute it and/or
13* modify it under the terms of the GNU General Public License
14* as published by the Free Software Foundation; either version 2
15* of the License, or (at your option) any later version.
16*
17* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18* KIND, either express or implied.
19*
20****************************************************************************/
21
22/***************************************************************************
23 * void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask)
24 */
25 .section .text, "ax", %progbits
26 .align 2
27 .global bitmod32
28 .type bitmod32, %function
29bitmod32:
30 mrs r12, cpsr
31 cpsid if
32 ldr r3, [r0]
33 and r1, r1, r2 @ Only allow mod of bits in 'mask'
34 bic r3, r3, r2 @ Clear mask bits
35 orr r3, r3, r1 @ Set according to 'bits'
36 str r3, [r0]
37 msr cpsr_c, r12
38 bx lr
39 .size bitmod32, .-bitmod32
40
41/***************************************************************************
42 * void bitset32(volatile uint32_t *addr, uint32_t mask)
43 */
44 .section .text, "ax", %progbits
45 .align 2
46 .global bitset32
47 .type bitset32, %function
48bitset32:
49 mrs r12, cpsr
50 cpsid if
51 ldr r2, [r0]
52 orr r2, r2, r1
53 str r2, [r0]
54 msr cpsr_c, r12
55 bx lr
56 .size bitset32, .-bitset32
57
58
59/***************************************************************************
60 * void bitclr32(volatile uint32_t *addr, uint32_t mask)
61 */
62 .section .text, "ax", %progbits
63 .align 2
64 .global bitclr32
65 .type bitclr32, %function
66bitclr32:
67 mrs r12, cpsr
68 cpsid if
69 ldr r2, [r0]
70 bic r2, r2, r1
71 str r2, [r0]
72 msr cpsr_c, r12
73 bx lr
74 .size bitclr32, .-bitclr32