aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-12-06 13:16:35 +0100
committerMike Pall <mike>2010-12-06 13:16:35 +0100
commita5bdae8f23e1175b542b9bf4950d108c7d4d982f (patch)
tree1724cf78e68d5845aca0072e0eb0be2a18fb775c /src
parent5270586a80ff3027cee380936506e6948a7c2e32 (diff)
downloadluajit-a5bdae8f23e1175b542b9bf4950d108c7d4d982f.tar.gz
luajit-a5bdae8f23e1175b542b9bf4950d108c7d4d982f.tar.bz2
luajit-a5bdae8f23e1175b542b9bf4950d108c7d4d982f.zip
Fix 64 bit shifts in backend. Fix shift by 0.
Diffstat (limited to 'src')
-rw-r--r--src/lj_asm.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c
index 53da1f1d..81529a56 100644
--- a/src/lj_asm.c
+++ b/src/lj_asm.c
@@ -2613,9 +2613,9 @@ static void asm_bitshift(ASMState *as, IRIns *ir, x86Shift xs)
2613 if (irref_isk(rref)) { /* Constant shifts. */ 2613 if (irref_isk(rref)) { /* Constant shifts. */
2614 int shift; 2614 int shift;
2615 dest = ra_dest(as, ir, RSET_GPR); 2615 dest = ra_dest(as, ir, RSET_GPR);
2616 shift = irr->i & 31; /* Handle shifts of 0..31 bits. */ 2616 shift = irr->i & (irt_is64(ir->t) ? 63 : 31);
2617 switch (shift) { 2617 switch (shift) {
2618 case 0: return; 2618 case 0: break;
2619 case 1: emit_rr(as, XO_SHIFT1, REX_64IR(ir, xs), dest); break; 2619 case 1: emit_rr(as, XO_SHIFT1, REX_64IR(ir, xs), dest); break;
2620 default: emit_shifti(as, REX_64IR(ir, xs), dest, shift); break; 2620 default: emit_shifti(as, REX_64IR(ir, xs), dest, shift); break;
2621 } 2621 }