summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2009-08-17 20:22:56 -0700
committerGabe Black <gblack@eecs.umich.edu>2009-08-17 20:22:56 -0700
commitd9970f139acfb2a3d19854d082cc30000bf09d35 (patch)
tree5288397239af86a90c25191fbde05cfb3d32ce13
parent75528a497c1980a55256e068473da8e0d684c8ab (diff)
downloadgem5-d9970f139acfb2a3d19854d082cc30000bf09d35.tar.xz
X86: Implement the mask move instructions.
-rw-r--r--src/arch/x86/isa/decoder/two_byte_opcodes.isa4
-rw-r--r--src/arch/x86/isa/insts/simd128/integer/data_transfer/move_non_temporal.py10
-rw-r--r--src/arch/x86/isa/insts/simd64/integer/data_transfer/move_non_temporal.py7
3 files changed, 17 insertions, 4 deletions
diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
index 7e0f19fb1..91e2f2b2f 100644
--- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa
+++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa
@@ -1067,7 +1067,7 @@
0x4: PMULUDQ(Pq,Qq);
0x5: PMADDWD(Pq,Qq);
0x6: PSADBW(Pq,Qq);
- 0x7: WarnUnimpl::maskmovq_Pq_PRq();
+ 0x7: MASKMOVQ(Pq,PRq);
default: UD2();
}
// operand size (0x66)
@@ -1078,7 +1078,7 @@
0x4: PMULUDQ(Vo,Wo);
0x5: PMADDWD(Vo,Wo);
0x6: PSADBW(Vo,Wo);
- 0x7: WarnUnimpl::maskmovdqu_Vo_VRo();
+ 0x7: MASKMOVDQU(Vo,VRo);
default: UD2();
}
// repne (0xF2)
diff --git a/src/arch/x86/isa/insts/simd128/integer/data_transfer/move_non_temporal.py b/src/arch/x86/isa/insts/simd128/integer/data_transfer/move_non_temporal.py
index 413dddb84..c8df3b403 100644
--- a/src/arch/x86/isa/insts/simd128/integer/data_transfer/move_non_temporal.py
+++ b/src/arch/x86/isa/insts/simd128/integer/data_transfer/move_non_temporal.py
@@ -55,5 +55,13 @@
microcode = '''
# MOVNTDQ
-# MASKMOVDQU
+
+def macroop MASKMOVDQU_XMM_XMM {
+ ldfp ufp1, ds, [1, t0, rdi], dataSize=8
+ ldfp ufp2, ds, [1, t0, rdi], 8, dataSize=8
+ maskmov ufp1, xmml, xmmlm, size=1
+ maskmov ufp2, xmmh, xmmhm, size=1
+ stfp ufp1, ds, [1, t0, rdi], dataSize=8
+ stfp ufp2, ds, [1, t0, rdi], 8, dataSize=8
+};
'''
diff --git a/src/arch/x86/isa/insts/simd64/integer/data_transfer/move_non_temporal.py b/src/arch/x86/isa/insts/simd64/integer/data_transfer/move_non_temporal.py
index edd55d35a..f43d75e68 100644
--- a/src/arch/x86/isa/insts/simd64/integer/data_transfer/move_non_temporal.py
+++ b/src/arch/x86/isa/insts/simd64/integer/data_transfer/move_non_temporal.py
@@ -55,5 +55,10 @@
microcode = '''
# MOVNTQ
-# MASKMOVQ
+
+def macroop MASKMOVQ_MMX_MMX {
+ ldfp ufp1, ds, [1, t0, rdi], dataSize=8
+ maskmov ufp1, mmx, mmxm, size=1
+ stfp ufp1, ds, [1, t0, rdi], dataSize=8
+};
'''