You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
1
(1) |
2
(8) |
3
(7) |
4
(16) |
5
|
|
6
(3) |
7
(4) |
8
(1) |
9
(1) |
10
(4) |
11
(5) |
12
(1) |
|
13
|
14
(4) |
15
(2) |
16
|
17
(2) |
18
(9) |
19
(5) |
|
20
(9) |
21
(7) |
22
(9) |
23
(5) |
24
|
25
(1) |
26
|
|
27
|
28
(1) |
29
(11) |
30
(6) |
31
|
|
|
|
From: Nicholas N. <nj...@ca...> - 2002-10-03 19:23:10
|
http://sourceforge.net/projects/gnogrind/ N |
|
From: Julian S. <js...@ac...> - 2002-10-03 11:59:10
|
Having created this list I forgot to subscribe to it. Duh. J |
|
From: Nicholas N. <nj...@ca...> - 2002-10-03 08:57:42
|
On 2 Oct 2002, Jeremy Fitzhardinge wrote: > Surely it should be: > > -#define ALL_RREGS_LIVE (1 << (VG_MAX_REALREGS-1)) /* 0011...11b */ > +#define ALL_RREGS_LIVE ((1 << VG_MAX_REALREGS)-1) /* 0011...11b */ Absolutely. I was wondering how anything worked at all with such an egregious error... turns out this value is only being used to initialise the reg liveness info, and is always overwritten by the liveness analysis. I just fixed it. Thanks. N |
|
From: Nicholas N. <nj...@ca...> - 2002-10-03 08:51:17
|
On 2 Oct 2002, Jeremy Fitzhardinge wrote: > To solve this, prev_bb needs to be a per-thread value rather than a > global one. It seems to me that a clean way of solving this is to > introduce a mechanism which is analogous to VG_(register_*_helper) which > allows a skin to allocate space in the baseBlock, with a change to the > scheduler to save and restore the values on context switch and some way > to generate uInstr code to load and store them. Do you need to store this information in baseBlock? You could do it with global variables in your skin. There's a UCode-generating function VG_(set_global_var) that might be useful for this. N |
|
From: Jeremy F. <je...@go...> - 2002-10-03 04:48:31
|
On Wed, 2002-10-02 at 21:42, Jeremy Fitzhardinge wrote:
> Hi,
>
> This patch makes FPU state changes lazy, so there should only be one
> save/restore pair per basic block.
Oh, for safety's sake, it should also probably have:
default:
if (VG_(needs).extended_UCode) {
+ if (fplive) {
+ emit_put_fpu_state();
+ fplive = False;
+ }
SK_(emit_XUInstr)(u, regs_live_before);
} else {
VG_(printf)("\nError:\n"
" unhandled opcode: %u. Perhaps "
" VG_(needs).extended_UCode should be set?\n",
u->opcode);
VG_(pp_UInstr)(0,u);
VG_(core_panic)("emitUInstr: unimplemented opcode");
}
J
|
|
From: Jeremy F. <je...@go...> - 2002-10-03 04:42:13
|
Hi,
This patch makes FPU state changes lazy, so there should only be one
save/restore pair per basic block. With this change in place,
FPU-intensive programs (in my case, some 3D code using OpenGL) are
significantly faster.
Rather than adding the fplive argument to emitUInstr(), I considered
adding another bit to regs_live_before/after which signifies FP state
liveness. That was a little more invasive, and it wasn't clear whether
I should maintain such a bit in emitUInstr or add the logic to the
register allocator.
J
Index: coregrind/vg_from_ucode.c
===================================================================
RCS file: /cvsroot/valgrind/valgrind/coregrind/vg_from_ucode.c,v
retrieving revision 1.15
diff -u -r1.15 vg_from_ucode.c
--- coregrind/vg_from_ucode.c 2 Oct 2002 13:26:34 -0000 1.15
+++ coregrind/vg_from_ucode.c 3 Oct 2002 04:38:21 -0000
@@ -1808,18 +1808,14 @@
UChar second_byte_masked,
Int reg )
{
- emit_get_fpu_state();
emit_fpu_regmem ( first_byte, second_byte_masked, reg );
- emit_put_fpu_state();
}
static void synth_fpu_no_mem ( UChar first_byte,
UChar second_byte )
{
- emit_get_fpu_state();
emit_fpu_no_mem ( first_byte, second_byte );
- emit_put_fpu_state();
}
@@ -1961,7 +1957,7 @@
return (u->flags_w != FlagsEmpty);
}
-static void emitUInstr ( UCodeBlock* cb, Int i, RRegSet regs_live_before )
+static Bool emitUInstr ( UCodeBlock* cb, Int i, RRegSet regs_live_before, Bool fplive )
{
Int old_emitted_code_used;
UInstr* u = &cb->instrs[i];
@@ -2299,6 +2295,10 @@
case JMP: {
vg_assert(u->tag2 == NoValue);
vg_assert(u->tag1 == RealReg || u->tag1 == Literal);
+ if (fplive) {
+ emit_put_fpu_state();
+ fplive = False;
+ }
if (u->cond == CondAlways) {
switch (u->tag1) {
case RealReg:
@@ -2353,6 +2353,10 @@
vg_assert(u->size == 0);
if (readFlagUse ( u ))
emit_get_eflags();
+ if (fplive) {
+ emit_put_fpu_state();
+ fplive = False;
+ }
VG_(synth_call) ( False, u->val1 );
if (writeFlagUse ( u ))
emit_put_eflags();
@@ -2375,6 +2379,10 @@
else vg_assert(u->tag3 == NoValue);
vg_assert(u->size == 0);
+ if (fplive) {
+ emit_put_fpu_state();
+ fplive = False;
+ }
VG_(synth_ccall) ( u->lit32, u->argc, u->regparms_n, argv, tagv,
ret_reg, regs_live_before, u->regs_live_after );
break;
@@ -2397,6 +2405,10 @@
case FPU_W:
vg_assert(u->tag1 == Lit16);
vg_assert(u->tag2 == RealReg);
+ if (!fplive) {
+ emit_get_fpu_state();
+ fplive = True;
+ }
synth_fpu_regmem ( (u->val1 >> 8) & 0xFF,
u->val1 & 0xFF,
u->val2 );
@@ -2407,6 +2419,10 @@
vg_assert(u->tag2 == NoValue);
if (readFlagUse ( u ))
emit_get_eflags();
+ if (!fplive) {
+ emit_get_fpu_state();
+ fplive = True;
+ }
synth_fpu_no_mem ( (u->val1 >> 8) & 0xFF,
u->val1 & 0xFF );
if (writeFlagUse ( u ))
@@ -2430,6 +2446,8 @@
vg_assert(u->opcode < 100);
histogram[u->opcode].counts++;
histogram[u->opcode].size += (emitted_code_used - old_emitted_code_used);
+
+ return fplive;
}
@@ -2439,17 +2457,17 @@
{
Int i;
UChar regs_live_before = 0; /* No regs live at BB start */
-
+ Bool fplive = False; /* FPU state not loaded */
+
emitted_code_used = 0;
emitted_code_size = 500; /* reasonable initial size */
emitted_code = VG_(arena_malloc)(VG_AR_JITTER, emitted_code_size);
if (dis) VG_(printf)("Generated x86 code:\n");
-
+
for (i = 0; i < cb->used; i++) {
UInstr* u = &cb->instrs[i];
if (cb->instrs[i].opcode != NOP) {
-
/* Check on the sanity of this insn. */
Bool sane = VG_(saneUInstr)( False, False, u );
if (!sane) {
@@ -2457,10 +2475,12 @@
VG_(up_UInstr)( i, u );
}
vg_assert(sane);
- emitUInstr( cb, i, regs_live_before );
+ fplive = emitUInstr( cb, i, regs_live_before, fplive );
}
regs_live_before = u->regs_live_after;
}
+ vg_assert(!fplive); /* FPU state must be saved by end of BB */
+
if (dis) VG_(printf)("\n");
/* Returns a pointer to the emitted code. This will have to be
|
|
From: Jeremy F. <je...@go...> - 2002-10-03 04:35:57
|
Surely it should be: Index: include/vg_skin.h =================================================================== RCS file: /cvsroot/valgrind/valgrind/include/vg_skin.h,v retrieving revision 1.13 diff -u -r1.13 vg_skin.h --- include/vg_skin.h 2 Oct 2002 13:26:34 -0000 1.13 +++ include/vg_skin.h 3 Oct 2002 04:34:20 -0000 @@ -601,7 +603,7 @@ typedef UInt RRegSet; #define ALL_RREGS_DEAD 0 /* 0000...00b */ -#define ALL_RREGS_LIVE (1 << (VG_MAX_REALREGS-1)) /* 0011...11b */ +#define ALL_RREGS_LIVE ((1 << VG_MAX_REALREGS)-1) /* 0011...11b */ #define UNIT_RREGSET(rank) (1 << (rank)) #define IS_RREG_LIVE(rank,rregs_live) (rregs_live & UNIT_RREGSET(rank)) J |