5 * Abstract machine interface.
6 * @author Christian Wuerdig
11 typedef struct _be_execution_unit_type_t be_execution_unit_type_t;
12 typedef struct _be_execution_unit_t be_execution_unit_t;
13 typedef struct _be_machine_t be_machine_t;
15 struct _be_execution_unit_t {
16 be_execution_unit_type_t *tp;
20 struct _be_execution_unit_type_t {
22 unsigned ports_per_unit;
24 be_execution_unit_t *units;
27 struct _be_machine_t {
29 unsigned bundels_per_cycle;
30 unsigned n_unit_types;
31 be_execution_unit_type_t *unit_types;
34 extern be_execution_unit_t be_machine_execution_units_DUMMY[1];
37 * Initialize generic dummy unit.
39 void be_machine_init_dummy_unit(void);
42 * Returns the generic dummy unit.
44 be_execution_unit_t *be_machine_get_dummy_unit(void);
47 * Check if given unit is the generic dummy unit.
49 int be_machine_is_dummy_unit(be_execution_unit_t *unit);
52 * Check if given unit is the generic dummy unit type.
54 int be_machine_is_dummy_unit_type(be_execution_unit_type_t *tp);
57 * Get the number of available unit types in the given machine.
59 #define be_machine_get_n_unit_types(machine) ((machine)->n_unit_types)
62 * Get the unit type number @p i from the given machine.
64 #define be_machine_get_unit_type(machine, i) ((machine)->unit_types[(i)])
67 * Get the name of the given unit type.
69 #define be_machine_get_unit_type_name(tp) ((tp)->name)
72 * Get the number of available execution units from the given unit type.
74 #define be_machine_get_n_execunits(tp) ((tp)->n_units)
77 * Get the execution unit number @p i from the given unit type.
79 #define be_machine_get_execunit(tp, i) ((tp)->units[(i)])
82 * Get the name of the given execution unit.
84 #define be_machine_get_execunit_name(unit) ((unit)->name)
87 * Get the unit type of the given execution unit.
89 #define be_machine_get_execunit_type(unit) ((unit)->tp)
91 #endif /* _BE_MACHINE_H_ */