mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 05:04:00 +08:00
9322961205
The existing floating point emulations is only available for floating instruction that possibly issue denormalized input and underflow exceptions. These existing FPU emulations are not sufficient when IEx Trap is enabled because some floating point instructions only issue inexact exception. This patch adds the emulations of such floating point instructions. Signed-off-by: Vincent Chen <vincentc@andestech.com> Acked-by: Greentime Hu <greentime@andestech.com> Signed-off-by: Greentime Hu <greentime@andestech.com>
31 lines
642 B
C
31 lines
642 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
// Copyright (C) 2005-2019 Andes Technology Corporation
|
|
#include <linux/uaccess.h>
|
|
|
|
#include <asm/sfp-machine.h>
|
|
#include <math-emu/soft-fp.h>
|
|
#include <math-emu/double.h>
|
|
|
|
void fd2ui_z(void *ft, void *fa)
|
|
{
|
|
unsigned int r;
|
|
|
|
FP_DECL_D(A);
|
|
FP_DECL_EX;
|
|
|
|
FP_UNPACK_DP(A, fa);
|
|
|
|
if (A_c == FP_CLS_INF) {
|
|
*(unsigned int *)ft = (A_s == 0) ? 0xffffffff : 0x00000000;
|
|
__FPU_FPCSR |= FP_EX_INVALID;
|
|
} else if (A_c == FP_CLS_NAN) {
|
|
*(unsigned int *)ft = 0xffffffff;
|
|
__FPU_FPCSR |= FP_EX_INVALID;
|
|
} else {
|
|
FP_TO_INT_D(r, A, 32, 0);
|
|
__FPU_FPCSR |= FP_CUR_EXCEPTIONS;
|
|
*(unsigned int *)ft = r;
|
|
}
|
|
|
|
}
|