#include "x86emitter.h"
void emitteH_x86_ModRM(codeblock* CB,BYTE mod,BYTE rm,X86RegType reg)
{
emitteByte(CB,(mod<<6)|(rm<<4)|(reg));
}
void emitteH_x86_SibSB(codeblock* CB,BYTE sib,BYTE rm,BYTE index)
{
emitteByte(CB,(sib<<6)|(rm<<4)|(index));
}
void emit_x86_ret(register codeblock* CB)
{
/* Opcode RET */
emitteByte(CB, 0xC3);
}
void emit_x86_mov16RtoM(codeblock* CB,X86RegType from,DWORD to)
{
/* Operand size prefix */
emitteByte(CB, 0x66);
emitteByte(CB, 0x89);
/* Addressing form */
emitteH_x86_ModRM(CB,0,from,DISP32);
/* Inm Dir */
emitteDWord(CB, to);
}
void emit_x86_mov16MtoR(codeblock* CB,DWORD from, X86RegType to)
{
/* Operand size prefix */
emitteByte(CB, 0x66);
emitteByte(CB, 0x8B);
/* Addressing form */
emitteH_x86_ModRM(CB,0,to,DISP32);
/* Inm Dir */
emitteDWord(CB, from);
}
void emit_x86_mov16ItoR(codeblock* CB,X86RegType to,WORD value)
{
/* Operand size prefix */
emitteByte(CB, 0x66);
emitteByte(CB, 0xB8|to);
/* Inm Num */
emitteWord(CB, value);
}