aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/vaesz_vs.h
blob: c3dc931c93968f4621b07edc7a6b80c0b5ce4445 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 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);
  }
);