Implement the rest of the conditional jump instructions and hook them into the decoder.
authorGabe Black <gblack@eecs.umich.edu>
Sat, 21 Jul 2007 00:02:39 +0000 (17:02 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sat, 21 Jul 2007 00:02:39 +0000 (17:02 -0700)
--HG--
extra : convert_revision : 8d1d6abce29371def560e1c3f31dabb4de01366f

src/arch/x86/isa/decoder/one_byte_opcodes.isa
src/arch/x86/isa/decoder/two_byte_opcodes.isa
src/arch/x86/isa/insts/control_transfer/jump.py

index 42404ab910a39dfb6e865bcfeee0d1cf43d6a4b8..d1ef8d48e66d76a79bec6b999f4e527be7111cbe 100644 (file)
             0x6: outs_Dx_Xb();
             0x7: outs_Dx_Xz();
         }
-        0x0E: decode OPCODE_OP_BOTTOM3 {
-            0x0: jo_Jb();
-            0x1: jno_Jb();
-            0x2: jb_Jb();
-            0x3: Inst::JNB(Jb);
-            0x4: Inst::JZ(Jb);
-            0x5: Inst::JNZ(Jb);
-            0x6: Inst::JBE(Jb);
-            0x7: Inst::JNBE(Jb);
-        }
-        0x0F: decode OPCODE_OP_BOTTOM3 {
-            0x0: js_Jb();
-            0x1: jns_Jb();
-            0x2: jp_Jb();
-            0x3: jnp_Jb();
-            0x4: jl_Jb();
-            0x5: jnl_Jb();
-            0x6: jle_Jb();
-            0x7: Inst::JNLE(Jb);
+        format Inst {
+            0x0E: decode OPCODE_OP_BOTTOM3 {
+                0x0: JO(Jb);
+                0x1: JNO(Jb);
+                0x2: JB(Jb);
+                0x3: JNB(Jb);
+                0x4: JZ(Jb);
+                0x5: JNZ(Jb);
+                0x6: JBE(Jb);
+                0x7: JNBE(Jb);
+            }
+            0x0F: decode OPCODE_OP_BOTTOM3 {
+                0x0: JS(Jb);
+                0x1: JNS(Jb);
+                0x2: JP(Jb);
+                0x3: JNP(Jb);
+                0x4: JL(Jb);
+                0x5: JNL(Jb);
+                0x6: JLE(Jb);
+                0x7: JNLE(Jb);
+            }
         }
         0x10: decode OPCODE_OP_BOTTOM3 {
             //0x0: group1_Eb_Ib();
index a62e911e26bb2f74ac2e17e39750ab2b68298380..383d64e5a2c322381d87eadc6a5ac8a1c0eec465 100644 (file)
                 0x6: holder();
                 0x7: holder();
             }
-            0x10: decode OPCODE_OP_BOTTOM3 {
-                0x0: jo_Jz();
-                0x1: jno_Jz();
-                0x2: jb_Jz();
-                0x3: Inst::JNB(Jz);
-                0x4: Inst::JZ(Jz);
-                0x5: Inst::JNZ(Jz);
-                0x6: Inst::JBE(Jz);
-                0x7: Inst::JNBE(Jz);
-            }
-            0x11: decode OPCODE_OP_BOTTOM3 {
-                0x0: js_Jz();
-                0x1: jns_Jz();
-                0x2: jp_Jz();
-                0x3: jnp_Jz();
-                0x4: jl_Jz();
-                0x5: jnl_Jz();
-                0x6: jle_Jz();
-                0x7: jnle_Jz();
+            format Inst {
+                0x10: decode OPCODE_OP_BOTTOM3 {
+                    0x0: JO(Jz);
+                    0x1: JNO(Jz);
+                    0x2: JB(Jz);
+                    0x3: JNB(Jz);
+                    0x4: JZ(Jz);
+                    0x5: JNZ(Jz);
+                    0x6: JBE(Jz);
+                    0x7: JNBE(Jz);
+                }
+                0x11: decode OPCODE_OP_BOTTOM3 {
+                    0x0: JS(Jz);
+                    0x1: JNS(Jz);
+                    0x2: JP(Jz);
+                    0x3: JNP(Jz);
+                    0x4: JL(Jz);
+                    0x5: JNL(Jz);
+                    0x6: JLE(Jz);
+                    0x7: JNLE(Jz);
+                }
             }
             0x12: decode OPCODE_OP_BOTTOM3 {
                 0x0: seto_Eb();
index 3d69643ae033186104ea6e05f5bd3d275d1e4122..489eb9e3903e2a1244287220c0e9153bf6c4617b 100644 (file)
@@ -74,6 +74,16 @@ def macroop JNZ_I
     wrip t1, t2, flags=(nCZF,)
 };
 
+def macroop JB_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(CCF,)
+};
+
 def macroop JNB_I
 {
     # Make the default data size of jumps 64 bits in 64 bit mode
@@ -104,6 +114,76 @@ def macroop JNBE_I
     wrip t1, t2, flags=(nCCvZF,)
 };
 
+def macroop JS_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(CSF,)
+};
+
+def macroop JNS_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(nCSF,)
+};
+
+def macroop JP_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(CPF,)
+};
+
+def macroop JNP_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(nCPF,)
+};
+
+def macroop JL_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(CSxOF,)
+};
+
+def macroop JNL_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(nCSxOF,)
+};
+
+def macroop JLE_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(CSxOvZF,)
+};
+
 def macroop JNLE_I
 {
     # Make the default data size of jumps 64 bits in 64 bit mode
@@ -114,6 +194,26 @@ def macroop JNLE_I
     wrip t1, t2, flags=(nCSxOvZF,)
 };
 
+def macroop JO_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(COF,)
+};
+
+def macroop JNO_I
+{
+    # Make the default data size of jumps 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
+
+    rdip t1
+    limm t2, imm
+    wrip t1, t2, flags=(nCOF,)
+};
+
 def macroop JMP_I
 {
     # Make the default data size of jumps 64 bits in 64 bit mode