X86: Implement the movaps instruction.
authorGabe Black <gblack@eecs.umich.edu>
Thu, 30 Aug 2007 03:38:22 +0000 (20:38 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 30 Aug 2007 03:38:22 +0000 (20:38 -0700)
--HG--
extra : convert_revision : 2aeb1c05205f8ea8f7484e8bacf3fbbc581defd2

src/arch/x86/isa/decoder/two_byte_opcodes.isa
src/arch/x86/isa/insts/sse/move.py

index c426c6b0ffc93a4dddac7cf42c69e7a9aac2b451..6d5a04e2d7dc8858787ec29b66b6d5be78c28a85 100644 (file)
             0x05: decode LEGACY_DECODEVAL {
                 // no prefix
                 0x0: decode OPCODE_OP_BOTTOM3 {
-                    0x0: movaps_Vo_Wo();
-                    0x1: movaps_Wo_Vo();
+                    //These moves should really use size o (octword), but
+                    //because they are split in two, they use q (quadword).
+                    0x0: Inst::MOVAPS(Vq,Wq);
+                    0x1: Inst::MOVAPS(Wq,Vq);
                     0x2: decode MODRM_MOD {
                         0x3: cvtpi2pS_Vq_Pq();
                         default: cvtpi2ps_Vq_Mq();
index 05e28d74d2f96229bd8099a2fa70bc2ca7fda335..c03658c7c5dede10323c3e1f8542648e2f43e73e 100644 (file)
@@ -99,4 +99,31 @@ def macroop MOVSD_P_R {
 def macroop MOVSD_R_R {
     movfp xmml, xmml, xmmlm, dataSize=8
 };
+
+def macroop MOVAPS_R_M {
+    ldfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
+    ldfp xmml, seg, sib, disp, dataSize=8
+};
+
+def macroop MOVAPS_R_P {
+    rdip t7
+    ldfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
+    ldfp xmml, seg, riprel, disp, dataSize=8
+};
+
+def macroop MOVAPS_M_R {
+    stfp xmmh, seg, sib, "DISPLACEMENT + 8", dataSize=8
+    stfp xmml, seg, sib, disp, dataSize=8
+};
+
+def macroop MOVAPS_P_R {
+    rdip t7
+    stfp xmmh, seg, riprel, "DISPLACEMENT + 8", dataSize=8
+    stfp xmml, seg, riprel, disp, dataSize=8
+};
+
+def macroop MOVAPS_R_R {
+    movfp xmml, xmml, xmmlm, dataSize=8
+    movfp xmmh, xmmh, xmmhm, dataSize=8
+};
 '''