diff --git a/riscv/v_ext_macros.h b/riscv/v_ext_macros.h index d6dfe7f1..7f5256c2 100644 --- a/riscv/v_ext_macros.h +++ b/riscv/v_ext_macros.h @@ -1790,8 +1790,15 @@ VI_VX_ULOOP({ \ }; \ VI_VFP_LOOP_CMP_END \ +#define VI_CHECK_VFP_WIDE \ + if (P.VU.vsew == e16) \ + require(p->get_isa().get_zvf()); \ + else if (P.VU.vsew == e32) \ + require(p->get_isa().get_zvd()); \ + #define VI_VFP_VF_LOOP_WIDE(BODY16, BODY32) \ VI_CHECK_DSS(false); \ + VI_CHECK_VFP_WIDE \ VI_VFP_LOOP_BASE \ switch (P.VU.vsew) { \ case e16: { \ @@ -1841,6 +1848,7 @@ VI_VX_ULOOP({ \ #define VI_VFP_VV_LOOP_WIDE(BODY16, BODY32) \ VI_CHECK_DSS(true); \ + VI_CHECK_VFP_WIDE \ VI_VFP_LOOP_BASE \ switch (P.VU.vsew) { \ case e16: { \ @@ -1890,6 +1898,7 @@ VI_VX_ULOOP({ \ #define VI_VFP_WF_LOOP_WIDE(BODY16, BODY32) \ VI_CHECK_DDS(false); \ + VI_CHECK_VFP_WIDE \ VI_VFP_LOOP_BASE \ switch (P.VU.vsew) { \ case e16: { \ @@ -1918,6 +1927,7 @@ VI_VX_ULOOP({ \ #define VI_VFP_WV_LOOP_WIDE(BODY16, BODY32) \ VI_CHECK_DDS(true); \ + VI_CHECK_VFP_WIDE \ VI_VFP_LOOP_BASE \ switch (P.VU.vsew) { \ case e16: { \