@ -233,16 +233,19 @@ static inline bool is_overlapped_widen(const int astart, int asize,
# define VI_LOOP_END_BASE \
}
# define VECTOR_END \
P . VU . vstart - > write ( 0 )
# define VI_LOOP_END \
VI_LOOP_END_BASE \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_LOOP_REDUCTION_END(x) \
} \
if ( vl > 0 ) { \
vd_0_des = vd_0_res ; \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_LOOP_CARRY_BASE \
VI_GENERAL_LOOP_BASE \
@ -253,7 +256,7 @@ static inline bool is_overlapped_widen(const int astart, int asize,
# define VI_LOOP_CARRY_END \
P . VU . set_mask_elt ( insn . rd ( ) , i , res ) ; \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_LOOP_WITH_CARRY_BASE \
VI_GENERAL_LOOP_BASE \
const uint128_t op_mask = ( UINT64_MAX > > ( 64 - sew ) ) ; \
@ -274,7 +277,7 @@ static inline bool is_overlapped_widen(const int astart, int asize,
# define VI_LOOP_CMP_END \
P . VU . set_mask_elt ( insn . rd ( ) , i , res ) ; \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_LOOP_MASK(op) \
require ( P . VU . vsew < = e64 ) ; \
@ -285,7 +288,7 @@ static inline bool is_overlapped_widen(const int astart, int asize,
bool vs1 = P . VU . mask_elt ( insn . rs1 ( ) , i ) ; \
P . VU . set_mask_elt ( insn . rd ( ) , i , ( op ) ) ; \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_LOOP_NSHIFT_BASE \
VI_GENERAL_LOOP_BASE ; \
@ -1199,7 +1202,7 @@ VI_VX_ULOOP({ \
P . VU . elt < elt_width # # _t > ( vd + fn * emul , vreg_inx , true ) = val ; \
} \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_LDST_GET_INDEX(elt_width) \
reg_t index ; \
@ -1252,7 +1255,7 @@ VI_VX_ULOOP({ \
} \
} \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_ST(stride, offset, elt_width, is_mask_ldst) \
const reg_t nf = insn . v_nf ( ) + 1 ; \
@ -1270,7 +1273,7 @@ VI_VX_ULOOP({ \
baseAddr + ( stride ) + ( offset ) * sizeof ( elt_width # # _t ) , val ) ; \
} \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_ST_INDEX(elt_width, is_seg) \
const reg_t nf = insn . v_nf ( ) + 1 ; \
@ -1306,7 +1309,7 @@ VI_VX_ULOOP({ \
} \
} \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_LDST_FF(elt_width) \
const reg_t nf = insn . v_nf ( ) + 1 ; \
@ -1355,7 +1358,7 @@ VI_VX_ULOOP({ \
auto val = MMU . load < elt_width # # _t > ( baseAddr + i * sizeof ( elt_width # # _t ) ) ; \
P . VU . elt < elt_width # # _t > ( vd , i , true ) = val ; \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_ST_WHOLE \
require_vector_novtype ( true ) ; \
@ -1369,7 +1372,7 @@ VI_VX_ULOOP({ \
auto val = P . VU . elt < uint8_t > ( vs3 , i ) ; \
MMU . store < uint8_t > ( baseAddr + i , val ) ; \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_EXT_CHECK(div) \
require ( insn . rd ( ) ! = insn . rs2 ( ) ) ; \
@ -1478,11 +1481,11 @@ VI_VX_ULOOP({ \
# define VI_VFP_LOOP_END \
} \
P . VU . vstart - > write ( 0 ) ; \
VECTOR_END ; \
# define VI_VFP_LOOP_REDUCTION_END(x) \
} \
P . VU . vstart - > write ( 0 ) ; \
VECTOR_END ; \
if ( vl > 0 ) { \
if ( is_propagate & & ! is_active ) { \
switch ( x ) { \
@ -1544,7 +1547,7 @@ VI_VX_ULOOP({ \
break ; \
} ; \
} \
P . VU . vstart - > write ( 0 ) ;
VECTOR_END ;
# define VI_VFP_VV_LOOP(BODY16, BODY32, BODY64) \
VI_CHECK_SSS ( true ) ; \