// vaesz.vs vd, vs2 #include "zvk_ext_macros.h" #include "zvkned_ext_macros.h" require_vaes_vs_constraints; VI_ZVK_VD_VS2_NOOPERANDS_PRELOOP_EGU32x4_NOVM_LOOP( {}, // This statement will be executed before the first execution // of the loop, and only if the loop is going to be entered. // We cannot use a block ( { ... } ) since we want the variables declared // here to be visible in the loop block. // We capture the "scalar", vs2's first element, by copy, even though // the "no overlap" constraint means that vs2 should remain constant // during the loop. const EGU8x16_t scalar_key = P.VU.elt_group<EGU8x16_t>(vs2_num, 0);, // Per Element Group body. { EGU8x16_t &vd = P.VU.elt_group<EGU8x16_t>(vd_num, idx_eg, true); // Produce vd = vd ^ "common key from vs2". EGU8x16_XOR(vd, vd, scalar_key); } );