2
0
Эх сурвалжийг харах

* mark the sldt,syscall,sysenter,sysexit,sysret,andn,bextr,rorx,sarx,shlx and
shrx instructions as protected mode only

git-svn-id: trunk@37275 -

nickysn 7 жил өмнө
parent
commit
ab62e2237b

+ 12 - 12
compiler/i386/i386tab.inc

@@ -5262,14 +5262,14 @@
     ops     : 1;
     optypes : (ot_memory,ot_none,ot_none,ot_none);
     code    : #2#15#0#128;
-    flags   : if_286
+    flags   : if_286 or if_prot
   ),
   (
     opcode  : A_SLDT;
     ops     : 1;
     optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none,ot_none);
     code    : #208#2#15#0#128;
-    flags   : if_286
+    flags   : if_286 or if_prot
   ),
   (
     opcode  : A_SMI;
@@ -5458,28 +5458,28 @@
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#5;
-    flags   : if_p6 or if_amd
+    flags   : if_p6 or if_prot or if_amd
   ),
   (
     opcode  : A_SYSENTER;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#52;
-    flags   : if_p6
+    flags   : if_p6 or if_prot
   ),
   (
     opcode  : A_SYSEXIT;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#53;
-    flags   : if_p6 or if_priv
+    flags   : if_p6 or if_prot or if_priv
   ),
   (
     opcode  : A_SYSRET;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#7;
-    flags   : if_p6 or if_priv or if_amd
+    flags   : if_p6 or if_prot or if_priv or if_amd
   ),
   (
     opcode  : A_TEST;
@@ -12465,14 +12465,14 @@
     ops     : 3;
     optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
     code    : #242#249#1#242#61#80;
-    flags   : if_bmi1
+    flags   : if_bmi1 or if_prot
   ),
   (
     opcode  : A_BEXTR;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #242#249#1#247#62#72;
-    flags   : if_bmi1
+    flags   : if_bmi1 or if_prot
   ),
   (
     opcode  : A_TZCNT;
@@ -12486,28 +12486,28 @@
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
     code    : #220#242#250#1#240#72#22;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_SARX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #219#242#249#1#247#62#72;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_SHLX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #241#242#249#1#247#62#72;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_SHRX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #220#242#249#1#247#62#72;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_VBROADCASTI128;

+ 12 - 12
compiler/i8086/i8086tab.inc

@@ -5276,14 +5276,14 @@
     ops     : 1;
     optypes : (ot_memory,ot_none,ot_none,ot_none);
     code    : #2#15#0#128;
-    flags   : if_286
+    flags   : if_286 or if_prot
   ),
   (
     opcode  : A_SLDT;
     ops     : 1;
     optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none,ot_none);
     code    : #208#2#15#0#128;
