Lines Matching refs:opcode

60 // 64-bit opcode REX modifier.
202 std::ostringstream opcode;
205 bool byte_operand = false; // true when the opcode is dealing with byte operands
210 bool reg_in_opcode = false; // low 3-bits of opcode encode register parameter
219 case rm8_r8: opcode << #opname; store = true; has_modrm = true; byte_operand = true; break; \
220 case rm32_r32: opcode << #opname; store = true; has_modrm = true; break; \
221 case r8_rm8: opcode << #opname; load = true; has_modrm = true; byte_operand = true; break; \
222 case r32_rm32: opcode << #opname; load = true; has_modrm = true; break; \
223 case ax8_i8: opcode << #opname; ax = true; immediate_bytes = 1; byte_operand = true; break; \
224 case ax32_i32: opcode << #opname; ax = true; immediate_bytes = 4; break;
229 0x04 /* Rax8/imm8 opcode */, 0x05 /* Rax32/imm32 */)
233 0x0C /* Rax8/imm8 opcode */, 0x0D /* Rax32/imm32 */)
237 0x14 /* Rax8/imm8 opcode */, 0x15 /* Rax32/imm32 */)
241 0x1C /* Rax8/imm8 opcode */, 0x1D /* Rax32/imm32 */)
245 0x24 /* Rax8/imm8 opcode */, 0x25 /* Rax32/imm32 */)
249 0x2C /* Rax8/imm8 opcode */, 0x2D /* Rax32/imm32 */)
253 0x34 /* Rax8/imm8 opcode */, 0x35 /* Rax32/imm32 */)
257 0x3C /* Rax8/imm8 opcode */, 0x3D /* Rax32/imm32 */)
261 opcode << "push";
266 opcode << "pop";
272 opcode << "movsxd";
278 opcode << StringPrintf("unknown opcode '%02X'", *instr);
281 case 0x68: opcode << "push"; immediate_bytes = 4; break;
282 case 0x69: opcode << "imul"; load = true; has_modrm = true; immediate_bytes = 4; break;
283 case 0x6A: opcode << "push"; immediate_bytes = 1; break;
284 case 0x6B: opcode << "imul"; load = true; has_modrm = true; immediate_bytes = 1; break;
291 opcode << "j" << condition_codes[*instr & 0xF];
295 opcode << "xchg";
300 case 0x88: opcode << "mov"; store = true; has_modrm = true; byte_operand = true; break;
301 case 0x89: opcode << "mov"; store = true; has_modrm = true; break;
302 case 0x8A: opcode << "mov"; load = true; has_modrm = true; byte_operand = true; break;
303 case 0x8B: opcode << "mov"; load = true; has_modrm = true; break;
305 case 0x0F: // 2 byte extended opcode
310 opcode << "movsd";
311 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
313 opcode << "movss";
314 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
316 opcode << "movupd";
317 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
319 opcode << "movups";
328 opcode << "movlpd";
329 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
331 opcode << "movlps";
340 opcode << "movhpd";
341 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
343 opcode << "movhps";
352 opcode << "movapd";
353 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
355 opcode << "movaps";
364 opcode << "cvtpi2pd";
365 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
367 opcode << "cvtsi2sd";
368 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
370 opcode << "cvtsi2ss";
371 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
373 opcode << "cvtpi2ps";
381 opcode << "cvttpd2pi";
382 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
384 opcode << "cvttsd2si";
385 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
387 opcode << "cvttss2si";
388 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
390 opcode << "cvttps2pi";
398 opcode << "cvtpd2pi";
399 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
401 opcode << "cvtsd2si";
402 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
404 opcode << "cvtss2si";
405 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
407 opcode << "cvtps2pi";
414 opcode << "u";
418 opcode << "comisd";
419 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
421 opcode << "comiss";
427 case 0x38: // 3 byte extended opcode
432 opcode << "phaddw";
439 opcode << "phaddd";
446 opcode << "pmulld";
453 opcode << StringPrintf("unknown opcode '0F 38 %02X'", *instr);
456 opcode << StringPrintf("unknown opcode '0F 38 %02X'", *instr);
459 case 0x3A: // 3 byte extended opcode
464 opcode << "pextrb";
472 opcode << "pextrd";
480 opcode << StringPrintf("unknown opcode '0F 3A %02X'", *instr);
483 opcode << StringPrintf("unknown opcode '0F 3A %02X'", *instr);
488 opcode << "cmov" << condition_codes[*instr & 0xF];
495 case 0x50: opcode << "movmsk"; break;
496 case 0x51: opcode << "sqrt"; break;
497 case 0x52: opcode << "rsqrt"; break;
498 case 0x53: opcode << "rcp"; break;
499 case 0x54: opcode << "and"; break;
500 case 0x55: opcode << "andn"; break;
501 case 0x56: opcode << "or"; break;
502 case 0x57: opcode << "xor"; break;
503 case 0x58: opcode << "add"; break;
504 case 0x59: opcode << "mul"; break;
505 case 0x5C: opcode << "sub"; break;
506 case 0x5D: opcode << "min"; break;
507 case 0x5E: opcode << "div"; break;
508 case 0x5F: opcode << "max"; break;
512 opcode << "pd";
513 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
515 opcode << "sd";
516 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
518 opcode << "ss";
519 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
521 opcode << "ps";
530 opcode << "cvtpd2ps";
531 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
533 opcode << "cvtsd2ss";
534 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
536 opcode << "cvtss2sd";
537 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
539 opcode << "cvtps2pd";
547 opcode << "cvtps2dq";
548 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
550 opcode << "bad opcode F2 0F 5B";
552 opcode << "cvttps2dq";
553 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
555 opcode << "cvtdq2ps";
564 prefix[2] = 0; // Clear prefix now. It has served its purpose as part of the opcode.
568 opcode << "punpckldq";
575 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
579 opcode << "movd";
586 opcode << "movdqa";
587 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
590 opcode << "movdqu";
591 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
594 opcode << "movq";
601 opcode << "pshufd";
608 opcode << "pshuflw";
615 opcode << StringPrintf("unknown opcode '0F %02X'", *instr);
621 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
635 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
649 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
662 opcode << "haddps";
663 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
665 opcode << "haddpd";
666 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
668 opcode << StringPrintf("unknown opcode '0F %02X'", *instr);
678 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
682 opcode << "movd";
688 opcode << "j" << condition_codes[*instr & 0xF];
693 opcode << "set" << condition_codes[*instr & 0xF];
700 opcode << "shld";
706 opcode << "shrd";
713 prefix[0] = 0; // clear prefix now it's served its purpose as part of the opcode
749 case 0xAF: opcode << "imul"; has_modrm = true; load = true; break;
750 case 0xB1: opcode << "cmpxchg"; has_modrm = true; store = true; break;
751 case 0xB6: opcode << "movzxb"; has_modrm = true; load = true; byte_second_operand = true; break;
752 case 0xB7: opcode << "movzxw"; has_modrm = true; load = true; break;
753 case 0xBE: opcode << "movsxb"; has_modrm = true; load = true; byte_second_operand = true; rex |= (rex == 0 ? 0 : 0b1000); break;
754 case 0xBF: opcode << "movsxw"; has_modrm = true; load = true; break;
757 opcode << "pextrw";
764 opcode << StringPrintf("unknown opcode '0F %02X'", *instr);
769 opcode << "shufpd";
772 opcode << "shufps";
787 opcode << "bswap";
793 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
797 opcode << "pand";
804 opcode << "pmullw";
810 opcode << StringPrintf("unknown opcode '0F %02X'", *instr);
816 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
820 opcode << "por";
828 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
832 opcode << "pxor";
840 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
844 opcode << "psubb";
852 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
856 opcode << "psubw";
864 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
868 opcode << "psubd";
876 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
880 opcode << "paddb";
888 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
892 opcode << "paddw";
900 prefix[2] = 0; // clear prefix now it's served its purpose as part of the opcode
904 opcode << "paddd";
910 opcode << StringPrintf("unknown opcode '0F %02X'", *instr);
924 opcode << "test";
930 opcode << "lea";
935 opcode << "pop";
941 opcode << "cdq";
945 opcode << "fstsw\tax";
948 opcode << StringPrintf("unknown opcode '%02X'", *instr);
952 opcode << (prefix[2] == 0x66 ? "scasw" : "scasl");
955 opcode << "mov";
963 opcode << "movabsq";
968 opcode << "mov";
984 case 0xC3: opcode << "ret"; break;
1002 case 0xCC: opcode << "int 3"; break;
1005 opcode << "fprem";
1018 opcode << "fucompp";
1021 opcode << StringPrintf("unknown opcode '%02X'", *instr);
1045 case 0xE3: opcode << "jecxz"; branch_bytes = 1; break;
1046 case 0xE8: opcode << "call"; branch_bytes = 4; break;
1047 case 0xE9: opcode << "jmp"; branch_bytes = 4; break;
1048 case 0xEB: opcode << "jmp"; branch_bytes = 1; break;
1049 case 0xF5: opcode << "cmc"; break;
1073 opcode << StringPrintf("unknown opcode '%02X'", *instr);
1162 opcode << modrm_opcodes[reg_or_opcode];
1165 // Add opcode suffixes to indicate size.
1167 opcode << 'b';
1169 opcode << 'q';
1171 opcode << 'w';
1192 // If this opcode implicitly uses ax, ax is always the first arg.
1254 prefixed_opcode << opcode.str();