+ if (num_units > 0)
+ {
+ /* Compute the range of blockage cost values. See genattrtab.c
+ for the derivation. BLOCKAGE (E,C) when SIMULTANEITY is zero is
+
+ MAX (ISSUE-DELAY (E,C),
+ READY-COST (E) - (READY-COST (C) - 1))
+
+ and otherwise
+
+ MAX (ISSUE-DELAY (E,C),
+ READY-COST (E) - (READY-COST (C) - 1),
+ READY-COST (E) - FILL-TIME) */
+
+ for (unit = units; unit; unit = unit->next)
+ {
+ struct range blockage;
+
+ blockage = unit->issue_delay;
+ blockage.max = MAX (unit->ready_cost.max
+ - (unit->ready_cost.min - 1),
+ blockage.max);
+ blockage.min = MAX (1, blockage.min);
+
+ if (unit->simultaneity != 0)
+ {
+ int fill_time = ((unit->simultaneity - 1)
+ * unit->issue_delay.min);
+ blockage.min = MAX (unit->ready_cost.min - fill_time,
+ blockage.min);
+ blockage.max = MAX (unit->ready_cost.max - fill_time,
+ blockage.max);
+ }
+ extend_range (&all_blockage, blockage.min, blockage.max);
+ }
+
+ write_units (num_units, &all_multiplicity, &all_simultaneity,
+ &all_ready_cost, &all_issue_delay, &all_blockage);
+ }
+
+ /* Output flag masks for use by reorg.
+
+ Flags are used to hold branch direction and prediction information
+ for use by eligible_for_... */
+ printf("\n#define ATTR_FLAG_forward\t0x1\n");
+ printf("#define ATTR_FLAG_backward\t0x2\n");
+ printf("#define ATTR_FLAG_likely\t0x4\n");
+ printf("#define ATTR_FLAG_very_likely\t0x8\n");
+ printf("#define ATTR_FLAG_unlikely\t0x10\n");
+ printf("#define ATTR_FLAG_very_unlikely\t0x20\n");