[Top][All Lists]
[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
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] libjit ChangeLog jit/jit-rules-x86.ins jit/jit-...,
Aleksey Demakov <=