#ifndef _FIRM_BEARCH_H
#define _FIRM_BEARCH_H
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
+#include "firm_config.h"
#ifdef WITH_LIBCORE
#include <libcore/lc_opts.h>
#endif
-#include "type.h"
-
-#include "irnode.h"
-#include "irmode.h"
+#include "firm_types.h"
#include "bitset.h"
-#include "hashptr.h"
-#include "fourcc.h"
-#include "set.h"
-#include "list.h"
-#include "ident.h"
#include "belistsched.h"
#include "beabi_t.h"
+#include "bearch_t.h"
#include "be_t.h"
-typedef struct _arch_register_class_t arch_register_class_t;
-typedef struct _arch_register_t arch_register_t;
-typedef struct _arch_isa_if_t arch_isa_if_t;
-typedef struct _arch_isa_t arch_isa_t;
-typedef struct _arch_env_t arch_env_t;
-typedef struct _arch_irn_ops_if_t arch_irn_ops_if_t;
-typedef struct _arch_irn_ops_t arch_irn_ops_t;
-typedef struct _arch_irn_handler_t arch_irn_handler_t;
-typedef struct _arch_code_generator_t arch_code_generator_t;
-typedef struct _arch_code_generator_if_t arch_code_generator_if_t;
-
struct _be_node_factory_t;
typedef enum _arch_register_type_t {
arch_register_req_type_should_be_different = 8, /**< The register must be unequal
to some other at the node. */
+ arch_register_req_type_should_be_different_from_all = 16, /**< The register must be different from
+ all in's at the node */
} arch_register_req_type_t;
/**
*/
void *(*init)(FILE *file, const be_irg_t *birg);
+ /**
+ * Called before abi introduce.
+ */
+ void (*before_abi)(void *self);
+
/**
* Called, when the graph is being normalized.
*/
(cg)->impl->func(cg); \
} 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_sched(cg) _arch_cg_call(cg, before_sched)
#define arch_code_generator_before_ra(cg) _arch_cg_call(cg, before_ra)