remove MacroBlock concept
[libfirm] / ir / be / bearch.h
index 57b3719..81c4830 100644 (file)
@@ -248,26 +248,22 @@ struct arch_register_t {
        const arch_register_req_t   *single_req;
 };
 
-static inline const arch_register_class_t *_arch_register_get_class(
+static inline const arch_register_class_t *arch_register_get_class(
                const arch_register_t *reg)
 {
        return reg->reg_class;
 }
 
-static inline unsigned _arch_register_get_index(const arch_register_t *reg)
+static inline unsigned arch_register_get_index(const arch_register_t *reg)
 {
        return reg->index;
 }
 
-static inline const char *_arch_register_get_name(const arch_register_t *reg)
+static inline const char *arch_register_get_name(const arch_register_t *reg)
 {
        return reg->name;
 }
 
-#define arch_register_get_class(reg)        _arch_register_get_class(reg)
-#define arch_register_get_index(reg)        _arch_register_get_index(reg)
-#define arch_register_get_name(reg)         _arch_register_get_name(reg)
-
 /**
  * Convenience macro to check for register type.
  * @param req   A pointer to register.
@@ -307,15 +303,13 @@ struct arch_register_class_t {
 /** return the register class flags */
 #define arch_register_class_flags(cls) ((cls)->flags)
 
-static inline const arch_register_t *_arch_register_for_index(
+static inline const arch_register_t *arch_register_for_index(
                const arch_register_class_t *cls, unsigned idx)
 {
        assert(idx < cls->n_regs);
        return &cls->regs[idx];
 }
 
-#define arch_register_for_index(cls, idx)   _arch_register_for_index(cls, idx)
-
 /**
  * Convenience macro to check for set constraints.
  * @param req   A pointer to register requirements.
@@ -464,96 +458,6 @@ struct arch_irn_ops_t {
                                       unsigned int i);
 };
 
-/**
- * The code generator interface.
- */
-struct arch_code_generator_if_t {
-       /**
-        * Initialize the code generator.
-        * @param irg  A graph
-        * @return     A newly created code generator.
-        */
-       void *(*init)(ir_graph *irg);
-
-       /**
-        * return node used as base in pic code addresses
-        */
-       ir_node* (*get_pic_base)(void *self);
-
-       /**
-        * Called before abi introduce.
-        */
-       void (*before_abi)(void *self);
-
-       /**
-        * Called, when the graph is being normalized.
-        */
-       void (*prepare_graph)(void *self);
-
-       /**
-        * Backend may provide an own spiller.
-        * This spiller needs to spill all register classes.
-        */
-       void (*spill)(void *self, ir_graph *irg);
-
-       /**
-        * Called before register allocation.
-        */
-       void (*before_ra)(void *self);
-
-       /**
-        * Called after register allocation.
-        */
-       void (*after_ra)(void *self);
-
-       /**
-        * Called directly before done is called. This should be the last place
-        * where the irg is modified.
-        */
-       void (*finish)(void *self);
-
-       /**
-        * Called after everything happened. This call should emit the final
-        * assembly code but avoid changing the irg.
-        * The code generator must also be de-allocated here.
-        */
-       void (*done)(void *self);
-};
-
-/**
- * helper macro: call function func from the code generator
- * if it's implemented.
- */
-#define _arch_cg_call(cg, func) \
-do { \
-       if((cg)->impl->func) \
-               (cg)->impl->func(cg); \
-} while(0)
-
-#define _arch_cg_call_env(cg, env, func) \
-do { \
-       if((cg)->impl->func) \
-               (cg)->impl->func(cg, env); \
-} while(0)
-
-#define arch_code_generator_before_abi(cg)      _arch_cg_call(cg, before_abi)
-#define arch_code_generator_prepare_graph(cg)   _arch_cg_call(cg, prepare_graph)
-#define arch_code_generator_before_ra(cg)       _arch_cg_call(cg, before_ra)
-#define arch_code_generator_after_ra(cg)        _arch_cg_call(cg, after_ra)
-#define arch_code_generator_finish(cg)          _arch_cg_call(cg, finish)
-#define arch_code_generator_done(cg)            _arch_cg_call(cg, done)
-#define arch_code_generator_spill(cg, irg)      _arch_cg_call_env(cg, irg, spill)
-#define arch_code_generator_has_spiller(cg)     ((cg)->impl->spill != NULL)
-#define arch_code_generator_get_pic_base(cg)    \
-       ((cg)->impl->get_pic_base != NULL ? (cg)->impl->get_pic_base(cg) : NULL)
-
-/**
- * Code generator base class.
- */
-struct arch_code_generator_t {
-       const arch_code_generator_if_t *impl;
-};
-
 /**
  * Architecture interface.
  */
@@ -607,31 +511,6 @@ struct arch_isa_if_t {
        void (*get_call_abi)(const void *self, ir_type *call_type,
                             be_abi_call_t *abi);
 
-       /**
-        * Get the code generator interface.
-        * @param self The this pointer.
-        * @return     Some code generator interface.
-        */
-       const arch_code_generator_if_t *(*get_code_generator_if)(void *self);
-
-       /**
-        * Get the list scheduler to use. There is already a selector given, the
-        * backend is free to modify and/or ignore it.
-        *
-        * @param self     The isa object.
-        * @param selector The selector given by options.
-        * @return         The list scheduler selector.
-        */
-       const list_sched_selector_t *(*get_list_sched_selector)(const void *self,
-                       list_sched_selector_t *selector);
-
-       /**
-        * Get the ILP scheduler to use.
-        * @param self  The isa object.
-        * @return      The ILP scheduler selector
-        */
-       const ilp_sched_selector_t *(*get_ilp_sched_selector)(const void *self);
-
        /**
         * Get the necessary alignment for storing a register of given class.
         * @param self  The isa object.
@@ -646,30 +525,6 @@ struct arch_isa_if_t {
         */
        const backend_params *(*get_params)(void);
 
-       /**
-        * Returns an 2-dim array of execution units, @p irn can be executed on.
-        * The first dimension is the type, the second the allowed units of this
-        * type.
-        * Each dimension is a NULL terminated list.
-        * @param self  The isa object.
-        * @param irn   The node.
-        * @return An array of allowed execution units.
-        *         exec_unit = {
-        *                       { unit1_of_tp1, ..., unitX1_of_tp1, NULL },
-        *                       ...,
-        *                       { unit1_of_tpY, ..., unitXn_of_tpY, NULL },
-        *                       NULL
-        *                     };
-        */
-       const be_execution_unit_t ***(*get_allowed_execution_units)(
-                       const ir_node *irn);
-
-       /**
-        * Return the abstract machine for this isa.
-        * @param self  The isa object.
-        */
-       const be_machine_t *(*get_machine)(const void *self);
-
        /**
         * Return an ordered list of irgs where code should be generated for.
         * If NULL is returned, all irg will be taken into account and they will be
@@ -699,6 +554,51 @@ struct arch_isa_if_t {
         * backend
         */
        int (*is_valid_clobber)(const char *clobber);
+
+       /**
+        * Initialize the code generator.
+        * @param irg  A graph
+        * @return     A newly created code generator.
+        */
+       void (*init_graph)(ir_graph *irg);
+
+       /**
+        * return node used as base in pic code addresses
+        */
+       ir_node* (*get_pic_base)(ir_graph *irg);
+
+       /**
+        * Called before abi introduce.
+        */
+       void (*before_abi)(ir_graph *irg);
+
+       /**
+        * Called, when the graph is being normalized.
+        */
+       void (*prepare_graph)(ir_graph *irg);
+
+       /**
+        * Called before register allocation.
+        */
+       void (*before_ra)(ir_graph *irg);
+
+       /**
+        * Called after register allocation.
+        */
+       void (*after_ra)(ir_graph *irg);
+
+       /**
+        * Called directly before done is called. This should be the last place
+        * where the irg is modified.
+        */
+       void (*finish)(ir_graph *irg);
+
+       /**
+        * Called after everything happened. This call should emit the final
+        * assembly code but avoid changing the irg.
+        * The code generator must also be de-allocated here.
+        */
+       void (*emit)(ir_graph *irg);
 };
 
 #define arch_env_done(env)                             ((env)->impl->done(env))
@@ -708,9 +608,6 @@ struct arch_isa_if_t {
 #define arch_env_get_reg_class(env,i)                  ((env)->impl->get_reg_class(i))
 #define arch_env_get_reg_class_for_mode(env,mode)      ((env)->impl->get_reg_class_for_mode((mode)))
 #define arch_env_get_call_abi(env,tp,abi)              ((env)->impl->get_call_abi((env), (tp), (abi)))
-#define arch_env_get_code_generator_if(env)            ((env)->impl->get_code_generator_if((env)))
-#define arch_env_get_list_sched_selector(env,selector) ((env)->impl->get_list_sched_selector((env), (selector)))
-#define arch_env_get_ilp_sched_selector(env)           ((env)->impl->get_ilp_sched_selector(env))
 #define arch_env_get_reg_class_alignment(env,cls)      ((env)->impl->get_reg_class_alignment((cls)))
 #define arch_env_get_params(env)                       ((env)->impl->get_params())
 #define arch_env_get_allowed_execution_units(env,irn)  ((env)->impl->get_allowed_execution_units((irn)))