儲存庫 vbox 的更動 66912
- 時間撮記:
- 2017-5-16 下午02:53:24 (8 年 以前)
- 檔案:
-
- 修改 1 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66909 r66912 1271 1271 1272 1272 1273 /** Also encodes idxField of the register operand using idxFieldBase. */ 1274 static unsigned BS3_NEAR_CODE 1275 Bs3Cfg1EncodeMemMod0DispWithRegField(PBS3CG1STATE pThis, bool fAddrOverride, unsigned off, uint8_t iReg, 1276 uint8_t cbOp, uint8_t cbMissalign, BS3CG1OPLOC enmLocation) 1277 { 1278 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + iReg; 1279 return Bs3Cfg1EncodeMemMod0Disp(pThis, fAddrOverride, off, iReg, cbOp, cbMissalign, enmLocation); 1280 } 1281 1282 1283 1273 1284 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_Eb_Gb(PBS3CG1STATE pThis, unsigned iEncoding) 1274 1285 { … … 2693 2704 } 2694 2705 2706 2707 /** 2708 * Wip = VEX.W ignored. 2709 */ 2695 2710 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_VEX_MODRM_WsomethingWO_Vsomething_Wip(PBS3CG1STATE pThis, unsigned iEncoding) 2696 2711 { … … 2724 2739 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/); 2725 2740 off = Bs3Cg1InsertOpcodes(pThis, off); 2726 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM_WO); 2727 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 2; 2741 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 2 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM_WO); 2728 2742 break; 2729 2743 case 4: 2730 2744 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2731 2745 off = Bs3Cg1InsertOpcodes(pThis, off); 2732 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM_WO); 2733 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 3; 2746 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 3 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM_WO); 2734 2747 break; 2735 2748 case 5: 2736 2749 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 1 /*W - ignored */); 2737 2750 off = Bs3Cg1InsertOpcodes(pThis, off); 2738 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM_WO); 2739 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 3; 2751 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 3 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM_WO); 2740 2752 break; 2741 2753 case 6: 2742 2754 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/); 2743 2755 off = Bs3Cg1InsertOpcodes(pThis, off); 2744 off = Bs3Cfg1EncodeMemMod0Disp (pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM_WO);2756 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM_WO); 2745 2757 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 2746 2758 pThis->bAlignmentXcpt = X86_XCPT_GP; 2747 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 3;2748 2759 break; 2749 2760 case 7: 2750 2761 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2751 2762 off = Bs3Cg1InsertOpcodes(pThis, off); 2752 off = Bs3Cfg1EncodeMemMod0Disp (pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM_WO);2763 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM_WO); 2753 2764 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 2754 2765 pThis->bAlignmentXcpt = X86_XCPT_GP; 2755 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 3;2756 2766 break; 2757 2767 /* 128-bit invalid encodings: */ … … 2793 2803 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 1; 2794 2804 break; 2795 2796 #if 0 2797 else if (iEncoding == 10) 2798 { 2799 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/); 2800 off = Bs3Cg1InsertOpcodes(pThis, off); 2801 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 2802 pThis->aOperands[pThis->iRmOp].cbOp = 32; 2803 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM0; 2804 pThis->aOperands[pThis->iRegOp].cbOp = 32; 2805 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM1; 2806 } 2807 else if (iEncoding == 11) 2808 { 2805 case 21: 2809 2806 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2810 2807 off = Bs3Cg1InsertOpcodes(pThis, off); 2811 2808 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2812 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM5; 2813 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM4; 2814 } 2815 else if (iEncoding == 12) 2816 { 2809 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 5; 2810 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 4; 2811 break; 2812 case 22: 2817 2813 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 1 /*W - ignored*/); 2818 2814 off = Bs3Cg1InsertOpcodes(pThis, off); 2819 2815 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 5, 4); 2820 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM4; 2821 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM5; 2822 } 2823 else if (iEncoding == 13) 2824 { 2816 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 4; 2817 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 5; 2818 break; 2819 case 23: 2825 2820 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/); 2826 2821 off = Bs3Cg1InsertOpcodes(pThis, off); 2827 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2 /*iReg*/, 32, 0, BS3CG1OPLOC_MEM); 2828 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM2; 2829 } 2830 else if (iEncoding == 14) 2831 { 2822 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 2 /*iReg*/, 32, 0, BS3CG1OPLOC_MEM_WO); 2823 break; 2824 case 24: 2832 2825 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2833 2826 off = Bs3Cg1InsertOpcodes(pThis, off); 2834 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 32, 0, BS3CG1OPLOC_MEM); 2835 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM3; 2836 } 2837 else if (iEncoding == 15) 2838 { 2827 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 3 /*iReg*/, 32, 0, BS3CG1OPLOC_MEM_WO); 2828 break; 2829 case 25: 2839 2830 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 1 /*W - ignored */); 2840 2831 off = Bs3Cg1InsertOpcodes(pThis, off); 2841 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 32, 0, BS3CG1OPLOC_MEM); 2842 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM3; 2843 } 2844 else if (iEncoding == 16) 2845 { 2832 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 3 /*iReg*/, 32, 0, BS3CG1OPLOC_MEM_WO); 2833 break; 2834 case 26: 2846 2835 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/); 2847 2836 off = Bs3Cg1InsertOpcodes(pThis, off); 2848 off = Bs3Cfg1EncodeMemMod0Disp (pThis, false, off, 3 /*iReg*/, 32, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM);2837 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 3 /*iReg*/, 32, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM_WO); 2849 2838 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 2850 2839 pThis->bAlignmentXcpt = X86_XCPT_GP; 2851 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM3; 2852 } 2853 else if (iEncoding == 17) 2854 { 2840 break; 2841 case 27: 2855 2842 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2856 2843 off = Bs3Cg1InsertOpcodes(pThis, off); 2857 off = Bs3Cfg1EncodeMemMod0Disp (pThis, false, off, 3 /*iReg*/, 32, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM);2844 off = Bs3Cfg1EncodeMemMod0DispWithRegField(pThis, false, off, 3 /*iReg*/, 32, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM_WO); 2858 2845 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 2859 2846 pThis->bAlignmentXcpt = X86_XCPT_GP; 2860 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM3; 2861 } 2862 /* 256-bit invalid encodings: */ 2863 else if (iEncoding == 18) 2864 { 2865 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xe /*~V - invalid */, 1 /*L*/, 1 /*~R*/); /* Bad V value */ 2866 off = Bs3Cg1InsertOpcodes(pThis, off); 2867 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 2868 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM0; 2869 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM1; 2870 pThis->fInvalidEncoding = true; 2871 } 2872 else if (iEncoding == 19) 2873 { 2874 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0 /*~V - invalid */, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2875 off = Bs3Cg1InsertOpcodes(pThis, off); 2876 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2877 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM5; 2878 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM4; 2879 pThis->fInvalidEncoding = true; 2880 } 2881 else if (iEncoding == 20) 2882 { 2883 pThis->abCurInstr[0] = P_RN; 2884 off = Bs3Cg1InsertVex3bPrefix(pThis, 1 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2885 off = Bs3Cg1InsertOpcodes(pThis, off); 2886 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2887 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM5; 2888 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM4; 2889 pThis->fInvalidEncoding = true; 2890 } 2891 else if (iEncoding == 21) 2892 { 2893 pThis->abCurInstr[0] = P_RZ; 2894 off = Bs3Cg1InsertVex3bPrefix(pThis, 1 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2895 off = Bs3Cg1InsertOpcodes(pThis, off); 2896 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2897 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM5; 2898 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM4; 2899 pThis->fInvalidEncoding = true; 2900 } 2901 else if (iEncoding == 22) 2902 { 2903 pThis->abCurInstr[0] = P_OZ; 2904 off = Bs3Cg1InsertVex3bPrefix(pThis, 1 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2905 off = Bs3Cg1InsertOpcodes(pThis, off); 2906 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2907 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM5; 2908 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM4; 2909 pThis->fInvalidEncoding = true; 2910 } 2911 else if (iEncoding == 23) 2912 { 2913 pThis->abCurInstr[0] = P_LK; 2914 off = Bs3Cg1InsertVex3bPrefix(pThis, 1 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2915 off = Bs3Cg1InsertOpcodes(pThis, off); 2916 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2917 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM5; 2918 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM4; 2919 pThis->fInvalidEncoding = true; 2920 } 2921 #if ARCH_BITS == 64 2922 /* 64-bit mode registers */ 2923 else if (BS3_MODE_IS_64BIT_CODE(pThis->bMode)) 2924 { 2925 if (iEncoding == 24) 2926 { 2927 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 0 /*~R*/); 2847 break; 2848 /* 256-bit invalid encodings: */ 2849 case 28: 2850 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xe /*~V - invalid */, 1 /*L*/, 1 /*~R*/); /* Bad V value */ 2928 2851 off = Bs3Cg1InsertOpcodes(pThis, off); 2929 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 3, 4);2930 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM4;2931 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM11;2932 }2933 else if (iEncoding == 25)2934 {2935 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0 xf /*~V*/, 1 /*L*/, 0 /*~R*/, 1 /*~X*/, 0/*~B*/, 0 /*W*/);2852 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 2853 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 0; 2854 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 1; 2855 pThis->fInvalidEncoding = true; 2856 break; 2857 case 29: 2858 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0 /*~V - invalid */, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2936 2859 off = Bs3Cg1InsertOpcodes(pThis, off); 2937 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 4); 2938 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_YMM12; 2939 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_YMM9; 2940 } 2941 else 2942 return 0; 2943 } 2944 #endif 2945 else 2946 return 0; 2947 #endif 2860 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2861 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 5; 2862 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 4; 2863 pThis->fInvalidEncoding = true; 2864 break; 2865 case 30: 2866 pThis->abCurInstr[0] = P_RN; 2867 off = Bs3Cg1InsertVex3bPrefix(pThis, 1 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2868 off = Bs3Cg1InsertOpcodes(pThis, off); 2869 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2870 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 5; 2871 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 4; 2872 pThis->fInvalidEncoding = true; 2873 break; 2874 case 31: 2875 pThis->abCurInstr[0] = P_RZ; 2876 off = Bs3Cg1InsertVex3bPrefix(pThis, 1 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2877 off = Bs3Cg1InsertOpcodes(pThis, off); 2878 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2879 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 5; 2880 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 4; 2881 pThis->fInvalidEncoding = true; 2882 break; 2883 case 32: 2884 pThis->abCurInstr[0] = P_OZ; 2885 off = Bs3Cg1InsertVex3bPrefix(pThis, 1 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2886 off = Bs3Cg1InsertOpcodes(pThis, off); 2887 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2888 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 5; 2889 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 4; 2890 pThis->fInvalidEncoding = true; 2891 break; 2892 case 33: 2893 pThis->abCurInstr[0] = P_LK; 2894 off = Bs3Cg1InsertVex3bPrefix(pThis, 1 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2895 off = Bs3Cg1InsertOpcodes(pThis, off); 2896 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 4, 5); 2897 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 5; 2898 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 4; 2899 pThis->fInvalidEncoding = true; 2900 break; 2901 2902 /* 64-bit mode registers */ 2903 case 34: 2904 if (BS3_MODE_IS_64BIT_CODE(pThis->bMode)) 2905 { 2906 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 0 /*~R*/); 2907 off = Bs3Cg1InsertOpcodes(pThis, off); 2908 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 3, 4); 2909 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 4; 2910 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 11; 2911 break; 2912 } 2913 /* fall thru */ 2914 case 35: 2915 if (BS3_MODE_IS_64BIT_CODE(pThis->bMode)) 2916 { 2917 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 0 /*~R*/, 1 /*~X*/, 0 /*~B*/, 0 /*W*/); 2918 off = Bs3Cg1InsertOpcodes(pThis, off); 2919 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 4); 2920 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 12; 2921 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 9; 2922 break; 2923 } 2924 /* fall thru */ 2948 2925 2949 2926 default: … … 2955 2932 } 2956 2933 2957 2958 2934 #endif /* BS3CG1_WITH_VEX */ 2959 2960 2935 2961 2936
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器