X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=blobdiff_plain;f=arch%2Favr32%2Flib%2Ffindbit.S;h=997b33b2288a6989aa3bdac94b0417967d7f6208;hp=2b4856f4bf7c697f0dbaaae2c329c5f65e00ffe7;hb=4c07ab0fe4b4eaa0fc31f640ca65da7c173f5043;hpb=dd77a4ee0f3981693d4229aa1d57cea9e526ff47 diff --git a/arch/avr32/lib/findbit.S b/arch/avr32/lib/findbit.S index 2b4856f4bf7c..997b33b2288a 100644 --- a/arch/avr32/lib/findbit.S +++ b/arch/avr32/lib/findbit.S @@ -123,7 +123,7 @@ ENTRY(find_next_bit) brgt 1b retal r11 -ENTRY(generic_find_next_zero_le_bit) +ENTRY(generic_find_next_le_bit) lsr r8, r10, 5 sub r9, r11, r10 retle r11 @@ -152,3 +152,34 @@ ENTRY(generic_find_next_zero_le_bit) sub r9, 32 brgt 1b retal r11 + +ENTRY(generic_find_next_zero_le_bit) + lsr r8, r10, 5 + sub r9, r11, r10 + retle r11 + + lsl r8, 2 + add r12, r8 + andl r10, 31, COH + breq 1f + + /* offset is not word-aligned. Handle the first (32 - r10) bits */ + ldswp.w r8, r12[0] + sub r12, -4 + com r8 + lsr r8, r8, r10 + brne .L_found + + /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */ + add r9, r10 + sub r9, 32 + retle r11 + + /* Main loop. offset must be word-aligned */ +1: ldswp.w r8, r12[0] + com r8 + brne .L_found + sub r12, -4 + sub r9, 32 + brgt 1b + retal r11