diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa index 763b661ca..6e3bf53cd 100644 --- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa +++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa @@ -553,7 +553,7 @@ 0x0: decode OPCODE_OP_BOTTOM3 { 0x0: Inst::PUNPCKLBW(Pq,Qd); 0x1: Inst::PUNPCKLWD(Pq,Qd); - 0x2: punpckldq_Pq_Qd(); + 0x2: Inst::PUNPCKLDQ(Pq,Qd); 0x3: packsswb_Pq_Qq(); 0x4: pcmpgtb_Pq_Qq(); 0x5: pcmpgtw_Pq_Qq(); @@ -564,7 +564,7 @@ 0x1: decode OPCODE_OP_BOTTOM3 { 0x0: Inst::PUNPCKLBW(Vo,Wq); 0x1: Inst::PUNPCKLWD(Vo,Wq); - 0x2: punpckldq_Vo_Wq(); + 0x2: Inst::PUNPCKLDQ(Vo,Wq); 0x3: packsswb_Vo_Wo(); 0x4: pcmpgtb_Vo_Wo(); 0x5: pcmpgtw_Vo_Wo(); diff --git a/src/arch/x86/isa/insts/simd128/integer/data_reordering/unpack_and_interleave.py b/src/arch/x86/isa/insts/simd128/integer/data_reordering/unpack_and_interleave.py index 0bf063ede..9049350f8 100644 --- a/src/arch/x86/isa/insts/simd128/integer/data_reordering/unpack_and_interleave.py +++ b/src/arch/x86/isa/insts/simd128/integer/data_reordering/unpack_and_interleave.py @@ -89,10 +89,27 @@ def macroop PUNPCKLWD_XMM_P { unpack xmmh, xmml, ufp1, sel=1, size=2 unpack xmml, xmml, ufp1, sel=0, size=2 }; + +def macroop PUNPCKLDQ_XMM_XMM { + unpack xmmh, xmml, xmmlm, sel=1, size=4 + unpack xmml, xmml, xmmlm, sel=0, size=4 +}; + +def macroop PUNPCKLDQ_XMM_M { + ldfp ufp1, seg, sib, disp, dataSize=8 + unpack xmmh, xmml, ufp1, sel=1, size=4 + unpack xmml, xmml, ufp1, sel=0, size=4 +}; + +def macroop PUNPCKLDQ_XMM_P { + rdip t7 + ldfp ufp1, seg, riprel, disp, dataSize=8 + unpack xmmh, xmml, ufp1, sel=1, size=4 + unpack xmml, xmml, ufp1, sel=0, size=4 +}; ''' # PUNPCKHBW # PUNPCKHWD # PUNPCKHDQ # PUNPCKHQDQ -# PUNPCKLDQ # PUNPCKLQDQ diff --git a/src/arch/x86/isa/insts/simd64/integer/data_reordering/unpack_and_interleave.py b/src/arch/x86/isa/insts/simd64/integer/data_reordering/unpack_and_interleave.py index 196706c9b..46d99f1b4 100644 --- a/src/arch/x86/isa/insts/simd64/integer/data_reordering/unpack_and_interleave.py +++ b/src/arch/x86/isa/insts/simd64/integer/data_reordering/unpack_and_interleave.py @@ -83,8 +83,22 @@ def macroop PUNPCKLWD_MMX_P { ldfp ufp1, seg, riprel, disp, dataSize=8 unpack mmx, mmx, ufp1, sel=0, size=2 }; + +def macroop PUNPCKLDQ_MMX_MMX { + unpack mmx, mmx, mmxm, sel=0, size=4 +}; + +def macroop PUNPCKLDQ_MMX_M { + ldfp ufp1, seg, sib, disp, dataSize=8 + unpack mmx, mmx, ufp1, sel=0, size=4 +}; + +def macroop PUNPCKLDQ_MMX_P { + rdip t7 + ldfp ufp1, seg, riprel, disp, dataSize=8 + unpack mmx, mmx, ufp1, sel=0, size=4 +}; ''' # PUNPCKHBW # PUNPCKHWD # PUNPCKHDQ -# PUNPCKLDQ