Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/mips/string/ffs.S
Show All 38 Lines | #if defined(LIBC_SCCS) && !defined(lint) | ||||
ASMSTR("from: @(#)ffs.s 8.1 (Berkeley) 6/4/93") | ASMSTR("from: @(#)ffs.s 8.1 (Berkeley) 6/4/93") | ||||
ASMSTR("$NetBSD: ffs.S,v 1.2 2009/12/14 00:39:00 matt Exp $") | ASMSTR("$NetBSD: ffs.S,v 1.2 2009/12/14 00:39:00 matt Exp $") | ||||
#endif /* LIBC_SCCS and not lint */ | #endif /* LIBC_SCCS and not lint */ | ||||
#ifdef __ABICALLS__ | #ifdef __ABICALLS__ | ||||
.abicalls | .abicalls | ||||
#endif | #endif | ||||
WEAK_ALIAS(__ffssi2,ffs) | |||||
/* bit = ffs(value) */ | /* bit = ffs(value) */ | ||||
LEAF(ffs) | LEAF(ffs) | ||||
move v0, zero | move v0, zero | ||||
beq a0, zero, done | beq a0, zero, done | ||||
1: | 1: | ||||
and v1, a0, 1 # bit set? | and v1, a0, 1 # bit set? | ||||
addu v0, v0, 1 | addu v0, v0, 1 | ||||
srl a0, a0, 1 | srl a0, a0, 1 | ||||
beq v1, zero, 1b # no, continue | beq v1, zero, 1b # no, continue | ||||
done: | done: | ||||
j ra | j ra | ||||
END(ffs) | END(ffs) |