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

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

[dotgnu-pnet-commits] libjit ./ChangeLog tools/gen-sel-parser.y jit/j...


From: Aleksey Demakov
Subject: [dotgnu-pnet-commits] libjit ./ChangeLog tools/gen-sel-parser.y jit/j...
Date: Fri, 13 Jan 2006 20:26:19 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    libjit
Branch:         
Changes by:     Aleksey Demakov <address@hidden>        06/01/13 20:26:19

Modified files:
        .              : ChangeLog 
        tools          : gen-sel-parser.y 
        jit            : jit-reg-alloc.c jit-rules-x86.sel 

Log message:
        fix register allocation for long values

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/ChangeLog.diff?tr1=1.193&tr2=1.194&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/tools/gen-sel-parser.y.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/jit/jit-reg-alloc.c.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/jit/jit-rules-x86.sel.diff?tr1=1.38&tr2=1.39&r1=text&r2=text

Patches:
Index: libjit/ChangeLog
diff -u libjit/ChangeLog:1.193 libjit/ChangeLog:1.194
--- libjit/ChangeLog:1.193      Fri Jan 13 15:39:26 2006
+++ libjit/ChangeLog    Fri Jan 13 20:26:19 2006
@@ -1,3 +1,12 @@
+2006-01-14  Aleksey Demakov  <address@hidden>
+
+       * tools/gen-sel-parser.y: spilling a register which is the first
+       part of a register pair spill the other part too.
+
+       * jit/jit-reg-alloc.c (free_register_for_value):
+       * jit/jit-rules-x86.sel: if a register is the second part of a
+       register pair do not consider it free.
+
 2006-01-13  Aleksey Demakov  <address@hidden>
 
        * jit/jit-insn.c: fix all descriptors of intrinsic functions that
Index: libjit/jit/jit-reg-alloc.c
diff -u libjit/jit/jit-reg-alloc.c:1.19 libjit/jit/jit-reg-alloc.c:1.20
--- libjit/jit/jit-reg-alloc.c:1.19     Thu Jun 24 04:11:46 2004
+++ libjit/jit/jit-reg-alloc.c  Fri Jan 13 20:26:19 2006
@@ -994,7 +994,8 @@
                        else if(!need_pair)
                        {
                                if(gen->contents[reg].num_values == 0 &&
-                                  !(gen->contents[reg].used_for_temp))
+                                  !(gen->contents[reg].used_for_temp) &&
+                                  !(gen->contents[reg].is_long_end))
                                {
                                        return reg;
                                }
Index: libjit/jit/jit-rules-x86.sel
diff -u libjit/jit/jit-rules-x86.sel:1.38 libjit/jit/jit-rules-x86.sel:1.39
--- libjit/jit/jit-rules-x86.sel:1.38   Tue Jan 10 21:24:43 2006
+++ libjit/jit/jit-rules-x86.sel        Fri Jan 13 20:26:19 2006
@@ -3055,7 +3055,8 @@
                                if(regi != reg && regi != reg2)
                                {
                                        if(gen->contents[regi].num_values == 0 
&&
-                                          gen->contents[regi].used_for_temp == 
0)
+                                          !gen->contents[regi].used_for_temp &&
+                                          !gen->contents[reg].is_long_end)
                                        {
                                                reg3 = regi;
                                                break;
@@ -3067,7 +3068,8 @@
                                }
                        }
                        if(gen->contents[reg3].num_values > 0 ||
-                          gen->contents[reg3].used_for_temp)
+                          gen->contents[regi].used_for_temp ||
+                          gen->contents[reg].is_long_end)
                        {
                                save_reg3 = 1;
                        }
@@ -3226,7 +3228,8 @@
                                                if(regi != reg && regi != reg2)
                                                {
                                                        
if(gen->contents[regi].num_values == 0 &&
-                                                          
gen->contents[regi].used_for_temp == 0)
+                                                          
!gen->contents[regi].used_for_temp &&
+                                                          
!gen->contents[reg].is_long_end)
                                                        {
                                                                reg3 = regi;
                                                                break;
@@ -3238,7 +3241,8 @@
                                                }
                                        }
                                        if(gen->contents[reg3].num_values > 0 ||
-                                          gen->contents[reg3].used_for_temp)
+                                          gen->contents[regi].used_for_temp ||
+                                          gen->contents[reg].is_long_end)
                                        {
                                                save_reg3 = 1;
                                        }
Index: libjit/tools/gen-sel-parser.y
diff -u libjit/tools/gen-sel-parser.y:1.14 libjit/tools/gen-sel-parser.y:1.15
--- libjit/tools/gen-sel-parser.y:1.14  Wed Jun 16 09:02:08 2004
+++ libjit/tools/gen-sel-parser.y       Fri Jan 13 20:26:19 2006
@@ -808,7 +808,16 @@
                                        printf("\t}\n");
                                        printf("\telse\n");
                                        printf("\t{\n");
-                                       printf("\t\t_jit_gen_spill_reg(gen, 
reg, -1, insn->dest);\n");
+                                       printf("\t\tint other_reg;\n");
+                                       
printf("\t\tif(gen->contents[reg].is_long_start)\n");
+                                       printf("\t\t{\n");
+                                       printf("\t\t\tother_reg = 
_jit_reg_info[reg].other_reg;\n");
+                                       printf("\t\t}\n");
+                                       printf("\t\telse\n");
+                                       printf("\t\t{\n");
+                                       printf("\t\t\tother_reg = -1;\n");
+                                       printf("\t\t}\n");
+                                       printf("\t\t_jit_gen_spill_reg(gen, 
reg, other_reg, insn->dest);\n");
                                        
printf("\t\tif(insn->dest->has_global_register)\n");
                                        
printf("\t\t\tinsn->dest->in_global_register = 1;\n");
                                        printf("\t\telse\n");




reply via email to

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