Previous 199869 Revisions Next

r18450 Thursday 11th October, 2012 at 14:48:06 UTC by Miodrag Milanović
i386dasm.c: [Peter Ferrie]
- added numerous opcodes for newer CPUs;
- added some undocumented-but-supported opcodes from old CPUs;
- corrected naming of two opcodes
[src/emu/cpu/i386]i386dasm.c

trunk/src/emu/cpu/i386/i386dasm.c
r18449r18450
6363   PARAM_EBP,         /* EBP or BP */
6464   PARAM_ESI,         /* ESI or SI */
6565   PARAM_EDI,         /* EDI or DI */
66   PARAM_XMM0,
67   PARAM_XMM64,         /* 64-bit memory or XMM register */
68   PARAM_XMM32,         /* 32-bit memory or XMM register */
69   PARAM_XMM16,         /* 16-bit memory or XMM register */
6670};
6771
6872enum
r18449r18450
8084   SEG_FS,
8185   SEG_GS,
8286   SEG_SS,
83   ISREX
87   ISREX,
88   THREE_BYTE         /* [prefix] 0f op1 op2 and then mod/rm */
8489};
8590
8691#define FLAGS_MASK         0x0ff
r18449r18450
263268   {"mov",            MODRM,         PARAM_SREG,         PARAM_RM,         0            },
264269   {"pop",            MODRM,         PARAM_RM,         0,               0            },
265270   // 0x90
266   {"nop",            0,            0,               0,               0            },
271   {"nop\0???\0???\0pause",   VAR_NAME4,         0,               0,               0            },
267272   {"xchg",         0,            PARAM_EAX,         PARAM_ECX,         0            },
268273   {"xchg",         0,            PARAM_EAX,         PARAM_EDX,         0            },
269274   {"xchg",         0,            PARAM_EAX,         PARAM_EBX,         0            },
r18449r18450
337342   {"groupD3",         GROUP,         0,               0,               0            },
338343   {"aam",            0,            PARAM_I8,         0,               0            },
339344   {"aad",            0,            PARAM_I8,         0,               0            },
340   {"???",            0,            0,               0,               0            },
345   {"salc",         0,            0,               0,               0            }, //AMD docs name it
341346   {"xlat",         0,            0,               0,               0            },
342347   {"escape",         FPU,         0,               0,               0            },
343348   {"escape",         FPU,         0,               0,               0            },
r18449r18450
404409   {"???",            0,            0,               0,               0            },
405410   {"ud2",            0,            0,               0,               0            },
406411   {"???",            0,            0,               0,               0            },
412   {"group0F0D",         GROUP,            0,               0,               0            }, //AMD only
407413   {"???",            0,            0,               0,               0            },
408414   {"???",            0,            0,               0,               0            },
409   {"???",            0,            0,               0,               0            },
410415   // 0x10
411416   {"movups\0"
412417    "movupd\0"
r18449r18450
441446    "???\0"
442447    "???",            MODRM|VAR_NAME4,PARAM_XMM,         PARAM_XMMM,         0            },
443448   {"group0F18",      GROUP,         0,               0,               0            },
444   {"???",            0,            0,               0,               0            },
445   {"???",            0,            0,               0,               0            },
446   {"???",            0,            0,               0,               0            },
447   {"???",            0,            0,               0,               0            },
448   {"???",            0,            0,               0,               0            },
449   {"???",            0,            0,               0,               0            },
450   {"???",            0,            0,               0,               0            },
449   {"nop_hint",      0,            PARAM_RMPTR8,            0,               0            },
450   {"nop_hint",      0,            PARAM_RMPTR8,            0,               0            },
451   {"nop_hint",      0,            PARAM_RMPTR8,            0,               0            },
452   {"nop_hint",      0,            PARAM_RMPTR8,            0,               0            },
453   {"nop_hint",      0,            PARAM_RMPTR8,            0,               0            },
454   {"nop_hint",      0,            PARAM_RMPTR8,            0,               0            },
455   {"nop_hint",      0,            PARAM_RMPTR8,            0,               0            },
451456   // 0x20
452457   {"mov",            MODRM,         PARAM_REG2_32,      PARAM_CREG,         0            },
453458   {"mov",            MODRM,         PARAM_REG2_32,      PARAM_DREG,         0            },
r18449r18450
498503   {"sysexit",         0,            0,               0,               0            },
499504   {"???",            0,            0,               0,               0            },
500505   {"???",            0,            0,               0,               0            },
506   {"three_byte",         THREE_BYTE,         0,               0,               0            },
501507   {"???",            0,            0,               0,               0            },
508   {"three_byte",         THREE_BYTE,         0,               0,               0            },
502509   {"???",            0,            0,               0,               0            },
503510   {"???",            0,            0,               0,               0            },
504511   {"???",            0,            0,               0,               0            },
505512   {"???",            0,            0,               0,               0            },
506513   {"???",            0,            0,               0,               0            },
507   {"???",            0,            0,               0,               0            },
508   {"???",            0,            0,               0,               0            },
509514   // 0x40
510515   {"cmovo",         MODRM,         PARAM_REG,         PARAM_RM,         0            },
511516   {"cmovno",         MODRM,         PARAM_REG,         PARAM_RM,         0            },
r18449r18450
601606   {"punpckhwd",      MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
602607   {"punpckhdq",      MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
603608   {"packssdw",      MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
604   {"punpcklqdq",      MODRM,         PARAM_XMM,         PARAM_XMMM,         0            },
605   {"punpckhqdq",      MODRM,         PARAM_XMM,         PARAM_XMMM,         0            },
609   {"???\0"
610    "punpcklqdq\0"
611    "???\0"
612    "???\0",      MODRM|VAR_NAME4,         PARAM_XMM,         PARAM_XMMM,         0            },
613   {"???\0"
614    "punpckhqdq\0"
615    "???\0"
616    "???\0",      MODRM|VAR_NAME4,         PARAM_XMM,         PARAM_XMMM,         0            },
606617   {"movd",         MODRM,         PARAM_MMX,         PARAM_RM,         0            },
607618   {"movq\0"
608619    "movdqa\0"
r18449r18450
620631   {"pcmpeqw",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
621632   {"pcmpeqd",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
622633   {"emms",         0,            0,               0,               0            },
634   {"vmread",         MODRM,            PARAM_RM,            PARAM_REG,            0            },
635   {"vmwrite",         MODRM,            PARAM_RM,            PARAM_REG,            0            },
623636   {"???",            0,            0,               0,               0            },
624637   {"???",            0,            0,               0,               0            },
625   {"???",            0,            0,               0,               0            },
626   {"???",            0,            0,               0,               0            },
627638   {"???\0"
628639    "haddpd\0"
629640    "haddps\0"
r18449r18450
700711   {"lgs",            MODRM,         PARAM_REG,         PARAM_RM,         0            },
701712   {"movzx",         MODRM,         PARAM_REG,         PARAM_RMPTR8,      0            },
702713   {"movzx",         MODRM,         PARAM_REG,         PARAM_RMPTR16,      0            },
703   {"???",            0,            0,               0,               0            },
704   {"???",            0,            0,               0,               0            },
714   {"???\0"
715    "???\0"
716    "???\0"
717    "popcnt",         MODRM|VAR_NAME4,      PARAM_REG,            PARAM_RM16,            0            },
718   {"ud2",            0,            0,               0,               0            },
705719   {"group0FBA",      GROUP,         0,               0,               0            },
706720   {"btc",            MODRM,         PARAM_RM,         PARAM_REG,         0            },
707   {"bsf",            MODRM,         PARAM_REG,         PARAM_RM,         0            },
708   {"bsr",            MODRM,         PARAM_REG,         PARAM_RM,         0,            DASMFLAG_STEP_OVER},
721   {"bsf\0"
722    "???\0"
723    "???\0"
724    "tzcnt",         MODRM|VAR_NAME4,   PARAM_REG,         PARAM_RM,         0            },
725   {"bsr\0"
726    "???\0"
727    "???\0"
728    "lzcnt",         MODRM|VAR_NAME4,   PARAM_REG,         PARAM_RM,         0,            DASMFLAG_STEP_OVER},
709729   {"movsx",         MODRM,         PARAM_REG,         PARAM_RMPTR8,      0            },
710730   {"movsx",         MODRM,         PARAM_REG,         PARAM_RMPTR16,      0            },
711731   // 0xc0
r18449r18450
722742    "shufpd\0"
723743    "???\0"
724744    "???",            MODRM|VAR_NAME4,PARAM_XMM,         PARAM_XMMM,         PARAM_I8      },
725   {"cmpxchg8b",      MODRM,         PARAM_M64PTR,      0,               0            },
745   {"group0FC7",         GROUP,         0,         0,               0            },
726746   {"bswap",         0,            PARAM_EAX,         0,               0            },
727747   {"bswap",         0,            PARAM_ECX,         0,               0            },
728748   {"bswap",         0,            PARAM_EDX,         0,               0            },
r18449r18450
732752   {"bswap",         0,            PARAM_ESI,         0,               0            },
733753   {"bswap",         0,            PARAM_EDI,         0,               0            },
734754   // 0xd0
735   {"addsubpd\0"
736    "???\0"
755   {"???\0"
756    "addsubpd\0"
737757    "addsubps\0"
738758    "???\0",         MODRM|VAR_NAME4,PARAM_XMM,         PARAM_XMMM,         0            },
739759   {"psrlw",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
r18449r18450
741761   {"psrlq",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
742762   {"paddq",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
743763   {"pmullw",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
744   {"movq\0"
745    "???\0"
764   {"???\0"
765    "movq\0"
746766    "movdq2q\0"
747767    "movq2dq",         MODRM|VAR_NAME4,PARAM_MMX,         PARAM_MMXM,         0            },
748768   {"pmovmskb",      MODRM,         PARAM_REG3264,      PARAM_MMXM,         0            },
r18449r18450
750770   {"psubusw",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
751771   {"pminub",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
752772   {"pand",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
753   {"paddub",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
754   {"padduw",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
773   {"paddusb",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
774   {"paddusw",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
755775   {"pmaxub",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
756776   {"pandn",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
757777   // 0xe0
r18449r18450
765785    "cvttpd2dq\0"
766786    "cvtpd2dq\0"
767787    "cvtdq2pd",      MODRM|VAR_NAME4,PARAM_XMM,         PARAM_XMMM,         0            },
768   {"movntq",         MODRM,         PARAM_M64,         PARAM_MMX,         0            },
788   {"movntq\0"
789    "movntdq\0"
790    "???\0"
791    "???\0",         MODRM|VAR_NAME4,   PARAM_M64,         PARAM_MMX,         0            },
769792   {"psubsb",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
770793   {"psubsw",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
771794   {"pminsw",         MODRM,         PARAM_MMX,         PARAM_MMXM,         0            },
r18449r18450
799822   {"???",            0,            0,               0,               0            }
800823};
801824
825static const I386_OPCODE i386_opcode_table0F38[256] =
826{
827   // 0x00
828   {"pshufb\0"
829    "pshufb\0"
830    "???\0"
831    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
832   {"phaddw\0"
833    "phaddw\0"
834    "???\0"
835    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
836   {"phaddd\0"
837    "phadd\0"
838    "???\0"
839    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
840   {"phaddsw\0"
841    "phaddsw\0"
842    "???\0"
843    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
844   {"pmaddubsw\0"
845    "pmaddubsw\0"
846    "???\0"
847    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
848   {"phsubw\0"
849    "phsubw\0"
850    "???\0"
851    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
852   {"phsubd\0"
853    "phsubd\0"
854    "???\0"
855    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
856   {"phsubsw\0"
857    "phsubsw\0"
858    "???\0"
859    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
860   {"psignb\0"
861    "psignb\0"
862    "???\0"
863    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
864   {"psignw\0"
865    "psignw\0"
866    "???\0"
867    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
868   {"psignd\0"
869    "psignd\0"
870    "???\0"
871    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
872   {"pmulhrsw\0"
873    "pmulhrsw\0"
874    "???\0"
875    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
876   {"???",            0,            0,         0,            0            },
877   {"???",            0,            0,         0,            0            },
878   {"???",            0,            0,         0,            0            },
879   {"???",            0,            0,         0,            0            },
880   // 0x10
881   {"???\0"
882    "pblendvb\0"
883    "???\0"
884    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_XMM0         },
885   {"???",            0,            0,         0,            0            },
886   {"???",            0,            0,         0,            0            },
887   {"???",            0,            0,         0,            0            },
888   {"???\0"
889    "blendvps\0"
890    "???\0"
891    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_XMM0         },
892   {"???\0"
893    "blendvpd\0"
894    "???\0"
895    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_XMM0         },
896   {"???",            0,            0,         0,            0            },
897   {"???\0"
898    "ptest\0"
899    "???\0"
900    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
901   {"???",            0,            0,         0,            0            },
902   {"???",            0,            0,         0,            0            },
903   {"???",            0,            0,         0,            0            },
904   {"???",            0,            0,         0,            0            },
905   {"pabsb\0"
906    "pabsb\0"
907    "???\0"
908    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
909   {"pabsw\0"
910    "pabsw\0"
911    "???\0"
912    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
913   {"pabsd\0"
914    "pabsd\0"
915    "???\0"
916    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
917   {"???",            0,            0,         0,            0            },
918   // 0x20
919   {"???\0"
920    "pmovsxbw\0"
921    "???\0"
922    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM64,         0            },
923   {"???\0"
924    "pmovsxbd\0"
925    "???\0"
926    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM32,         0            },
927   {"???\0"
928    "pmovsxbq\0"
929    "???\0"
930    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM16,         0            },
931   {"???\0"
932    "pmovsxwd\0"
933    "???\0"
934    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM64,         0            },
935   {"???\0"
936    "pmovsxwq\0"
937    "???\0"
938    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM32,         0            },
939   {"???\0"
940    "pmovsxdq\0"
941    "???\0"
942    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM64,         0            },
943   {"???",            0,            0,         0,            0            },
944   {"???",            0,            0,         0,            0            },
945   {"???\0"
946    "pmuldq\0"
947    "???\0"
948    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
949   {"???\0"
950    "pcmpeqq\0"
951    "???\0"
952    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
953   {"???\0"
954    "movntdqa\0"
955    "???\0"
956    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
957   {"???\0"
958    "packusdw\0"
959    "???\0"
960    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
961   {"???",            0,            0,         0,            0            },
962   {"???",            0,            0,         0,            0            },
963   {"???",            0,            0,         0,            0            },
964   {"???",            0,            0,         0,            0            },
965   // 0x30
966   {"???\0"
967    "pmovzxbw\0"
968    "???\0"
969    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM64,         0            },
970   {"???\0"
971    "pmovzxbd\0"
972    "???\0"
973    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM32,         0            },
974   {"???\0"
975    "pmovzxbq\0"
976    "???\0"
977    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM16,         0            },
978   {"???\0"
979    "pmovzxwd\0"
980    "???\0"
981    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM64,         0            },
982   {"???\0"
983    "pmovzxwq\0"
984    "???\0"
985    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM32,         0            },
986   {"???\0"
987    "pmovzxdq\0"
988    "???\0"
989    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMM64,         0            },
990   {"???",            0,            0,         0,            0            },
991   {"???\0"
992    "pcmpgtq\0"
993    "???\0"
994    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
995   {"???\0"
996    "pminsb\0"
997    "???\0"
998    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
999   {"???\0"
1000    "pminsd\0"
1001    "???\0"
1002    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1003   {"???\0"
1004    "pminuw\0"
1005    "???\0"
1006    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1007   {"???\0"
1008    "pminud\0"
1009    "???\0"
1010    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1011   {"???\0"
1012    "pmaxsb\0"
1013    "???\0"
1014    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1015   {"???\0"
1016    "pmaxsd\0"
1017    "???\0"
1018    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1019   {"???\0"
1020    "pmaxuw\0"
1021    "???\0"
1022    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1023   {"???\0"
1024    "pmaxud\0"
1025    "???\0"
1026    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1027   // 0x40
1028   {"???\0"
1029    "pmulld\0"
1030    "???\0"
1031    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1032   {"???\0"
1033    "phminposuw\0"
1034    "???\0"
1035    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1036   {"???",            0,            0,         0,            0            },
1037   {"???",            0,            0,         0,            0            },
1038   {"???",            0,            0,         0,            0            },
1039   {"???",            0,            0,         0,            0            },
1040   {"???",            0,            0,         0,            0            },
1041   {"???",            0,            0,         0,            0            },
1042   {"???",            0,            0,         0,            0            },
1043   {"???",            0,            0,         0,            0            },
1044   {"???",            0,            0,         0,            0            },
1045   {"???",            0,            0,         0,            0            },
1046   {"???",            0,            0,         0,            0            },
1047   {"???",            0,            0,         0,            0            },
1048   {"???",            0,            0,         0,            0            },
1049   {"???",            0,            0,         0,            0            },
1050   // 0x50
1051   {"???",            0,            0,         0,            0            },
1052   {"???",            0,            0,         0,            0            },
1053   {"???",            0,            0,         0,            0            },
1054   {"???",            0,            0,         0,            0            },
1055   {"???",            0,            0,         0,            0            },
1056   {"???",            0,            0,         0,            0            },
1057   {"???",            0,            0,         0,            0            },
1058   {"???",            0,            0,         0,            0            },
1059   {"???",            0,            0,         0,            0            },
1060   {"???",            0,            0,         0,            0            },
1061   {"???",            0,            0,         0,            0            },
1062   {"???",            0,            0,         0,            0            },
1063   {"???",            0,            0,         0,            0            },
1064   {"???",            0,            0,         0,            0            },
1065   {"???",            0,            0,         0,            0            },
1066   {"???",            0,            0,         0,            0            },
1067   // 0x60
1068   {"???",            0,            0,         0,            0            },
1069   {"???",            0,            0,         0,            0            },
1070   {"???",            0,            0,         0,            0            },
1071   {"???",            0,            0,         0,            0            },
1072   {"???",            0,            0,         0,            0            },
1073   {"???",            0,            0,         0,            0            },
1074   {"???",            0,            0,         0,            0            },
1075   {"???",            0,            0,         0,            0            },
1076   {"???",            0,            0,         0,            0            },
1077   {"???",            0,            0,         0,            0            },
1078   {"???",            0,            0,         0,            0            },
1079   {"???",            0,            0,         0,            0            },
1080   {"???",            0,            0,         0,            0            },
1081   {"???",            0,            0,         0,            0            },
1082   {"???",            0,            0,         0,            0            },
1083   {"???",            0,            0,         0,            0            },
1084   // 0x70
1085   {"???",            0,            0,         0,            0            },
1086   {"???",            0,            0,         0,            0            },
1087   {"???",            0,            0,         0,            0            },
1088   {"???",            0,            0,         0,            0            },
1089   {"???",            0,            0,         0,            0            },
1090   {"???",            0,            0,         0,            0            },
1091   {"???",            0,            0,         0,            0            },
1092   {"???",            0,            0,         0,            0            },
1093   {"???",            0,            0,         0,            0            },
1094   {"???",            0,            0,         0,            0            },
1095   {"???",            0,            0,         0,            0            },
1096   {"???",            0,            0,         0,            0            },
1097   {"???",            0,            0,         0,            0            },
1098   {"???",            0,            0,         0,            0            },
1099   {"???",            0,            0,         0,            0            },
1100   {"???",            0,            0,         0,            0            },
1101   // 0x80
1102   {"???\0"
1103    "invept\0"
1104    "???\0"
1105    "???",            MODRM|VAR_NAME4,   PARAM_REG32,         PARAM_XMMM,         0            },
1106   {"???\0"
1107    "invvpid\0"
1108    "???\0"
1109    "???",            MODRM|VAR_NAME4,   PARAM_REG32,         PARAM_XMMM,         0            },
1110   {"???\0"
1111    "invpcid\0"
1112    "???\0"
1113    "???",            MODRM|VAR_NAME4,   PARAM_REG32,         PARAM_XMMM,         0            },
1114   {"???",            0,            0,         0,            0            },
1115   {"???",            0,            0,         0,            0            },
1116   {"???",            0,            0,         0,            0            },
1117   {"???",            0,            0,         0,            0            },
1118   {"???",            0,            0,         0,            0            },
1119   {"???",            0,            0,         0,            0            },
1120   {"???",            0,            0,         0,            0            },
1121   {"???",            0,            0,         0,            0            },
1122   {"???",            0,            0,         0,            0            },
1123   {"???",            0,            0,         0,            0            },
1124   {"???",            0,            0,         0,            0            },
1125   {"???",            0,            0,         0,            0            },
1126   {"???",            0,            0,         0,            0            },
1127   // 0x90
1128   {"???",            0,            0,         0,            0            },
1129   {"???",            0,            0,         0,            0            },
1130   {"???",            0,            0,         0,            0            },
1131   {"???",            0,            0,         0,            0            },
1132   {"???",            0,            0,         0,            0            },
1133   {"???",            0,            0,         0,            0            },
1134   {"???",            0,            0,         0,            0            },
1135   {"???",            0,            0,         0,            0            },
1136   {"???",            0,            0,         0,            0            },
1137   {"???",            0,            0,         0,            0            },
1138   {"???",            0,            0,         0,            0            },
1139   {"???",            0,            0,         0,            0            },
1140   {"???",            0,            0,         0,            0            },
1141   {"???",            0,            0,         0,            0            },
1142   {"???",            0,            0,         0,            0            },
1143   {"???",            0,            0,         0,            0            },
1144   // 0xa0
1145   {"???",            0,            0,         0,            0            },
1146   {"???",            0,            0,         0,            0            },
1147   {"???",            0,            0,         0,            0            },
1148   {"???",            0,            0,         0,            0            },
1149   {"???",            0,            0,         0,            0            },
1150   {"???",            0,            0,         0,            0            },
1151   {"???",            0,            0,         0,            0            },
1152   {"???",            0,            0,         0,            0            },
1153   {"???",            0,            0,         0,            0            },
1154   {"???",            0,            0,         0,            0            },
1155   {"???",            0,            0,         0,            0            },
1156   {"???",            0,            0,         0,            0            },
1157   {"???",            0,            0,         0,            0            },
1158   {"???",            0,            0,         0,            0            },
1159   {"???",            0,            0,         0,            0            },
1160   {"???",            0,            0,         0,            0            },
1161   // 0xb0
1162   {"???",            0,            0,         0,            0            },
1163   {"???",            0,            0,         0,            0            },
1164   {"???",            0,            0,         0,            0            },
1165   {"???",            0,            0,         0,            0            },
1166   {"???",            0,            0,         0,            0            },
1167   {"???",            0,            0,         0,            0            },
1168   {"???",            0,            0,         0,            0            },
1169   {"???",            0,            0,         0,            0            },
1170   {"???",            0,            0,         0,            0            },
1171   {"???",            0,            0,         0,            0            },
1172   {"???",            0,            0,         0,            0            },
1173   {"???",            0,            0,         0,            0            },
1174   {"???",            0,            0,         0,            0            },
1175   {"???",            0,            0,         0,            0            },
1176   {"???",            0,            0,         0,            0            },
1177   {"???",            0,            0,         0,            0            },
1178   // 0xc0
1179   {"???",            0,            0,         0,            0            },
1180   {"???",            0,            0,         0,            0            },
1181   {"???",            0,            0,         0,            0            },
1182   {"???",            0,            0,         0,            0            },
1183   {"???",            0,            0,         0,            0            },
1184   {"???",            0,            0,         0,            0            },
1185   {"???",            0,            0,         0,            0            },
1186   {"???",            0,            0,         0,            0            },
1187   {"???",            0,            0,         0,            0            },
1188   {"???",            0,            0,         0,            0            },
1189   {"???",            0,            0,         0,            0            },
1190   {"???",            0,            0,         0,            0            },
1191   {"???",            0,            0,         0,            0            },
1192   {"???",            0,            0,         0,            0            },
1193   {"???",            0,            0,         0,            0            },
1194   {"???",            0,            0,         0,            0            },
1195   // 0xd0
1196   {"???",            0,            0,         0,            0            },
1197   {"???",            0,            0,         0,            0            },
1198   {"???",            0,            0,         0,            0            },
1199   {"???",            0,            0,         0,            0            },
1200   {"???",            0,            0,         0,            0            },
1201   {"???",            0,            0,         0,            0            },
1202   {"???",            0,            0,         0,            0            },
1203   {"???",            0,            0,         0,            0            },
1204   {"???",            0,            0,         0,            0            },
1205   {"???",            0,            0,         0,            0            },
1206   {"???",            0,            0,         0,            0            },
1207   {"???\0"
1208    "aesimc\0"
1209    "???\0"
1210    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1211   {"???\0"
1212    "aesenc\0"
1213    "???\0"
1214    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1215   {"???\0"
1216    "aesenclast\0"
1217    "???\0"
1218    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1219   {"???\0"
1220    "aesdec\0"
1221    "???\0"
1222    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1223   {"???\0"
1224    "aesdeclast\0"
1225    "???\0"
1226    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         0            },
1227   // 0xe0
1228   {"???",            0,            0,         0,            0            },
1229   {"???",            0,            0,         0,            0            },
1230   {"???",            0,            0,         0,            0            },
1231   {"???",            0,            0,         0,            0            },
1232   {"???",            0,            0,         0,            0            },
1233   {"???",            0,            0,         0,            0            },
1234   {"???",            0,            0,         0,            0            },
1235   {"???",            0,            0,         0,            0            },
1236   {"???",            0,            0,         0,            0            },
1237   {"???",            0,            0,         0,            0            },
1238   {"???",            0,            0,         0,            0            },
1239   {"???",            0,            0,         0,            0            },
1240   {"???",            0,            0,         0,            0            },
1241   {"???",            0,            0,         0,            0            },
1242   {"???",            0,            0,         0,            0            },
1243   {"???",            0,            0,         0,            0            },
1244   // 0xf0
1245   {"movbe\0"
1246    "???\0"
1247    "crc32\0"
1248    "???",            MODRM|VAR_NAME4,   PARAM_REG32,         PARAM_RMPTR,         0            }, // not quite correct
1249   {"movbe\0"
1250    "???\0"
1251    "crc32\0"
1252    "???",            MODRM|VAR_NAME4,   PARAM_RMPTR,         PARAM_REG32,         0            }, // not quite correct
1253   {"???",            0,            0,         0,            0            },
1254   {"???",            0,            0,         0,            0            },
1255   {"???",            0,            0,         0,            0            },
1256   {"???",            0,            0,         0,            0            },
1257   {"???",            0,            0,         0,            0            },
1258   {"???",            0,            0,         0,            0            },
1259   {"???",            0,            0,         0,            0            },
1260   {"???",            0,            0,         0,            0            },
1261   {"???",            0,            0,         0,            0            },
1262   {"???",            0,            0,         0,            0            },
1263   {"???",            0,            0,         0,            0            },
1264   {"???",            0,            0,         0,            0            },
1265   {"???",            0,            0,         0,            0            },
1266   {"???",            0,            0,         0,            0            },
1267};
1268
1269static const I386_OPCODE i386_opcode_table0F3A[256] =
1270{
1271   // 0x00
1272   {"???",            0,            0,         0,            0            },
1273   {"???",            0,            0,         0,            0            },
1274   {"???",            0,            0,         0,            0            },
1275   {"???",            0,            0,         0,            0            },
1276   {"???",            0,            0,         0,            0            },
1277   {"???",            0,            0,         0,            0            },
1278   {"???",            0,            0,         0,            0            },
1279   {"???",            0,            0,         0,            0            },
1280   {"???\0"
1281    "roundps\0"
1282    "???\0"
1283    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1284   {"???\0"
1285    "roundpd\0"
1286    "???\0"
1287    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1288   {"???\0"
1289    "roundss\0"
1290    "???\0"
1291    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1292   {"???\0"
1293    "roundsd\0"
1294    "???\0"
1295    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1296   {"???\0"
1297    "blendps\0"
1298    "???\0"
1299    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1300   {"???\0"
1301    "blendpd\0"
1302    "???\0"
1303    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1304   {"???\0"
1305    "pblendw\0"
1306    "???\0"
1307    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1308   {"palignr\0"
1309    "palignr\0"
1310    "???\0"
1311    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1312   // 0x10
1313   {"???",            0,            0,         0,            0            },
1314   {"???",            0,            0,         0,            0            },
1315   {"???",            0,            0,         0,            0            },
1316   {"???",            0,            0,         0,            0            },
1317   {"???\0"
1318    "pextrb\0"
1319    "???\0"
1320    "???",            MODRM|VAR_NAME4,   PARAM_RM8,         PARAM_XMM,         PARAM_UI8         },
1321   {"???\0"
1322    "pextrw\0"
1323    "???\0"
1324    "???",            MODRM|VAR_NAME4,   PARAM_RM16,         PARAM_XMM,         PARAM_UI8         },
1325   {"???\0"
1326    "pextrd\0"
1327    "???\0"
1328    "???",            MODRM|VAR_NAME4,   PARAM_RM8,         PARAM_XMM,         PARAM_UI8         },
1329   {"???\0"
1330    "extractps\0"
1331    "???\0"
1332    "???",            MODRM|VAR_NAME4,   PARAM_RM32,         PARAM_XMM,         PARAM_UI8         },
1333   {"???",            0,            0,         0,            0            },
1334   {"???",            0,            0,         0,            0            },
1335   {"???",            0,            0,         0,            0            },
1336   {"???",            0,            0,         0,            0            },
1337   {"???",            0,            0,         0,            0            },
1338   {"???",            0,            0,         0,            0            },
1339   {"???",            0,            0,         0,            0            },
1340   {"???",            0,            0,         0,            0            },
1341   // 0x20
1342   {"???\0"
1343    "pinsrb\0"
1344    "???\0"
1345    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_RM8,         PARAM_UI8         },
1346   {"???\0"
1347    "insertps\0"
1348    "???\0"
1349    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_RM8,         PARAM_UI8         },
1350   {"???\0"
1351    "pinsrd\0"
1352    "???\0"
1353    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_RM32,         PARAM_UI8         },
1354   {"???",            0,            0,         0,            0            },
1355   {"???",            0,            0,         0,            0            },
1356   {"???",            0,            0,         0,            0            },
1357   {"???",            0,            0,         0,            0            },
1358   {"???",            0,            0,         0,            0            },
1359   {"???",            0,            0,         0,            0            },
1360   {"???",            0,            0,         0,            0            },
1361   {"???",            0,            0,         0,            0            },
1362   {"???",            0,            0,         0,            0            },
1363   {"???",            0,            0,         0,            0            },
1364   {"???",            0,            0,         0,            0            },
1365   {"???",            0,            0,         0,            0            },
1366   {"???",            0,            0,         0,            0            },
1367   // 0x30
1368   {"???",            0,            0,         0,            0            },
1369   {"???",            0,            0,         0,            0            },
1370   {"???",            0,            0,         0,            0            },
1371   {"???",            0,            0,         0,            0            },
1372   {"???",            0,            0,         0,            0            },
1373   {"???",            0,            0,         0,            0            },
1374   {"???",            0,            0,         0,            0            },
1375   {"???",            0,            0,         0,            0            },
1376   {"???",            0,            0,         0,            0            },
1377   {"???",            0,            0,         0,            0            },
1378   {"???",            0,            0,         0,            0            },
1379   {"???",            0,            0,         0,            0            },
1380   {"???",            0,            0,         0,            0            },
1381   {"???",            0,            0,         0,            0            },
1382   {"???",            0,            0,         0,            0            },
1383   {"???",            0,            0,         0,            0            },
1384   // 0x40
1385   {"???\0"
1386    "dpps\0"
1387    "???\0"
1388    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1389   {"???\0"
1390    "dppd\0"
1391    "???\0"
1392    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1393   {"???\0"
1394    "mpsadbw\0"
1395    "???\0"
1396    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1397   {"???",            0,            0,         0,            0            },
1398   {"???\0"
1399    "pclmulqdq\0"
1400    "???\0"
1401    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1402   {"???",            0,            0,         0,            0            },
1403   {"???",            0,            0,         0,            0            },
1404   {"???",            0,            0,         0,            0            },
1405   {"???",            0,            0,         0,            0            },
1406   {"???",            0,            0,         0,            0            },
1407   {"???",            0,            0,         0,            0            },
1408   {"???",            0,            0,         0,            0            },
1409   {"???",            0,            0,         0,            0            },
1410   {"???",            0,            0,         0,            0            },
1411   {"???",            0,            0,         0,            0            },
1412   {"???",            0,            0,         0,            0            },
1413   // 0x50
1414   {"???",            0,            0,         0,            0            },
1415   {"???",            0,            0,         0,            0            },
1416   {"???",            0,            0,         0,            0            },
1417   {"???",            0,            0,         0,            0            },
1418   {"???",            0,            0,         0,            0            },
1419   {"???",            0,            0,         0,            0            },
1420   {"???",            0,            0,         0,            0            },
1421   {"???",            0,            0,         0,            0            },
1422   {"???",            0,            0,         0,            0            },
1423   {"???",            0,            0,         0,            0            },
1424   {"???",            0,            0,         0,            0            },
1425   {"???",            0,            0,         0,            0            },
1426   {"???",            0,            0,         0,            0            },
1427   {"???",            0,            0,         0,            0            },
1428   {"???",            0,            0,         0,            0            },
1429   {"???",            0,            0,         0,            0            },
1430   // 0x60
1431   {"???\0"
1432    "pcmestrm\0"
1433    "???\0"
1434    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1435   {"???\0"
1436    "pcmestri\0"
1437    "???\0"
1438    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1439   {"???\0"
1440    "pcmistrm\0"
1441    "???\0"
1442    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1443   {"???\0"
1444    "pcmistri\0"
1445    "???\0"
1446    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1447   {"???",            0,            0,         0,            0            },
1448   {"???",            0,            0,         0,            0            },
1449   {"???",            0,            0,         0,            0            },
1450   {"???",            0,            0,         0,            0            },
1451   {"???",            0,            0,         0,            0            },
1452   {"???",            0,            0,         0,            0            },
1453   {"???",            0,            0,         0,            0            },
1454   {"???",            0,            0,         0,            0            },
1455   {"???",            0,            0,         0,            0            },
1456   {"???",            0,            0,         0,            0            },
1457   {"???",            0,            0,         0,            0            },
1458   {"???",            0,            0,         0,            0            },
1459   // 0x70
1460   {"???",            0,            0,         0,            0            },
1461   {"???",            0,            0,         0,            0            },
1462   {"???",            0,            0,         0,            0            },
1463   {"???",            0,            0,         0,            0            },
1464   {"???",            0,            0,         0,            0            },
1465   {"???",            0,            0,         0,            0            },
1466   {"???",            0,            0,         0,            0            },
1467   {"???",            0,            0,         0,            0            },
1468   {"???",            0,            0,         0,            0            },
1469   {"???",            0,            0,         0,            0            },
1470   {"???",            0,            0,         0,            0            },
1471   {"???",            0,            0,         0,            0            },
1472   {"???",            0,            0,         0,            0            },
1473   {"???",            0,            0,         0,            0            },
1474   {"???",            0,            0,         0,            0            },
1475   {"???",            0,            0,         0,            0            },
1476   // 0x80
1477   {"???",            0,            0,         0,            0            },
1478   {"???",            0,            0,         0,            0            },
1479   {"???",            0,            0,         0,            0            },
1480   {"???",            0,            0,         0,            0            },
1481   {"???",            0,            0,         0,            0            },
1482   {"???",            0,            0,         0,            0            },
1483   {"???",            0,            0,         0,            0            },
1484   {"???",            0,            0,         0,            0            },
1485   {"???",            0,            0,         0,            0            },
1486   {"???",            0,            0,         0,            0            },
1487   {"???",            0,            0,         0,            0            },
1488   {"???",            0,            0,         0,            0            },
1489   {"???",            0,            0,         0,            0            },
1490   {"???",            0,            0,         0,            0            },
1491   {"???",            0,            0,         0,            0            },
1492   {"???",            0,            0,         0,            0            },
1493   // 0x90
1494   {"???",            0,            0,         0,            0            },
1495   {"???",            0,            0,         0,            0            },
1496   {"???",            0,            0,         0,            0            },
1497   {"???",            0,            0,         0,            0            },
1498   {"???",            0,            0,         0,            0            },
1499   {"???",            0,            0,         0,            0            },
1500   {"???",            0,            0,         0,            0            },
1501   {"???",            0,            0,         0,            0            },
1502   {"???",            0,            0,         0,            0            },
1503   {"???",            0,            0,         0,            0            },
1504   {"???",            0,            0,         0,            0            },
1505   {"???",            0,            0,         0,            0            },
1506   {"???",            0,            0,         0,            0            },
1507   {"???",            0,            0,         0,            0            },
1508   {"???",            0,            0,         0,            0            },
1509   {"???",            0,            0,         0,            0            },
1510   // 0xa0
1511   {"???",            0,            0,         0,            0            },
1512   {"???",            0,            0,         0,            0            },
1513   {"???",            0,            0,         0,            0            },
1514   {"???",            0,            0,         0,            0            },
1515   {"???",            0,            0,         0,            0            },
1516   {"???",            0,            0,         0,            0            },
1517   {"???",            0,            0,         0,            0            },
1518   {"???",            0,            0,         0,            0            },
1519   {"???",            0,            0,         0,            0            },
1520   {"???",            0,            0,         0,            0            },
1521   {"???",            0,            0,         0,            0            },
1522   {"???",            0,            0,         0,            0            },
1523   {"???",            0,            0,         0,            0            },
1524   {"???",            0,            0,         0,            0            },
1525   {"???",            0,            0,         0,            0            },
1526   {"???",            0,            0,         0,            0            },
1527   // 0xb0
1528   {"???",            0,            0,         0,            0            },
1529   {"???",            0,            0,         0,            0            },
1530   {"???",            0,            0,         0,            0            },
1531   {"???",            0,            0,         0,            0            },
1532   {"???",            0,            0,         0,            0            },
1533   {"???",            0,            0,         0,            0            },
1534   {"???",            0,            0,         0,            0            },
1535   {"???",            0,            0,         0,            0            },
1536   {"???",            0,            0,         0,            0            },
1537   {"???",            0,            0,         0,            0            },
1538   {"???",            0,            0,         0,            0            },
1539   {"???",            0,            0,         0,            0            },
1540   {"???",            0,            0,         0,            0            },
1541   {"???",            0,            0,         0,            0            },
1542   {"???",            0,            0,         0,            0            },
1543   {"???",            0,            0,         0,            0            },
1544   // 0xc0
1545   {"???",            0,            0,         0,            0            },
1546   {"???",            0,            0,         0,            0            },
1547   {"???",            0,            0,         0,            0            },
1548   {"???",            0,            0,         0,            0            },
1549   {"???",            0,            0,         0,            0            },
1550   {"???",            0,            0,         0,            0            },
1551   {"???",            0,            0,         0,            0            },
1552   {"???",            0,            0,         0,            0            },
1553   {"???",            0,            0,         0,            0            },
1554   {"???",            0,            0,         0,            0            },
1555   {"???",            0,            0,         0,            0            },
1556   {"???",            0,            0,         0,            0            },
1557   {"???",            0,            0,         0,            0            },
1558   {"???",            0,            0,         0,            0            },
1559   {"???",            0,            0,         0,            0            },
1560   {"???",            0,            0,         0,            0            },
1561   // 0xd0
1562   {"???",            0,            0,         0,            0            },
1563   {"???",            0,            0,         0,            0            },
1564   {"???",            0,            0,         0,            0            },
1565   {"???",            0,            0,         0,            0            },
1566   {"???",            0,            0,         0,            0            },
1567   {"???",            0,            0,         0,            0            },
1568   {"???",            0,            0,         0,            0            },
1569   {"???",            0,            0,         0,            0            },
1570   {"???",            0,            0,         0,            0            },
1571   {"???",            0,            0,         0,            0            },
1572   {"???",            0,            0,         0,            0            },
1573   {"???",            0,            0,         0,            0            },
1574   {"???",            0,            0,         0,            0            },
1575   {"???",            0,            0,         0,            0            },
1576   {"???",            0,            0,         0,            0            },
1577   {"???\0"
1578    "aeskeygenassist\0"
1579    "???\0"
1580    "???",            MODRM|VAR_NAME4,   PARAM_XMM,         PARAM_XMMM,         PARAM_UI8         },
1581   // 0xe0
1582   {"???",            0,            0,         0,            0            },
1583   {"???",            0,            0,         0,            0            },
1584   {"???",            0,            0,         0,            0            },
1585   {"???",            0,            0,         0,            0            },
1586   {"???",            0,            0,         0,            0            },
1587   {"???",            0,            0,         0,            0            },
1588   {"???",            0,            0,         0,            0            },
1589   {"???",            0,            0,         0,            0            },
1590   {"???",            0,            0,         0,            0            },
1591   {"???",            0,            0,         0,            0            },
1592   {"???",            0,            0,         0,            0            },
1593   {"???",            0,            0,         0,            0            },
1594   {"???",            0,            0,         0,            0            },
1595   {"???",            0,            0,         0,            0            },
1596   {"???",            0,            0,         0,            0            },
1597   {"???",            0,            0,         0,            0            },
1598   // 0xf0
1599   {"???",            0,            0,         0,            0            },
1600   {"???",            0,            0,         0,            0            },
1601   {"???",            0,            0,         0,            0            },
1602   {"???",            0,            0,         0,            0            },
1603   {"???",            0,            0,         0,            0            },
1604   {"???",            0,            0,         0,            0            },
1605   {"???",            0,            0,         0,            0            },
1606   {"???",            0,            0,         0,            0            },
1607   {"???",            0,            0,         0,            0            },
1608   {"???",            0,            0,         0,            0            },
1609   {"???",            0,            0,         0,            0            },
1610   {"???",            0,            0,         0,            0            },
1611   {"???",            0,            0,         0,            0            },
1612   {"???",            0,            0,         0,            0            },
1613   {"???",            0,            0,         0,            0            },
1614   {"???",            0,            0,         0,            0            },
1615};
1616
8021617static const I386_OPCODE group80_table[8] =
8031618{
8041619   {"add",            0,            PARAM_RMPTR8,      PARAM_I8,         0            },
r18449r18450
9101725static const I386_OPCODE groupF6_table[8] =
9111726{
9121727   {"test",         0,            PARAM_RMPTR8,      PARAM_I8,         0            },
913   {"???",            0,            0,               0,               0            },
1728   {"test",         0,            PARAM_RMPTR8,      PARAM_I8,         0            },
9141729   {"not",            0,            PARAM_RMPTR8,      0,               0            },
9151730   {"neg",            0,            PARAM_RMPTR8,      0,               0            },
9161731   {"mul",            0,            PARAM_RMPTR8,      0,               0            },
r18449r18450
9221737static const I386_OPCODE groupF7_table[8] =
9231738{
9241739   {"test",         0,            PARAM_RMPTR,      PARAM_IMM,         0            },
925   {"???",            0,            0,               0,               0            },
1740   {"test",         0,            PARAM_RMPTR,      PARAM_IMM,         0            },
9261741   {"not",            0,            PARAM_RMPTR,      0,               0            },
9271742   {"neg",            0,            PARAM_RMPTR,      0,               0            },
9281743   {"mul",            0,            PARAM_RMPTR,      0,               0            },
r18449r18450
9791794   {"invlpg",         0,            PARAM_RM,         0,               0            }
9801795};
9811796
1797static const I386_OPCODE group0F0D_table[8] =
1798{
1799   {"prefetch",      0,            PARAM_RM8,         0,               0            },
1800   {"prefetchw",      0,            PARAM_RM8,         0,               0            },
1801   {"???",            0,            0,               0,               0            },
1802   {"???",            0,            0,               0,               0            },
1803   {"???",            0,            0,               0,               0            },
1804   {"???",            0,            0,               0,               0            },
1805   {"???",            0,            0,               0,               0            },
1806   {"???",            0,            0,               0,               0            }
1807};
1808
9821809static const I386_OPCODE group0F18_table[8] =
9831810{
9841811   {"prefetchnta",      0,            PARAM_RM8,         0,               0            },
r18449r18450
10521879   {"btc",            0,            PARAM_RM,         PARAM_I8,         0            }
10531880};
10541881
1882static const I386_OPCODE group0FC7_table[8] =
1883{
1884   {"???",            0,            0,               0,               0            },
1885   {"cmpxchg8b",         MODRM,            PARAM_M64PTR,            0,               0            },
1886   {"???",            0,            0,               0,               0            },
1887   {"???",            0,            0,               0,               0            },
1888   {"???",            0,            0,               0,               0            },
1889   {"???",            0,            0,               0,               0            },
1890   {"vmptrld\0"
1891    "vmclear\0"
1892    "???\0"
1893    "vmxon",         MODRM|VAR_NAME4,      PARAM_M64PTR,            0,               0            },
1894   {"vmptrtst",         MODRM,            PARAM_M64PTR,            0,               0            }
1895};
1896
10551897static const GROUP_OP group_op_table[] =
10561898{
10571899   { "group80",         group80_table         },
r18449r18450
10691911   { "groupFF",         groupFF_table         },
10701912   { "group0F00",         group0F00_table         },
10711913   { "group0F01",         group0F01_table         },
1914   { "group0F0D",         group0F0D_table         },
10721915   { "group0F18",         group0F18_table         },
10731916   { "group0F71",         group0F71_table         },
10741917   { "group0F72",         group0F72_table         },
10751918   { "group0F73",         group0F73_table         },
10761919   { "group0FAE",         group0FAE_table         },
1077   { "group0FBA",         group0FBA_table         }
1920   { "group0FBA",         group0FBA_table         },
1921   { "group0FC7",         group0FC7_table         }
10781922};
10791923
10801924
r18449r18450
15992443         s += sprintf( s, "dx" );
16002444         break;
16012445
2446      case PARAM_XMM0:
2447         s += sprintf( s, "xmm0" );
2448         break;
2449
16022450      case PARAM_AL: s += sprintf( s, "al" ); break;
16032451      case PARAM_CL: s += sprintf( s, "cl" ); break;
16042452      case PARAM_DL: s += sprintf( s, "dl" ); break;
r18449r18450
20532901         decode_opcode( s, &i386_opcode_table2[op2], op1 );
20542902         return;
20552903
2904      case THREE_BYTE:
2905         op2 = FETCHD();
2906         if (opcode_ptr[-2] == 0x38)
2907            decode_opcode( s, &i386_opcode_table0F38[op2], op1 );
2908         else
2909            decode_opcode( s, &i386_opcode_table0F3A[op2], op1 );
2910         return;
2911
20562912      case SEG_CS:
20572913      case SEG_DS:
20582914      case SEG_ES:
r18449r18450
20672923
20682924      case PREFIX:
20692925         op2 = FETCH();
2070         if (op2 != 0x0f)
2926         if ((op2 != 0x0f) && (op2 != 0x90))
20712927            s += sprintf( s, "%-7s ", op->mnemonic );
2928         if ((op2 == 0x90) && !pre0f)
2929            pre0f = op1;
20722930         decode_opcode( s, &i386_opcode_table1[op2], op2 );
20732931         return;
20742932

Previous 199869 Revisions Next


© 1997-2024 The MAME Team