Line 202... |
Line 202... |
dst: reg1 disp src: reg2 disp always 1 (store must
|
dst: reg1 disp src: reg2 disp always 1 (store must
|
finish before load)
|
finish before load)
|
dst: flag src: flag always 1
|
dst: flag src: flag always 1
|
*/
|
*/
|
|
|
int depend_operands(prev, next)
|
static int check_depend(prev, next)
|
struct iqueue_entry *prev;
|
struct iqueue_entry *prev;
|
struct iqueue_entry *next;
|
struct iqueue_entry *next;
|
{
|
{
|
/* Find destination type. */
|
/* Find destination type. */
|
unsigned long type = 0;
|
unsigned long type = 0;
|
Line 321... |
Line 321... |
#endif
|
#endif
|
void analysis (struct iqueue_entry *current)
|
void analysis (struct iqueue_entry *current)
|
{
|
{
|
if (config.cpu.dependstats) {
|
if (config.cpu.dependstats) {
|
/* Dynamic, dependency stats. */
|
/* Dynamic, dependency stats. */
|
adddstats(icomplet[0].insn_index, current->insn_index, 1, check_depend());
|
adddstats(icomplet[0].insn_index, current->insn_index, 1,
|
|
check_depend(icomplet, current));
|
|
|
/* Dynamic, functional units stats. */
|
/* Dynamic, functional units stats. */
|
addfstats(or32_opcodes[icomplet[0].insn_index].func_unit,
|
addfstats(or32_opcodes[icomplet[0].insn_index].func_unit,
|
or32_opcodes[current->insn_index].func_unit, 1, check_depend());
|
or32_opcodes[current->insn_index].func_unit, 1,
|
|
check_depend(icomplet, current));
|
|
|
/* Dynamic, single stats. */
|
/* Dynamic, single stats. */
|
addsstats(current->insn_index, 1);
|
addsstats(current->insn_index, 1);
|
}
|
}
|
|
|
Line 348... |
Line 350... |
runtime.sim.loadcycles++;
|
runtime.sim.loadcycles++;
|
#endif
|
#endif
|
|
|
/* Pseudo multiple issue benchmark */
|
/* Pseudo multiple issue benchmark */
|
if ((multissue[or32_opcodes[current->insn_index].func_unit] < 1) ||
|
if ((multissue[or32_opcodes[current->insn_index].func_unit] < 1) ||
|
(check_depend()) || (issued_per_cycle < 1)) {
|
(check_depend(icomplet, current)) || (issued_per_cycle < 1)) {
|
int i;
|
int i;
|
for (i = 0; i < 20; i++)
|
for (i = 0; i < 20; i++)
|
multissue[i] = 2;
|
multissue[i] = 2;
|
issued_per_cycle = 2;
|
issued_per_cycle = 2;
|
runtime.cpu.supercycles++;
|
runtime.cpu.supercycles++;
|
if (check_depend())
|
if (check_depend(icomplet, current))
|
runtime.cpu.hazardwait++;
|
runtime.cpu.hazardwait++;
|
multissue[it_unknown] = 2;
|
multissue[it_unknown] = 2;
|
multissue[it_shift] = 2;
|
multissue[it_shift] = 2;
|
multissue[it_compare] = 1;
|
multissue[it_compare] = 1;
|
multissue[it_branch] = 1;
|
multissue[it_branch] = 1;
|