LOOP, LOOPE, LOOPNE,
LSL,
LTR,
+ MFENCE,
MOV,
MOVS,
MOVSX,
OR,
OUT,
OUTS,
+ PAUSE,
POP,
POPA,
POPAD,
PUSHAD,
PUSHF,
RCL, RCR, ROL, ROR,
- RET, RETF, /* RETF added */
RDMSR,
+ RDPMC,
+ RDTSC,
+ RET, RETF, /* RETF added */
SAHF,
SAL, SAR, SHL, SHR,
SBB,
{ LSL, "lsl" },
{ LSS, "lss" },
{ LTR, "ltr" },
+ { MFENCE, ".data1 0x0f, 0xae, 0x0f"},
{ MOV, "mov%" },
{ MOVS, "movs%" },
{ MOVSX, "movsx" },
{ OR, "or%" },
{ OUT, "out%" },
{ OUTS, "outs%" },
+ { PAUSE, ".data1 0xf3, 0x90"},
{ POP, "pop" },
{ POPA, "popa" },
{ POPAD, "popad" },
{ RCR, "rcr%" },
{ RET, "ret" },
{ RETF, "retf" },
- { RDMSR, "rdmsr" },
+ { RDMSR, ".data1 0x0f, 0x32"},
+ { RDPMC, ".data1 0x0f, 0x33"},
+ { RDTSC, ".data1 0x0f, 0x31"},
{ ROL, "rol%" },
{ ROR, "ror%" },
{ SAHF, "sahf" },
{ VERW, "verw" },
{ WAIT, "wait" },
{ WBINVD, "wbinvd" },
- { WRMSR, "wrmsr" },
+ { WRMSR, ".data1 0x0f, 0x30"},
{ XADD, "xadd" },
{ XCHG, "xchg%" },
{ XLAT, "xlat" },
return;
}
}
- if (a->opcode == RDMSR) {
- ack_printf(".data1 0x0f, 0x32\n");
- return;
- }
- if (a->opcode == WRMSR) {
- ack_printf(".data1 0x0f, 0x30\n");
- return;
- }
/* we are translating from GNU */
if (a->args && a->args->operator == ','
/* don't swap ljmp prefixed with segment */
{ "lsl", LSL, WORD },
{ "lss", LSS, WORD },
{ "ltr", LTR, WORD },
+ { "mfence", MFENCE, WORD },
{ "movb", MOV, BYTE },
{ "movl", MOV, WORD },
{ "movsb", MOVS, BYTE },
{ "outsl", OUTS, WORD },
{ "outsw", OUTS, OWORD },
{ "outw", OUT, OWORD },
+ { "pause", PAUSE, WORD },
{ "pop", POP, WORD },
{ "popa", POPA, WORD },
{ "popal", POPAD, WORD },
{ "rcrb", RCR, BYTE },
{ "rcrl", RCR, WORD },
{ "rcrw", RCR, OWORD },
+ { "rdmsr", RDMSR, WORD },
+ { "rdpmc", RDPMC, WORD },
+ { "rdtsc", RDTSC, WORD },
{ "ret", RET, JUMP },
{ "retf", RETF, JUMP },
- { "rdmsr", RDMSR, WORD },
{ "rolb", ROL, BYTE },
{ "roll", ROL, WORD },
{ "rolw", ROL, OWORD },