Line 74... |
Line 74... |
}
|
}
|
d[i] = md + insn_time (&bb->insn[i]);
|
d[i] = md + insn_time (&bb->insn[i]);
|
if (d[i] > max_d) max_d = d[i];
|
if (d[i] > max_d) max_d = d[i];
|
}
|
}
|
free (d);
|
free (d);
|
//printf ("max_d%i=%f\n", b, max_d);
|
//PRINTF ("max_d%i=%f\n", b, max_d);
|
return max_d;
|
return max_d;
|
}
|
}
|
|
|
/* Calculates memory delay of a single run of a basic block */
|
/* Calculates memory delay of a single run of a basic block */
|
static int memory_delay (cuc_func *f, int b)
|
static int memory_delay (cuc_func *f, int b)
|
Line 93... |
Line 93... |
} else if (f->mtype[i] & MT_LOAD) {
|
} else if (f->mtype[i] & MT_LOAD) {
|
if (!(f->mtype[i] & MT_BURST) || f->mtype[i] & MT_BURSTE) d += runtime.cuc.mdelay[0];
|
if (!(f->mtype[i] & MT_BURST) || f->mtype[i] & MT_BURSTE) d += runtime.cuc.mdelay[0];
|
else d += runtime.cuc.mdelay[1];
|
else d += runtime.cuc.mdelay[1];
|
}
|
}
|
}
|
}
|
//printf ("md%i=%i\n", b, d);
|
//PRINTF ("md%i=%i\n", b, d);
|
return d;
|
return d;
|
}
|
}
|
|
|
/* Cuts the tree and marks registers */
|
/* Cuts the tree and marks registers */
|
void cut_tree (cuc_func *f, int b, double sd)
|
void cut_tree (cuc_func *f, int b, double sd)
|
Line 127... |
Line 127... |
if (t > md) md = t;
|
if (t > md) md = t;
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
//printf ("%2x md%.1f ", i, md);
|
//PRINTF ("%2x md%.1f ", i, md);
|
md += insn_time (&bb->insn[i]);
|
md += insn_time (&bb->insn[i]);
|
//printf ("md%.1f mg%i %.1f\n", md, mg, sd);
|
//PRINTF ("md%.1f mg%i %.1f\n", md, mg, sd);
|
bb->insn[i].tmp = mg;
|
bb->insn[i].tmp = mg;
|
if (md > sd) {
|
if (md > sd) {
|
bb->insn[i].type |= IT_CUT;
|
bb->insn[i].type |= IT_CUT;
|
if (md > runtime.cuc.cycle_duration)
|
if (md > runtime.cuc.cycle_duration)
|
log ("WARNING: operation t%x_%x may need to be registered inbetween\n", b, i);
|
log ("WARNING: operation t%x_%x may need to be registered inbetween\n", b, i);
|
Line 277... |
Line 277... |
}
|
}
|
assert (index <= II_LAST);
|
assert (index <= II_LAST);
|
i = index;
|
i = index;
|
if (fscanf (fi, "%lf%lf%lf%lf\n", &timing_table[i].size,
|
if (fscanf (fi, "%lf%lf%lf%lf\n", &timing_table[i].size,
|
&timing_table[i].sizei, &timing_table[i].delay, &timing_table[i].delayi) != 4) break;
|
&timing_table[i].sizei, &timing_table[i].delay, &timing_table[i].delayi) != 4) break;
|
/*printf ("!%s size %f,%f delay %f,%f\n", known[i].name, timing_table[i].size,
|
/*PRINTF ("!%s size %f,%f delay %f,%f\n", known[i].name, timing_table[i].size,
|
timing_table[i].sizei, timing_table[i].delay, timing_table[i].delayi);*/
|
timing_table[i].sizei, timing_table[i].delay, timing_table[i].delayi);*/
|
}
|
}
|
|
|
/* Was everything initialized? */
|
/* Was everything initialized? */
|
for (i = 0; i <= II_LAST; i++) {
|
for (i = 0; i <= II_LAST; i++) {
|
assert (timing_table[i].size >= 0 && timing_table[i].sizei >= 0
|
assert (timing_table[i].size >= 0 && timing_table[i].sizei >= 0
|
&& timing_table[i].delay >= 0 && timing_table[i].delayi >= 0);
|
&& timing_table[i].delay >= 0 && timing_table[i].delayi >= 0);
|
/*printf ("%s size %f,%f delay %f,%f\n", known[i], timing_table[i].size,
|
/*PRINTF ("%s size %f,%f delay %f,%f\n", known[i], timing_table[i].size,
|
timing_table[i].sizei, timing_table[i].delay, timing_table[i].delayi);*/
|
timing_table[i].sizei, timing_table[i].delay, timing_table[i].delayi);*/
|
}
|
}
|
|
|
fclose (fi);
|
fclose (fi);
|
}
|
}
|