summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDino Li <Dino.Li@ite.com.tw>2020-01-07 10:24:54 +0800
committerCommit Bot <commit-bot@chromium.org>2020-01-22 07:32:12 +0000
commit186f3d2dcb93feecec87db66d5cefb768804df19 (patch)
tree74b9d094b322003b95a5b7b6544e92d39c7531a2
parent5e2d7361a65ef43cb0465b1d7e17a1aadc8b8284 (diff)
downloadchrome-ec-186f3d2dcb93feecec87db66d5cefb768804df19.tar.gz
riscv-rv32i: Add sqrtf function
The int_sqrtf() requires this function if we enable FPU. BRANCH=none BUG=none TEST=manual testing on console command: sqrtf(1.23) = 1.10 sqrtf(0.45) = 0.67 sqrtf(0) = 0 Change-Id: I354453674559ff2e1b956c9dba47baa493332871 Signed-off-by: Dino Li <dino.li@ite.com.tw> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1982298 Reviewed-by: Jett Rink <jettrink@chromium.org> Commit-Queue: Dino Li <Dino.Li@ite.com.tw> Tested-by: Dino Li <Dino.Li@ite.com.tw>
-rw-r--r--core/riscv-rv32i/build.mk2
-rw-r--r--core/riscv-rv32i/include/math.h13
-rw-r--r--core/riscv-rv32i/math.c19
3 files changed, 33 insertions, 1 deletions
diff --git a/core/riscv-rv32i/build.mk b/core/riscv-rv32i/build.mk
index 5515eb79b0..c315148dcb 100644
--- a/core/riscv-rv32i/build.mk
+++ b/core/riscv-rv32i/build.mk
@@ -14,4 +14,4 @@ $(call set-option,CROSS_COMPILE,$(CROSS_COMPILE_riscv),\
CFLAGS_CPU+=-march=rv32imafc -mabi=ilp32f -Os
LDFLAGS_EXTRA+=-mrelax
-core-y=cpu.o init.o panic.o task.o switch.o __builtin.o
+core-y=cpu.o init.o panic.o task.o switch.o __builtin.o math.o
diff --git a/core/riscv-rv32i/include/math.h b/core/riscv-rv32i/include/math.h
new file mode 100644
index 0000000000..f17144762a
--- /dev/null
+++ b/core/riscv-rv32i/include/math.h
@@ -0,0 +1,13 @@
+/* Copyright 2020 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Math utility functions for RISC-V */
+
+#ifndef __CROS_EC_MATH_H
+#define __CROS_EC_MATH_H
+
+float sqrtf(float x);
+
+#endif /* __CROS_EC_MATH_H */
diff --git a/core/riscv-rv32i/math.c b/core/riscv-rv32i/math.c
new file mode 100644
index 0000000000..591a67eb8f
--- /dev/null
+++ b/core/riscv-rv32i/math.c
@@ -0,0 +1,19 @@
+/* Copyright 2020 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "common.h"
+
+#ifdef CONFIG_FPU
+/* Single precision floating point square root. */
+float sqrtf(float x)
+{
+ asm volatile (
+ "fsqrt.s %0, %1"
+ : "=f" (x)
+ : "f" (x));
+
+ return x;
+}
+#endif