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-rules-x86.ins jit/jit-...


From: Aleksey Demakov
Subject: [dotgnu-pnet-commits] libjit ChangeLog jit/jit-rules-x86.ins jit/jit-...
Date: Sat, 25 Nov 2006 14:43:10 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    libjit
Changes by:     Aleksey Demakov <avd>   06/11/25 14:43:10

Modified files:
        .              : ChangeLog 
        jit            : jit-rules-x86.ins jit-reg-alloc.c 

Log message:
        add JIT_OP_ISIGN and JIT_OP_LSIGN, optimize JIT_OP_LNEG;
        fix bug freeing stack registers;

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.279&r2=1.280
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-rules-x86.ins?cvsroot=dotgnu-pnet&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-reg-alloc.c?cvsroot=dotgnu-pnet&r1=1.44&r2=1.45

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.279
retrieving revision 1.280
diff -u -b -r1.279 -r1.280
--- ChangeLog   10 Nov 2006 21:03:09 -0000      1.279
+++ ChangeLog   25 Nov 2006 14:43:10 -0000      1.280
@@ -1,3 +1,14 @@
+2006-11-25  Aleksey Demakov  <address@hidden>
+
+       * jit/jit-reg-alloc.c (exch_stack_top, free_value): fix freeing
+       stack registers.
+
+2006-11-25  Kirill Kononenko  <address@hidden>
+
+       * jit/jit-rules-x86.ins: add JIT_OP_ISIGN and JIT_OP_LSIGN rules
+       (patch #5533), optimize JIT_OP_LNEG rule (patch #5555). [with
+       some modifications by Aleksey Demakov.]
+
 2006-11-11  Aleksey Demakov  <address@hidden>
 
        * jit/jit-rules-x86.ins: add JIT_OP_IABS and JIT_OP_LABS rules.

Index: jit/jit-rules-x86.ins
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-rules-x86.ins,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- jit/jit-rules-x86.ins       10 Nov 2006 21:03:09 -0000      1.19
+++ jit/jit-rules-x86.ins       25 Nov 2006 14:43:10 -0000      1.20
@@ -722,10 +722,18 @@
 
 JIT_OP_LNEG: unary
        [lreg] -> {
-               x86_not_reg(inst, $1);
-               x86_not_reg(inst, %1);
-               x86_alu_reg_imm(inst, X86_ADD, $1, 1);
+               /* TODO: gcc generates the first variant while
+                  AoA suggests the second. Figure out if one
+                  is better than other. */
+#if 1
+               x86_neg_reg(inst, $1);
                x86_alu_reg_imm(inst, X86_ADC, %1, 0);
+               x86_neg_reg(inst, %1);
+#else
+               x86_neg_reg(inst, %1);
+               x86_neg_reg(inst, $1);
+               x86_alu_reg_imm(inst, X86_SBB, %1, 0);
+#endif
        }
 
 JIT_OP_FADD, JIT_OP_DADD, JIT_OP_NFADD: binary, stack
@@ -1274,6 +1282,41 @@
                x86_fabs(inst);
        }
 
+JIT_OP_ISIGN:
+       [=reg, imm] -> {
+               if($2 < 0)
+               {
+                       x86_mov_reg_imm(inst, $1, -1);
+               }
+               else
+               {
+                       x86_clear_reg(inst, $1);
+               }
+       }
+       [reg] -> {
+               x86_shift_reg_imm(inst, X86_SAR, $1, 31);
+       }
+
+JIT_OP_LSIGN:
+       [=reg, imm] -> {
+               jit_int value = ((jit_int *)($2))[0];
+               if(value < 0)
+               {
+                       x86_mov_reg_imm(inst, $1, -1);
+               }
+               else
+               {
+                       x86_clear_reg(inst, $1);
+               }
+       }
+       [=reg, lreg] -> {
+               if($1 != $2)
+               {
+                       x86_mov_reg_reg(inst, $1, %2, 4);
+               }
+               x86_shift_reg_imm(inst, X86_SAR, $1, 31);
+       }
+
 /*
  * Pointer check opcodes.
  */

Index: jit/jit-reg-alloc.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-reg-alloc.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- jit/jit-reg-alloc.c 1 Nov 2006 17:41:36 -0000       1.44
+++ jit/jit-reg-alloc.c 25 Nov 2006 14:43:10 -0000      1.45
@@ -1740,6 +1740,7 @@
                {
                        if(value2)
                        {
+                               value2->in_register = 0;
                                value2->reg = -1;
                        }
                        gen->contents[top].values[index] = 0;
@@ -1806,6 +1807,7 @@
                {
                        /* Free stack register. */
                        exch_stack_top(gen, reg, 1);
+                       return;
                }
 #endif
        }




reply via email to

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