diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2009-08-17 20:22:56 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2009-08-17 20:22:56 -0700 |
commit | d9970f139acfb2a3d19854d082cc30000bf09d35 (patch) | |
tree | 5288397239af86a90c25191fbde05cfb3d32ce13 | |
parent | 75528a497c1980a55256e068473da8e0d684c8ab (diff) | |
download | gem5-d9970f139acfb2a3d19854d082cc30000bf09d35.tar.xz |
X86: Implement the mask move instructions.
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 +}; ''' |