# RUN: llvm-mc -arch=hexagon -mv65 -mhvx -filetype=obj %s | llvm-objdump --mcpu=hexagonv65 --mattr=+hvx -d - | FileCheck %s

// Warning: This file is auto generated by mktest.py.  Do not edit!
// Created on:  2016-06-01 @ 17:33:01
// Created using:
//   /usr2/mlambert/Tags/iset.py.v65_20160513


//   V6_vmpyuhe_acc
//   Vx32.uw+=vmpye(Vu32.uh,Rt32.uh)
     V0.uw+=vmpye(V0.uh,R0.uh)
# CHECK: 1980e060 { v0.uw += vmpye(v0.uh,r0.uh) }

//   V6_vgathermwq
//   if (Qs4) vtmp.w=vgather(Rt32,Mu2,Vv32.w).w
     if (Q0) vtmp.w=vgather(R0,M0,V0.w).w
# CHECK: 2f00c400 { if (q0) vtmp.w = vgather(r0,m0,v0.w).w }

//   V6_vscattermw
//   vscatter(Rt32,Mu2,Vv32.w).w=Vw32
     vscatter(R0,M0,V0.w).w=V0
# CHECK: 2f20c000 { vscatter(r0,m0,v0.w).w = v0 }

//   V6_vscattermh
//   vscatter(Rt32,Mu2,Vv32.h).h=Vw32
     vscatter(R0,M0,V0.h).h=V0
# CHECK: 2f20c020 { vscatter(r0,m0,v0.h).h = v0 }

//   V6_vlut4
//   Vd32.h=vlut4(Vu32.uh,Rtt32.h)
     V0.h=vlut4(V0.uh,R1:0.h)
# CHECK: 1960c080 { v0.h = vlut4(v0.uh,r1:0.h) }

//   V6_vgathermhwq
//   if (Qs4) vtmp.h=vgather(Rt32,Mu2,Vvv32.w).h
     if (Q0) vtmp.h=vgather(R0,M0,V1:0.w).h
# CHECK: 2f00c600 { if (q0) vtmp.h = vgather(r0,m0,v1:0.w).h }

