X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fsparc%2Fsparc_nodes_attr.h;h=3753322a1d11a4645a76d7584bdc9b6e184eb77a;hb=af300963705d97b2f596e8cf2887813c25de6ad8;hp=fe266abc29007b5bcf55d0d9db4e89b15e0feda6;hpb=3403745d35e2d624829275a010092414008fe5b7;p=libfirm diff --git a/ir/be/sparc/sparc_nodes_attr.h b/ir/be/sparc/sparc_nodes_attr.h index fe266abc2..3753322a1 100644 --- a/ir/be/sparc/sparc_nodes_attr.h +++ b/ir/be/sparc/sparc_nodes_attr.h @@ -26,6 +26,7 @@ #define FIRM_BE_SPARC_SPARC_NODES_ATTR_H #include "../bearch.h" +#include typedef struct sparc_attr_t sparc_attr_t; @@ -34,20 +35,31 @@ typedef struct sparc_attr_t sparc_attr_t; */ struct sparc_attr_t { - except_attr exc; /**< the exception attribute. MUST be the first one. */ - const arch_register_req_t **in_req; /**< register requirements for arguments */ - int immediate_value; /* immediate values */ - bool is_load_store; + except_attr exc; /**< the exception attribute. MUST be the first one. */ + int32_t immediate_value; /* immediate values */ + ir_entity *immediate_value_entity; }; +enum sparc_arch_irn_flags_t { + sparc_arch_irn_flag_modifies_flags = arch_irn_flags_backend << 0, + sparc_arch_irn_flag_modifies_fp_flags = arch_irn_flags_backend << 1, + sparc_arch_irn_flag_needs_64bit_spillslot = arch_irn_flags_backend << 2, +}; /** - * attribute for save instruction + * attribute for FP immediate instruction */ -typedef struct sparc_save_attr_t sparc_save_attr_t; -struct sparc_save_attr_t { - sparc_attr_t base; /**< generic attribute */ - int initial_stacksize; /* the min. stack size required by the sparc ABI */ +typedef struct sparc_fp_attr_t sparc_fp_attr_t; +struct sparc_fp_attr_t { + sparc_attr_t base; /**< generic attribute */ + ir_mode *fp_mode; +}; + +typedef struct sparc_fp_conv_attr_t sparc_fp_conv_attr_t; +struct sparc_fp_conv_attr_t { + sparc_attr_t base; + ir_mode *src_mode; + ir_mode *dest_mode; }; /** @@ -55,22 +67,10 @@ struct sparc_save_attr_t { */ typedef struct sparc_load_store_attr_t sparc_load_store_attr_t; struct sparc_load_store_attr_t { - sparc_attr_t base; /**< generic attribute */ - ir_mode *load_store_mode; - ir_entity *entity; - int entity_sign; - long offset; - bool is_frame_entity; -}; - -/** - * attributes for SymConsts - */ -typedef struct sparc_symconst_attr_t sparc_symconst_attr_t; -struct sparc_symconst_attr_t { - sparc_attr_t base; /**< generic attribute */ - ir_entity *entity; - int fp_offset; + sparc_attr_t base; /**< generic attribute */ + ir_mode *load_store_mode; + bool is_frame_entity : 1; + bool is_reg_reg : 1; }; /** @@ -78,28 +78,19 @@ struct sparc_symconst_attr_t { */ typedef struct sparc_jmp_cond_attr_t sparc_jmp_cond_attr_t; struct sparc_jmp_cond_attr_t { - sparc_attr_t base; /**< generic attribute */ - int proj_num; + sparc_attr_t base; /**< generic attribute */ + ir_relation relation; + bool is_unsigned : 1; }; /** * attributes for switch jumps */ -typedef struct sparc_jmp_switch_attr_t sparc_jmp_switch_attr_t; -struct sparc_jmp_switch_attr_t { - sparc_attr_t base; /**< generic attribute */ - int n_projs; - long default_proj_num; -}; - -/** - * attributes for Cmp - */ -typedef struct sparc_cmp_attr_t sparc_cmp_attr_t; -struct sparc_cmp_attr_t { - sparc_attr_t base; /**< generic attribute */ - bool ins_permuted : 1; - bool is_unsigned : 1; +typedef struct sparc_switch_jmp_attr_t sparc_switch_jmp_attr_t; +struct sparc_switch_jmp_attr_t { + sparc_attr_t base; /**< generic attribute */ + long default_proj_num; + ir_entity *jump_table; }; #endif