public override X86Instruction Decode(uint op, X86Disassembler disasm) { var ctx = disasm.decodingContext; if ((ctx.SizeOverridePrefix | ctx.F2Prefix | ctx.F3Prefix) || !disasm.TryReadByte(out byte op2)) { return(disasm.CreateInvalidInstruction()); } var r = (~op2 >> 5) & 4; var vvvv = (~op2 >> 3) & 0xF; var pp = op2 & 3; ctx.IsVex = true; ctx.VexRegister = (byte)vvvv; ctx.RegisterExtensionPrefixByte = (byte)r; ctx.VexLong = (op2 & 4) != 0; ctx.F2Prefix = pp == 3; ctx.F3Prefix = pp == 2; ctx.SizeOverridePrefix = pp == 1; if (!disasm.TryReadByte(out op2) || op2 == 0x38 || op2 == 0x3A) { return(disasm.CreateInvalidInstruction()); } return(decoders0F[op2].Decode(op2, disasm)); }