Limit P6 pipeline throughput to 3 uOPs/cycle
This commit is contained in:
parent
21dbd868e1
commit
4fd7305d1d
1 changed files with 22 additions and 1 deletions
|
|
@ -1606,8 +1606,26 @@ static p6_unit_t units[] =
|
||||||
};
|
};
|
||||||
const int nr_units = (sizeof(units) / sizeof(p6_unit_t));
|
const int nr_units = (sizeof(units) / sizeof(p6_unit_t));
|
||||||
|
|
||||||
|
static int rat_timestamp = 0;
|
||||||
|
static int rat_uops = 0;
|
||||||
|
|
||||||
static int uop_run(const p6_uop_t *uop, int decode_time)
|
static int uop_run(const p6_uop_t *uop, int decode_time)
|
||||||
{
|
{
|
||||||
|
/*Peak of 3 uOPs from decode to RAT per cycle*/
|
||||||
|
if (decode_time < rat_timestamp)
|
||||||
|
decode_time = rat_timestamp;
|
||||||
|
else if (decode_time > rat_timestamp)
|
||||||
|
{
|
||||||
|
rat_timestamp = decode_time;
|
||||||
|
rat_uops = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
rat_uops++;
|
||||||
|
if (rat_uops == 3)
|
||||||
|
{
|
||||||
|
rat_timestamp++;
|
||||||
|
rat_uops = 0;
|
||||||
|
}
|
||||||
#if 0
|
#if 0
|
||||||
int c;
|
int c;
|
||||||
p6_unit_t *best_unit = NULL;
|
p6_unit_t *best_unit = NULL;
|
||||||
|
|
@ -1908,7 +1926,10 @@ void codegen_timing_p6_block_start()
|
||||||
|
|
||||||
decode_timestamp = 0;
|
decode_timestamp = 0;
|
||||||
last_complete_timestamp = 0;
|
last_complete_timestamp = 0;
|
||||||
|
|
||||||
|
rat_timestamp = 0;
|
||||||
|
rat_uops = 0;
|
||||||
|
|
||||||
for (c = 0; c < NR_REGS; c++)
|
for (c = 0; c < NR_REGS; c++)
|
||||||
reg_available_timestamp[c] = 0;
|
reg_available_timestamp[c] = 0;
|
||||||
for (c = 0; c < 8; c++)
|
for (c = 0; c < 8; c++)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue