summaryrefslogtreecommitdiff
path: root/src/arch/x86
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2007-08-29 20:38:22 -0700
committerGabe Black <gblack@eecs.umich.edu>2007-08-29 20:38:22 -0700
commitc1a776de8a89c624d3e047bf40863e05180a7958 (patch)
tree8320c5230d5d07c583af36d793683102a3a19cc2 /src/arch/x86
parent3da3190f0750bf38e6c13c691c1146f26d0d1dd8 (diff)
downloadgem5-c1a776de8a89c624d3e047bf40863e05180a7958.tar.xz
X86: Implement the movaps instruction.
--HG-- extra : convert_revision : 2aeb1c05205f8ea8f7484e8bacf3fbbc581defd2
Diffstat (limited to 'src/arch/x86')
-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
+};
'''