mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
target/riscv: rvv-1.0: widening floating-point/integer type-convert
Add the following instructions: * vfwcvt.rtz.xu.f.v * vfwcvt.rtz.x.f.v Also adjust GEN_OPFV_WIDEN_TRANS() to accept multiple floating-point rounding modes. Signed-off-by: Frank Chang <frank.chang@sifive.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-Id: <20211210075704.23951-63-frank.chang@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
900da87ab9
commit
3ce4c09df7
4 changed files with 64 additions and 15 deletions
|
@ -3773,6 +3773,7 @@ GEN_VEXT_V_ENV(vfcvt_f_x_v_d, 8, 8)
|
|||
|
||||
/* Widening Floating-Point/Integer Type-Convert Instructions */
|
||||
/* (TD, T2, TX2) */
|
||||
#define WOP_UU_B uint16_t, uint8_t, uint8_t
|
||||
#define WOP_UU_H uint32_t, uint16_t, uint16_t
|
||||
#define WOP_UU_W uint64_t, uint32_t, uint32_t
|
||||
/* vfwcvt.xu.f.v vd, vs2, vm # Convert float to double-width unsigned integer.*/
|
||||
|
@ -3788,19 +3789,23 @@ GEN_VEXT_V_ENV(vfwcvt_x_f_v_h, 2, 4)
|
|||
GEN_VEXT_V_ENV(vfwcvt_x_f_v_w, 4, 8)
|
||||
|
||||
/* vfwcvt.f.xu.v vd, vs2, vm # Convert unsigned integer to double-width float */
|
||||
RVVCALL(OPFVV1, vfwcvt_f_xu_v_b, WOP_UU_B, H2, H1, uint8_to_float16)
|
||||
RVVCALL(OPFVV1, vfwcvt_f_xu_v_h, WOP_UU_H, H4, H2, uint16_to_float32)
|
||||
RVVCALL(OPFVV1, vfwcvt_f_xu_v_w, WOP_UU_W, H8, H4, uint32_to_float64)
|
||||
GEN_VEXT_V_ENV(vfwcvt_f_xu_v_b, 1, 2)
|
||||
GEN_VEXT_V_ENV(vfwcvt_f_xu_v_h, 2, 4)
|
||||
GEN_VEXT_V_ENV(vfwcvt_f_xu_v_w, 4, 8)
|
||||
|
||||
/* vfwcvt.f.x.v vd, vs2, vm # Convert integer to double-width float. */
|
||||
RVVCALL(OPFVV1, vfwcvt_f_x_v_b, WOP_UU_B, H2, H1, int8_to_float16)
|
||||
RVVCALL(OPFVV1, vfwcvt_f_x_v_h, WOP_UU_H, H4, H2, int16_to_float32)
|
||||
RVVCALL(OPFVV1, vfwcvt_f_x_v_w, WOP_UU_W, H8, H4, int32_to_float64)
|
||||
GEN_VEXT_V_ENV(vfwcvt_f_x_v_b, 1, 2)
|
||||
GEN_VEXT_V_ENV(vfwcvt_f_x_v_h, 2, 4)
|
||||
GEN_VEXT_V_ENV(vfwcvt_f_x_v_w, 4, 8)
|
||||
|
||||
/*
|
||||
* vfwcvt.f.f.v vd, vs2, vm #
|
||||
* vfwcvt.f.f.v vd, vs2, vm
|
||||
* Convert single-width float to double-width float.
|
||||
*/
|
||||
static uint32_t vfwcvtffv16(uint16_t a, float_status *s)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue