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>
This commit is contained in:
Dino Li 2020-01-07 10:24:54 +08:00 committed by Commit Bot
parent 5e2d7361a6
commit 186f3d2dcb
3 changed files with 33 additions and 1 deletions

View File

@ -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

View File

@ -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 */

19
core/riscv-rv32i/math.c Normal file
View File

@ -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