]> git.unchartedbackwaters.co.uk Git - francis/libjit.git/commitdiff
fix division by power of two
authorAleksey Demakov <ademakov@gmail.com>
Thu, 6 Jul 2006 12:04:07 +0000 (12:04 +0000)
committerAleksey Demakov <ademakov@gmail.com>
Thu, 6 Jul 2006 12:04:07 +0000 (12:04 +0000)
ChangeLog
jit/jit-rules-x86.ins

index 78bcf619ff6a0453c21898fb2db862faa46a7304..0792140e3e3418def0948255f402e2f02487aeb1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2006-07-06  Aleksey Demakov  <ademakov@gmail.com>
+
+       * jit/jit-rules-x86.ins: fix division by power of two.
+
 2006-07-05  Aleksey Demakov  <ademakov@gmail.com>
 
        * configure.in: make new register allocator the default.
index d6d73cb048294efa74ca8814302671c57fb958d6..81838be35bdb2e34133c80eac4753d6f6470a6cd 100644 (file)
@@ -554,8 +554,8 @@ JIT_OP_IDIV: more_space
        }
        [reg, imm, if("(((jit_nuint)$2) & (((jit_nuint)$2) - 1)) == 0")] -> {
                /* x & (x - 1) is equal to zero if x is a power of 2  */
-               jit_nuint shift, value;
-               for(shift = 0, value = $2; value; value >>= 1)
+               jit_nuint shift, value = $2 >> 1;
+               for(shift = 0; value; value >>= 1)
                {
                    ++shift;
                }
@@ -594,12 +594,12 @@ JIT_OP_IDIV_UN: more_space
        }
        [reg, imm, if("(((jit_nuint)$2) & (((jit_nuint)$2) - 1)) == 0")] -> {
                /* x & (x - 1) is equal to zero if x is a power of 2  */
-               jit_nuint shift, value;
-               for(shift = 0, value = $2; value; value >>= 1)
+               jit_nuint shift, value = $2 >> 1;
+               for(shift = 0; value; value >>= 1)
                {
                    ++shift;
                }
-               x86_shift_reg_imm(inst, X86_SAR, $1, shift);
+               x86_shift_reg_imm(inst, X86_SHR, $1, shift);
        }
        [reg("eax"), imm, scratch("?", "edx")] -> {
                x86_mov_reg_imm(inst, $3, $2);