llvm.org GIT mirror llvm / ced2756
Recommit r201059 and r201060 with hopefully a fix for its original failure. Original commits messages: Add MRMXr/MRMXm form to X86 for use by instructions which treat the 'reg' field of modrm byte as a don't care value. Will allow for simplification of disassembler code. Simplify a bunch of code by removing the need for the x86 disassembler table builder to know about extended opcodes. The modrm forms are sufficient to convey the information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201065 91177308-0d34-0410-b5e6-96231b3b80d8 Craig Topper 6 years ago
9 changed file(s) with 79 addition(s) and 314 deletion(s). Raw diff Collapse all Expand all
270270 /// register SI/ESI/ERI with a possible segment override, and also the
271271 /// destination index register DI/ESI/RDI.
272272 RawFrmDstSrc = 10,
273
274 /// MRMX[rm] - The forms are used to represent instructions that use a
275 /// Mod/RM byte, and don't use the middle field for anything.
276 MRMXr = 14, MRMXm = 15,
273277
274278 /// MRM[0-7][rm] - These forms are used to represent instructions that use
275279 /// a Mod/RM byte, and use the middle field to hold extended opcode
673677 // Opcode == X86::LEA16r || Opcode == X86::LEA32r)
674678 return FirstMemOp;
675679 }
680 case X86II::MRMXr:
676681 case X86II::MRM0r: case X86II::MRM1r:
677682 case X86II::MRM2r: case X86II::MRM3r:
678683 case X86II::MRM4r: case X86II::MRM5r:
679684 case X86II::MRM6r: case X86II::MRM7r:
680685 return -1;
686 case X86II::MRMXm:
681687 case X86II::MRM0m: case X86II::MRM1m:
682688 case X86II::MRM2m: case X86II::MRM3m:
683689 case X86II::MRM4m: case X86II::MRM5m:
10551055 }
10561056 break;
10571057 }
1058 case X86II::MRMXm:
10581059 case X86II::MRM0m: case X86II::MRM1m:
10591060 case X86II::MRM2m: case X86II::MRM3m:
10601061 case X86II::MRM4m: case X86II::MRM5m:
14251426 break;
14261427 }
14271428
1429 case X86II::MRMXr:
14281430 case X86II::MRM0r: case X86II::MRM1r:
14291431 case X86II::MRM2r: case X86II::MRM3r:
14301432 case X86II::MRM4r: case X86II::MRM5r:
1431 case X86II::MRM6r: case X86II::MRM7r:
1433 case X86II::MRM6r: case X86II::MRM7r: {
14321434 if (HasVEX_4V) // Skip the register dst (which is encoded in VEX_VVVV).
14331435 ++CurOp;
14341436 EmitByte(BaseOpcode, CurByte, OS);
1437 uint64_t Form = TSFlags & X86II::FormMask;
14351438 EmitRegModRMByte(MI.getOperand(CurOp++),
1436 (TSFlags & X86II::FormMask)-X86II::MRM0r,
1439 (Form == X86II::MRMXr) ? 0 : Form-X86II::MRM0r,
14371440 CurByte, OS);
14381441 break;
1442 }
1443
1444 case X86II::MRMXm:
14391445 case X86II::MRM0m: case X86II::MRM1m:
14401446 case X86II::MRM2m: case X86II::MRM3m:
14411447 case X86II::MRM4m: case X86II::MRM5m:
1442 case X86II::MRM6m: case X86II::MRM7m:
1448 case X86II::MRM6m: case X86II::MRM7m: {
14431449 if (HasVEX_4V) // Skip the register dst (which is encoded in VEX_VVVV).
14441450 ++CurOp;
14451451 EmitByte(BaseOpcode, CurByte, OS);
1446 EmitMemModRMByte(MI, CurOp, (TSFlags & X86II::FormMask)-X86II::MRM0m,
1452 uint64_t Form = TSFlags & X86II::FormMask;
1453 EmitMemModRMByte(MI, CurOp, (Form == X86II::MRMXm) ? 0 : Form-X86II::MRM0m,
14471454 TSFlags, CurByte, OS, Fixups, STI);
14481455 CurOp += X86::AddrNumOperands;
14491456 break;
1457 }
14501458 case X86II::MRM_C1: case X86II::MRM_C2: case X86II::MRM_C3:
14511459 case X86II::MRM_C4: case X86II::MRM_C8: case X86II::MRM_C9:
14521460 case X86II::MRM_CA: case X86II::MRM_CB: case X86II::MRM_D0:
211211 }
212212 break;
213213 }
214 case X86II::MRMXm:
214215 case X86II::MRM0m: case X86II::MRM1m:
215216 case X86II::MRM2m: case X86II::MRM3m:
216217 case X86II::MRM4m: case X86II::MRM5m:
12941295 break;
12951296 }
12961297
1298 case X86II::MRMXr:
12971299 case X86II::MRM0r: case X86II::MRM1r:
12981300 case X86II::MRM2r: case X86II::MRM3r:
12991301 case X86II::MRM4r: case X86II::MRM5r:
13011303 if (HasVEX_4V) // Skip the register dst (which is encoded in VEX_VVVV).
13021304 ++CurOp;
13031305 MCE.emitByte(BaseOpcode);
1306 uint64_t Form = (Desc->TSFlags & X86II::FormMask);
13041307 emitRegModRMByte(MI.getOperand(CurOp++).getReg(),
1305 (Desc->TSFlags & X86II::FormMask)-X86II::MRM0r);
1308 (Form == X86II::MRMXr) ? 0 : Form-X86II::MRM0r);
13061309
13071310 if (CurOp == NumOps)
13081311 break;
13311334 break;
13321335 }
13331336
1337 case X86II::MRMXm:
13341338 case X86II::MRM0m: case X86II::MRM1m:
13351339 case X86II::MRM2m: case X86II::MRM3m:
13361340 case X86II::MRM4m: case X86II::MRM5m:
13421346 X86II::getSizeOfImm(Desc->TSFlags) : 4) : 0;
13431347
13441348 MCE.emitByte(BaseOpcode);
1345 emitMemModRMByte(MI, CurOp, (Desc->TSFlags & X86II::FormMask)-X86II::MRM0m,
1349 uint64_t Form = (Desc->TSFlags & X86II::FormMask);
1350 emitMemModRMByte(MI, CurOp, (Form==X86II::MRMXm) ? 0 : Form - X86II::MRM0m,
13461351 PCAdj);
13471352 CurOp += X86::AddrNumOperands;
13481353
8181 // SetCC instructions.
8282 multiclass SETCC opc, string Mnemonic, PatLeaf OpNode> {
8383 let Uses = [EFLAGS] in {
84 def r : I0r, (outs GR8:$dst), (ins),
84 def r : IXr, (outs GR8:$dst), (ins),
8585 !strconcat(Mnemonic, "\t$dst"),
8686 [(set GR8:$dst, (X86setcc OpNode, EFLAGS))],
8787 IIC_SET_R>, TB, Sched<[WriteALU]>;
88 def m : I0m, (outs), (ins i8mem:$dst),
88 def m : IXm, (outs), (ins i8mem:$dst),
8989 !strconcat(Mnemonic, "\t$dst"),
9090 [(store (X86setcc OpNode, EFLAGS), addr:$dst)],
9191 IIC_SET_M>, TB, Sched<[WriteALU, WriteStore]>;
2323 def MRMSrcMem : Format<6>; def RawFrmMemOffs : Format<7>;
2424 def RawFrmSrc : Format<8>; def RawFrmDst : Format<9>;
2525 def RawFrmDstSrc: Format<10>;
26 def MRMXr : Format<14>; def MRMXm : Format<15>;
2627 def MRM0r : Format<16>; def MRM1r : Format<17>; def MRM2r : Format<18>;
2728 def MRM3r : Format<19>; def MRM4r : Format<20>; def MRM5r : Format<21>;
2829 def MRM6r : Format<22>; def MRM7r : Format<23>;
927927 // Nop
928928 let neverHasSideEffects = 1, SchedRW = [WriteZero] in {
929929 def NOOP : I<0x90, RawFrm, (outs), (ins), "nop", [], IIC_NOP>;
930 def NOOPW : I<0x1f, MRM0m, (outs), (ins i16mem:$zero),
930 def NOOPW : I<0x1f, MRMXm, (outs), (ins i16mem:$zero),
931931 "nop{w}\t$zero", [], IIC_NOP>, TB, OpSize16;
932 def NOOPL : I<0x1f, MRM0m, (outs), (ins i32mem:$zero),
932 def NOOPL : I<0x1f, MRMXm, (outs), (ins i32mem:$zero),
933933 "nop{l}\t$zero", [], IIC_NOP>, TB, OpSize32;
934934 }
935935
76767676 let Predicates = [HasSSE4A] in {
76777677
76787678 let Constraints = "$src = $dst" in {
7679 def EXTRQI : Ii8<0x78, MRM0r, (outs VR128:$dst),
7679 def EXTRQI : Ii8<0x78, MRMXr, (outs VR128:$dst),
76807680 (ins VR128:$src, i8imm:$len, i8imm:$idx),
76817681 "extrq\t{$idx, $len, $src|$src, $len, $idx}",
76827682 [(set VR128:$dst, (int_x86_sse4a_extrqi VR128:$src, imm:$len,
13871387 vmovd %xmm0, %eax
13881388 vmovd %xmm0, %rax
13891389 vmovq %xmm0, %rax
1390
1391 // CHECK: seto 3735928559(%r10,%r9,8)
1392 // CHECK: encoding: [0x43,0x0f,0x90,0x84,0xca,0xef,0xbe,0xad,0xde]
1393 seto 0xdeadbeef(%r10,%r9,8)
6262 RawFrmSrc = 8,
6363 RawFrmDst = 9,
6464 RawFrmDstSrc = 10,
65 MRMXr = 14, MRMXm = 15,
6566 MRM0r = 16, MRM1r = 17, MRM2r = 18, MRM3r = 19,
6667 MRM4r = 20, MRM5r = 21, MRM6r = 22, MRM7r = 23,
6768 MRM0m = 24, MRM1m = 25, MRM2m = 26, MRM3m = 27,
9495 };
9596 }
9697
97 // If rows are added to the opcode extension tables, then corresponding entries
98 // must be added here.
99 //
100 // If the row corresponds to a single byte (i.e., 8f), then add an entry for
101 // that byte to ONE_BYTE_EXTENSION_TABLES.
102 //
103 // If the row corresponds to two bytes where the first is 0f, add an entry for
104 // the second byte to TWO_BYTE_EXTENSION_TABLES.
105 //
106 // If the row corresponds to some other set of bytes, you will need to modify
107 // the code in RecognizableInstr::emitDecodePath() as well, and add new prefixes
108 // to the X86 TD files, except in two cases: if the first two bytes of such a
109 // new combination are 0f 38 or 0f 3a, you just have to add maps called
110 // THREE_BYTE_38_EXTENSION_TABLES and THREE_BYTE_3A_EXTENSION_TABLES and add a
111 // switch(Opcode) just below the case X86Local::T8: or case X86Local::TA: line
112 // in RecognizableInstr::emitDecodePath().
113
114 #define ONE_BYTE_EXTENSION_TABLES \
115 EXTENSION_TABLE(80) \
116 EXTENSION_TABLE(81) \
117 EXTENSION_TABLE(82) \
118 EXTENSION_TABLE(83) \
119 EXTENSION_TABLE(8f) \
120 EXTENSION_TABLE(c0) \
121 EXTENSION_TABLE(c1) \
122 EXTENSION_TABLE(c6) \
123 EXTENSION_TABLE(c7) \
124 EXTENSION_TABLE(d0) \
125 EXTENSION_TABLE(d1) \
126 EXTENSION_TABLE(d2) \
127 EXTENSION_TABLE(d3) \
128 EXTENSION_TABLE(f6) \
129 EXTENSION_TABLE(f7) \
130 EXTENSION_TABLE(fe) \
131 EXTENSION_TABLE(ff)
132
133 #define TWO_BYTE_EXTENSION_TABLES \
134 EXTENSION_TABLE(00) \
135 EXTENSION_TABLE(01) \
136 EXTENSION_TABLE(0d) \
137 EXTENSION_TABLE(18) \
138 EXTENSION_TABLE(71) \
139 EXTENSION_TABLE(72) \
140 EXTENSION_TABLE(73) \
141 EXTENSION_TABLE(ae) \
142 EXTENSION_TABLE(ba) \
143 EXTENSION_TABLE(c7)
144
145 #define THREE_BYTE_38_EXTENSION_TABLES \
146 EXTENSION_TABLE(F3)
147
148 #define XOP9_MAP_EXTENSION_TABLES \
149 EXTENSION_TABLE(01) \
150 EXTENSION_TABLE(02)
151
15298 using namespace X86Disassembler;
153
154 /// needsModRMForDecode - Indicates whether a particular instruction requires a
155 /// ModR/M byte for the instruction to be properly decoded. For example, a
156 /// MRMDestReg instruction needs the Mod field in the ModR/M byte to be set to
157 /// 0b11.
158 ///
159 /// @param form - The form of the instruction.
160 /// @return - true if the form implies that a ModR/M byte is required, false
161 /// otherwise.
162 static bool needsModRMForDecode(uint8_t form) {
163 return (form == X86Local::MRMDestReg ||
164 form == X86Local::MRMDestMem ||
165 form == X86Local::MRMSrcReg ||
166 form == X86Local::MRMSrcMem ||
167 (form >= X86Local::MRM0r && form <= X86Local::MRM7r) ||
168 (form >= X86Local::MRM0m && form <= X86Local::MRM7m));
169 }
17099
171100 /// isRegFormat - Indicates whether a particular form requires the Mod field of
172101 /// the ModR/M byte to be 0b11.
177106 static bool isRegFormat(uint8_t form) {
178107 return (form == X86Local::MRMDestReg ||
179108 form == X86Local::MRMSrcReg ||
109 form == X86Local::MRMXr ||
180110 (form >= X86Local::MRM0r && form <= X86Local::MRM7r));
181111 }
182112
740670 HANDLE_OPTIONAL(immediate)
741671 HANDLE_OPTIONAL(immediate) // above might be a register in 7:4
742672 break;
673 case X86Local::MRMXr:
743674 case X86Local::MRM0r:
744675 case X86Local::MRM1r:
745676 case X86Local::MRM2r:
766697 HANDLE_OPTIONAL(relocation)
767698 HANDLE_OPTIONAL(immediate)
768699 break;
700 case X86Local::MRMXm:
769701 case X86Local::MRM0m:
770702 case X86Local::MRM1m:
771703 case X86Local::MRM2m:
862794
863795 switch (OpMap) {
864796 default: llvm_unreachable("Invalid map!");
865 // Extended two-byte opcodes can start with 66 0f, f2 0f, f3 0f, or 0f
797 case X86Local::OB:
866798 case X86Local::TB:
867 opcodeType = TWOBYTE;
868
869 switch (Opcode) {
799 case X86Local::T8:
800 case X86Local::TA:
801 case X86Local::A6:
802 case X86Local::A7:
803 case X86Local::XOP8:
804 case X86Local::XOP9:
805 case X86Local::XOPA:
806 switch (OpMap) {
807 default: llvm_unreachable("Unexpected map!");
808 case X86Local::OB: opcodeType = ONEBYTE; break;
809 case X86Local::TB: opcodeType = TWOBYTE; break;
810 case X86Local::T8: opcodeType = THREEBYTE_38; break;
811 case X86Local::TA: opcodeType = THREEBYTE_3A; break;
812 case X86Local::A6: opcodeType = THREEBYTE_A6; break;
813 case X86Local::A7: opcodeType = THREEBYTE_A7; break;
814 case X86Local::XOP8: opcodeType = XOP8_MAP; break;
815 case X86Local::XOP9: opcodeType = XOP9_MAP; break;
816 case X86Local::XOPA: opcodeType = XOPA_MAP; break;
817 }
818
819 switch (Form) {
870820 default:
871 if (needsModRMForDecode(Form))
872 filter = new ModFilter(isRegFormat(Form));
873 else
874 filter = new DumbFilter();
821 filter = new DumbFilter();
875822 break;
876 #define EXTENSION_TABLE(n) case 0x##n:
877 TWO_BYTE_EXTENSION_TABLES
878 #undef EXTENSION_TABLE
879 switch (Form) {
880 default:
881 llvm_unreachable("Unhandled two-byte extended opcode");
882 case X86Local::MRM0r:
883 case X86Local::MRM1r:
884 case X86Local::MRM2r:
885 case X86Local::MRM3r:
886 case X86Local::MRM4r:
887 case X86Local::MRM5r:
888 case X86Local::MRM6r:
889 case X86Local::MRM7r:
890 filter = new ExtendedFilter(true, Form - X86Local::MRM0r);
891 break;
892 case X86Local::MRM0m:
893 case X86Local::MRM1m:
894 case X86Local::MRM2m:
895 case X86Local::MRM3m:
896 case X86Local::MRM4m:
897 case X86Local::MRM5m:
898 case X86Local::MRM6m:
899 case X86Local::MRM7m:
900 filter = new ExtendedFilter(false, Form - X86Local::MRM0m);
901 break;
902 MRM_MAPPING
903 } // switch (Form)
823 case X86Local::MRMDestReg: case X86Local::MRMDestMem:
824 case X86Local::MRMSrcReg: case X86Local::MRMSrcMem:
825 case X86Local::MRMXr: case X86Local::MRMXm:
826 filter = new ModFilter(isRegFormat(Form));
904827 break;
905 } // switch (Opcode)
906 opcodeToSet = Opcode;
907 break;
908 case X86Local::T8:
909 opcodeType = THREEBYTE_38;
910 switch (Opcode) {
911 default:
912 if (needsModRMForDecode(Form))
913 filter = new ModFilter(isRegFormat(Form));
914 else
915 filter = new DumbFilter();
828 case X86Local::MRM0r: case X86Local::MRM1r:
829 case X86Local::MRM2r: case X86Local::MRM3r:
830 case X86Local::MRM4r: case X86Local::MRM5r:
831 case X86Local::MRM6r: case X86Local::MRM7r:
832 filter = new ExtendedFilter(true, Form - X86Local::MRM0r);
916833 break;
917 #define EXTENSION_TABLE(n) case 0x##n:
918 THREE_BYTE_38_EXTENSION_TABLES
919 #undef EXTENSION_TABLE
920 switch (Form) {
921 default:
922 llvm_unreachable("Unhandled two-byte extended opcode");
923 case X86Local::MRM0r:
924 case X86Local::MRM1r:
925 case X86Local::MRM2r:
926 case X86Local::MRM3r:
927 case X86Local::MRM4r:
928 case X86Local::MRM5r:
929 case X86Local::MRM6r:
930 case X86Local::MRM7r:
931 filter = new ExtendedFilter(true, Form - X86Local::MRM0r);
932 break;
933 case X86Local::MRM0m:
934 case X86Local::MRM1m:
935 case X86Local::MRM2m:
936 case X86Local::MRM3m:
937 case X86Local::MRM4m:
938 case X86Local::MRM5m:
939 case X86Local::MRM6m:
940 case X86Local::MRM7m:
941 filter = new ExtendedFilter(false, Form - X86Local::MRM0m);
942 break;
943 MRM_MAPPING
944 } // switch (Form)
834 case X86Local::MRM0m: case X86Local::MRM1m:
835 case X86Local::MRM2m: case X86Local::MRM3m:
836 case X86Local::MRM4m: case X86Local::MRM5m:
837 case X86Local::MRM6m: case X86Local::MRM7m:
838 filter = new ExtendedFilter(false, Form - X86Local::MRM0m);
945839 break;
946 } // switch (Opcode)
947 opcodeToSet = Opcode;
948 break;
949 case X86Local::TA:
950 opcodeType = THREEBYTE_3A;
951 if (needsModRMForDecode(Form))
952 filter = new ModFilter(isRegFormat(Form));
953 else
954 filter = new DumbFilter();
955 opcodeToSet = Opcode;
956 break;
957 case X86Local::A6:
958 opcodeType = THREEBYTE_A6;
959 if (needsModRMForDecode(Form))
960 filter = new ModFilter(isRegFormat(Form));
961 else
962 filter = new DumbFilter();
963 opcodeToSet = Opcode;
964 break;
965 case X86Local::A7:
966 opcodeType = THREEBYTE_A7;
967 if (needsModRMForDecode(Form))
968 filter = new ModFilter(isRegFormat(Form));
969 else
970 filter = new DumbFilter();
971 opcodeToSet = Opcode;
972 break;
973 case X86Local::XOP8:
974 opcodeType = XOP8_MAP;
975 if (needsModRMForDecode(Form))
976 filter = new ModFilter(isRegFormat(Form));
977 else
978 filter = new DumbFilter();
979 opcodeToSet = Opcode;
980 break;
981 case X86Local::XOP9:
982 opcodeType = XOP9_MAP;
983 switch (Opcode) {
984 default:
985 if (needsModRMForDecode(Form))
986 filter = new ModFilter(isRegFormat(Form));
987 else
988 filter = new DumbFilter();
989 break;
990 #define EXTENSION_TABLE(n) case 0x##n:
991 XOP9_MAP_EXTENSION_TABLES
992 #undef EXTENSION_TABLE
993 switch (Form) {
994 default:
995 llvm_unreachable("Unhandled XOP9 extended opcode");
996 case X86Local::MRM0r:
997 case X86Local::MRM1r:
998 case X86Local::MRM2r:
999 case X86Local::MRM3r:
1000 case X86Local::MRM4r:
1001 case X86Local::MRM5r:
1002 case X86Local::MRM6r:
1003 case X86Local::MRM7r:
1004 filter = new ExtendedFilter(true, Form - X86Local::MRM0r);
1005 break;
1006 case X86Local::MRM0m:
1007 case X86Local::MRM1m:
1008 case X86Local::MRM2m:
1009 case X86Local::MRM3m:
1010 case X86Local::MRM4m:
1011 case X86Local::MRM5m:
1012 case X86Local::MRM6m:
1013 case X86Local::MRM7m:
1014 filter = new ExtendedFilter(false, Form - X86Local::MRM0m);
1015 break;
1016 MRM_MAPPING
1017 } // switch (Form)
1018 break;
1019 } // switch (Opcode)
1020 opcodeToSet = Opcode;
1021 break;
1022 case X86Local::XOPA:
1023 opcodeType = XOPA_MAP;
1024 if (needsModRMForDecode(Form))
1025 filter = new ModFilter(isRegFormat(Form));
1026 else
1027 filter = new DumbFilter();
840 MRM_MAPPING
841 } // switch (Form)
842
1028843 opcodeToSet = Opcode;
1029844 break;
1030845 case X86Local::D8:
1041856 filter = new ExactFilter(Opcode);
1042857 opcodeToSet = 0xd8 + (OpMap - X86Local::D8);
1043858 break;
1044 case X86Local::OB:
1045 opcodeType = ONEBYTE;
1046 switch (Opcode) {
1047 #define EXTENSION_TABLE(n) case 0x##n:
1048 ONE_BYTE_EXTENSION_TABLES
1049 #undef EXTENSION_TABLE
1050 switch (Form) {
1051 default:
1052 llvm_unreachable("Fell through the cracks of a single-byte "
1053 "extended opcode");
1054 case X86Local::MRM0r:
1055 case X86Local::MRM1r:
1056 case X86Local::MRM2r:
1057 case X86Local::MRM3r:
1058 case X86Local::MRM4r:
1059 case X86Local::MRM5r:
1060 case X86Local::MRM6r:
1061 case X86Local::MRM7r:
1062 filter = new ExtendedFilter(true, Form - X86Local::MRM0r);
1063 break;
1064 case X86Local::MRM0m:
1065 case X86Local::MRM1m:
1066 case X86Local::MRM2m:
1067 case X86Local::MRM3m:
1068 case X86Local::MRM4m:
1069 case X86Local::MRM5m:
1070 case X86Local::MRM6m:
1071 case X86Local::MRM7m:
1072 filter = new ExtendedFilter(false, Form - X86Local::MRM0m);
1073 break;
1074 MRM_MAPPING
1075 } // switch (Form)
1076 break;
1077 case 0xd8:
1078 case 0xd9:
1079 case 0xda:
1080 case 0xdb:
1081 case 0xdc:
1082 case 0xdd:
1083 case 0xde:
1084 case 0xdf:
1085 switch (Form) {
1086 default:
1087 llvm_unreachable("Unhandled escape opcode form");
1088 case X86Local::MRM0r:
1089 case X86Local::MRM1r:
1090 case X86Local::MRM2r:
1091 case X86Local::MRM3r:
1092 case X86Local::MRM4r:
1093 case X86Local::MRM5r:
1094 case X86Local::MRM6r:
1095 case X86Local::MRM7r:
1096 filter = new ExtendedFilter(true, Form - X86Local::MRM0r);
1097 break;
1098 case X86Local::MRM0m:
1099 case X86Local::MRM1m:
1100 case X86Local::MRM2m:
1101 case X86Local::MRM3m:
1102 case X86Local::MRM4m:
1103 case X86Local::MRM5m:
1104 case X86Local::MRM6m:
1105 case X86Local::MRM7m:
1106 filter = new ExtendedFilter(false, Form - X86Local::MRM0m);
1107 break;
1108 } // switch (Form)
1109 break;
1110 default:
1111 if (needsModRMForDecode(Form))
1112 filter = new ModFilter(isRegFormat(Form));
1113 else
1114 filter = new DumbFilter();
1115 break;
1116 } // switch (Opcode)
1117 opcodeToSet = Opcode;
1118859 } // switch (OpMap)
1119860
1120861 assert(opcodeType != (OpcodeType)-1 &&