//   V6_vS32b_srls_ai
//   vmem(Rt32+#s4):scatter_release
     vmem(R0+#0):scatter_release
# CHECK: 2820c028 { vmem(r0+#0):scatter_release }

//   V6_vgathermh
//   vtmp.h=vgather(Rt32,Mu2,Vv32.h).h
     vtmp.h=vgather(R0,M0,V0.h).h
# CHECK: 2f00c100 { vtmp.h = vgather(r0,m0,v0.h).h }

//   V6_vscattermhw
//   vscatter(Rt32,Mu2,Vvv32.w).h=Vw32
     vscatter(R0,M0,V1:0.w).h=V0
# CHECK: 2f20c040 { vscatter(r0,m0,v1:0.w).h = v0 }

//   V6_vS32b_srls_ppu
//   vmem(Rx32++Mu2):scatter_release
     vmem(R0++M0):scatter_release
# CHECK: 2b20c028 { vmem(r0++m0):scatter_release }

//   V6_vscattermhw_add
//   vscatter(Rt32,Mu2,Vvv32.w).h+=Vw32
     vscatter(R0,M0,V1:0.w).h+=V0
# CHECK: 2f20c0c0 { vscatter(r0,m0,v1:0.w).h += v0 }

//   V6_vmpabuu
//   Vdd32.h=vmpa(Vuu32.ub,Rt32.ub)
     V1:0.h=vmpa(V1:0.ub,R0.ub)
# CHECK: 1960c060 { v1:0.h = vmpa(v1:0.ub,r0.ub) }

//   V6_vasruhubrndsat
//   Vd32.ub=vasr(Vu32.uh,Vv32.uh,Rt8):rnd:sat
     V0.ub=vasr(V0.uh,V0.uh,R0):rnd:sat
# CHECK: 1800c0e0 { v0.ub = vasr(v0.uh,v0.uh,r0):rnd:sat }

//   V6_vscattermh_add
//   vscatter(Rt32,Mu2,Vv32.h).h+=Vw32
     vscatter(R0,M0,V0.h).h+=V0
# CHECK: 2f20c0a0 { vscatter(r0,m0,v0.h).h += v0 }

//   V6_vgathermw
//   vtmp.w=vgather(Rt32,Mu2,Vv32.w).w
     vtmp.w=vgather(R0,M0,V0.w).w
# CHECK: 2f00c000 { vtmp.w = vgather(r0,m0,v0.w).w }

//   V6_vasruhubsat
//   Vd32.ub=vasr(Vu32.uh,Vv32.uh,Rt8):sat
     V0.ub=vasr(V0.uh,V0.uh,R0):sat
# CHECK: 1800e0a0 { v0.ub = vasr(v0.uh,v0.uh,r0):sat }

//   V6_vscattermhwq
//   if (Qs4) vscatter(Rt32,Mu2,Vvv32.w).h=Vw32
     if (Q0) vscatter(R0,M0,V1:0.w).h=V0
# CHECK: 2fa0c000 { if (q0) vscatter(r0,m0,v1:0.w).h = v0 }

//   V6_vgathermhq
//   if (Qs4) vtmp.h=vgather(Rt32,Mu2,Vv32.h).h
     if (Q0) vtmp.h=vgather(R0,M0,V0.h).h
# CHECK: 2f00c500 { if (q0) vtmp.h = vgather(r0,m0,v0.h).h }

//   V6_vmpsuhuhsat
//   Vx32.h=vmps(Vx32.h,Vu32.uh,Rtt32.uh):sat
     V0.h=vmps(V0.h,V0.uh,R1:0.uh):sat
# CHECK: 1980e0c0 { v0.h = vmps(v0.h,v0.uh,r1:0.uh):sat }

//   V6_vS32b_srls_pi
//   vmem(Rx32++#s3):scatter_release
     vmem(R0++#0):scatter_release
# CHECK: 2920c028 { vmem(r0++#0):scatter_release }

//   V6_vgathermhw
//   vtmp.h=vgather(Rt32,Mu2,Vvv32.w).h
     vtmp.h=vgather(R0,M0,V1:0.w).h
# CHECK: 2f00c200 { vtmp.h = vgather(r0,m0,v1:0.w).h }

//   V6_vmpyuhe
//   Vd32.uw=vmpye(Vu32.uh,Rt32.uh)
     V0.uw=vmpye(V0.uh,R0.uh)
# CHECK: 1960c040 { v0.uw = vmpye(v0.uh,r0.uh) }

//   V6_vscattermwq
//   if (Qs4) vscatter(Rt32,Mu2,Vv32.w).w=Vw32
     if (Q0) vscatter(R0,M0,V0.w).w=V0
# CHECK: 2f80c000 { if (q0) vscatter(r0,m0,v0.w).w = v0 }

//   V6_vasruwuhsat
//   Vd32.uh=vasr(Vu32.uw,Vv32.uw,Rt8):sat
     V0.uh=vasr(V0.uw,V0.uw,R0):sat
# CHECK: 1800e080 { v0.uh = vasr(v0.uw,v0.uw,r0):sat }

//   V6_vprefixqh
//   Vd32.h=prefixsum(Qv4)
     V0.h=prefixsum(Q0)
# CHECK: 1e03e140 { v0.h = prefixsum(q0) }

//   V6_vmpabuu_acc
//   Vxx32.h+=vmpa(Vuu32.ub,Rt32.ub)
     V1:0.h+=vmpa(V1:0.ub,R0.ub)
# CHECK: 19a0e080 { v1:0.h += vmpa(v1:0.ub,r0.ub) }

//   V6_vprefixqw
//   Vd32.w=prefixsum(Qv4)
     V0.w=prefixsum(Q0)
# CHECK: 1e03e240 { v0.w = prefixsum(q0) }

//   V6_vprefixqb
//   Vd32.b=prefixsum(Qv4)
     V0.b=prefixsum(Q0)
# CHECK: 1e03e040 { v0.b = prefixsum(q0) }

//   V6_vabsb
//   Vd32.b=vabs(Vu32.b)
     V0.b=vabs(V0.b)
# CHECK: 1e01c080 { v0.b = vabs(v0.b) }

//   V6_vscattermw_add
//   vscatter(Rt32,Mu2,Vv32.w).w+=Vw32
     vscatter(R0,M0,V0.w).w+=V0
# CHECK: 2f20c080 { vscatter(r0,m0,v0.w).w += v0 }

//   V6_vscattermhq
//   if (Qs4) vscatter(Rt32,Mu2,Vv32.h).h=Vw32
     if (Q0) vscatter(R0,M0,V0.h).h=V0
# CHECK: 2f80c080 { if (q0) vscatter(r0,m0,v0.h).h = v0 }

//   V6_vmpauhuhsat
//   Vx32.h=vmpa(Vx32.h,Vu32.uh,Rtt32.uh):sat
     V0.h=vmpa(V0.h,V0.uh,R1:0.uh):sat
# CHECK: 1980e0a0 { v0.h = vmpa(v0.h,v0.uh,r1:0.uh):sat }

//   V6_vabsb_sat
//   Vd32.b=vabs(Vu32.b):sat
     V0.b=vabs(V0.b):sat
# CHECK: 1e01c0a0 { v0.b = vabs(v0.b):sat }

v1:0.w+=vrmpy(v0.b, r1:0.ub)
# CHECK: 19a0e000 { v1:0.w += vrmpy(v0.b,r1:0.ub) }

V1:0.uw+=vrmpy(v0.ub,r1:0.ub)
# CHECK: 19a0e0e0 { v1:0.uw += vrmpy(v0.ub,r1:0.ub) }

v1:0.uw=vrmpy(v1.ub,r1:0.ub)
# CHECK: 19c0c180 { v1:0.uw = vrmpy(v1.ub,r1:0.ub) }

v1:0.w=vrmpy(v1.b,r1:0.ub)
# CHECK: 19c0c1a0 { v1:0.w = vrmpy(v1.b,r1:0.ub) }