-    flags   : if_286
+    flags   : if_286 or if_prot
   ),
   (
     opcode  : A_SMI;
@@ -5472,28 +5472,28 @@
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#5;
-    flags   : if_p6 or if_amd
+    flags   : if_p6 or if_prot or if_amd
   ),
   (
     opcode  : A_SYSENTER;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#52;
-    flags   : if_p6
+    flags   : if_p6 or if_prot
   ),
   (
     opcode  : A_SYSEXIT;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#53;
-    flags   : if_p6 or if_priv
+    flags   : if_p6 or if_prot or if_priv
   ),
   (
     opcode  : A_SYSRET;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#7;
-    flags   : if_p6 or if_priv or if_amd
+    flags   : if_p6 or if_prot or if_priv or if_amd
   ),
   (
     opcode  : A_TEST;
@@ -12493,14 +12493,14 @@
     ops     : 3;
     optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
     code    : #242#249#1#242#61#80;
-    flags   : if_bmi1
+    flags   : if_bmi1 or if_prot
   ),
   (
     opcode  : A_BEXTR;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #242#249#1#247#62#72;
-    flags   : if_bmi1
+    flags   : if_bmi1 or if_prot
   ),
   (
     opcode  : A_TZCNT;
@@ -12514,28 +12514,28 @@
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
     code    : #220#242#250#1#240#72#22;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_SARX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #219#242#249#1#247#62#72;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_SHLX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #241#242#249#1#247#62#72;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_SHRX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #220#242#249#1#247#62#72;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_VBROADCASTI128;

+ 18 - 18
compiler/x86/x86ins.dat

@@ -1871,8 +1871,8 @@ mem                   \2\x0F\x01\201              286
 
 [SLDT,sldtX]
 (Ch_Wop1)
-mem                   \2\x0F\x00\200                  286
-reg16|32|64           \320\2\x0F\x00\200              286
+mem                   \2\x0F\x00\200                  286,PROT
+reg16|32|64           \320\2\x0F\x00\200              286,PROT
 
 [SMI]
 (Ch_All)
@@ -1949,19 +1949,19 @@ mem80                 \2\x0F\x7C\200                  486,CYRIX,SMM
 
 [SYSCALL]
 (Ch_All)
-void                  \2\x0F\x05                      P6,AMD
+void                  \2\x0F\x05                      P6,PROT,AMD
 
 [SYSENTER]
 (Ch_All)
-void                  \2\x0F\x34                      P6
+void                  \2\x0F\x34                      P6,PROT
 
 [SYSEXIT]
 (Ch_All)
-void                  \2\x0F\x35                      P6,PRIV
+void                  \2\x0F\x35                      P6,PROT,PRIV
 
 [SYSRET]
 (Ch_All)
-void                  \2\x0F\x07                      P6,PRIV,AMD
+void                  \2\x0F\x07                      P6,PROT,PRIV,AMD
 
 [TEST,testX]
 (Ch_Rop1, Ch_Rop2, Ch_W0OverflowFlag, Ch_W0CarryFlag, Ch_WSignFlag, Ch_WZeroFlag, Ch_WParityFlag, Ch_WUAuxiliaryFlag)
@@ -4837,13 +4837,13 @@ void                                 \362\370\1\x77                       AVX,SA
 
 [ANDN]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-reg32,reg32,rm32                      \362\371\1\xf2\75\120               BMI1
-reg64,reg64,rm64                      \362\363\371\1\xf2\75\120           BMI1,X86_64
+reg32,reg32,rm32                      \362\371\1\xf2\75\120               BMI1,PROT
+reg64,reg64,rm64                      \362\363\371\1\xf2\75\120           BMI1,PROT,X86_64
 
 [BEXTR]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-reg32,rm32,reg32                      \362\371\1\xf7\76\110               BMI1
-reg64,rm64,reg64                      \362\363\371\1\xf7\76\110           BMI1,X86_64
+reg32,rm32,reg32                      \362\371\1\xf7\76\110               BMI1,PROT
+reg64,rm64,reg64                      \362\363\371\1\xf7\76\110           BMI1,PROT,X86_64
 
 [TZCNT]
 (Ch_Wop2, Ch_WFlags, Ch_Rop1)
@@ -4855,23 +4855,23 @@ reg16|32|64,regmem                    \320\333\2\x0F\xBC\110              BMI1,S
 
 [RORX]
 (Ch_Rop1, Ch_Wop2)
-reg32,rm32,imm8                      \334\362\372\1\xf0\110\26            BMI2
-reg64,rm64,imm8                      \334\362\363\372\1\xf0\110\26        BMI2,X86_64
+reg32,rm32,imm8                      \334\362\372\1\xf0\110\26            BMI2,PROT
+reg64,rm64,imm8                      \334\362\363\372\1\xf0\110\26        BMI2,PROT,X86_64
 
 [SARX]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-reg32,rm32,reg32                      \333\362\371\1\xf7\76\110           BMI2
-reg64,rm64,reg64                      \333\362\363\371\1\xf7\76\110       BMI2,X86_64
+reg32,rm32,reg32                      \333\362\371\1\xf7\76\110           BMI2,PROT
+reg64,rm64,reg64                      \333\362\363\371\1\xf7\76\110       BMI2,PROT,X86_64
 
 [SHLX]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-reg32,rm32,reg32                      \361\362\371\1\xf7\76\110           BMI2
-reg64,rm64,reg64                      \361\362\363\371\1\xf7\76\110       BMI2,X86_64
+reg32,rm32,reg32                      \361\362\371\1\xf7\76\110           BMI2,PROT
+reg64,rm64,reg64                      \361\362\363\371\1\xf7\76\110       BMI2,PROT,X86_64
 
 [SHRX]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-reg32,rm32,reg32                      \334\362\371\1\xf7\76\110           BMI2
-reg64,rm64,reg64                      \334\362\363\371\1\xf7\76\110       BMI2,X86_64
+reg32,rm32,reg32                      \334\362\371\1\xf7\76\110           BMI2,PROT
+reg64,rm64,reg64                      \334\362\363\371\1\xf7\76\110       BMI2,PROT,X86_64
 
 
 ;*******************************************************************************

+ 18 - 18
compiler/x86_64/x8664tab.inc

@@ -5143,14 +5143,14 @@
     ops     : 1;
     optypes : (ot_memory,ot_none,ot_none,ot_none);
     code    : #2#15#0#128;
-    flags   : if_286
+    flags   : if_286 or if_prot
   ),
   (
     opcode  : A_SLDT;
     ops     : 1;
     optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none,ot_none);
     code    : #208#2#15#0#128;
