From 6694461698e08e33de4e9279ba0595e0821c16c0 Mon Sep 17 00:00:00 2001 From: gibbed Date: Tue, 5 May 2015 13:58:03 -0500 Subject: [PATCH] Fixed ecx restore in EmitShlXX/EmitShrXX/EmitShaXX. --- src/xenia/cpu/backend/x64/x64_sequences.cc | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/xenia/cpu/backend/x64/x64_sequences.cc b/src/xenia/cpu/backend/x64/x64_sequences.cc index 4723fa505..d17b31aa8 100644 --- a/src/xenia/cpu/backend/x64/x64_sequences.cc +++ b/src/xenia/cpu/backend/x64/x64_sequences.cc @@ -4472,13 +4472,9 @@ void EmitShlXX(X64Emitter& e, const ARGS& i) { e.shlx(dest_src.cvt32(), dest_src.cvt32(), src.cvt32()); } } else { - // back up ecx... - e.mov(e.al, e.cl); e.mov(e.cl, src); - e.shl(dest_src, e.cl); - - e.mov(e.cl, e.al); + e.ReloadECX(); } }, [](X64Emitter& e, const REG& dest_src, int8_t constant) { e.shl(dest_src, constant); @@ -4533,13 +4529,9 @@ void EmitShrXX(X64Emitter& e, const ARGS& i) { e.shrx(dest_src.cvt32(), dest_src.cvt32(), src.cvt32()); } } else { - // back up ecx... - e.mov(e.al, e.cl); e.mov(e.cl, src); - e.shr(dest_src, e.cl); - - e.mov(e.cl, e.al); + e.ReloadECX(); } }, [](X64Emitter& e, const REG& dest_src, int8_t constant) { e.shr(dest_src, constant); @@ -4619,13 +4611,9 @@ void EmitSarXX(X64Emitter& e, const ARGS& i) { e.sarx(dest_src.cvt32(), dest_src.cvt32(), src.cvt32()); } } else { - // back up ecx... - e.mov(e.al, e.cl); e.mov(e.cl, src); - e.sar(dest_src, e.cl); - - e.mov(e.cl, e.al); + e.ReloadECX(); } }, [](X64Emitter& e, const REG& dest_src, int8_t constant) { e.sar(dest_src, constant);