diff options
author | Kito Cheng <kito@andestech.com> | 2017-07-27 11:44:22 +0300 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2017-08-17 01:00:58 +0300 |
commit | 363dbb9e44d0101f29ec34cadd001893daab3fc6 (patch) | |
tree | 8c39ab14c5b090653f88bd4624b593ef4819e059 /newlib/libc/machine/riscv/ffs.c | |
parent | 7e69f983a46dfb9ae9c09e30fc20ad6a91f0ddc4 (diff) |
Add RISC-V port for newlib
Contributor list:
- Andrew Waterman <andrew@sifive.com>
- Palmer Dabbelt <palmer@dabbelt.com>
- Kito Cheng <kito.cheng@gmail.com>
- Scott Beamer <sbeamer@eecs.berkeley.edu>
Diffstat (limited to 'newlib/libc/machine/riscv/ffs.c')
-rw-r--r-- | newlib/libc/machine/riscv/ffs.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/newlib/libc/machine/riscv/ffs.c b/newlib/libc/machine/riscv/ffs.c new file mode 100644 index 000000000..652207722 --- /dev/null +++ b/newlib/libc/machine/riscv/ffs.c @@ -0,0 +1,32 @@ +/* Copyright (c) 2017 SiFive Inc. All rights reserved. + + This copyrighted material is made available to anyone wishing to use, + modify, copy, or redistribute it subject to the terms and conditions + of the BSD License. This program is distributed in the hope that + it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + including the implied warranties of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. A copy of this license is available at + http://www.opensource.org/licenses. +*/ +#include <strings.h> + +int +ffs (int word) +{ +#if __riscv_xlen == 32 + return (__builtin_ffs (word)); +#else + int i; + + if (!word) + return 0; + + i = 0; + for (;;) + { + if (((1 << i++) & word) != 0) + return i; + } + return 0; +#endif +} |