-    flags   : if_286
+    flags   : if_286 or if_prot
   ),
   (
     opcode  : A_SMI;
@@ -5353,28 +5353,28 @@
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#5;
-    flags   : if_p6 or if_amd
+    flags   : if_p6 or if_prot or if_amd
   ),
   (
     opcode  : A_SYSENTER;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#52;
-    flags   : if_p6
+    flags   : if_p6 or if_prot
   ),
   (
     opcode  : A_SYSEXIT;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#53;
-    flags   : if_p6 or if_priv
+    flags   : if_p6 or if_prot or if_priv
   ),
   (
     opcode  : A_SYSRET;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none,ot_none);
     code    : #2#15#7;
-    flags   : if_p6 or if_priv or if_amd
+    flags   : if_p6 or if_prot or if_priv or if_amd
   ),
   (
     opcode  : A_TEST;
@@ -12605,28 +12605,28 @@
     ops     : 3;
     optypes : (ot_reg32,ot_reg32,ot_rm_gpr or ot_bits32,ot_none);
     code    : #242#249#1#242#61#80;
-    flags   : if_bmi1
+    flags   : if_bmi1 or if_prot
   ),
   (
     opcode  : A_ANDN;
     ops     : 3;
     optypes : (ot_reg64,ot_reg64,ot_rm_gpr or ot_bits64,ot_none);
     code    : #242#243#249#1#242#61#80;
-    flags   : if_bmi1 or if_x86_64
+    flags   : if_bmi1 or if_prot or if_x86_64
   ),
   (
     opcode  : A_BEXTR;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #242#249#1#247#62#72;
-    flags   : if_bmi1
+    flags   : if_bmi1 or if_prot
   ),
   (
     opcode  : A_BEXTR;
     ops     : 3;
     optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
     code    : #242#243#249#1#247#62#72;
-    flags   : if_bmi1 or if_x86_64
+    flags   : if_bmi1 or if_prot or if_x86_64
   ),
   (
     opcode  : A_TZCNT;
@@ -12640,56 +12640,56 @@
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_immediate or ot_bits8,ot_none);
     code    : #220#242#250#1#240#72#22;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_RORX;
     ops     : 3;
     optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_immediate or ot_bits8,ot_none);
     code    : #220#242#243#250#1#240#72#22;
-    flags   : if_bmi2 or if_x86_64
+    flags   : if_bmi2 or if_prot or if_x86_64
   ),
   (
     opcode  : A_SARX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #219#242#249#1#247#62#72;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_SARX;
     ops     : 3;
     optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
     code    : #219#242#243#249#1#247#62#72;
-    flags   : if_bmi2 or if_x86_64
+    flags   : if_bmi2 or if_prot or if_x86_64
   ),
   (
     opcode  : A_SHLX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #241#242#249#1#247#62#72;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_SHLX;
     ops     : 3;
     optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
     code    : #241#242#243#249#1#247#62#72;
-    flags   : if_bmi2 or if_x86_64
+    flags   : if_bmi2 or if_prot or if_x86_64
   ),
   (
     opcode  : A_SHRX;
     ops     : 3;
     optypes : (ot_reg32,ot_rm_gpr or ot_bits32,ot_reg32,ot_none);
     code    : #220#242#249#1#247#62#72;
-    flags   : if_bmi2
+    flags   : if_bmi2 or if_prot
   ),
   (
     opcode  : A_SHRX;
     ops     : 3;
     optypes : (ot_reg64,ot_rm_gpr or ot_bits64,ot_reg64,ot_none);
     code    : #220#242#243#249#1#247#62#72;
-    flags   : if_bmi2 or if_x86_64
+    flags   : if_bmi2 or if_prot or if_x86_64
   ),
   (
     opcode  : A_VBROADCASTI128;