/* 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 |