shouldn't be here anymore
[libfirm] / ir / be / bearch.h
index 21f11d0..edbf7cf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -29,6 +29,7 @@
 #include "firm_types.h"
 #include "bitset.h"
 #include "be.h"
+#include "obst.h"
 
 typedef struct arch_register_class_t     arch_register_class_t;
 typedef struct arch_register_req_t       arch_register_req_t;
@@ -44,6 +45,12 @@ 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;
 
+typedef enum arch_register_class_flags_t {
+       arch_register_class_flag_none      = 0,
+       arch_register_class_flag_manual_ra = 1,  /**< don't do automatic register allocation for this class */
+       arch_register_class_flag_state     = 2
+} arch_register_class_flags_t;
+
 typedef enum arch_register_type_t {
        arch_register_type_none         = 0,
        arch_register_type_caller_save  = 1,  /**< The register must be saved by the caller
@@ -54,8 +61,11 @@ typedef enum arch_register_type_t {
                                              in the called function. */
        arch_register_type_ignore       = 4,  /**< Do not consider this register when allocating. */
        arch_register_type_joker        = 8,  /**< The emitter can choose an arbitrary register */
-       arch_register_type_virtual      = 16, /**< This is just a virtual register  */
-       arch_register_type_state        = 32,
+       arch_register_type_virtual      = 16, /**< This is just a virtual register.Virtual registers have
+                                               nearly no constraints, it is a allowed to have multiple
+                                                                                          definition for the same register at a point) */
+       arch_register_type_state        = 32, /**< The register represents a state that should be handled by
+                                                  bestate code */
 } arch_register_type_t;
 
 /**
@@ -79,12 +89,11 @@ typedef enum arch_operand_type_t {
  * Different types of register allocation requirements.
  */
 typedef enum arch_register_req_type_t {
-       arch_register_req_type_none                         = 0,  /**< No register requirement. */
-       arch_register_req_type_normal                       = 1,  /**< All registers in the class are allowed. */
-       arch_register_req_type_limited                      = 2,  /**< Only a real subset of the class is allowed. */
-       arch_register_req_type_should_be_same               = 4,  /**< The register should be equal another one at the node. */
-       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_none                = 0,  /**< No register requirement. */
+       arch_register_req_type_normal              = 1,  /**< All registers in the class are allowed. */
+       arch_register_req_type_limited             = 2,  /**< Only a real subset of the class is allowed. */
+       arch_register_req_type_should_be_same      = 4,  /**< The register should be equal to another one at the node. */
+       arch_register_req_type_should_be_different = 8,  /**< The register must be unequal from some other at the node. */
 } arch_register_req_type_t;
 
 extern const arch_register_req_t *arch_no_register_req;
@@ -109,10 +118,9 @@ typedef enum arch_irn_class_t {
        arch_irn_class_perm       = 1 << 4,
        arch_irn_class_branch     = 1 << 5,
        arch_irn_class_call       = 1 << 6,
-       arch_irn_class_const      = 1 << 7,
-       arch_irn_class_load       = 1 << 8,
-       arch_irn_class_store      = 1 << 9,
-       arch_irn_class_stackparam = 1 << 10,
+       arch_irn_class_load       = 1 << 7,
+       arch_irn_class_store      = 1 << 8,
+       arch_irn_class_stackparam = 1 << 9,
 } arch_irn_class_t;
 
 /**
@@ -124,7 +132,8 @@ typedef enum arch_irn_flags_t {
        arch_irn_flags_rematerializable = 2, /**< This can be replicated instead of spilled/reloaded. */
        arch_irn_flags_ignore           = 4, /**< Ignore node during register allocation. */
        arch_irn_flags_modify_sp        = 8, /**< I modify the stack pointer. */
-       arch_irn_flags_last             = arch_irn_flags_modify_sp
+       arch_irn_flags_modify_flags     = 16, /**< I modify flags. */
+       arch_irn_flags_last             = arch_irn_flags_modify_flags
 } arch_irn_flags_t;
 
 /**