@ -769,19 +769,19 @@ static inline bool is_aligned(const unsigned val, const unsigned pos)
auto & vd = P . VU . elt < type_sew_t < x > : : type > ( rd_num , i , true ) ; \
auto vs2 = P . VU . elt < type_sew_t < x > : : type > ( rs2_num , i - offset ) ;
# define VI_NSHIFT _PARAMS(sew1, sew2) \
# define VI_NARROW _PARAMS(sew1, sew2) \
auto & vd = P . VU . elt < type_usew_t < sew1 > : : type > ( rd_num , i , true ) ; \
auto vs2_u = P . VU . elt < type_usew_t < sew2 > : : type > ( rs2_num , i ) ; \
auto vs2 = P . VU . elt < type_sew_t < sew2 > : : type > ( rs2_num , i ) ; \
auto zimm5 = ( type_usew_t < sew1 > : : type ) insn . v_zimm5 ( ) ;
# define VX_NSHIFT _PARAMS(sew1, sew2) \
# define VX_NARROW _PARAMS(sew1, sew2) \
auto & vd = P . VU . elt < type_usew_t < sew1 > : : type > ( rd_num , i , true ) ; \
auto vs2_u = P . VU . elt < type_usew_t < sew2 > : : type > ( rs2_num , i ) ; \
auto vs2 = P . VU . elt < type_sew_t < sew2 > : : type > ( rs2_num , i ) ; \
auto rs1 = ( type_sew_t < sew1 > : : type ) RS1 ;
# define VV_NSHIFT _PARAMS(sew1, sew2) \
# define VV_NARROW _PARAMS(sew1, sew2) \
auto & vd = P . VU . elt < type_usew_t < sew1 > : : type > ( rd_num , i , true ) ; \
auto vs2_u = P . VU . elt < type_usew_t < sew2 > : : type > ( rs2_num , i ) ; \
auto vs2 = P . VU . elt < type_sew_t < sew2 > : : type > ( rs2_num , i ) ; \
@ -1114,39 +1114,46 @@ static inline bool is_aligned(const unsigned val, const unsigned pos)
// narrow operation loop
# define VI_VV_LOOP_NARROW(BODY) \
VI_NARROW_CHECK_COMMON ; \
VI_LOOP_BASE \
if ( sew = = e8 ) { \
VI_NARROW_SHIFT ( e8 , e16 ) \
BODY ; \
} else if ( sew = = e16 ) { \
VI_NARROW_SHIFT ( e16 , e32 ) \
BODY ; \
} else if ( sew = = e32 ) { \
VI_NARROW_SHIFT ( e32 , e64 ) \
BODY ; \
} \
VI_LOOP_END
# define VI_NARROW_SHIFT(sew1, sew2) \
type_usew_t < sew1 > : : type & vd = P . VU . elt < type_usew_t < sew1 > : : type > ( rd_num , i , true ) ; \
type_usew_t < sew2 > : : type vs2_u = P . VU . elt < type_usew_t < sew2 > : : type > ( rs2_num , i ) ; \
type_usew_t < sew1 > : : type zimm5 = ( type_usew_t < sew1 > : : type ) insn . v_zimm5 ( ) ; \
type_sew_t < sew2 > : : type vs2 = P . VU . elt < type_sew_t < sew2 > : : type > ( rs2_num , i ) ; \
type_sew_t < sew1 > : : type vs1 = P . VU . elt < type_sew_t < sew1 > : : type > ( rs1_num , i ) ; \
type_sew_t < sew1 > : : type rs1 = ( type_sew_t < sew1 > : : type ) RS1 ;
# define VI_VVXI_LOOP_NARROW(BODY, is_vs1) \
VI_CHECK_SDS ( is_vs1 ) ; \
VI_CHECK_SDS ( true ) ; \
VI_LOOP_BASE \
if ( sew = = e8 ) { \
VI_NARROW_SHIFT ( e8 , e16 ) \
VV_NARROW_PARAMS ( e8 , e16 ) \
BODY ; \
} else if ( sew = = e16 ) { \
VI_NARROW_SHIFT ( e16 , e32 ) \
} else if ( sew = = e16 ) { \
VV_NARROW_PARAMS ( e16 , e32 ) \
BODY ; \
} else if ( sew = = e32 ) { \
VI_NARROW_SHIFT ( e32 , e64 ) \
} else if ( sew = = e32 ) { \
VV_NARROW_PARAMS ( e32 , e64 ) \
BODY ; \
} \
VI_LOOP_END
# define VI_VX_LOOP_NARROW(BODY) \
VI_CHECK_SDS ( false ) ; \
VI_LOOP_BASE \
if ( sew = = e8 ) { \
VX_NARROW_PARAMS ( e8 , e16 ) \
BODY ; \
} else if ( sew = = e16 ) { \
VX_NARROW_PARAMS ( e16 , e32 ) \
BODY ; \
} else if ( sew = = e32 ) { \
VX_NARROW_PARAMS ( e32 , e64 ) \
BODY ; \
} \
VI_LOOP_END
# define VI_VI_LOOP_NARROW(BODY) \
VI_CHECK_SDS ( false ) ; \
VI_LOOP_BASE \
if ( sew = = e8 ) { \
VI_NARROW_PARAMS ( e8 , e16 ) \
BODY ; \
} else if ( sew = = e16 ) { \
VI_NARROW_PARAMS ( e16 , e32 ) \
BODY ; \
} else if ( sew = = e32 ) { \
VI_NARROW_PARAMS ( e32 , e64 ) \
BODY ; \
} \
VI_LOOP_END
@ -1155,13 +1162,13 @@ VI_LOOP_END
VI_CHECK_SDS ( false ) ; \
VI_LOOP_NSHIFT_BASE \
if ( sew = = e8 ) { \
VI_NSHIFT _PARAMS ( e8 , e16 ) \
VI_NARROW _PARAMS ( e8 , e16 ) \
BODY ; \
} else if ( sew = = e16 ) { \
VI_NSHIFT _PARAMS ( e16 , e32 ) \
VI_NARROW _PARAMS ( e16 , e32 ) \
BODY ; \
} else if ( sew = = e32 ) { \
VI_NSHIFT _PARAMS ( e32 , e64 ) \
VI_NARROW _PARAMS ( e32 , e64 ) \
BODY ; \
} \
VI_LOOP_END
@ -1170,13 +1177,13 @@ VI_LOOP_END
VI_CHECK_SDS ( false ) ; \
VI_LOOP_NSHIFT_BASE \
if ( sew = = e8 ) { \
VX_NSHIFT _PARAMS ( e8 , e16 ) \
VX_NARROW _PARAMS ( e8 , e16 ) \
BODY ; \
} else if ( sew = = e16 ) { \
VX_NSHIFT _PARAMS ( e16 , e32 ) \
VX_NARROW _PARAMS ( e16 , e32 ) \
BODY ; \
} else if ( sew = = e32 ) { \
VX_NSHIFT _PARAMS ( e32 , e64 ) \
VX_NARROW _PARAMS ( e32 , e64 ) \
BODY ; \
} \
VI_LOOP_END
@ -1185,13 +1192,13 @@ VI_LOOP_END
VI_CHECK_SDS ( true ) ; \
VI_LOOP_NSHIFT_BASE \
if ( sew = = e8 ) { \
VV_NSHIFT _PARAMS ( e8 , e16 ) \
VV_NARROW _PARAMS ( e8 , e16 ) \
BODY ; \
} else if ( sew = = e16 ) { \
VV_NSHIFT _PARAMS ( e16 , e32 ) \
VV_NARROW _PARAMS ( e16 , e32 ) \
BODY ; \
} else if ( sew = = e32 ) { \
VV_NSHIFT _PARAMS ( e32 , e64 ) \
VV_NARROW _PARAMS ( e32 , e64 ) \
BODY ; \
} \
VI_LOOP_END