summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authormagumagu9 <magumagu9@gmail.com>2008-12-18 06:46:32 +0000
committermagumagu9 <magumagu9@gmail.com>2008-12-18 06:46:32 +0000
commit97e01e31d02e6de9808c3ee6fc3fe2d3b0ecf08a (patch)
tree624c8e634221ba3537644b5b8ae5e3bc0ce27277 /Source/Core
parenta6a279a7dabbcda40c822bd5aec7df3941151c33 (diff)
Some small emitter enhancements; I was originally planning on actually
using these, but I changed my mind. They could potentially be useful in the future, though. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1574 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/Src/x64Emitter.cpp14
-rw-r--r--Source/Core/Common/Src/x64Emitter.h6
2 files changed, 19 insertions, 1 deletions
diff --git a/Source/Core/Common/Src/x64Emitter.cpp b/Source/Core/Common/Src/x64Emitter.cpp
index 64ca290ca0..dd6c35918f 100644
--- a/Source/Core/Common/Src/x64Emitter.cpp
+++ b/Source/Core/Common/Src/x64Emitter.cpp
@@ -1230,7 +1230,17 @@ namespace Gen
Write8(0xE0 | reg);
Write8(shift);
}
-
+
+ void PSRLW(X64Reg reg, int shift) {
+ WriteSSEOp(64, 0x71, true, (X64Reg)2, R(reg));
+ Write8(shift);
+ }
+
+ void PSLLW(X64Reg reg, int shift) {
+ WriteSSEOp(64, 0x71, true, (X64Reg)6, R(reg));
+ Write8(shift);
+ }
+
// WARNING not REX compatible
void PSRAD(X64Reg reg, int shift) {
if (reg > 7)
@@ -1304,6 +1314,8 @@ namespace Gen
void PMOVMSKB(X64Reg dest, OpArg arg) {WriteSSEOp(64, 0xD7, true, dest, arg); }
+ void PSHUFLW(X64Reg regOp, OpArg arg, u8 shuffle) {WriteSSEOp(64, 0x70, false, regOp, arg, 1); Write8(shuffle);}
+
// Prefixes
void LOCK() { Write8(0xF0); }
diff --git a/Source/Core/Common/Src/x64Emitter.h b/Source/Core/Common/Src/x64Emitter.h
index c96b20b4cf..bf32b10c9b 100644
--- a/Source/Core/Common/Src/x64Emitter.h
+++ b/Source/Core/Common/Src/x64Emitter.h
@@ -520,6 +520,12 @@ namespace Gen
void PMOVMSKB(X64Reg dest, OpArg arg);
void PSHUFB(X64Reg dest, OpArg arg);
+ void PSHUFLW(X64Reg dest, OpArg arg, u8 shuffle);
+
+ void PSRLW(X64Reg reg, int shift);
+ void PSLLW(X64Reg reg, int shift);
+ void PSRAW(X64Reg reg, int shift);
+
void RTDSC();
void CallCdeclFunction3(void* fnptr, u32 arg0, u32 arg1, u32 arg2);