X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fsparc%2Fbearch_sparc_t.h;h=cf9777abc751888654b31e305afb429cbbe3af9f;hb=f8cc15664f571aa7ef89d6f6bc8d5bd2b8ca7d53;hp=5648fc76e56cc6f7966655c9e0a23cff6e6f374f;hpb=1a3b7d363474ab544c13093a2f0b578718d37c7a;p=libfirm diff --git a/ir/be/sparc/bearch_sparc_t.h b/ir/be/sparc/bearch_sparc_t.h index 5648fc76e..cf9777abc 100644 --- a/ir/be/sparc/bearch_sparc_t.h +++ b/ir/be/sparc/bearch_sparc_t.h @@ -21,7 +21,6 @@ * @file * @brief declarations for SPARC backend -- private header * @author Hannes Rapp, Matthias Braun - * @version $Id$ */ #ifndef FIRM_BE_SPARC_BEARCH_SPARC_T_H #define FIRM_BE_SPARC_BEARCH_SPARC_T_H @@ -30,25 +29,23 @@ #include "sparc_nodes_attr.h" #include "be.h" -typedef struct sparc_transform_env_t sparc_transform_env_t; typedef struct sparc_isa_t sparc_isa_t; +typedef struct calling_convention_t calling_convention_t; + +/** Floating point instruction set. */ +enum sparc_fp_architectures { + SPARC_FPU_ARCH_NONE = 0, + SPARC_FPU_ARCH_FPU = 0x00000001, + SPARC_FPU_ARCH_SOFTFLOAT = 0x00000002, +}; struct sparc_isa_t { arch_env_t base; /**< must be derived from arch_env_t */ - pmap *constants; + pmap *constants; + int fpu_arch; /**< FPU architecture */ }; -/** - * this is a struct to minimize the number of parameters - * for transformation walker - */ -struct sparc_transform_env_t { - dbg_info *dbg; /**< The node debug info */ - ir_graph *irg; /**< The irg, the node should be created in */ - ir_node *block; /**< The block, the node should belong to */ - ir_node *irn; /**< The irn, to be transformed */ - ir_mode *mode; /**< The mode of the irn */ -}; +extern const arch_irn_ops_t sparc_irn_ops; /** * SPARC ABI requires some space which is always available at the top of @@ -63,9 +60,15 @@ struct sparc_transform_env_t { * param 0-5 in this spaces and then handle va_next by simply * incrementing the stack pointer */ -#define SPARC_MIN_STACKSIZE 92 -#define SPARC_IMMEDIATE_MIN -4096 -#define SPARC_IMMEDIATE_MAX 4095 +#define SPARC_IMMEDIATE_MIN -4096 +#define SPARC_IMMEDIATE_MAX 4095 +#define SPARC_MIN_STACKSIZE 92 +#define SPARC_AGGREGATE_RETURN_OFFSET 64 +#define SPARC_PARAMS_SPILL_OFFSET 68 +#define SPARC_SAVE_AREA_SIZE 64 +#define SPARC_N_PARAM_REGS 6 +#define SPARC_STACK_ALIGNMENT 8 +#define SPARC_REGISTER_SIZE 4 static inline bool sparc_is_value_imm_encodeable(int32_t value) { @@ -74,4 +77,12 @@ static inline bool sparc_is_value_imm_encodeable(int32_t value) void sparc_finish(ir_graph *irg); +void sparc_introduce_prolog_epilog(ir_graph *irg); + +void sparc_lower_64bit(void); + +bool sparc_variadic_fixups(ir_graph *irg, calling_convention_t *cconv); +void sparc_create_stacklayout(ir_graph *irg, calling_convention_t *cconv); +void sparc_fix_stack_bias(ir_graph *irg); + #endif