[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] libjit ChangeLog jit/jit-reg-alloc.c jit/jit-ru...
From: |
Aleksey Demakov |
Subject: |
[dotgnu-pnet-commits] libjit ChangeLog jit/jit-reg-alloc.c jit/jit-ru... |
Date: |
Tue, 02 Jan 2007 17:00:18 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: libjit
Changes by: Aleksey Demakov <avd> 07/01/02 17:00:18
Modified files:
. : ChangeLog
jit : jit-reg-alloc.c jit-rules-x86.ins
Log message:
handle early_clobber flag for dest value;
apply patch #5540 with some modifications;
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.289&r2=1.290
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-reg-alloc.c?cvsroot=dotgnu-pnet&r1=1.48&r2=1.49
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-rules-x86.ins?cvsroot=dotgnu-pnet&r1=1.26&r2=1.27
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.289
retrieving revision 1.290
diff -u -b -r1.289 -r1.290
--- ChangeLog 29 Dec 2006 23:16:15 -0000 1.289
+++ ChangeLog 2 Jan 2007 17:00:18 -0000 1.290
@@ -1,3 +1,11 @@
+2007-01-02 Aleksey Demakov <address@hidden>
+
+ * jit/jit-rules-x86.ins: add JIT_OP_IMIN_UN rule (based on the
+ patch #5540 by Kirill Kononenko).
+
+ * jit/jit-reg-alloc.c (set_regdesc_value, set_regdesc_register)
+ (choose_output_register): handle EARLY_CLOBBER flag for dest value.
+
2006-12-30 Aleksey Demakov <address@hidden>
* jit/jit-reg-class.c, jit/jit-reg-class.h, jit/Makefile.am: add
Index: jit/jit-reg-alloc.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-reg-alloc.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- jit/jit-reg-alloc.c 29 Dec 2006 23:16:15 -0000 1.48
+++ jit/jit-reg-alloc.c 2 Jan 2007 17:00:18 -0000 1.49
@@ -528,18 +528,8 @@
desc = ®s->descs[index];
desc->value = value;
- if(index > 0 || regs->ternary)
- {
- if((flags & _JIT_REGS_EARLY_CLOBBER) != 0)
- {
- desc->clobber = 1;
- desc->early_clobber = 1;
- }
- else if((flags & _JIT_REGS_CLOBBER) != 0)
- {
- desc->clobber = 1;
- }
- }
+ desc->clobber = ((flags & (_JIT_REGS_CLOBBER |
_JIT_REGS_EARLY_CLOBBER)) != 0);
+ desc->early_clobber = ((flags & _JIT_REGS_EARLY_CLOBBER) != 0);
desc->regclass = regclass;
desc->live = live;
desc->used = used;
@@ -551,24 +541,23 @@
static void
set_regdesc_register(jit_gencode_t gen, _jit_regs_t *regs, int index, int reg,
int other_reg)
{
- int is_output;
-
+ int assign;
if(reg >= 0)
{
- is_output = (index == 0 && !regs->ternary);
+ assign = (index > 0 || regs->ternary ||
regs->descs[0].early_clobber);
regs->descs[index].reg = reg;
regs->descs[index].other_reg = other_reg;
jit_reg_set_used(gen->touched, reg);
- if(!is_output)
+ if(assign)
{
jit_reg_set_used(regs->assigned, reg);
}
if(other_reg >= 0)
{
jit_reg_set_used(gen->touched, other_reg);
- if(!is_output)
+ if(assign)
{
jit_reg_set_used(regs->assigned, other_reg);
}
@@ -1107,6 +1096,18 @@
}
if(regs->free_dest)
{
+ if(regs->descs[0].early_clobber
+ && regs->descs[0].value->in_global_register)
+ {
+ if(regs->descs[0].value ==
regs->descs[1].value)
+ {
+ continue;
+ }
+ if(regs->descs[0].value ==
regs->descs[2].value)
+ {
+ continue;
+ }
+ }
use_cost = 0;
}
else if(regs->descs[0].value->in_global_register)
@@ -1144,6 +1145,21 @@
}
if(regs->free_dest)
{
+ if(regs->descs[0].early_clobber)
+ {
+ if(regs->descs[1].value
+ && regs->descs[1].value->in_register
+ && regs->descs[1].value->reg == reg)
+ {
+ continue;
+ }
+ if(regs->descs[2].value
+ && regs->descs[2].value->in_register
+ && regs->descs[2].value->reg == reg)
+ {
+ continue;
+ }
+ }
use_cost = 0;
}
else if(regs->descs[1].value
@@ -1386,12 +1402,14 @@
{
continue;
}
-#if !ALLOW_CLOBBER_GLOBAL
if(other_reg >= 0 && jit_reg_is_used(gen->permanent,
other_reg))
{
+#if ALLOW_CLOBBER_GLOBAL
+ use_cost += COST_CLOBBER_GLOBAL;
+#else
continue;
- }
#endif
+ }
if(jit_reg_is_used(regs->clobber, reg)
|| (other_reg >= 0 && jit_reg_is_used(regs->clobber,
other_reg)))
{
@@ -1401,12 +1419,6 @@
{
use_cost += compute_spill_cost(gen, regs, reg,
other_reg);
}
-#if ALLOW_CLOBBER_GLOBAL
- if(other_reg >= 0 && jit_reg_is_used(gen->permanent,
other_reg))
- {
- use_cost += COST_CLOBBER_GLOBAL;
- }
-#endif
}
if(use_cost < suitable_cost
Index: jit/jit-rules-x86.ins
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-rules-x86.ins,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- jit/jit-rules-x86.ins 29 Dec 2006 23:16:15 -0000 1.26
+++ jit/jit-rules-x86.ins 2 Jan 2007 17:00:18 -0000 1.27
@@ -1284,6 +1284,14 @@
x86_fabs(inst);
}
+JIT_OP_IMIN_UN:
+ [=+reg, +reg, reg] -> {
+ x86_alu_reg_reg(inst, X86_SUB, $2, $3);
+ x86_alu_reg_reg(inst, X86_SBB, $1, $1);
+ x86_alu_reg_reg(inst, X86_AND, $1, $2);
+ x86_alu_reg_reg(inst, X86_ADD, $1, $3);
+ }
+
JIT_OP_ISIGN:
[=reg, imm] -> {
if($2 < 0)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] libjit ChangeLog jit/jit-reg-alloc.c jit/jit-ru...,
Aleksey Demakov <=