From 58ac6e541f0854723d49b5bafb4871ddb3e0aed2 Mon Sep 17 00:00:00 2001 From: nodchip Date: Mon, 6 Sep 2010 03:03:33 +0000 Subject: [PATCH] Added PSRLD/PSRLQ/PSLLD/PSLLQ support to x64Emitter git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6180 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Common/Src/x64Emitter.cpp | 40 ++++++++++++++++++++------- Source/Core/Common/Src/x64Emitter.h | 9 ++++-- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/Source/Core/Common/Src/x64Emitter.cpp b/Source/Core/Common/Src/x64Emitter.cpp index a916de02c7..51a20b06fe 100644 --- a/Source/Core/Common/Src/x64Emitter.cpp +++ b/Source/Core/Common/Src/x64Emitter.cpp @@ -1200,6 +1200,36 @@ void XEmitter::PUNPCKLWD(X64Reg dest, const OpArg &arg) {WriteSSEOp(64, 0x61, tr void XEmitter::PUNPCKLDQ(X64Reg dest, const OpArg &arg) {WriteSSEOp(64, 0x62, true, dest, arg);} //void PUNPCKLQDQ(X64Reg dest, OpArg arg) {WriteSSEOp(64, 0x60, true, dest, arg);} +void XEmitter::PSRLW(X64Reg reg, int shift) { + WriteSSEOp(64, 0x71, true, (X64Reg)2, R(reg)); + Write8(shift); +} + +void XEmitter::PSRLD(X64Reg reg, int shift) { + WriteSSEOp(64, 0x72, true, (X64Reg)2, R(reg)); + Write8(shift); +} + +void XEmitter::PSRLQ(X64Reg reg, int shift) { + WriteSSEOp(64, 0x73, true, (X64Reg)2, R(reg)); + Write8(shift); +} + +void XEmitter::PSLLW(X64Reg reg, int shift) { + WriteSSEOp(64, 0x71, true, (X64Reg)6, R(reg)); + Write8(shift); +} + +void XEmitter::PSLLD(X64Reg reg, int shift) { + WriteSSEOp(64, 0x72, true, (X64Reg)6, R(reg)); + Write8(shift); +} + +void XEmitter::PSLLQ(X64Reg reg, int shift) { + WriteSSEOp(64, 0x73, true, (X64Reg)6, R(reg)); + Write8(shift); +} + // WARNING not REX compatible void XEmitter::PSRAW(X64Reg reg, int shift) { if (reg > 7) @@ -1211,16 +1241,6 @@ void XEmitter::PSRAW(X64Reg reg, int shift) { Write8(shift); } -void XEmitter::PSRLW(X64Reg reg, int shift) { - WriteSSEOp(64, 0x71, true, (X64Reg)2, R(reg)); - Write8(shift); -} - -void XEmitter::PSLLW(X64Reg reg, int shift) { - WriteSSEOp(64, 0x71, true, (X64Reg)6, R(reg)); - Write8(shift); -} - // WARNING not REX compatible void XEmitter::PSRAD(X64Reg reg, int shift) { if (reg > 7) diff --git a/Source/Core/Common/Src/x64Emitter.h b/Source/Core/Common/Src/x64Emitter.h index e8b02d9907..c12b5a6531 100644 --- a/Source/Core/Common/Src/x64Emitter.h +++ b/Source/Core/Common/Src/x64Emitter.h @@ -526,8 +526,6 @@ public: void PUNPCKLWD(X64Reg dest, const OpArg &arg); void PUNPCKLDQ(X64Reg dest, const OpArg &arg); - void PSRAD(X64Reg dest, int shift); - void PAND(X64Reg dest, OpArg arg); void PANDN(X64Reg dest, OpArg arg); void PXOR(X64Reg dest, OpArg arg); @@ -581,8 +579,15 @@ public: void PSHUFLW(X64Reg dest, OpArg arg, u8 shuffle); void PSRLW(X64Reg reg, int shift); + void PSRLD(X64Reg reg, int shift); + void PSRLQ(X64Reg reg, int shift); + void PSLLW(X64Reg reg, int shift); + void PSLLD(X64Reg reg, int shift); + void PSLLQ(X64Reg reg, int shift); + void PSRAW(X64Reg reg, int shift); + void PSRAD(X64Reg reg, int shift); void RTDSC();