From d9970f139acfb2a3d19854d082cc30000bf09d35 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Mon, 17 Aug 2009 20:22:56 -0700 Subject: [PATCH] X86: Implement the mask move instructions. --- src/arch/x86/isa/decoder/two_byte_opcodes.isa | 4 ++-- .../simd128/integer/data_transfer/move_non_temporal.py | 10 +++++++++- .../simd64/integer/data_transfer/move_non_temporal.py | 7 ++++++- 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 +}; ''' -- 2.30.2