summaryrefslogtreecommitdiff
path: root/firmware/target/arm/bits-armv6.S
diff options
context:
space:
mode:
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