diff options
| author | flacs <tilkax@gmail.com> | 2015-10-23 07:51:40 +0200 |
|---|---|---|
| committer | flacs <tilkax@gmail.com> | 2015-10-23 07:51:40 +0200 |
| commit | ece2e91446c6a9a4ae1da3feb28d53138673f69e (patch) | |
| tree | ee0ec9138c9e52698afb74b03a5e8fa5a3edbf64 /Source/Core/VideoCommon/VertexLoaderX64.cpp | |
| parent | 5228758383df49f5f17e5fd64262f755b6d1c317 (diff) | |
| parent | 33784456a5d8d5801339b53ed43a2f7960393cd8 (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.cpp | 28 |
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; |
