summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/isa/decoder/two_byte_opcodes.isa6
-rw-r--r--src/arch/x86/isa/insts/sse/move.py27
2 files changed, 31 insertions, 2 deletions
diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
index c426c6b0f..6d5a04e2d 100644
--- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa
+++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
@@ -164,8 +164,10 @@
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();
diff --git a/src/arch/x86/isa/insts/sse/move.py b/src/arch/x86/isa/insts/sse/move.py
index 05e28d74d..c03658c7c 100644
--- a/src/arch/x86/isa/insts/sse/move.py
+++ b/src/arch/x86/isa/insts/sse/move.py
@@ -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
+};
'''