X86: (Re)Implemented SHRD.
[gem5.git] / src / arch / x86 / isa / decoder / two_byte_opcodes.isa
index 9c376e2c4ed233061e3b53ff16a2873b7929bc89..dbde17964d03aa1e21acd795a78bd95f8355ba0b 100644 (file)
                             0x6: skinit();
                             0x7: invlpga();
                         }
-                        0x4: smsw_Rv();
-                        0x6: lmsw_Rv();
+                        0x4: Inst::SMSW(Rv);
+                        0x6: Inst::LMSW(Rv);
                         0x7: decode MODRM_RM {
                             0x0: Inst::SWAPGS();
                             0x1: rdtscp();
                                 default: Inst::LIDT(M);
                             }
                         }
-                        0x4: smsw_Mw();
-                        0x6: lmsw_Mw();
+                        0x4: Inst::SMSW(Mw);
+                        0x6: Inst::LMSW(Mw);
                         0x7: Inst::INVLPG(M);
                         default: Inst::UD2();
                     }
                 0x1: Inst::RDTSC();
                 0x2: Inst::RDMSR();
                 0x3: rdpmc();
+#if FULL_SYSTEM
                 0x4: sysenter();
+#else
+                0x4: SyscallInst::sysenter('xc->syscall(Rax)', IsSyscall);
+#endif
                 0x5: sysexit();
                 0x6: Inst::UD2();
                 0x7: getsec();
                 0x1: pop_fs();
                 0x2: CPUIDInst::CPUID({{
                     CpuidResult result;
-                    success = doCpuid(xc->tcBase(), Rax, result);
+                    success = doCpuid(xc->tcBase(), bits(Rax, 31, 0), result);
                     Rax = result.rax;
                     Rbx = result.rbx;
                     Rcx = result.rcx;
                     Rdx = result.rdx;
                     }});
                 0x3: Inst::BT(Ev,Gv);
-                0x4: shld_Ev_Gv_Ib();
-                0x5: shld_Ev_Gv_rCl();
+                0x4: Inst::SHLD(Ev,Gv,Ib);
+                0x5: Inst::SHLD(Ev,Gv);
                 0x6: xbts_and_cmpxchg();
                 0x7: ibts_and_cmpxchg();
             }
                 0x1: pop_gs();
                 0x2: rsm_smm();
                 0x3: Inst::BTS(Ev,Gv);
-                0x4: shrd_Ev_Gv_Ib();
-                0x5: shrd_Ev_Gv_rCl();
+                0x4: Inst::SHRD(Ev,Gv,Ib);
+                0x5: Inst::SHRD(Ev,Gv);
                 //0x6: group16();
-                0x6: decode MODRM_MOD {
-                    0x3: decode MODRM_REG {
-                        0x5: BasicOperate::LFENCE(
+                0x6: decode MODRM_REG {
+                    0x0: fxsave();
+                    0x1: fxrstor();
+                    0x2: ldmxcsr();
+                    0x3: stmxcsr();
+                    0x4: Inst::UD2();
+                    0x5: decode MODRM_MOD {
+                        0x3: BasicOperate::LFENCE(
                                      {{/*Nothing*/}}, IsReadBarrier);
-                        0x6: BasicOperate::MFENCE(
+                        default: Inst::UD2();
+                    }
+                    0x6: decode MODRM_MOD {
+                        0x3: BasicOperate::MFENCE(
                                      {{/*Nothing*/}}, IsMemBarrier);
-                        0x7: BasicOperate::SFENCE(
-                                     {{/*Nothing*/}}, IsWriteBarrier);
                         default: Inst::UD2();
                     }
-                    default: decode MODRM_REG {
-                        0x0: fxsave();
-                        0x1: fxrstor();
-                        0x7: clflush();
+                    0x7: decode MODRM_MOD {
+                        0x3: BasicOperate::SFENCE(
+                                     {{/*Nothing*/}}, IsWriteBarrier);
                         default: Inst::UD2();
                     }
                 }
                 }
                 default: Inst::UD2();
             }
-            0x1E: decode OPCODE_OP_BOTTOM3 {
+            0x1E: decode LEGACY_DECODEVAL {
                 // no prefix
                 0x0: decode OPCODE_OP_BOTTOM3 {
                     0x1: psllw_Pq_Qq();