X86: Implement PUNPCKLWD.
[gem5.git] / src / arch / x86 / isa / decoder / two_byte_opcodes.isa
index 64920bcbdcc8ab45a77770187586490d5e5be815..763b661ca683b5090a3445b70f2a8f74ed394e63 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();
             0x0C: decode LEGACY_DECODEVAL {
                 // no prefix
                 0x0: decode OPCODE_OP_BOTTOM3 {
-                    0x0: punpcklbw_Pq_Qd();
-                    0x1: punpcklwd_Pq_Qd();
+                    0x0: Inst::PUNPCKLBW(Pq,Qd);
+                    0x1: Inst::PUNPCKLWD(Pq,Qd);
                     0x2: punpckldq_Pq_Qd();
                     0x3: packsswb_Pq_Qq();
                     0x4: pcmpgtb_Pq_Qq();
                 }
                 // operand size (0x66)
                 0x1: decode OPCODE_OP_BOTTOM3 {
-                    0x0: punpcklbw_Vo_Wq();
-                    0x1: punpcklwd_Vo_Wq();
+                    0x0: Inst::PUNPCKLBW(Vo,Wq);
+                    0x1: Inst::PUNPCKLWD(Vo,Wq);
                     0x2: punpckldq_Vo_Wq();
                     0x3: packsswb_Vo_Wo();
                     0x4: pcmpgtb_Vo_Wo();
                     0x1: punpckhwd_Pq_Qq();
                     0x2: punpckhdq_Pq_Qq();
                     0x3: packssdw_Pq_Qq();
-                    0x6: movd_Pq_Ed();
-                    0x7: movq_Pq_Qq();
+                    0x6: Inst::MOVD(Pq,Edp);
+                    0x7: Inst::MOVQ(Pq,Qq);
                     default: Inst::UD2();
                 }
                 // repe (0xF3)
                 0x0: decode OPCODE_OP_BOTTOM3 {
                     0x0: vmread_Ed_or_Eq_Gd_or_Gq();
                     0x1: vmwrite_Gd_or_Gq_Ed_or_Eq();
-                    0x6: mov_Ed_Pd();
-                    0x7: mov_Qq_Pq();
+                    0x6: Inst::MOVD(Edp,Pdp);
+                    0x7: Inst::MOVQ(Qq,Pq);
                     default: Inst::UD2();
                 }
                 // repe (0xF3)
                 0x4: decode OPCODE_OP_BOTTOM3 {
-                    0x6: movq_Vo_Mq_or_Vq_Vq();
+                    0x6: Inst::MOVQ(Vq,Wq);
                     0x7: movdqu_Wo_Vo();
                     default: Inst::UD2();
                 }
                 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_REG {
                     0x0: fxsave();
                 0x1: Inst::XADD(Ev,Gv);
                 //0x7: group9();
                 0x7: decode MODRM_REG {
-                    0x1: cmpxchg_Mq();
+                    //Also CMPXCHG16B
+                    0x1: Inst::CMPXCHG8B(Mdp);
                     0x6: decode LEGACY_OP {
                         0x1: vmclear_Mq();
                         default: decode LEGACY_REP {
                     0x3: psrlq_Vo_Wo();
                     0x4: paddq_Vo_Wo();
                     0x5: pmullw_Vo_Wo();
-                    0x6: decode MODRM_MOD {
-                        0x3: movq_Vq_Vq();
-                        default: movq_Mq_Vq();
-                    }
+                    0x6: Inst::MOVQ(Wq,Vq);
                     0x7: pmovmskb_Gd_VRo();
                 }
                 // repne (0xF2)
                 }
                 default: Inst::UD2();
             }
-            0x1E: decode OPCODE_OP_BOTTOM3 {
+            0x1E: decode LEGACY_DECODEVAL {
                 // no prefix
                 0x0: decode OPCODE_OP_BOTTOM3 {
                     0x1: psllw_Pq_Qq();