summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/VertexLoaderX64.cpp
diff options
context:
space:
mode:
authorflacs <tilkax@gmail.com>2015-10-23 07:51:40 +0200
committerflacs <tilkax@gmail.com>2015-10-23 07:51:40 +0200
commitece2e91446c6a9a4ae1da3feb28d53138673f69e (patch)
treeee0ec9138c9e52698afb74b03a5e8fa5a3edbf64 /Source/Core/VideoCommon/VertexLoaderX64.cpp
parent5228758383df49f5f17e5fd64262f755b6d1c317 (diff)
parent33784456a5d8d5801339b53ed43a2f7960393cd8 (diff)
Merge pull request #3193 from Tilka/swizzle
VertexLoaderX64: optimize 4444 color conversion
Diffstat (limited to 'Source/Core/VideoCommon/VertexLoaderX64.cpp')
-rw-r--r--Source/Core/VideoCommon/VertexLoaderX64.cpp28
1 files changed, 9 insertions, 19 deletions
diff --git a/Source/Core/VideoCommon/VertexLoaderX64.cpp b/Source/Core/VideoCommon/VertexLoaderX64.cpp
index e96620d175..56f0a30727 100644
--- a/Source/Core/VideoCommon/VertexLoaderX64.cpp
+++ b/Source/Core/VideoCommon/VertexLoaderX64.cpp
@@ -314,34 +314,24 @@ void VertexLoaderX64::ReadColor(OpArg data, u64 attribute, int format)
LoadAndSwap(16, scratch1, data);
if (cpu_info.bBMI2)
{
- MOV(32, R(scratch3), Imm32(0x0F0F0F0F));
- PDEP(32, scratch2, scratch1, R(scratch3));
- MOV(32, R(scratch3), Imm32(0xF0F0F0F0));
- PDEP(32, scratch1, scratch1, R(scratch3));
+ MOV(32, R(scratch2), Imm32(0x0F0F0F0F));
+ PDEP(32, scratch1, scratch1, R(scratch2));
}
else
{
- MOV(32, R(scratch3), R(scratch1));
- SHL(32, R(scratch1), Imm8(12));
- AND(32, R(scratch1), Imm32(0x0F000000));
MOV(32, R(scratch2), R(scratch1));
-
- MOV(32, R(scratch1), R(scratch3));
SHL(32, R(scratch1), Imm8(8));
- AND(32, R(scratch1), Imm32(0x000F0000));
- OR(32, R(scratch2), R(scratch1));
+ OR(32, R(scratch1), R(scratch2));
+ AND(32, R(scratch1), Imm32(0x00FF00FF));
- MOV(32, R(scratch1), R(scratch3));
+ MOV(32, R(scratch2), R(scratch1));
SHL(32, R(scratch1), Imm8(4));
- AND(32, R(scratch1), Imm32(0x00000F00));
- OR(32, R(scratch2), R(scratch1));
-
- AND(32, R(scratch3), Imm8(0x0F));
- OR(32, R(scratch2), R(scratch3));
+ OR(32, R(scratch1), R(scratch2));
+ AND(32, R(scratch1), Imm32(0x0F0F0F0F));
- MOV(32, R(scratch1), R(scratch2));
- SHL(32, R(scratch1), Imm8(4));
}
+ MOV(32, R(scratch2), R(scratch1));
+ SHL(32, R(scratch1), Imm8(4));
OR(32, R(scratch1), R(scratch2));
SwapAndStore(32, MDisp(dst_reg, m_dst_ofs), scratch1);
load_bytes = 2;