diff -Naur d4-7/CHANGES d4-7new/CHANGES --- d4-7/CHANGES 1998-02-06 16:03:09.000000000 -0500 +++ d4-7new/CHANGES 2005-10-31 15:46:29.000000000 -0500 @@ -1,3 +1,6 @@ +patch-stream 31 Oct 2005 + added output stream argument for greater portability (kbarr at mit dot edu) + version 7 6 Feb 1998 added code to make -skipcount work diff -Naur d4-7/cmdmain.c d4-7new/cmdmain.c --- d4-7/cmdmain.c 1998-02-06 15:58:23.000000000 -0500 +++ d4-7new/cmdmain.c 2005-10-31 15:45:18.000000000 -0500 @@ -81,9 +81,9 @@ /* private prototypes for this file */ extern int do1arg (const char *, const char *); extern void doargs (int, char **); -extern void summarize_caches (d4cache *, d4cache *); -extern void dostats (void); -extern void do1stats (d4cache *); +extern void summarize_caches (FILE * stream, d4cache *, d4cache *); +extern void dostats (FILE * stream); +extern void do1stats (FILE * , d4cache *); extern d4memref next_trace_item (void); #if !D4CUSTOM extern void customize_caches (void); @@ -1069,11 +1069,11 @@ * Print info about how the caches are set up */ void -summarize_caches (d4cache *ci, d4cache *cd) +summarize_caches (FILE * stream, d4cache *ci, d4cache *cd) { struct arglist *adesc; - printf ("\n---Summary of options " + fprintf (stream, "\n---Summary of options " "(-help option gives usage information).\n\n"); for (adesc = args; adesc->optstring != NULL; adesc++) @@ -1086,7 +1086,7 @@ * Print out the stuff the user really wants */ void -dostats() +dostats(FILE * stream) { int lev; int i; @@ -1127,15 +1127,15 @@ cc.lg2subblocksize = levcache[1][lev]->lg2subblocksize; cc.lg2blocksize = levcache[1][lev]->lg2blocksize; - do1stats (&cc); + do1stats (stream, &cc); } else { if (levcache[0][lev] != NULL) - do1stats (levcache[0][lev]); + do1stats (stream, levcache[0][lev]); if (levcache[1][lev] != NULL) - do1stats (levcache[1][lev]); + do1stats (stream, levcache[1][lev]); if (levcache[2][lev] != NULL) - do1stats (levcache[2][lev]); + do1stats (stream, levcache[2][lev]); } } } @@ -1146,7 +1146,7 @@ * Print stats for 1 cache */ void -do1stats (d4cache *c) +do1stats (FILE * stream, d4cache *c) { double demand_fetch_data, demand_fetch_alltype; @@ -1173,9 +1173,9 @@ /* * Print Header */ - printf( "%s\n", c->name); - printf( " Metrics Total Instrn Data Read Write Misc\n"); - printf( " ----------------- ------ ------ ------ ------ ------ ------\n"); + fprintf(stream, "%s\n", c->name); + fprintf(stream, " Metrics Total Instrn Data Read Write Misc\n"); + fprintf(stream, " ----------------- ------ ------ ------ ------ ------ ------\n"); /* * Print Fetch Numbers @@ -1186,7 +1186,7 @@ demand_fetch_alltype = demand_fetch_data + c->fetch[D4XINSTRN]; - printf( " Demand Fetches %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Demand Fetches %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_fetch_alltype, c->fetch[D4XINSTRN], demand_fetch_data, @@ -1196,7 +1196,7 @@ floatnum = NONZERO(demand_fetch_alltype); - printf( " Fraction of total %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " Fraction of total %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_fetch_alltype / floatnum, c->fetch[D4XINSTRN] / floatnum, demand_fetch_data / floatnum, @@ -1214,7 +1214,7 @@ prefetch_fetch_alltype = prefetch_fetch_data + c->fetch[D4PREFETCH+D4XINSTRN]; - printf( " Prefetch Fetches %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Prefetch Fetches %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", prefetch_fetch_alltype, c->fetch[D4PREFETCH+D4XINSTRN], prefetch_fetch_data, @@ -1224,7 +1224,7 @@ floatnum = NONZERO(prefetch_fetch_alltype); - printf( " Fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " Fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", prefetch_fetch_alltype / floatnum, c->fetch[D4PREFETCH+D4XINSTRN] / floatnum, prefetch_fetch_data / floatnum, @@ -1232,7 +1232,7 @@ c->fetch[D4PREFETCH+D4XWRITE] / floatnum, c->fetch[D4PREFETCH+D4XMISC] / floatnum); - printf( " Total Fetches %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Total Fetches %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_fetch_alltype + prefetch_fetch_alltype, c->fetch[D4XINSTRN] + c->fetch[D4PREFETCH+D4XINSTRN], demand_fetch_data + prefetch_fetch_data, @@ -1242,7 +1242,7 @@ floatnum = NONZERO(demand_fetch_alltype + prefetch_fetch_alltype); - printf( " Fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " Fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", (demand_fetch_alltype + prefetch_fetch_alltype) / floatnum, (c->fetch[D4XINSTRN] + c->fetch[D4PREFETCH+D4XINSTRN]) / floatnum, (demand_fetch_data + prefetch_fetch_data) / floatnum, @@ -1251,7 +1251,7 @@ (c->fetch[D4XMISC] + c->fetch[D4PREFETCH+D4XMISC]) / floatnum); } /* End of prefetching. */ - printf("\n"); + fprintf(stream,"\n"); /* * End of Fetch Numbers @@ -1266,7 +1266,7 @@ demand_alltype = demand_data + c->miss[D4XINSTRN]; - printf( " Demand Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Demand Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_alltype, c->miss[D4XINSTRN], demand_data, @@ -1275,7 +1275,7 @@ c->miss[D4XMISC]); - printf( " Demand miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " Demand miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_alltype / NONZERO(demand_fetch_alltype), c->miss[D4XINSTRN] / NONZERO(c->fetch[D4XINSTRN]), demand_data / NONZERO(demand_fetch_data), @@ -1300,7 +1300,7 @@ demand_conf_alltype = demand_conf_data + c->conf_miss[D4XINSTRN]; - printf( " Compulsory misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Compulsory misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_comp_alltype, c->comp_miss[D4XINSTRN], demand_comp_data, @@ -1308,7 +1308,7 @@ c->comp_miss[D4XWRITE], c->comp_miss[D4XMISC]); - printf( " Capacity misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Capacity misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_cap_alltype, c->cap_miss[D4XINSTRN], demand_cap_data, @@ -1316,7 +1316,7 @@ c->cap_miss[D4XWRITE], c->cap_miss[D4XMISC]); - printf( " Conflict misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Conflict misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_conf_alltype, c->conf_miss[D4XINSTRN], demand_conf_data, @@ -1324,7 +1324,7 @@ c->conf_miss[D4XWRITE], c->conf_miss[D4XMISC]); - printf( " Compulsory fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " Compulsory fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_comp_alltype / NONZERO(demand_alltype), c->comp_miss[D4XINSTRN] / NONZERO(c->miss[D4XINSTRN]), demand_comp_data / NONZERO(demand_data), @@ -1332,7 +1332,7 @@ c->comp_miss[D4XWRITE] / NONZERO(c->miss[D4XWRITE]), c->comp_miss[D4XMISC] / NONZERO(c->miss[D4XMISC])); - printf( " Capacity fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " Capacity fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_cap_alltype / NONZERO(demand_alltype), c->cap_miss[D4XINSTRN] / NONZERO(c->miss[D4XINSTRN]), demand_cap_data / NONZERO(demand_data), @@ -1340,7 +1340,7 @@ c->cap_miss[D4XWRITE] / NONZERO(c->miss[D4XWRITE]), c->cap_miss[D4XMISC] / NONZERO(c->miss[D4XMISC])); - printf( " Conflict fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " Conflict fraction %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_conf_alltype / NONZERO(demand_alltype), c->conf_miss[D4XINSTRN] / NONZERO(c->miss[D4XINSTRN]), demand_conf_data / NONZERO(demand_data), @@ -1359,7 +1359,7 @@ prefetch_alltype = prefetch_data + c->miss[D4PREFETCH+D4XINSTRN]; - printf( " Prefetch Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Prefetch Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", prefetch_alltype, c->miss[D4PREFETCH+D4XINSTRN], prefetch_data, @@ -1367,7 +1367,7 @@ c->miss[D4PREFETCH+D4XWRITE], c->miss[D4PREFETCH+D4XMISC]); - printf( " PF miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " PF miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", prefetch_alltype / NONZERO(prefetch_fetch_alltype), c->miss[D4PREFETCH+D4XINSTRN] / NONZERO(c->fetch[D4PREFETCH+D4XINSTRN]), prefetch_data / NONZERO(prefetch_fetch_data), @@ -1392,7 +1392,7 @@ demand_conf_alltype = demand_conf_data + c->conf_miss[D4PREFETCH+D4XINSTRN]; - printf( " PF compulsory misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " PF compulsory misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_comp_alltype, c->comp_miss[D4PREFETCH+D4XINSTRN], demand_comp_data, @@ -1400,7 +1400,7 @@ c->comp_miss[D4PREFETCH+D4XWRITE], c->comp_miss[D4PREFETCH+D4XMISC]); - printf( " PF capacity misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " PF capacity misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_cap_alltype, c->cap_miss[D4PREFETCH+D4XINSTRN], demand_cap_data, @@ -1408,7 +1408,7 @@ c->cap_miss[D4PREFETCH+D4XWRITE], c->cap_miss[D4PREFETCH+D4XMISC]); - printf( " PF conflict misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " PF conflict misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_conf_alltype, c->conf_miss[D4PREFETCH+D4XINSTRN], demand_conf_data, @@ -1416,7 +1416,7 @@ c->conf_miss[D4PREFETCH+D4XWRITE], c->conf_miss[D4PREFETCH+D4XMISC]); - printf( " PF compulsory fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " PF compulsory fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_comp_alltype / NONZERO(prefetch_alltype), c->comp_miss[D4PREFETCH+D4XINSTRN] / NONZERO(c->miss[D4PREFETCH+D4XINSTRN]), demand_comp_data / NONZERO(prefetch_data), @@ -1424,7 +1424,7 @@ c->comp_miss[D4PREFETCH+D4XWRITE] / NONZERO(c->miss[D4PREFETCH+D4XWRITE]), c->comp_miss[D4PREFETCH+D4XMISC] / NONZERO(c->miss[D4PREFETCH+D4XMISC])); - printf( " PF capacity fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " PF capacity fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_cap_alltype / NONZERO(prefetch_alltype), c->cap_miss[D4PREFETCH+D4XINSTRN] / NONZERO(c->miss[D4PREFETCH+D4XINSTRN]), demand_cap_data / NONZERO(prefetch_data), @@ -1432,7 +1432,7 @@ c->cap_miss[D4PREFETCH+D4XWRITE] / NONZERO(c->miss[D4PREFETCH+D4XWRITE]), c->cap_miss[D4PREFETCH+D4XMISC] / NONZERO(c->miss[D4PREFETCH+D4XMISC])); - printf( " PF conflict fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " PF conflict fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_conf_alltype / NONZERO(prefetch_alltype), c->conf_miss[D4PREFETCH+D4XINSTRN] / NONZERO(c->miss[D4PREFETCH+D4XINSTRN]), demand_conf_data / NONZERO(prefetch_data), @@ -1441,7 +1441,7 @@ c->conf_miss[D4PREFETCH+D4XMISC] / NONZERO(c->miss[D4PREFETCH+D4XMISC])); } - printf( " Total Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Total Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_alltype + prefetch_alltype, c->miss[D4XINSTRN] + c->miss[D4PREFETCH+D4XINSTRN], demand_data + prefetch_data, @@ -1449,7 +1449,7 @@ c->miss[D4XWRITE] + c->miss[D4PREFETCH+D4XWRITE], c->miss[D4XMISC] + c->miss[D4PREFETCH+D4XMISC]); - printf( " Total miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " Total miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", (demand_alltype + prefetch_alltype) / NONZERO(demand_fetch_alltype + prefetch_fetch_alltype), (c->miss[D4XINSTRN] + c->miss[D4PREFETCH+D4XINSTRN]) / NONZERO(c->fetch[D4XINSTRN] + c->fetch[D4PREFETCH+D4XINSTRN]), (demand_data + prefetch_data) / NONZERO(demand_fetch_data + prefetch_fetch_data), @@ -1458,7 +1458,7 @@ (c->miss[D4XMISC] + c->miss[D4PREFETCH+D4XMISC]) / NONZERO(c->fetch[D4XMISC] + c->fetch[D4PREFETCH+D4XMISC])); } /* End of prefetch misses. */ - printf("\n"); + fprintf(stream,"\n"); /* * End of Misses Numbers @@ -1475,7 +1475,7 @@ demand_alltype = demand_data + c->blockmiss[D4XINSTRN]; - printf( " Demand Block Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Demand Block Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_alltype, c->blockmiss[D4XINSTRN], demand_data, @@ -1483,7 +1483,7 @@ c->blockmiss[D4XWRITE], c->blockmiss[D4XMISC]); - printf( " DB miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " DB miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_alltype / NONZERO(demand_fetch_alltype), c->blockmiss[D4XINSTRN] / NONZERO(c->fetch[D4XINSTRN]), demand_data / NONZERO(demand_fetch_data), @@ -1508,7 +1508,7 @@ demand_conf_alltype = demand_conf_data + c->conf_blockmiss[D4XINSTRN]; - printf( " DB compulsory misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " DB compulsory misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_comp_alltype, c->comp_blockmiss[D4XINSTRN], demand_comp_data, @@ -1516,7 +1516,7 @@ c->comp_blockmiss[D4XWRITE], c->comp_blockmiss[D4XMISC]); - printf( " DB capacity misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " DB capacity misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_cap_alltype, c->cap_blockmiss[D4XINSTRN], demand_cap_data, @@ -1524,7 +1524,7 @@ c->cap_blockmiss[D4XWRITE], c->cap_blockmiss[D4XMISC]); - printf( " DB conflict misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " DB conflict misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_conf_alltype, c->conf_blockmiss[D4XINSTRN], demand_conf_data, @@ -1532,7 +1532,7 @@ c->conf_blockmiss[D4XWRITE], c->conf_blockmiss[D4XMISC]); - printf( " DB compulsory fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " DB compulsory fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_comp_alltype / NONZERO(demand_alltype), c->comp_blockmiss[D4XINSTRN] / NONZERO(c->blockmiss[D4XINSTRN]), demand_comp_data / NONZERO(demand_data), @@ -1540,7 +1540,7 @@ c->comp_blockmiss[D4XWRITE] / NONZERO(c->blockmiss[D4XWRITE]), c->comp_blockmiss[D4XMISC]) / NONZERO(c->blockmiss[D4XMISC]); - printf( " DB capacity fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " DB capacity fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_cap_alltype / NONZERO(demand_alltype), c->cap_blockmiss[D4XINSTRN] / NONZERO(c->blockmiss[D4XINSTRN]), demand_cap_data / NONZERO(demand_data), @@ -1548,7 +1548,7 @@ c->cap_blockmiss[D4XWRITE] / NONZERO(c->blockmiss[D4XWRITE]), c->cap_blockmiss[D4XMISC] / NONZERO(c->blockmiss[D4XMISC])); - printf( " DB conflict fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " DB conflict fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_conf_alltype / NONZERO(demand_alltype), c->conf_blockmiss[D4XINSTRN] / NONZERO(c->blockmiss[D4XINSTRN]), demand_conf_data / NONZERO(demand_data), @@ -1567,7 +1567,7 @@ prefetch_alltype = prefetch_data + c->blockmiss[D4PREFETCH+D4XINSTRN]; - printf( " Prefetch Block Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Prefetch Block Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", prefetch_alltype, c->blockmiss[D4PREFETCH+D4XINSTRN], prefetch_data, @@ -1575,7 +1575,7 @@ c->blockmiss[D4PREFETCH+D4XWRITE], c->blockmiss[D4PREFETCH+D4XMISC]); - printf( " PFB miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " PFB miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", prefetch_alltype / NONZERO(prefetch_fetch_alltype), c->blockmiss[D4PREFETCH+D4XINSTRN] / NONZERO(c->fetch[D4PREFETCH+D4XINSTRN]), prefetch_data / NONZERO(prefetch_fetch_data), @@ -1600,7 +1600,7 @@ demand_conf_alltype = demand_conf_data + c->conf_blockmiss[D4PREFETCH+D4XINSTRN]; - printf( " PFB comp misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " PFB comp misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_comp_alltype, c->comp_blockmiss[D4PREFETCH+D4XINSTRN], demand_comp_data, @@ -1608,7 +1608,7 @@ c->comp_blockmiss[D4PREFETCH+D4XWRITE], c->comp_blockmiss[D4PREFETCH+D4XMISC]); - printf( " PFB cap misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " PFB cap misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_cap_alltype, c->cap_blockmiss[D4PREFETCH+D4XINSTRN], demand_cap_data, @@ -1616,7 +1616,7 @@ c->cap_blockmiss[D4PREFETCH+D4XWRITE], c->cap_blockmiss[D4PREFETCH+D4XMISC]); - printf( " PFB conf misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " PFB conf misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_conf_alltype, c->conf_blockmiss[D4PREFETCH+D4XINSTRN], demand_conf_data, @@ -1624,7 +1624,7 @@ c->conf_blockmiss[D4PREFETCH+D4XWRITE], c->conf_blockmiss[D4PREFETCH+D4XMISC]); - printf( " PFB comp fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " PFB comp fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_comp_alltype / NONZERO(prefetch_alltype), c->comp_blockmiss[D4PREFETCH+D4XINSTRN] / NONZERO(c->blockmiss[D4PREFETCH+D4XINSTRN]), demand_comp_data / NONZERO(prefetch_data), @@ -1632,7 +1632,7 @@ c->comp_blockmiss[D4PREFETCH+D4XWRITE] / NONZERO(c->blockmiss[D4PREFETCH+D4XWRITE]), c->comp_blockmiss[D4PREFETCH+D4XMISC] / NONZERO(c->blockmiss[D4PREFETCH+D4XMISC])); - printf( " PFB cap fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " PFB cap fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_cap_alltype / NONZERO(prefetch_alltype), c->cap_blockmiss[D4PREFETCH+D4XINSTRN] / NONZERO(c->blockmiss[D4PREFETCH+D4XINSTRN]), demand_cap_data / NONZERO(prefetch_data), @@ -1640,7 +1640,7 @@ c->cap_blockmiss[D4PREFETCH+D4XWRITE] / NONZERO(c->blockmiss[D4PREFETCH+D4XWRITE]), c->cap_blockmiss[D4PREFETCH+D4XMISC] / NONZERO(c->blockmiss[D4PREFETCH+D4XMISC])); - printf( " PFB conf fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " PFB conf fract %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", demand_conf_alltype / NONZERO(prefetch_alltype), c->conf_blockmiss[D4PREFETCH+D4XINSTRN] / NONZERO(c->blockmiss[D4PREFETCH+D4XINSTRN]), demand_conf_data / NONZERO(prefetch_data), @@ -1649,7 +1649,7 @@ c->conf_blockmiss[D4PREFETCH+D4XMISC] / NONZERO(c->blockmiss[D4PREFETCH+D4XMISC])); } - printf( " Total Block Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", + fprintf(stream, " Total Block Misses %12.0f %12.0f %12.0f %12.0f %12.0f %12.0f\n", demand_alltype + prefetch_alltype, c->blockmiss[D4XINSTRN] + c->blockmiss[D4PREFETCH+D4XINSTRN], demand_data + prefetch_data, @@ -1657,7 +1657,7 @@ c->blockmiss[D4XWRITE] + c->blockmiss[D4PREFETCH+D4XWRITE], c->blockmiss[D4XMISC] + c->blockmiss[D4PREFETCH+D4XMISC]); - printf( " Tot blk miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", + fprintf(stream, " Tot blk miss rate %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n", (demand_alltype + prefetch_alltype) / NONZERO(demand_fetch_alltype + prefetch_fetch_alltype), (c->blockmiss[D4XINSTRN] + c->blockmiss[D4PREFETCH+D4XINSTRN]) / NONZERO(c->fetch[D4XINSTRN] + c->fetch[D4PREFETCH+D4XINSTRN]), (demand_data + prefetch_data) / NONZERO(demand_fetch_data + prefetch_fetch_data), @@ -1665,7 +1665,7 @@ (c->blockmiss[D4XWRITE] + c->blockmiss[D4PREFETCH+D4XWRITE]) / NONZERO(c->fetch[D4XWRITE] + c->fetch[D4PREFETCH+D4XWRITE]), (c->blockmiss[D4XMISC] + c->blockmiss[D4PREFETCH+D4XMISC]) / NONZERO(c->fetch[D4XMISC] + c->fetch[D4PREFETCH+D4XMISC])); } /* End of prefetch block misses */ - printf("\n"); + fprintf(stream,"\n"); } /* End of block misses */ /* * End of Block Misses Numbers @@ -1674,21 +1674,21 @@ /* * Report multiblock and traffic to/from memory */ - printf( " Multi-block refs %12.0f\n", + fprintf(stream, " Multi-block refs %12.0f\n", c->multiblock); - printf( " Bytes From Memory %12.0f\n", + fprintf(stream, " Bytes From Memory %12.0f\n", c->bytes_read); - printf( " ( / Demand Fetches) %12.4f\n", + fprintf(stream, " ( / Demand Fetches) %12.4f\n", c->bytes_read / NONZERO(demand_fetch_alltype)); - printf( " Bytes To Memory %12.0f\n", + fprintf(stream, " Bytes To Memory %12.0f\n", c->bytes_written); - printf( " ( / Demand Writes) %12.4f\n", + fprintf(stream, " ( / Demand Writes) %12.4f\n", c->bytes_written / NONZERO(c->fetch[D4XWRITE])); - printf( " Total Bytes r/w Mem %12.0f\n", + fprintf(stream, " Total Bytes r/w Mem %12.0f\n", c->bytes_read + c->bytes_written); - printf( " ( / Demand Fetches) %12.4f\n", + fprintf(stream, " ( / Demand Fetches) %12.4f\n", (c->bytes_read + c->bytes_written) / NONZERO(demand_fetch_alltype)); - printf("\n"); + fprintf(stream,"\n"); } #undef NONZERO @@ -1934,6 +1934,7 @@ d4cache *ci, *cd; double tmaxcount = 0, tintcount; double flcount; + FILE * stream = stdout; if (argc > 0) { char *cp; @@ -1965,7 +1966,7 @@ printf ("---Copyright (C) 1985, 1989 Mark D. Hill. All rights reserved.\n"); printf ("---See -copyright option for details\n"); - summarize_caches (ci, cd); + summarize_caches (stream, ci, cd); printf ("\n---Simulation begins.\n"); tintcount = stat_interval; @@ -1985,7 +1986,7 @@ } tmaxcount += 1; if (tintcount > 0 && (tintcount -= 1) <= 0) { - dostats(); + dostats(stream); tintcount = stat_interval; } if (flcount > 0 && (flcount -= 1) <= 0) { @@ -2008,7 +2009,7 @@ r.size = 0; d4ref (cd, r); printf ("---Simulation complete.\n"); - dostats(); + dostats(stream); printf ("---Execution complete.\n"); return 0; }