ffs.S (172615) | ffs.S (248367) |
---|---|
1/* $NetBSD: ffs.S,v 1.3 2003/04/05 23:27:15 bjh21 Exp $ */ 2/*- 3 * Copyright (c) 2001 Christopher Gilbert 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 15 unchanged lines hidden (view full) --- 24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31#include <machine/asm.h> | 1/* $NetBSD: ffs.S,v 1.3 2003/04/05 23:27:15 bjh21 Exp $ */ 2/*- 3 * Copyright (c) 2001 Christopher Gilbert 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 15 unchanged lines hidden (view full) --- 24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31#include <machine/asm.h> |
32__FBSDID("$FreeBSD: head/sys/libkern/arm/ffs.S 172615 2007-10-13 12:05:36Z cognet $"); | 32__FBSDID("$FreeBSD: head/sys/libkern/arm/ffs.S 248367 2013-03-16 04:08:01Z andrew $"); |
33 34 35/* 36 * ffs - find first set bit, this algorithm isolates the first set 37 * bit, then multiplies the number by 0x0450fbaf which leaves the top 38 * 6 bits as an index into the table. This algorithm should be a win 39 * over the checking each bit in turn as per the C compiled version. 40 * --- 36 unchanged lines hidden (view full) --- 77 .byte 10, 0, 0, 25, 0, 0, 21, 27 /* 40-47 */ 78 .byte 31, 0, 0, 0, 0, 24, 0, 20 /* 48-55 */ 79 .byte 30, 0, 23, 19, 29, 18, 17, 0 /* 56-63 */ 80#else 81 clzne r0, r0 82 rsbne r0, r0, #32 83 RET 84#endif | 33 34 35/* 36 * ffs - find first set bit, this algorithm isolates the first set 37 * bit, then multiplies the number by 0x0450fbaf which leaves the top 38 * 6 bits as an index into the table. This algorithm should be a win 39 * over the checking each bit in turn as per the C compiled version. 40 * --- 36 unchanged lines hidden (view full) --- 77 .byte 10, 0, 0, 25, 0, 0, 21, 27 /* 40-47 */ 78 .byte 31, 0, 0, 0, 0, 24, 0, 20 /* 48-55 */ 79 .byte 30, 0, 23, 19, 29, 18, 17, 0 /* 56-63 */ 80#else 81 clzne r0, r0 82 rsbne r0, r0, #32 83 RET 84#endif |
85END(ffs) 86 |
|