mirror of https://github.com/xemu-project/xemu.git
target/riscv: rvv-1.0: Add Zve64f support for vmulh variant insns
All Zve* extensions support all vector integer instructions, except that the vmulh integer multiply variants that return the high word of the product (vmulh.vv, vmulh.vx, vmulhu.vv, vmulhu.vx, vmulhsu.vv, vmulhsu.vx) are not included for EEW=64 in Zve64*. Signed-off-by: Frank Chang <frank.chang@sifive.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-id: 20220118014522.13613-5-frank.chang@sifive.com Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
494104093f
commit
aaae69942f
|
@ -1908,14 +1908,41 @@ GEN_OPIVX_TRANS(vmaxu_vx, opivx_check)
|
|||
GEN_OPIVX_TRANS(vmax_vx, opivx_check)
|
||||
|
||||
/* Vector Single-Width Integer Multiply Instructions */
|
||||
|
||||
static bool vmulh_vv_check(DisasContext *s, arg_rmrr *a)
|
||||
{
|
||||
/*
|
||||
* All Zve* extensions support all vector integer instructions,
|
||||
* except that the vmulh integer multiply variants
|
||||
* that return the high word of the product
|
||||
* (vmulh.vv, vmulh.vx, vmulhu.vv, vmulhu.vx, vmulhsu.vv, vmulhsu.vx)
|
||||
* are not included for EEW=64 in Zve64*. (Section 18.2)
|
||||
*/
|
||||
return opivv_check(s, a) &&
|
||||
(!has_ext(s, RVV) && s->ext_zve64f ? s->sew != MO_64 : true);
|
||||
}
|
||||
|
||||
static bool vmulh_vx_check(DisasContext *s, arg_rmrr *a)
|
||||
{
|
||||
/*
|
||||
* All Zve* extensions support all vector integer instructions,
|
||||
* except that the vmulh integer multiply variants
|
||||
* that return the high word of the product
|
||||
* (vmulh.vv, vmulh.vx, vmulhu.vv, vmulhu.vx, vmulhsu.vv, vmulhsu.vx)
|
||||
* are not included for EEW=64 in Zve64*. (Section 18.2)
|
||||
*/
|
||||
return opivx_check(s, a) &&
|
||||
(!has_ext(s, RVV) && s->ext_zve64f ? s->sew != MO_64 : true);
|
||||
}
|
||||
|
||||
GEN_OPIVV_GVEC_TRANS(vmul_vv, mul)
|
||||
GEN_OPIVV_TRANS(vmulh_vv, opivv_check)
|
||||
GEN_OPIVV_TRANS(vmulhu_vv, opivv_check)
|
||||
GEN_OPIVV_TRANS(vmulhsu_vv, opivv_check)
|
||||
GEN_OPIVV_TRANS(vmulh_vv, vmulh_vv_check)
|
||||
GEN_OPIVV_TRANS(vmulhu_vv, vmulh_vv_check)
|
||||
GEN_OPIVV_TRANS(vmulhsu_vv, vmulh_vv_check)
|
||||
GEN_OPIVX_GVEC_TRANS(vmul_vx, muls)
|
||||
GEN_OPIVX_TRANS(vmulh_vx, opivx_check)
|
||||
GEN_OPIVX_TRANS(vmulhu_vx, opivx_check)
|
||||
GEN_OPIVX_TRANS(vmulhsu_vx, opivx_check)
|
||||
GEN_OPIVX_TRANS(vmulh_vx, vmulh_vx_check)
|
||||
GEN_OPIVX_TRANS(vmulhu_vx, vmulh_vx_check)
|
||||
GEN_OPIVX_TRANS(vmulhsu_vx, vmulh_vx_check)
|
||||
|
||||
/* Vector Integer Divide Instructions */
|
||||
GEN_OPIVV_TRANS(vdivu_vv, opivv_check)
|
||||
|
|
Loading…
Reference in New Issue