From 2dbb6de6e6976caa71d85d13e075f862ef7eb533 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Tue, 15 Mar 2022 14:44:15 +0800 Subject: [PATCH] add argument check for fesetround() Signed-off-by: Chen Wang --- libc/include/bits/fenv_riscv64.h | 9 ++++++++- libm/riscv64/fenv.c | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libc/include/bits/fenv_riscv64.h b/libc/include/bits/fenv_riscv64.h index 2149f6083..69232bb93 100644 --- a/libc/include/bits/fenv_riscv64.h +++ b/libc/include/bits/fenv_riscv64.h @@ -43,10 +43,17 @@ typedef unsigned int fenv_t; #define FE_INVALID 0x10 #define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW) -/* Rounding modes. */ +/* + * Rounding modes. + * Currently, we have not supported FE_TOMM (Round to Nearest, ties to Max Magnitude). + */ #define FE_TONEAREST 0x0 #define FE_TOWARDZERO 0x1 #define FE_DOWNWARD 0x2 #define FE_UPWARD 0x3 +#define FE_TOMM 0x4 + +#define FE_ROUNDMODE_MIN FE_TONEAREST +#define FE_ROUNDMODE_MAX FE_UPWARD __END_DECLS diff --git a/libm/riscv64/fenv.c b/libm/riscv64/fenv.c index a4dfe15ae..0af7a0081 100644 --- a/libm/riscv64/fenv.c +++ b/libm/riscv64/fenv.c @@ -95,6 +95,9 @@ int fegetround(void) int fesetround(int round) { + if (round < FE_ROUNDMODE_MIN || round > FE_ROUNDMODE_MAX) { + return -1; + } asm volatile ("fsrm %z0" : : "r" (round)); return 0; } -- Gitee