diff options
author | Dino Li <Dino.Li@ite.com.tw> | 2020-01-07 10:24:54 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-01-22 07:32:12 +0000 |
commit | 186f3d2dcb93feecec87db66d5cefb768804df19 (patch) | |
tree | 74b9d094b322003b95a5b7b6544e92d39c7531a2 /core | |
parent | 5e2d7361a65ef43cb0465b1d7e17a1aadc8b8284 (diff) | |
download | chrome-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>
Diffstat (limited to 'core')
-rw-r--r-- | core/riscv-rv32i/build.mk | 2 | ||||
-rw-r--r-- | core/riscv-rv32i/include/math.h | 13 | ||||
-rw-r--r-- | core/riscv-rv32i/math.c | 19 |
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 |