Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKito Cheng <kito@andestech.com>2017-07-27 11:44:22 +0300
committerJeff Johnston <jjohnstn@redhat.com>2017-08-17 01:00:58 +0300
commit363dbb9e44d0101f29ec34cadd001893daab3fc6 (patch)
tree8c39ab14c5b090653f88bd4624b593ef4819e059 /newlib/libc/machine/riscv/ffs.c
parent7e69f983a46dfb9ae9c09e30fc20ad6a91f0ddc4 (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.c32
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
+}