From 71b77f317332618957b6d9a1728c815b3ae5fe4e Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 2 Dec 2014 19:16:03 -0600 Subject: [PATCH] [AArch64] Makes some integer instructions more clear what they're doing. ComputeRC was a bit unclear by using 64bit registers for setting the immediate and then calling SXTW on a 6b4it register which is just a bit obscure. When the source register is an immediate in cntlzwx, just use the built in GCC function instead of our own implementing for counting leading zeros. --- .../Core/PowerPC/JitArm64/JitArm64_Integer.cpp | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index ca3db467f0..84c00449be 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -22,8 +22,8 @@ void JitArm64::ComputeRC(u32 d) if (gpr.IsImm(d)) { - MOVI2R(XA, gpr.GetImm(d)); - SXTW(XA, XA); + MOVI2R(WA, gpr.GetImm(d)); + SXTW(XA, WA); } else { @@ -252,20 +252,9 @@ void JitArm64::cntlzwx(UGeckoInstruction inst) int s = inst.RS; if (gpr.IsImm(s)) - { - u32 mask = 0x80000000; - u32 i = 0; - for (; i < 32; i++, mask >>= 1) - { - if ((u32)gpr.GetImm(s) & mask) - break; - } - gpr.SetImmediate(a, i); - } + gpr.SetImmediate(a, __builtin_clz(gpr.GetImm(s))); else - { CLZ(gpr.R(a), gpr.R(s)); - } if (inst.Rc) ComputeRC(a);