bool CheckPrefix(TargetReader reader)
{
byte opcode = reader.PeekByte ();
if ((opcode >= 0x40) && (opcode <= 0x4f)) {
if (!Is64BitMode)
return false;
if ((opcode & 0x01) != 0)
RexPrefix |= X86_REX_Prefix.REX_B;
if ((opcode & 0x02) != 0)
RexPrefix |= X86_REX_Prefix.REX_X;
if ((opcode & 0x04) != 0)
RexPrefix |= X86_REX_Prefix.REX_R;
if ((opcode & 0x08) != 0)
RexPrefix |= X86_REX_Prefix.REX_W;
return true;
} else if (opcode == 0x26) {
Prefix |= X86_Prefix.ES;
return true;
} else if (opcode == 0x2e) {
Prefix |= X86_Prefix.CS;
return true;
} else if (opcode == 0x36) {
Prefix |= X86_Prefix.SS;
return true;
} else if (opcode == 0x3e) {
Prefix |= X86_Prefix.DS;
return true;
} else if (opcode == 0x64) {
Prefix |= X86_Prefix.FS;
return true;
} else if (opcode == 0x65) {
Prefix |= X86_Prefix.GS;
return true;
} else if (opcode == 0x66) {
Prefix |= X86_Prefix.DATA;
return true;
} else if (opcode == 0x67) {
Prefix |= X86_Prefix.ADDR;
return true;
} else if (opcode == 0xf0) {
Prefix |= X86_Prefix.LOCK;
return true;
} else if (opcode == 0xf2) {
Prefix |= X86_Prefix.REPNZ;
return true;
} else if (opcode == 0xf3) {
Prefix |= X86_Prefix.REPZ;
return true;
}
return false;
}