dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] libjit ChangeLog jit/jit-gen-arm.h jit/jit-rule...


From: Aleksey Demakov
Subject: [dotgnu-pnet-commits] libjit ChangeLog jit/jit-gen-arm.h jit/jit-rule...
Date: Wed, 25 Mar 2009 17:33:49 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    libjit
Changes by:     Aleksey Demakov <avd>   09/03/25 17:33:49

Modified files:
        .              : ChangeLog 
        jit            : jit-gen-arm.h jit-rules-arm.ins 

Log message:
        arm fixes

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.416&r2=1.417
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-gen-arm.h?cvsroot=dotgnu-pnet&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-rules-arm.ins?cvsroot=dotgnu-pnet&r1=1.4&r2=1.5

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.416
retrieving revision 1.417
diff -u -b -r1.416 -r1.417
--- ChangeLog   24 Mar 2009 16:12:40 -0000      1.416
+++ ChangeLog   25 Mar 2009 17:33:48 -0000      1.417
@@ -1,3 +1,8 @@
+2009-03-25  Michele Tartara  <address@hidden>
+
+       * jit/jit-gen-arm.h (arm_alu_cc_reg): fix a typo.
+       * jit/jit-rules-arm.ins (JIT_OP_IDIV): support negative dividends.
+
 2009-03-24  Aleksey Demakov  <address@hidden>
 
        * jit/jit-rules.h (jit_reg_other_reg): add macro.

Index: jit/jit-gen-arm.h
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-gen-arm.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- jit/jit-gen-arm.h   22 Mar 2009 21:22:06 -0000      1.11
+++ jit/jit-gen-arm.h   25 Mar 2009 17:33:49 -0000      1.12
@@ -421,7 +421,7 @@
                        } while (0)
 #define arm_alu_cc_reg(inst,opc,dreg,sreg)     \
                        do { \
-                               arm_inst_add((inst), = arm_execute_cc | \
+                               arm_inst_add((inst), arm_execute_cc | \
                                                        (((unsigned int)(opc)) 
<< 21) | \
                                                        (((unsigned int)(dreg)) 
<< 12) | \
                                                         ((unsigned 
int)(sreg))); \

Index: jit/jit-rules-arm.ins
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-rules-arm.ins,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- jit/jit-rules-arm.ins       24 Mar 2009 01:17:44 -0000      1.4
+++ jit/jit-rules-arm.ins       25 Mar 2009 17:33:49 -0000      1.5
@@ -189,8 +189,16 @@
        [reg, immu8, if("$2 == 1")] -> {
                /* Division by 1. Return the value itself */
        }
-       [reg, immu8, if("($2 % 2) == 0")] -> {
-               /* Handle special cases of small immediate divides */
+       [reg, immu8, if("($2 > 0) && (((jit_nuint)$2) & (((jit_nuint)$2) - 1)) 
== 0")] -> {
+               /* Handle special cases of small immediate divides: divisions 
by positive powers of two */
+               /* NB: (n & (n-1)) == 0 if and only if n is a power of 2 */
+               
+               /* Move the dividend in the work register, setting the codes 
(in order to know if it's positive or negative) */
+               arm_alu_cc_reg(inst, ARM_MOV, ARM_WORK, $1);
+
+               /* If the dividend is negative, make it positive (0-x = -x)*/
+               arm_alu_reg_imm8_cond(inst, ARM_RSB, $1, ARM_WORK, 0, 
ARM_CC_MI);
+
                switch($2)
                {
                        //Integer divide by shifting
@@ -236,6 +244,10 @@
                        }
                        break;
                }
+               
+               /* If the dividend was negative, make it negative again (0-x = 
-x)*/
+               arm_alu_reg_imm8_cond(inst, ARM_RSB, $1, $1, 0, ARM_CC_MI);
+               
        }
        [reg, imm, if("$2 == -1")] -> {
                /* Dividing by -1 simply negates */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]