More missing config.h
[libfirm] / ir / be / ia32 / bearch_ia32_t.h
index 2234f82..a0d2cc8 100644 (file)
@@ -8,7 +8,9 @@
 #include "bearch_ia32.h"
 #include "ia32_nodes_attr.h"
 #include "set.h"
+
 #include "../be.h"
+#include "../bemachine.h"
 
 #ifdef NDEBUG
 #define SET_IA32_ORIG_NODE(n, o)
@@ -28,6 +30,7 @@ typedef enum _ia32_optimize_t {
        IA32_OPT_PLACECNST = 8,   /**< place constants in the blocks where they are used */
        IA32_OPT_IMMOPS    = 16,  /**< create operations with immediate operands */
        IA32_OPT_EXTBB     = 32,  /**< do extended basic block scheduling */
+       IA32_OPT_PUSHARGS  = 64,  /**< create pushs for function argument passing */
 } ia32_optimize_t;
 
 /**
@@ -98,6 +101,7 @@ typedef struct _ia32_code_gen_t {
        ia32_optimize_t                opt;            /**< contains optimization information */
        entity                         *fp_to_gp;      /**< allocated entity for fp to gp conversion */
        entity                         *gp_to_fp;      /**< allocated entity for gp to fp conversion */
+       nodeset                        *kill_conv;     /**< Remember all convs to be killed */
        int                            arch;           /**< instruction architecture */
        int                            opt_arch;       /**< optimize for architecture */
        char                           fp_kind;        /**< floating point kind */
@@ -122,9 +126,9 @@ struct _ia32_isa_t {
        int                   fp_kind;        /**< floating point kind */
        ia32_code_gen_t       *cg;            /**< the current code generator */
        FILE                  *out;           /**< output file */
+       const be_machine_t    *cpu;           /**< the abstract machine */
 #ifndef NDEBUG
        struct obstack        *name_obst;     /**< holds the original node names (for debugging) */
-       unsigned long         name_obst_size;
 #endif /* NDEBUG */
 };
 
@@ -146,10 +150,11 @@ typedef struct _ia32_transform_env_t {
 } ia32_transform_env_t;
 
 typedef struct _ia32_intrinsic_env_t {
-       entity *ll_div_op1;    /**< entity for first div operand (move into FPU) */
-       entity *ll_div_op2;    /**< entity for second div operand (move into FPU) */
-       entity *ll_d_conv;     /**< entity for converts ll -> d */
-       entity *d_ll_conv;     /**< entity for converts d -> ll */
+       ir_graph *irg;           /**< the irg, these entities belong to */
+       entity   *ll_div_op1;    /**< entity for first div operand (move into FPU) */
+       entity   *ll_div_op2;    /**< entity for second div operand (move into FPU) */
+       entity   *ll_d_conv;     /**< entity for converts ll -> d */
+       entity   *d_ll_conv;     /**< entity for converts d -> ll */
 } ia32_intrinsic_env_t;
 
 /**
@@ -162,6 +167,11 @@ ir_node *ia32_new_NoReg_gp(ia32_code_gen_t *cg);
  */
 ir_node *ia32_new_NoReg_fp(ia32_code_gen_t *cg);
 
+/**
+ * Returns gp_noreg or fp_noreg, depending on input requirements.
+ */
+ir_node *ia32_get_admissible_noreg(ia32_code_gen_t *cg, ir_node *irn, int pos);
+
 /**
  * Maps all intrinsic calls that the backend support
  * and map all instructions the backend did not support