diff options
| -rw-r--r-- | arch/avr32/kernel/avr32_ksyms.c | 1 | ||||
| -rw-r--r-- | arch/avr32/lib/findbit.S | 30 |
2 files changed, 31 insertions, 0 deletions
diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c index 84a7d44edc67..11e310c567a9 100644 --- a/arch/avr32/kernel/avr32_ksyms.c +++ b/arch/avr32/kernel/avr32_ksyms.c | |||
| @@ -58,6 +58,7 @@ EXPORT_SYMBOL(find_first_zero_bit); | |||
| 58 | EXPORT_SYMBOL(find_next_zero_bit); | 58 | EXPORT_SYMBOL(find_next_zero_bit); |
| 59 | EXPORT_SYMBOL(find_first_bit); | 59 | EXPORT_SYMBOL(find_first_bit); |
| 60 | EXPORT_SYMBOL(find_next_bit); | 60 | EXPORT_SYMBOL(find_next_bit); |
| 61 | EXPORT_SYMBOL(generic_find_next_le_bit); | ||
| 61 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); | 62 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); |
| 62 | 63 | ||
| 63 | /* I/O primitives (lib/io-*.S) */ | 64 | /* I/O primitives (lib/io-*.S) */ |
diff --git a/arch/avr32/lib/findbit.S b/arch/avr32/lib/findbit.S index c6b91dee857c..997b33b2288a 100644 --- a/arch/avr32/lib/findbit.S +++ b/arch/avr32/lib/findbit.S | |||
| @@ -123,6 +123,36 @@ ENTRY(find_next_bit) | |||
| 123 | brgt 1b | 123 | brgt 1b |
| 124 | retal r11 | 124 | retal r11 |
| 125 | 125 | ||
| 126 | ENTRY(generic_find_next_le_bit) | ||
| 127 | lsr r8, r10, 5 | ||
| 128 | sub r9, r11, r10 | ||
| 129 | retle r11 | ||
| 130 | |||
| 131 | lsl r8, 2 | ||
| 132 | add r12, r8 | ||
| 133 | andl r10, 31, COH | ||
| 134 | breq 1f | ||
| 135 | |||
| 136 | /* offset is not word-aligned. Handle the first (32 - r10) bits */ | ||
| 137 | ldswp.w r8, r12[0] | ||
| 138 | sub r12, -4 | ||
| 139 | lsr r8, r8, r10 | ||
| 140 | brne .L_found | ||
| 141 | |||
| 142 | /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */ | ||
| 143 | add r9, r10 | ||
| 144 | sub r9, 32 | ||
| 145 | retle r11 | ||
| 146 | |||
| 147 | /* Main loop. offset must be word-aligned */ | ||
| 148 | 1: ldswp.w r8, r12[0] | ||
| 149 | cp.w r8, 0 | ||
| 150 | brne .L_found | ||
| 151 | sub r12, -4 | ||
| 152 | sub r9, 32 | ||
| 153 | brgt 1b | ||
| 154 | retal r11 | ||
| 155 | |||
| 126 | ENTRY(generic_find_next_zero_le_bit) | 156 | ENTRY(generic_find_next_zero_le_bit) |
| 127 | lsr r8, r10, 5 | 157 | lsr r8, r10, 5 |
| 128 | sub r9, r11, r10 | 158 | sub r9, r11, r10 |
