From 97b0e2aa3d270318b1c95932c2ea7ab3906b11f2 Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Fri, 24 May 2013 20:09:11 -0700 Subject: [PATCH] Fixing comparison between two gpvars. --- src/xenia/cpu/x64/x64_emitter.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/xenia/cpu/x64/x64_emitter.cc b/src/xenia/cpu/x64/x64_emitter.cc index 5b5c4bbeb..81786aeb7 100644 --- a/src/xenia/cpu/x64/x64_emitter.cc +++ b/src/xenia/cpu/x64/x64_emitter.cc @@ -1394,12 +1394,19 @@ void X64Emitter::update_cr_with_cond(uint32_t n, GpVar& lhs, GpVar& rhs) { // bit3 = XER[SO] // Compare and set bits. + GpVar v_l(c.newGpVar()); + GpVar v_g(c.newGpVar()); + GpVar v_e(c.newGpVar()); c.cmp(lhs, rhs); - GpVar v_l(c.newGpVar()); c.setl(v_l); - GpVar v_g(c.newGpVar()); c.setg(v_g); c.shl(v_g, imm(1)); - GpVar v_e(c.newGpVar()); c.sete(v_e); c.shl(v_e, imm(2)); + c.setl(v_l); + c.setg(v_g); + c.sete(v_e); GpVar v(c.newGpVar()); - c.or_(v, v_l); c.or_(v, v_g); c.or_(v, v_e); + c.shl(v_g, imm(1)); + c.shl(v_e, imm(2)); + c.or_(v, v_l); + c.or_(v, v_g); + c.or_(v, v_e); // TODO(benvanik): set bit 4 to XER[SO] // c.seto?