From 7acbf759e2942bc05cd10653b153c3b8ffe74ddf Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Fri, 30 May 2014 21:38:33 -0700 Subject: [PATCH] Fixing UNPACK D3DCOLOR. Probably. --- src/alloy/backend/x64/x64_emitter.cc | 2 +- src/alloy/backend/x64/x64_sequences.cc | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/alloy/backend/x64/x64_emitter.cc b/src/alloy/backend/x64/x64_emitter.cc index 0096a08fa..090c8fe9a 100644 --- a/src/alloy/backend/x64/x64_emitter.cc +++ b/src/alloy/backend/x64/x64_emitter.cc @@ -494,7 +494,7 @@ Address X64Emitter::GetXmmConstPtr(XmmConst id) { /* XMMByteSwapMask */ vec128i(0x00010203u, 0x04050607u, 0x08090A0Bu, 0x0C0D0E0Fu), /* XMMPermuteControl15 */ vec128b(15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15), /* XMMPackD3DCOLOR */ vec128i(0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0C000408u), - /* XMMUnpackD3DCOLOR */ vec128i(0xFFFFFF02u, 0xFFFFFF01u, 0xFFFFFF00u, 0xFFFFFF03u), + /* XMMUnpackD3DCOLOR */ vec128i(0xFFFFFF0Eu, 0xFFFFFF0Du, 0xFFFFFF0Cu, 0xFFFFFF0Fu), /* XMMOneOver255 */ vec128f(1.0f / 255.0f, 1.0f / 255.0f, 1.0f / 255.0f, 1.0f / 255.0f), /* XMMShiftMaskPS */ vec128i(0x0000001Fu, 0x0000001Fu, 0x0000001Fu, 0x0000001Fu), /* XMMShiftByteMask */ vec128i(0x000000FFu, 0x000000FFu, 0x000000FFu, 0x000000FFu), diff --git a/src/alloy/backend/x64/x64_sequences.cc b/src/alloy/backend/x64/x64_sequences.cc index 629c5bf33..9de06e58f 100644 --- a/src/alloy/backend/x64/x64_sequences.cc +++ b/src/alloy/backend/x64/x64_sequences.cc @@ -4826,6 +4826,8 @@ EMITTER(UNPACK, MATCH(I, V128<>>)) { // src = ZZYYXXWW // unpack to 000000ZZ,000000YY,000000XX,000000WW e.vpshufb(i.dest, i.src1, e.GetXmmConstPtr(XMMUnpackD3DCOLOR)); + // int -> float + e.vcvtdq2ps(i.dest, i.dest); // mult by 1/255 e.vmulps(i.dest, e.GetXmmConstPtr(XMMOneOver255)); }