vspltb
This commit is contained in:
parent
5bed1069f8
commit
1eba1fb5c2
|
@ -1701,8 +1701,23 @@ XEEMITTER(vslo128, VX128(5, 912), VX128 )(X64Emitter& e, X86Compiler&
|
||||||
}
|
}
|
||||||
|
|
||||||
XEEMITTER(vspltb, 0x1000020C, VX )(X64Emitter& e, X86Compiler& c, InstrData& i) {
|
XEEMITTER(vspltb, 0x1000020C, VX )(X64Emitter& e, X86Compiler& c, InstrData& i) {
|
||||||
XEINSTRNOTIMPLEMENTED();
|
// b <- UIMM*8
|
||||||
return 1;
|
// do i = 0 to 127 by 8
|
||||||
|
// (VD)[i:i+7] <- (VB)[b:b+7]
|
||||||
|
XmmVar v(c.newXmmVar());
|
||||||
|
c.movaps(v, e.vr_value(i.VX.VB));
|
||||||
|
uint32_t uimm = SWAP_INLINE(i.VX.VA & 0xF);
|
||||||
|
GpVar sel(c.newGpVar());
|
||||||
|
c.mov(sel, imm(uimm));
|
||||||
|
XmmVar sel_v(c.newXmmVar());
|
||||||
|
c.movd(sel_v, sel.r32());
|
||||||
|
XmmVar z(c.newXmmVar());
|
||||||
|
c.xorps(z, z);
|
||||||
|
c.pshufb(sel_v, z);
|
||||||
|
c.pshufb(v, sel_v);
|
||||||
|
e.update_vr_value(i.VX.VD, v);
|
||||||
|
e.TraceVR(i.VX.VD);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
XEEMITTER(vsplth, 0x1000024C, VX )(X64Emitter& e, X86Compiler& c, InstrData& i) {
|
XEEMITTER(vsplth, 0x1000024C, VX )(X64Emitter& e, X86Compiler& c, InstrData& i) {
|
||||||
|
|
Loading…
Reference in New Issue