Several changes
[libfirm] / ir / be / bearch.h
index 0ce0f33..0c0cf0d 100644 (file)
@@ -196,9 +196,10 @@ typedef enum _arch_irn_class_t {
  * Some flags describing a node in more detail.
  */
 typedef enum _arch_irn_flags_t {
-  arch_irn_flags_dont_spill       = 1, /**< This must not be spilled. */
-  arch_irn_flags_rematerializable = 2, /**< This should be replicated instead of spilled/reloaded. */
-  arch_irn_flags_ignore           = 4, /**< Do not consider the node during register allocation. */
+       arch_irn_flags_none             = 0, /**< Node flags. */
+       arch_irn_flags_dont_spill       = 1, /**< This must not be spilled. */
+       arch_irn_flags_rematerializable = 2, /**< This should be replicated instead of spilled/reloaded. */
+       arch_irn_flags_ignore           = 4, /**< Do not consider the node during register allocation. */
 } arch_irn_flags_t;
 
 struct _arch_irn_ops_if_t {
@@ -250,6 +251,15 @@ struct _arch_irn_ops_if_t {
    */
   arch_irn_flags_t (*get_flags)(const void *self, const ir_node *irn);
 
+  /**
+   * Set a bias for the stack pointer.
+   * If the node in question uses the stack pointer for indexing, it must
+   * consider the value of <code>bias</code> additionally.
+   * @param self The this pointer.
+   * @param irn  The node in question.
+   * @param bias The bias.
+   */
+  void (*set_stack_bias)(const void *self, ir_node *irn, int bias);
 };
 
 /**
@@ -259,6 +269,9 @@ struct _arch_irn_ops_t {
        const arch_irn_ops_if_t *impl;
 };
 
+extern void
+arch_set_stack_bias(const arch_env_t *env, ir_node *irn, int bias);
+
 /**
  * Get the register requirements for a node.
  * @param env The architecture environment.
@@ -435,14 +448,6 @@ struct _arch_code_generator_if_t {
         */
        ir_node *(*lower_reload)(void *self, ir_node *reload);
 
-       /**
-        * Called in lowering (e.g. alloca lowering) to set the
-        * correct stack register.
-        * @param self The code generator
-        * @return     The stack register for the current irg
-        */
-       const arch_register_t *(*get_stack_register)(void *self);
-
        /**
         * Called after everything happened.
         * The code generator must also be de-allocated here.