Changeset 66283 in vbox
- Timestamp:
- Mar 28, 2017 9:02:56 AM (8 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66172 r66283 162 162 'Ev': ( 'IDX_UseModRM', 'rm', '%Ev', 'Ev', ), 163 163 'Wsd': ( 'IDX_UseModRM', 'rm', '%Wsd', 'Wsd', ), 164 'Wps': ( 'IDX_UseModRM', 'rm', '%Wps', 'Wps', ), 164 165 165 166 # ModR/M.rm - memory only. 166 'Ma': ( 'IDX_UseModRM', 'rm','%Ma', 'Ma', ), ##< Only used by BOUND.167 'Ma': ( 'IDX_UseModRM', 'rm', '%Ma', 'Ma', ), ##< Only used by BOUND. 167 168 168 169 # ModR/M.reg … … 171 172 'Gv': ( 'IDX_UseModRM', 'reg', '%Gv', 'Gv', ), 172 173 'Vsd': ( 'IDX_UseModRM', 'reg', '%Vsd', 'Vsd', ), 174 'Vps': ( 'IDX_UseModRM', 'reg', '%Vps', 'Vps', ), 173 175 174 176 # Immediate values. … … 231 233 ## \@oppfx values. 232 234 g_kdPrefixes = { 235 'none': [], 233 236 '0x66': [], 234 237 '0xf3': [], … … 347 350 'ignores_op_size': '', ##< Ignores both operand size prefixes. 348 351 'lock_allowed': '', ##< Lock prefix allowed. 352 }; 353 354 ## \@opxcpttype values (see SDMv2 2.4, 2.7). 355 g_kdXcptTypes = { 356 'none': [], 357 '1': [], 358 '2': [], 359 '3': [], 360 '4': [], 361 '4UA': [], 362 '5': [], 363 '6': [], 364 '7': [], 365 '8': [], 366 '11': [], 367 '12': [], 368 'E1': [], 369 'E1NF': [], 370 'E2': [], 371 'E3': [], 372 'E3NF': [], 373 'E4': [], 374 'E4NF': [], 375 'E5': [], 376 'E5NF': [], 377 'E6': [], 378 'E6NF': [], 379 'E7NF': [], 380 'E9': [], 381 'E9NF': [], 382 'E10': [], 383 'E11': [], 384 'E12': [], 385 'E12NF': [], 349 386 }; 350 387 … … 948 985 self.aoMaps = []; # type: list(InstructionMap) 949 986 self.aoOperands = []; # type: list(Operand) 950 self.sPrefix = None; ##< Single prefix: None, 0x66, 0xf3, 0xf2987 self.sPrefix = None; ##< Single prefix: None, 'none', 0x66, 0xf3, 0xf2 951 988 self.sOpcode = None; # type: str 952 989 self.sEncoding = None; … … 967 1004 self.fInvalid = False; ##< Invalid instruction (like UD2). 968 1005 self.sInvalidStyle = None; ##< Invalid behviour style 1006 self.sXcptType = None; ##< Exception type (g_kdXcptTypes). 969 1007 ## @} 970 1008 … … 1244 1282 '@opcopytests': self.parseTagOpCopyTests, 1245 1283 '@oponlytest': self.parseTagOpOnlyTest, 1284 '@opxcpttype': self.parseTagOpXcptType, 1246 1285 '@opstats': self.parseTagOpStats, 1247 1286 '@opfunction': self.parseTagOpFunction, … … 1677 1716 """ 1678 1717 Tag: \@oppfx 1679 Value: n one|0x66|0xf3|0xf21718 Value: n/a|none|0x66|0xf3|0xf2 1680 1719 1681 1720 Required prefix for the instruction. (In a (E)VEX context this is the … … 1692 1731 sPrefix = asPrefixes[0].lower(); 1693 1732 if sPrefix == 'none': 1733 sPrefix = 'none'; 1734 elif sPrefix == 'n/a': 1694 1735 sPrefix = None; 1695 1736 else: … … 1977 2018 sStyle = asStyles[0]; 1978 2019 if sStyle not in g_kdInvalidStyles: 1979 return self.errorComment(iTagLine, '%s: invalid invalid beh viour style: %s (valid: %s)'2020 return self.errorComment(iTagLine, '%s: invalid invalid behaviour style: %s (valid: %s)' 1980 2021 % (sTag, sStyle, g_kdInvalidStyles.keys(),)); 1981 2022 # Set it. 1982 if oInstr.sInv lStyle is not None:2023 if oInstr.sInvalidStyle is not None: 1983 2024 return self.errorComment(iTagLine, 1984 2025 '%s: attempting to overwrite "%s" with "%s" (only one @opunused, @opinvalid, @opinvlstyle)' 1985 % ( sTag, oInstr.sInv lStyle, sStyle,));1986 oInstr.sInv lStyle = sStyle;2026 % ( sTag, oInstr.sInvalidStyle, sStyle,)); 2027 oInstr.sInvalidStyle = sStyle; 1987 2028 if sTag == '@opunused': 1988 2029 oInstr.fUnused = True; … … 2198 2239 if oInstr not in g_aoOnlyTestInstructions: 2199 2240 g_aoOnlyTestInstructions.append(oInstr); 2241 2242 _ = iEndLine; 2243 return True; 2244 2245 def parseTagOpXcptType(self, sTag, aasSections, iTagLine, iEndLine): 2246 """ 2247 Tag: \@opxcpttype 2248 Value: [none|1|2|3|4|4UA|5|6|7|8|11|12|E1|E1NF|E2|E3|E3NF|E4|E4NF|E5|E5NF|E6|E6NF|E7NF|E9|E9NF|E10|E11|E12|E12NF] 2249 2250 Sets the SSE or AVX exception type (see SDMv2 2.4, 2.7). 2251 """ 2252 oInstr = self.ensureInstructionForOpTag(iTagLine); 2253 2254 # Flatten as a space separated list, split it up and validate the values. 2255 asTypes = self.flattenAllSections(aasSections).split(); 2256 if len(asTypes) != 1: 2257 return self.errorComment(iTagLine, '%s: exactly one invalid exception type, please: %s' % (sTag, asTypes,)); 2258 sType = asTypes[0]; 2259 if sType not in g_kdXcptTypes: 2260 return self.errorComment(iTagLine, '%s: invalid invalid exception type: %s (valid: %s)' 2261 % (sTag, sType, sorted(g_kdXcptTypes.keys()),)); 2262 # Set it. 2263 if oInstr.sXcptType is not None: 2264 return self.errorComment(iTagLine, 2265 '%s: attempting to overwrite "%s" with "%s" (only one @opxcpttype)' 2266 % ( sTag, oInstr.sXcptType, sType,)); 2267 oInstr.sXcptType = sType; 2200 2268 2201 2269 _ = iEndLine; -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66242 r66283 1076 1076 1077 1077 1078 /** Opcode 0x0f 0x11 - vmovups Wps, Vps */ 1078 /** 1079 * @opcode 0x11 1080 * @oppfx none 1081 * @opcpuid sse2 1082 * @opgroup og_sse2_pcksclr_datamov 1083 * @opxcpttype 4UA 1084 * @optest op1=1 op2=2 -> op1=2 1085 * @optest op1=0 op2=-42 -> op1=-42 1086 * @oponlytest 1087 */ 1079 1088 FNIEMOP_DEF(iemOp_vmovups_Wps_Vps) 1080 1089 { 1081 IEMOP_MNEMONIC (movups_Wps_Vps, "movups Wps,Vps");1090 IEMOP_MNEMONIC2(MR, MOVUPS, movups, Wps, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1082 1091 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1083 1092 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1130 1139 * @opcpuid sse2 1131 1140 * @opgroup og_sse2_pcksclr_datamov 1141 * @opxcpttype E5 1132 1142 * @optest op1=1 op2=2 -> op1=2 1133 1143 * @optest op1=0 op2=-42 -> op1=-42 1144 * @oponlytest 1134 1145 */ 1135 1146 FNIEMOP_DEF(iemOp_vmovsd_Wsd_Hx_Vsd) -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-data.py
r66172 r66283 310 310 311 311 self.fAdvanceMnemonic = True; ##< Set by the caller. 312 if self.sEncoding == 'ModR/M': 312 if oInstr.sPrefix: 313 if oInstr.sPrefix == 'none': 314 self.sPfxKind = 'BS3CGPFXKIND_NO_F2_F3_66'; 315 else: 316 self.sPfxKind = 'BS3CGPFXKIND_REQ_' + oInstr.sPrefix[-2:].upper(); 317 elif oInstr.sEncoding == 'ModR/M': 313 318 if 'ignores_op_size' not in oInstr.dHints: 314 319 self.sPfxKind = 'BS3CGPFXKIND_MODRM'; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66242 r66283 122 122 /** The CPU test / CPU ID. */ 123 123 BS3CG1CPU enmCpuTest; 124 /** Prefix sensitivity and requirements. */ 125 BS3CGPFXKIND enmPrefixKind; 124 126 /** Per operand flags. */ 125 127 BS3CG1OP aenmOperands[4]; … … 431 433 /* [BS3CG1DST_XMM14] = */ 16, 432 434 /* [BS3CG1DST_XMM15] = */ 16, 435 /* [BS3CG1DST_XMM0_LO] = */ 8, 436 /* [BS3CG1DST_XMM1_LO] = */ 8, 437 /* [BS3CG1DST_XMM2_LO] = */ 8, 438 /* [BS3CG1DST_XMM3_LO] = */ 8, 439 /* [BS3CG1DST_XMM4_LO] = */ 8, 440 /* [BS3CG1DST_XMM5_LO] = */ 8, 441 /* [BS3CG1DST_XMM6_LO] = */ 8, 442 /* [BS3CG1DST_XMM7_LO] = */ 8, 443 /* [BS3CG1DST_XMM8_LO] = */ 8, 444 /* [BS3CG1DST_XMM9_LO] = */ 8, 445 /* [BS3CG1DST_XMM10_LO] = */ 8, 446 /* [BS3CG1DST_XMM11_LO] = */ 8, 447 /* [BS3CG1DST_XMM12_LO] = */ 8, 448 /* [BS3CG1DST_XMM13_LO] = */ 8, 449 /* [BS3CG1DST_XMM14_LO] = */ 8, 450 /* [BS3CG1DST_XMM15_LO] = */ 8, 451 /* [BS3CG1DST_XMM0_HI] = */ 8, 452 /* [BS3CG1DST_XMM1_HI] = */ 8, 453 /* [BS3CG1DST_XMM2_HI] = */ 8, 454 /* [BS3CG1DST_XMM3_HI] = */ 8, 455 /* [BS3CG1DST_XMM4_HI] = */ 8, 456 /* [BS3CG1DST_XMM5_HI] = */ 8, 457 /* [BS3CG1DST_XMM6_HI] = */ 8, 458 /* [BS3CG1DST_XMM7_HI] = */ 8, 459 /* [BS3CG1DST_XMM8_HI] = */ 8, 460 /* [BS3CG1DST_XMM9_HI] = */ 8, 461 /* [BS3CG1DST_XMM10_HI] = */ 8, 462 /* [BS3CG1DST_XMM11_HI] = */ 8, 463 /* [BS3CG1DST_XMM12_HI] = */ 8, 464 /* [BS3CG1DST_XMM13_HI] = */ 8, 465 /* [BS3CG1DST_XMM14_HI] = */ 8, 466 /* [BS3CG1DST_XMM15_HI] = */ 8, 433 467 /* [BS3CG1DST_YMM0] = */ 32, 434 468 /* [BS3CG1DST_YMM1] = */ 32, … … 579 613 /* [BS3CG1DST_MM6] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[6]), 580 614 /* [BS3CG1DST_MM7] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[7]), 615 581 616 /* [BS3CG1DST_XMM0] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[0]), 582 617 /* [BS3CG1DST_XMM1] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[1]), … … 595 630 /* [BS3CG1DST_XMM14] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[14]), 596 631 /* [BS3CG1DST_XMM15] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[15]), 632 /* [BS3CG1DST_XMM0_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[0]), 633 /* [BS3CG1DST_XMM1_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[1]), 634 /* [BS3CG1DST_XMM2_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[2]), 635 /* [BS3CG1DST_XMM3_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[3]), 636 /* [BS3CG1DST_XMM4_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[4]), 637 /* [BS3CG1DST_XMM5_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[5]), 638 /* [BS3CG1DST_XMM6_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[6]), 639 /* [BS3CG1DST_XMM7_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[7]), 640 /* [BS3CG1DST_XMM8_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[8]), 641 /* [BS3CG1DST_XMM9_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[9]), 642 /* [BS3CG1DST_XMM10_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[10]), 643 /* [BS3CG1DST_XMM11_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[11]), 644 /* [BS3CG1DST_XMM12_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[12]), 645 /* [BS3CG1DST_XMM13_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[13]), 646 /* [BS3CG1DST_XMM14_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[14]), 647 /* [BS3CG1DST_XMM15_LO] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[15]), 648 /* [BS3CG1DST_XMM0_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[0]) + sizeof(uint64_t), 649 /* [BS3CG1DST_XMM1_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[1]) + sizeof(uint64_t), 650 /* [BS3CG1DST_XMM2_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[2]) + sizeof(uint64_t), 651 /* [BS3CG1DST_XMM3_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[3]) + sizeof(uint64_t), 652 /* [BS3CG1DST_XMM4_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[4]) + sizeof(uint64_t), 653 /* [BS3CG1DST_XMM5_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[5]) + sizeof(uint64_t), 654 /* [BS3CG1DST_XMM6_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[6]) + sizeof(uint64_t), 655 /* [BS3CG1DST_XMM7_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[7]) + sizeof(uint64_t), 656 /* [BS3CG1DST_XMM8_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[8]) + sizeof(uint64_t), 657 /* [BS3CG1DST_XMM9_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[9]) + sizeof(uint64_t), 658 /* [BS3CG1DST_XMM10_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[10]) + sizeof(uint64_t), 659 /* [BS3CG1DST_XMM11_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[11]) + sizeof(uint64_t), 660 /* [BS3CG1DST_XMM12_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[12]) + sizeof(uint64_t), 661 /* [BS3CG1DST_XMM13_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[13]) + sizeof(uint64_t), 662 /* [BS3CG1DST_XMM14_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[14]) + sizeof(uint64_t), 663 /* [BS3CG1DST_XMM15_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[15]) + sizeof(uint64_t), 664 597 665 /* [BS3CG1DST_YMM0] = */ ~0U, 598 666 /* [BS3CG1DST_YMM1] = */ ~0U, … … 759 827 { "XMM14" }, 760 828 { "XMM15" }, 829 { "XMM0_LO" }, 830 { "XMM1_LO" }, 831 { "XMM2_LO" }, 832 { "XMM3_LO" }, 833 { "XMM4_LO" }, 834 { "XMM5_LO" }, 835 { "XMM6_LO" }, 836 { "XMM7_LO" }, 837 { "XMM8_LO" }, 838 { "XMM9_LO" }, 839 { "XMM10_LO" }, 840 { "XMM11_LO" }, 841 { "XMM12_LO" }, 842 { "XMM13_LO" }, 843 { "XMM14_LO" }, 844 { "XMM15_LO" }, 845 { "XMM0_HI" }, 846 { "XMM1_HI" }, 847 { "XMM2_HI" }, 848 { "XMM3_HI" }, 849 { "XMM4_HI" }, 850 { "XMM5_HI" }, 851 { "XMM6_HI" }, 852 { "XMM7_HI" }, 853 { "XMM8_HI" }, 854 { "XMM9_HI" }, 855 { "XMM10_HI" }, 856 { "XMM11_HI" }, 857 { "XMM12_HI" }, 858 { "XMM13_HI" }, 859 { "XMM14_HI" }, 860 { "XMM15_HI" }, 761 861 { "YMM0" }, 762 862 { "YMM1" }, … … 828 928 829 929 930 DECLINLINE(unsigned) Bs3Cg1InsertReqPrefix(PBS3CG1STATE pThis, unsigned offDst) 931 { 932 switch (pThis->enmPrefixKind) 933 { 934 case BS3CGPFXKIND_REQ_66: 935 pThis->abCurInstr[offDst] = 0x66; 936 break; 937 case BS3CGPFXKIND_REQ_F2: 938 pThis->abCurInstr[offDst] = 0xf2; 939 break; 940 case BS3CGPFXKIND_REQ_F3: 941 pThis->abCurInstr[offDst] = 0xf3; 942 break; 943 default: 944 return offDst; 945 } 946 return offDst + 1; 947 } 948 949 830 950 DECLINLINE(unsigned) Bs3Cg1InsertOpcodes(PBS3CG1STATE pThis, unsigned offDst) 831 951 { … … 867 987 868 988 static unsigned Bs3Cfg1EncodeMemMod0Disp(PBS3CG1STATE pThis, bool fAddrOverride, unsigned off, uint8_t iReg, 869 uint8_t cbOp, BS3CG1OPLOC enmLocation)989 uint8_t cbOp, uint8_t cbMissalign, BS3CG1OPLOC enmLocation) 870 990 { 871 991 pThis->aOperands[pThis->iRmOp].idxField = BS3CG1DST_INVALID; 872 992 pThis->aOperands[pThis->iRmOp].enmLocation = enmLocation; 873 993 pThis->aOperands[pThis->iRmOp].cbOp = cbOp; 874 pThis->aOperands[pThis->iRmOp].off = cbOp ;994 pThis->aOperands[pThis->iRmOp].off = cbOp + cbMissalign; 875 995 876 996 if ( BS3_MODE_IS_16BIT_CODE(pThis->bMode) … … 891 1011 { 892 1012 pThis->abCurInstr[off++] = X86_MODRM_MAKE(0, iReg, 6 /*disp16*/); 893 *(uint16_t *)&pThis->abCurInstr[off] = pThis->DataPgFar.off + X86_PAGE_SIZE - cbOp ;1013 *(uint16_t *)&pThis->abCurInstr[off] = pThis->DataPgFar.off + X86_PAGE_SIZE - cbOp - cbMissalign; 894 1014 off += 2; 895 1015 } … … 897 1017 { 898 1018 pThis->abCurInstr[off++] = X86_MODRM_MAKE(0, iReg, 5 /*disp32*/); 899 *(uint32_t *)&pThis->abCurInstr[off] = pThis->DataPgFar.off + X86_PAGE_SIZE - cbOp ;1019 *(uint32_t *)&pThis->abCurInstr[off] = pThis->DataPgFar.off + X86_PAGE_SIZE - cbOp - cbMissalign; 900 1020 off += 4; 901 1021 } … … 908 1028 */ 909 1029 pThis->abCurInstr[off++] = X86_MODRM_MAKE(0, iReg, 5 /*disp32*/); 910 *(uint32_t *)&pThis->abCurInstr[off] = BS3_FP_OFF(pThis->pbDataPg) + X86_PAGE_SIZE - cbOp ;1030 *(uint32_t *)&pThis->abCurInstr[off] = BS3_FP_OFF(pThis->pbDataPg) + X86_PAGE_SIZE - cbOp - cbMissalign; 911 1031 912 1032 /* In 64-bit mode we always have a rip relative encoding regardless of fAddrOverride. */ … … 939 1059 if (iEncoding == 0) 940 1060 { 941 off = Bs3Cg1InsertOpcodes(pThis, 0);1061 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 942 1062 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, X86_GREG_xAX, X86_GREG_xCX); 943 1063 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_AL; … … 947 1067 { 948 1068 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_CH; 949 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, Bs3Cg1InsertOpcodes(pThis, 0), X86_GREG_xBP, 1, BS3CG1OPLOC_MEM_RW); 1069 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1070 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, X86_GREG_xBP, 1, 0, BS3CG1OPLOC_MEM_RW); 950 1071 } 951 1072 else if (iEncoding == 2 && (g_uBs3CpuDetected & BS3CPU_TYPE_MASK) >= BS3CPU_80386) … … 953 1074 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_BH; 954 1075 pThis->abCurInstr[0] = P_AZ; 955 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, Bs3Cg1InsertOpcodes(pThis, 1), X86_GREG_xDI, 1, BS3CG1OPLOC_MEM_RW); 1076 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 1)); 1077 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, off, X86_GREG_xDI, 1, 0, BS3CG1OPLOC_MEM_RW); 956 1078 } 957 1079 else … … 965 1087 if (iEncoding == 0) 966 1088 { 967 off = Bs3Cg1InsertOpcodes(pThis, 0);1089 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 968 1090 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, X86_GREG_xAX, X86_GREG_xCX); 969 1091 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_AL; … … 973 1095 { 974 1096 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_CH; 975 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, Bs3Cg1InsertOpcodes(pThis, 0), X86_GREG_xBP, 1, BS3CG1OPLOC_MEM); 1097 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1098 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, X86_GREG_xBP, 1, 0, BS3CG1OPLOC_MEM); 976 1099 } 977 1100 else if (iEncoding == 2 && (g_uBs3CpuDetected & BS3CPU_TYPE_MASK) >= BS3CPU_80386) … … 979 1102 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_BH; 980 1103 pThis->abCurInstr[0] = P_AZ; 981 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, Bs3Cg1InsertOpcodes(pThis, 1), X86_GREG_xDI, 1, BS3CG1OPLOC_MEM); 1104 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 1)); 1105 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, off, X86_GREG_xDI, 1, 0, BS3CG1OPLOC_MEM); 982 1106 } 983 1107 else … … 992 1116 { 993 1117 cbOp = BS3_MODE_IS_16BIT_CODE(pThis->bMode) ? 2 : 4; 994 off = Bs3Cg1InsertOpcodes(pThis, 0);1118 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 995 1119 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, X86_GREG_xBX, X86_GREG_xDX); 996 1120 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RBX; … … 1001 1125 cbOp = BS3_MODE_IS_16BIT_CODE(pThis->bMode) ? 2 : 4; 1002 1126 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RBP; 1003 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, Bs3Cg1InsertOpcodes(pThis, 0), X86_GREG_xBP, cbOp, 1127 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1128 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, X86_GREG_xBP, cbOp, 0, 1004 1129 pThis->enmEncoding == BS3CG1ENC_MODRM_Gv_Ev ? BS3CG1OPLOC_MEM : BS3CG1OPLOC_MEM_RW); 1005 1130 } … … 1008 1133 cbOp = BS3_MODE_IS_16BIT_CODE(pThis->bMode) ? 4 : 2; 1009 1134 pThis->abCurInstr[0] = P_OZ; 1010 off = Bs3Cg1InsertOpcodes(pThis, 1);1135 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 1)); 1011 1136 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, X86_GREG_xBX, X86_GREG_xDX); 1012 1137 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RBX; … … 1019 1144 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RSI; 1020 1145 pThis->abCurInstr[0] = P_OZ; 1021 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, Bs3Cg1InsertOpcodes(pThis, 1), X86_GREG_xSI, cbOp, 1146 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 1)); 1147 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, X86_GREG_xSI, cbOp, 0, 1022 1148 pThis->enmEncoding == BS3CG1ENC_MODRM_Gv_Ev ? BS3CG1OPLOC_MEM : BS3CG1OPLOC_MEM_RW); 1023 1149 } … … 1027 1153 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RDI; 1028 1154 pThis->abCurInstr[0] = P_AZ; 1029 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, Bs3Cg1InsertOpcodes(pThis, 1), X86_GREG_xDI, cbOp, 1155 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 1)); 1156 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, off, X86_GREG_xDI, cbOp, 0, 1030 1157 pThis->enmEncoding == BS3CG1ENC_MODRM_Gv_Ev ? BS3CG1OPLOC_MEM : BS3CG1OPLOC_MEM_RW); 1031 1158 } … … 1036 1163 pThis->abCurInstr[0] = P_OZ; 1037 1164 pThis->abCurInstr[1] = P_AZ; 1038 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, Bs3Cg1InsertOpcodes(pThis, 2), X86_GREG_xSI, cbOp, 1165 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 2)); 1166 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, off, X86_GREG_xSI, cbOp, 0, 1039 1167 pThis->enmEncoding == BS3CG1ENC_MODRM_Gv_Ev ? BS3CG1OPLOC_MEM : BS3CG1OPLOC_MEM_RW); 1040 1168 } … … 1042 1170 { 1043 1171 cbOp = 8; 1044 pThis->abCurInstr[0] = REX_W___; 1045 off = Bs3Cg1InsertOpcodes(pThis, 1); 1172 off = Bs3Cg1InsertReqPrefix(pThis, 0); 1173 pThis->abCurInstr[off++] = REX_W___; 1174 off = Bs3Cg1InsertOpcodes(pThis, off); 1046 1175 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, X86_GREG_xBX, X86_GREG_xDX); 1047 1176 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_RBX; … … 1061 1190 if (iEncoding == 0) 1062 1191 { 1063 off = Bs3Cg1InsertOpcodes(pThis, 0);1192 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1064 1193 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 1065 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_XMM0 ;1066 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM1 ;1194 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_XMM0_LO; 1195 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM1_LO; 1067 1196 } 1068 1197 else if (iEncoding == 1) 1069 1198 { 1070 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM2; 1071 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, Bs3Cg1InsertOpcodes(pThis, 0), 2 /*iReg*/, 16, BS3CG1OPLOC_MEM_RW); 1199 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM2_LO; 1200 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1201 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2 /*iReg*/, 8, 0, BS3CG1OPLOC_MEM_RW); 1202 } 1203 else if (iEncoding == 2) 1204 { 1205 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_LO; 1206 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1207 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM_RW); 1072 1208 } 1073 1209 else … … 1077 1213 break; 1078 1214 1215 case BS3CG1ENC_MODRM_Wps_Vps: 1216 if (iEncoding == 0) 1217 { 1218 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1219 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 1220 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_XMM0; 1221 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM1; 1222 } 1223 else if (iEncoding == 1) 1224 { 1225 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM2; 1226 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1227 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM_RW); 1228 } 1229 //else if (iEncoding == 2) 1230 //{ 1231 // pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3; 1232 // off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1233 // off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM_RW); 1234 //} 1235 else 1236 break; 1237 pThis->cbCurInstr = off; 1238 iEncoding++; 1239 break; 1240 1079 1241 1080 1242 case BS3CG1ENC_MODRM_Gv_Ma: … … 1083 1245 { 1084 1246 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RBP; 1085 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, Bs3Cg1InsertOpcodes(pThis, 0), X86_GREG_xBP, cbOp * 2, BS3CG1OPLOC_MEM); 1247 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1248 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, X86_GREG_xBP, cbOp * 2, 0, BS3CG1OPLOC_MEM); 1086 1249 } 1087 1250 else if (iEncoding == 1 && (g_uBs3CpuDetected & BS3CPU_TYPE_MASK) >= BS3CPU_80386) … … 1090 1253 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RBP; 1091 1254 pThis->abCurInstr[0] = P_OZ; 1092 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, Bs3Cg1InsertOpcodes(pThis, 1), X86_GREG_xBP, cbOp * 2, BS3CG1OPLOC_MEM); 1255 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 1)); 1256 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, X86_GREG_xBP, cbOp * 2, 0, BS3CG1OPLOC_MEM); 1093 1257 } 1094 1258 else if (iEncoding == 2) … … 1096 1260 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RBP; 1097 1261 pThis->abCurInstr[0] = P_AZ; 1098 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, Bs3Cg1InsertOpcodes(pThis, 1), X86_GREG_xBP, cbOp * 2, BS3CG1OPLOC_MEM); 1262 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 1)); 1263 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, off, X86_GREG_xBP, cbOp * 2, 0, BS3CG1OPLOC_MEM); 1099 1264 } 1100 1265 else if (iEncoding == 3) … … 1104 1269 pThis->abCurInstr[0] = P_AZ; 1105 1270 pThis->abCurInstr[1] = P_OZ; 1106 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, Bs3Cg1InsertOpcodes(pThis, 2), X86_GREG_xBP, cbOp * 2, BS3CG1OPLOC_MEM); 1271 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 2)); 1272 off = Bs3Cfg1EncodeMemMod0Disp(pThis, true, off, X86_GREG_xBP, cbOp * 2, 0, BS3CG1OPLOC_MEM); 1107 1273 } 1108 1274 else … … 1117 1283 if (iEncoding == 0) 1118 1284 { 1119 off = Bs3Cg1InsertOpcodes(pThis, 0);1285 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1120 1286 pThis->cbCurInstr = off; 1121 1287 iEncoding++; … … 1126 1292 if (iEncoding == 0) 1127 1293 { 1128 off = Bs3Cg1InsertOpcodes(pThis, 0);1294 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1129 1295 pThis->aOperands[1].off = (uint8_t)off; 1130 1296 pThis->abCurInstr[off++] = 0xff; … … 1137 1303 if (iEncoding == 0) 1138 1304 { 1139 off = Bs3Cg1InsertOpcodes(pThis, 0);1305 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1140 1306 pThis->aOperands[1].off = (uint8_t)off; 1141 1307 if (BS3_MODE_IS_16BIT_CODE(pThis->bMode)) … … 1159 1325 { 1160 1326 pThis->abCurInstr[0] = P_OZ; 1161 off = Bs3Cg1InsertOpcodes(pThis, 1);1327 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 1)); 1162 1328 pThis->aOperands[1].off = (uint8_t)off; 1163 1329 if (!BS3_MODE_IS_16BIT_CODE(pThis->bMode)) … … 1180 1346 else if (iEncoding == 2 && BS3_MODE_IS_64BIT_CODE(pThis->bMode)) 1181 1347 { 1182 pThis->abCurInstr[0] = REX_W___; 1183 off = Bs3Cg1InsertOpcodes(pThis, 1); 1348 off = Bs3Cg1InsertReqPrefix(pThis, 0); 1349 pThis->abCurInstr[off++] = REX_W___; 1350 off = Bs3Cg1InsertOpcodes(pThis, off); 1184 1351 pThis->aOperands[1].off = (uint8_t)off; 1185 1352 *(uint32_t *)&pThis->abCurInstr[off] = UINT32_MAX; … … 1221 1388 pThis->aSavedSegRegs[iRing].ds = pThis->aInitialCtxs[iRing].ds; 1222 1389 1223 pThis->iRmOp = RT_ELEMENTS(pThis->aOperands) - 1;1224 pThis->iRegOp = RT_ELEMENTS(pThis->aOperands) - 1;1390 pThis->iRmOp = RT_ELEMENTS(pThis->aOperands) - 1; 1391 pThis->iRegOp = RT_ELEMENTS(pThis->aOperands) - 1; 1225 1392 pThis->fSameRingNotOkay = false; 1393 pThis->cbOperand = 0; 1226 1394 1227 1395 switch (pThis->enmEncoding) 1228 1396 { 1229 1397 case BS3CG1ENC_MODRM_Eb_Gb: 1230 pThis->iRmOp = 0;1231 pThis->iRegOp = 1;1398 pThis->iRmOp = 0; 1399 pThis->iRegOp = 1; 1232 1400 pThis->aOperands[0].cbOp = 1; 1233 1401 pThis->aOperands[1].cbOp = 1; … … 1237 1405 1238 1406 case BS3CG1ENC_MODRM_Ev_Gv: 1239 pThis->iRmOp = 0; 1240 pThis->iRegOp = 1; 1407 pThis->iRmOp = 0; 1408 pThis->iRegOp = 1; 1409 pThis->cbOperand = 2; 1241 1410 pThis->aOperands[0].cbOp = 2; 1242 1411 pThis->aOperands[1].cbOp = 2; … … 1246 1415 1247 1416 case BS3CG1ENC_MODRM_Gb_Eb: 1248 pThis->iRmOp = 1;1249 pThis->iRegOp = 0;1417 pThis->iRmOp = 1; 1418 pThis->iRegOp = 0; 1250 1419 pThis->aOperands[0].cbOp = 1; 1251 1420 pThis->aOperands[1].cbOp = 1; … … 1255 1424 1256 1425 case BS3CG1ENC_MODRM_Gv_Ev: 1257 pThis->iRmOp = 1; 1258 pThis->iRegOp = 0; 1426 pThis->iRmOp = 1; 1427 pThis->iRegOp = 0; 1428 pThis->cbOperand = 2; 1259 1429 pThis->aOperands[0].cbOp = 2; 1260 1430 pThis->aOperands[1].cbOp = 2; … … 1264 1434 1265 1435 case BS3CG1ENC_MODRM_Gv_Ma: 1266 pThis->iRmOp = 1; 1267 pThis->iRegOp = 0; 1436 pThis->iRmOp = 1; 1437 pThis->iRegOp = 0; 1438 pThis->cbOperand = 2; 1268 1439 pThis->aOperands[0].cbOp = 2; 1269 1440 pThis->aOperands[1].cbOp = 4; … … 1274 1445 1275 1446 case BS3CG1ENC_MODRM_Wsd_Vsd: 1276 pThis->iRmOp = 0; 1277 pThis->iRegOp = 1; 1447 pThis->iRmOp = 0; 1448 pThis->iRegOp = 1; 1449 pThis->aOperands[0].cbOp = 8; 1450 pThis->aOperands[1].cbOp = 8; 1451 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 1452 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 1453 break; 1454 1455 case BS3CG1ENC_MODRM_Wps_Vps: 1456 pThis->iRmOp = 0; 1457 pThis->iRegOp = 1; 1278 1458 pThis->aOperands[0].cbOp = 16; 1279 1459 pThis->aOperands[1].cbOp = 16; … … 2526 2706 pThis->enmEncoding = (BS3CG1ENC)pInstr->enmEncoding; 2527 2707 pThis->enmCpuTest = (BS3CG1CPU)pInstr->enmCpuTest; 2708 pThis->enmPrefixKind = (BS3CG1CPU)pInstr->enmPrefixKind; 2528 2709 pThis->cchMnemonic = pInstr->cchMnemonic; 2529 2710 if (pThis->fAdvanceMnemonic) -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r66216 r66283 45 45 BS3CG1OP_Ev, 46 46 BS3CG1OP_Wsd, 47 BS3CG1OP_Wps, 47 48 48 49 BS3CG1OP_Gb, 49 50 BS3CG1OP_Gv, 50 51 51 BS3CG1OP_Vsd, 52 BS3CG1OP_Vps, 52 53 53 54 BS3CG1OP_Ib, … … 78 79 BS3CG1ENC_MODRM_Ev_Gv, 79 80 BS3CG1ENC_MODRM_Wsd_Vsd, 81 BS3CG1ENC_MODRM_Wps_Vps, 80 82 81 83 BS3CG1ENC_MODRM_Gb_Eb, … … 98 100 BS3CGPFXKIND_INVALID = 0, 99 101 102 BS3CGPFXKIND_NO_F2_F3_66, /**< No 66, F2 or F3 prefixes allowed as that would alter the meaning. */ 103 BS3CGPFXKIND_REQ_F2, /**< Requires F2 (REPNE) prefix as part of the instr encoding. */ 104 BS3CGPFXKIND_REQ_F3, /**< Requires F3 (REPE) prefix as part of the instr encoding. */ 105 BS3CGPFXKIND_REQ_66, /**< Requires 66 (OP SIZE) prefix as part of the instr encoding. */ 106 107 /** @todo more work to be done here... */ 100 108 BS3CGPFXKIND_MODRM, 101 109 BS3CGPFXKIND_MODRM_NO_OP_SIZES, … … 373 381 BS3CG1DST_XMM14, 374 382 BS3CG1DST_XMM15, 383 BS3CG1DST_XMM0_LO, 384 BS3CG1DST_XMM1_LO, 385 BS3CG1DST_XMM2_LO, 386 BS3CG1DST_XMM3_LO, 387 BS3CG1DST_XMM4_LO, 388 BS3CG1DST_XMM5_LO, 389 BS3CG1DST_XMM6_LO, 390 BS3CG1DST_XMM7_LO, 391 BS3CG1DST_XMM8_LO, 392 BS3CG1DST_XMM9_LO, 393 BS3CG1DST_XMM10_LO, 394 BS3CG1DST_XMM11_LO, 395 BS3CG1DST_XMM12_LO, 396 BS3CG1DST_XMM13_LO, 397 BS3CG1DST_XMM14_LO, 398 BS3CG1DST_XMM15_LO, 399 BS3CG1DST_XMM0_HI, 400 BS3CG1DST_XMM1_HI, 401 BS3CG1DST_XMM2_HI, 402 BS3CG1DST_XMM3_HI, 403 BS3CG1DST_XMM4_HI, 404 BS3CG1DST_XMM5_HI, 405 BS3CG1DST_XMM6_HI, 406 BS3CG1DST_XMM7_HI, 407 BS3CG1DST_XMM8_HI, 408 BS3CG1DST_XMM9_HI, 409 BS3CG1DST_XMM10_HI, 410 BS3CG1DST_XMM11_HI, 411 BS3CG1DST_XMM12_HI, 412 BS3CG1DST_XMM13_HI, 413 BS3CG1DST_XMM14_HI, 414 BS3CG1DST_XMM15_HI, 375 415 /* AVX registers. */ 376 416 BS3CG1DST_YMM0,
Note:
See TracChangeset
for help on using the changeset viewer.