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.cheng@sifive.com>2020-11-18 06:35:43 +0300
committerCorinna Vinschen <corinna@vinschen.de>2020-11-18 11:35:28 +0300
commit57635f85819469d056057748574b10c217a11788 (patch)
tree8cf87b335d1d03c08a607859d18cdef1600f239d /newlib/libm/machine/riscv/s_lround.c
parent5cf5a2e4c0c736d367afcae60c82203e94280900 (diff)
RISC-V: Add machine-specific implementation for lrint[f], lround[f], llrint[f] and llround[f].
Diffstat (limited to 'newlib/libm/machine/riscv/s_lround.c')
-rw-r--r--newlib/libm/machine/riscv/s_lround.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/newlib/libm/machine/riscv/s_lround.c b/newlib/libm/machine/riscv/s_lround.c
new file mode 100644
index 000000000..5be778834
--- /dev/null
+++ b/newlib/libm/machine/riscv/s_lround.c
@@ -0,0 +1,56 @@
+/*
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright (c) 2020 Kito Cheng
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <math.h>
+
+#if defined(__riscv_flen) && __riscv_flen >= 64
+long int
+lround (double x)
+{
+ long result;
+ asm (
+#if __riscv_xlen == 32
+ "fcvt.w.d"
+#elif __riscv_xlen == 64
+ "fcvt.l.d"
+#else
+#error Unsupported XLEN
+#endif
+ "\t%0, %1, rmm" : "=r"(result) : "f"(x));
+ return result;
+}
+#else
+#include "../../common/s_lround.c"
+#endif