diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2009-08-17 18:17:29 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2009-08-17 18:17:29 -0700 |
commit | 24496060e533048b33e148ec6c503efb62b9fb87 (patch) | |
tree | 9e03d6326b2336d5270176e06ae941b0a2c31642 | |
parent | f1bfa9d6e409447ad5dfa48d077e832f425f4858 (diff) | |
download | gem5-24496060e533048b33e148ec6c503efb62b9fb87.tar.xz |
X86: Implement the MOVQ instruction.
-rw-r--r-- | src/arch/x86/isa/decoder/two_byte_opcodes.isa | 11 | ||||
-rw-r--r-- | src/arch/x86/isa/insts/simd128/integer/data_transfer/move.py | 48 |
2 files changed, 51 insertions, 8 deletions
diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa index 13de90323..75312ff45 100644 --- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa +++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa @@ -581,7 +581,7 @@ 0x2: punpckhdq_Pq_Qq(); 0x3: packssdw_Pq_Qq(); 0x6: Inst::MOVD(Pq,Edp); - 0x7: movq_Pq_Qq(); + 0x7: Inst::MOVQ(Pq,Qq); default: Inst::UD2(); } // repe (0xF3) @@ -741,12 +741,12 @@ 0x0: vmread_Ed_or_Eq_Gd_or_Gq(); 0x1: vmwrite_Gd_or_Gq_Ed_or_Eq(); 0x6: Inst::MOVD(Edp,Pdp); - 0x7: mov_Qq_Pq(); + 0x7: Inst::MOVQ(Qq,Pq); default: Inst::UD2(); } // repe (0xF3) 0x4: decode OPCODE_OP_BOTTOM3 { - 0x6: movq_Vo_Mq_or_Vq_Vq(); + 0x6: Inst::MOVQ(Vq,Wq); 0x7: movdqu_Wo_Vo(); default: Inst::UD2(); } @@ -969,10 +969,7 @@ 0x3: psrlq_Vo_Wo(); 0x4: paddq_Vo_Wo(); 0x5: pmullw_Vo_Wo(); - 0x6: decode MODRM_MOD { - 0x3: movq_Vq_Vq(); - default: movq_Mq_Vq(); - } + 0x6: Inst::MOVQ(Wq,Vq); 0x7: pmovmskb_Gd_VRo(); } // repne (0xF2) diff --git a/src/arch/x86/isa/insts/simd128/integer/data_transfer/move.py b/src/arch/x86/isa/insts/simd128/integer/data_transfer/move.py index 8c555b905..3cad6e1a7 100644 --- a/src/arch/x86/isa/insts/simd128/integer/data_transfer/move.py +++ b/src/arch/x86/isa/insts/simd128/integer/data_transfer/move.py @@ -79,8 +79,54 @@ def macroop MOVD_P_MMX { rdip t7 stfp mmx, seg, riprel, disp, dataSize=8 }; + +def macroop MOVQ_XMM_XMM { + movfp xmml, xmmlm + lfpimm xmmh, 0 +}; + +def macroop MOVQ_XMM_M { + ldfp xmml, seg, sib, disp, dataSize=8 + lfpimm xmmh, 0 +}; + +def macroop MOVQ_XMM_P { + rdip t7 + ldfp xmml, seg, riprel, disp, dataSize=8 + lfpimm xmmh, 0 +}; + +def macroop MOVQ_M_XMM { + stfp xmml, seg, sib, disp, dataSize=8 +}; + +def macroop MOVQ_P_XMM { + rdip t7 + stfp xmml, seg, riprel, disp, dataSize=8 +}; + +def macroop MOVQ_MMX_MMX { + movfp mmx, mmxm +}; + +def macroop MOVQ_MMX_M { + ldfp mmx, seg, sib, disp, dataSize=8 +}; + +def macroop MOVQ_MMX_P { + rdip t7 + ldfp mmx, seg, riprel, disp, dataSize=8 +}; + +def macroop MOVQ_M_MMX { + stfp mmx, seg, sib, disp, dataSize=8 +}; + +def macroop MOVQ_P_MMX { + rdip t7 + stfp mmx, seg, riprel, disp, dataSize=8 +}; ''' -# MOVQ # MOVDQA # MOVDQU # MOVDQ2Q |