| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* | |
| * Copyright (C) 2023 Sean Anderson <sean.anderson@seco.com> | |
| * | |
| * ARM bitops to call when using THUMB1, which doesn't have these instructions. | |
| */ | |
| #include <linux/linkage.h> | |
| #include <asm/assembler.h> | |
| .pushsection .text.__fls | |
| ENTRY(__fls) | |
| clz r0, r0 | |
| rsb r0, r0, #31 | |
| ret lr | |
| ENDPROC(__fls) | |
| .popsection | |
| .pushsection .text.__ffs | |
| ENTRY(__ffs) | |
| rsb r3, r0, #0 | |
| and r0, r0, r3 | |
| clz r0, r0 | |
| rsb r0, r0, #31 | |
| ret lr | |
| ENDPROC(__ffs) | |
| .popsection | |
| .pushsection .text.fls | |
| ENTRY(fls) | |
| cmp r0, #0 | |
| clzne r0, r0 | |
| rsbne r0, r0, #32 | |
| ret lr | |
| ENDPROC(fls) | |
| .popsection | |
| .pushsection .text.ffs | |
| ENTRY(ffs) | |
| rsb r3, r0, #0 | |
| and r0, r0, r3 | |
| clz r0, r0 | |
| rsb r0, r0, #32 | |
| ret lr | |
| ENDPROC(ffs) | |
| .popsection |