public static OpCode FromName(string op, Reg32 op1, Xmm op2) { byte b; switch (op) { case "movd": b = 0x7e; break; default: throw new Exception("invalid operator: " + op); } return new OpCode(new byte[] { 0x66, 0x0f, b, (byte)(0xc0 + (((int)op2) << 3) + op1) }); }
public static OpCode FromName(string op, Xmm op1, Addr32 op2) { byte b1 = 0x66, b2; if (op == "movq" || op == "movdqu") b1 = 0xf3; switch (op) { case "movd": b2 = 0x6e; break; default: b2 = GetCode(op); break; } return new OpCode(new byte[] { b1, 0x0f, b2 }, null, new Addr32(op2, (byte)op1)); }
public static OpCode FromName(string op, Xmm op1, byte op2) { byte b1 = 0, b2 = 0; switch (op) { case "psllw": case "psrlw": case "psraw": b1 = 0x71; break; case "pslld": case "psrld": case "psrad": b1 = 0x72; break; case "psllq": case "psrlq": b1 = 0x73; break; } switch (op) { case "psllw": case "pslld": case "psllq": b2 = 0xf0; break; case "psrlw": case "psrld": case "psrlq": b2 = 0xd0; break; case "psraw": case "psrad": b2 = 0xe0; break; } if (b1 == 0 || b2 == 0) throw new Exception("invalid operator: " + op); return new OpCode(new byte[] { 0x66, 0x0f, b1, (byte)(b2 + op1) }, op2); }
public static OpCode FromName(string op, Addr32 op1, Xmm op2) { byte b1 = 0x66, b2; if (op == "movdqu") b1 = 0xf3; switch (op) { case "movd": b2 = 0x7e; break; case "movq": b2 = 0xd6; break; case "movdqa": case "movdqu": b2 = 0x7f; break; default: throw new Exception("invalid operator: " + op); } return new OpCode(new byte[] { b1, 0x0f, b2 }, null, new Addr32(op1, (byte)op2)); }
public static OpCode PAddQ(Xmm op1, Xmm op2) { return FromName("paddq", op1, op2); }
public static OpCode MovD(Reg32 op1, Xmm op2) { return FromName("movd", op1, op2); }
public static OpCode PSRAW(Xmm op1, Addr32 op2) { return FromName("psraw", op1, op2); }
public static OpCode PUnpckLDQ(Xmm op1, Xmm op2) { return FromName("punpckldq", op1, op2); }
public static OpCode MovDQA(Xmm op1, Addr32 op2) { return FromName("movdqa", op1, op2); }
public static OpCode PSubW(Xmm op1, Addr32 op2) { return FromName("psubw", op1, op2); }
public static OpCode PUnpckHWD(Xmm op1, Xmm op2) { return FromName("punpckhwd", op1, op2); }
public static OpCode PSRLD(Xmm op1, Xmm op2) { return FromName("psrld", op1, op2); }
public static OpCode PSRLW(Xmm op1, byte op2) { return FromName("psrlw", op1, op2); }
public static OpCode PackUSWB(Xmm op1, Addr32 op2) { return FromName("packuswb", op1, op2); }
public static OpCode PackSSWB(Xmm op1, Xmm op2) { return FromName("packsswb", op1, op2); }
public static OpCode PackSSDW(Xmm op1, Addr32 op2) { return FromName("packssdw", op1, op2); }
public static OpCode MovDQU(Addr32 op1, Xmm op2) { return FromName("movdqu", op1, op2); }
public static OpCode MovQ(Addr32 op1, Xmm op2) { return FromName("movq", op1, op2); }
public static OpCode PSRLQ(Xmm op1, Addr32 op2) { return FromName("psrlq", op1, op2); }
public static OpCode PAddW(Xmm op1, Addr32 op2) { return FromName("paddw", op1, op2); }
public static OpCode PSubQ(Xmm op1, Xmm op2) { return FromName("psubq", op1, op2); }
public static OpCode PMulHW(Xmm op1, Xmm op2) { return FromName("pmulhw", op1, op2); }
public static OpCode PUnpckHDQ(Xmm op1, Addr32 op2) { return FromName("punpckhdq", op1, op2); }
public static OpCode PMulLW(Xmm op1, Addr32 op2) { return FromName("pmullw", op1, op2); }
public static OpCode PUnpckLBW(Xmm op1, Xmm op2) { return FromName("punpcklbw", op1, op2); }
public static OpCode PSLLQ(Xmm op1, byte op2) { return FromName("psllq", op1, op2); }
public static OpCode PUnpckLWD(Xmm op1, Addr32 op2) { return FromName("punpcklwd", op1, op2); }
public static OpCode PSLLW(Xmm op1, Addr32 op2) { return FromName("psllw", op1, op2); }
public static OpCode PSRAD(Xmm op1, byte op2) { return FromName("psrad", op1, op2); }
public static OpCode FromName(string op, Xmm op1, Xmm op2) { byte b1 = 0x66, b2 = GetCode(op); if (op == "movq" || op == "movdqu") b1 = 0xf3; return new OpCode(new byte[] { b1, 0x0f, b2, (byte)(0xc0 + (((int)op1) << 3) + op2) }); }