diff options
author | Vincent Chen <vincentc@andestech.com> | 2018-11-22 04:14:35 +0100 |
---|---|---|
committer | Greentime Hu <greentime@andestech.com> | 2018-11-22 11:13:21 +0100 |
commit | 1ac832509f2ea1b566f0c06f98f308f58b03d098 (patch) | |
tree | 080dcfd5832558823072d3fd4de51df32d96ef51 /arch/nds32/math-emu/fsubd.c | |
parent | nds32: nds32 FPU port (diff) | |
download | linux-1ac832509f2ea1b566f0c06f98f308f58b03d098.tar.xz linux-1ac832509f2ea1b566f0c06f98f308f58b03d098.zip |
nds32: Support FP emulation
The Andes FPU coprocessor does not support denormalized number handling.
According to the specification, FPU generates a denorm input exception
that requires the kernel to deal with this instrution operation when it
encounters denormalized operands. Hence an nds32 FPU ISA emulator in the
kernel is required to meet requirement.
Signed-off-by: Vincent Chen <vincentc@andestech.com>
Signed-off-by: Nickhu <nickhu@andestech.com>
Acked-by: Greentime Hu <greentime@andestech.com>
Signed-off-by: Greentime Hu <greentime@andestech.com>
Diffstat (limited to 'arch/nds32/math-emu/fsubd.c')
-rw-r--r-- | arch/nds32/math-emu/fsubd.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/nds32/math-emu/fsubd.c b/arch/nds32/math-emu/fsubd.c new file mode 100644 index 000000000000..81b6a0d02a1f --- /dev/null +++ b/arch/nds32/math-emu/fsubd.c @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2005-2018 Andes Technology Corporation +#include <linux/uaccess.h> + +#include <asm/sfp-machine.h> +#include <math-emu/soft-fp.h> +#include <math-emu/double.h> +void fsubd(void *ft, void *fa, void *fb) +{ + + FP_DECL_D(A); + FP_DECL_D(B); + FP_DECL_D(R); + FP_DECL_EX; + + FP_UNPACK_DP(A, fa); + FP_UNPACK_DP(B, fb); + + if (B_c != FP_CLS_NAN) + B_s ^= 1; + + FP_ADD_D(R, A, B); + + FP_PACK_DP(ft, R); + + __FPU_FPCSR |= FP_CUR_EXCEPTIONS; +} |