aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/vrev8_v.h
blob: f26c5a0502b523acf229b848df0c4d254466707d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// vrev8.v vd, vs2, vm

#include "zvk_ext_macros.h"

require_zvbb;

VI_V_ULOOP
({
  vd = vs2;
  if (P.VU.vsew > 8)
    vd = ((vd & 0x00FF00FF00FF00FFllu) <<  8) | ((vd & 0xFF00FF00FF00FF00llu) >>  8);
  if (P.VU.vsew > 16)
    vd = ((vd & 0x0000FFFF0000FFFFllu) << 16) | ((vd & 0xFFFF0000FFFF0000llu) >> 16);
  if (P.VU.vsew > 32)
    vd = ((vd & 0x00000000FFFFFFFFllu) << 32) | ((vd & 0xFFFFFFFF00000000llu) >> 32);
})