X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Ftyperep.h;h=6c01a9de3e6b3dcb79d8ae56f42e6404704a4990;hb=9ec98298a0bf99ccb9533365dd7245e0a380f3df;hp=2d3a4b42fdab016f8cf3e8fe997c2ff1fbb8597b;hpb=1ce363f80e6a204d4011f85813362d9bd1d0e7e4;p=libfirm diff --git a/include/libfirm/typerep.h b/include/libfirm/typerep.h index 2d3a4b42f..6c01a9de3 100644 --- a/include/libfirm/typerep.h +++ b/include/libfirm/typerep.h @@ -454,6 +454,55 @@ ir_node *copy_const_value(dbg_info *dbg, ir_node *n); ir_node *get_atomic_ent_value(ir_entity *ent); void set_atomic_ent_value(ir_entity *ent, ir_node *val); +/** the kind (type) of an initializer */ +typedef enum ir_initializer_kind_t { + /* initializer containing an ir_node from the const-code irg */ + IR_INITIALIZER_CONST, + /* initializer containing a tarval */ + IR_INITIALIZER_TARVAL, + /* initializes type with default values (usually 0) */ + IR_INITIALIZER_NULL, + /* list of initializers used to initializer a compound or array type */ + IR_INITIALIZER_COMPOUND +} ir_initializer_kind_t; + +/** returns kind of an initializer */ +ir_initializer_kind_t get_initializer_kind(const ir_initializer_t *initializer); + +/** + * returns the null initializer (there's only one instance of it in a program ) + */ +ir_initializer_t *get_initializer_null(void); + +/** + * creates an initializer containing a reference to a node on the const-code + * irg. + */ +ir_initializer_t *create_initializer_const(ir_node *value); + +/** creates an initializer containing a single tarval value */ +ir_initializer_t *create_initializer_tarval(tarval *tv); + +/** return value contained in a const initializer */ +ir_node *get_initializer_const_value(const ir_initializer_t *initializer); + +/** return value contained in a tarval initializer */ +tarval *get_initializer_tarval_value(const ir_initializer_t *initialzier); + +/** creates a compound initializer which holds @p n_entries entries */ +ir_initializer_t *create_initializer_compound(unsigned n_entries); + +/** returns the number of entries in a compound initializer */ +unsigned get_initializer_compound_n_entries(const ir_initializer_t *initializer); + +/** sets entry with index @p index to the initializer @p value */ +void set_initializer_compound_value(ir_initializer_t *initializer, + unsigned index, ir_initializer_t *value); + +/** returns the value with index @p index of a compound initializer */ +ir_initializer_t *get_initializer_compound_value( + const ir_initializer_t *initializer, unsigned index); + /** Creates a new compound graph path of given length. */ compound_graph_path *new_compound_graph_path(ir_type *tp, int length); @@ -515,6 +564,10 @@ ir_entity *get_compound_ent_value_member(ir_entity *ent, int pos); /** Sets the path at pos 0 */ void set_compound_ent_value(ir_entity *ent, ir_node *val, ir_entity *member, int pos); +void set_entity_initializer(ir_entity *entity, ir_initializer_t *initializer); + +ir_initializer_t *get_entity_initializer(const ir_entity *entity); + /** Initializes the entity ent which must be of a one dimensional array type with the values given in the values array. The array must have a lower and an upper bound. Keeps the @@ -692,22 +745,6 @@ typedef enum acc_bits { #define IS_WRITTEN(a) ((a) & ptr_access_write) #define IS_STORED(a) ((a) & ptr_access_store) -/** - * Supported image sections. - * Currently only methods can be placed in different sections. - */ -typedef enum { - section_text, /**< The code segment. This is the default for methods. */ - section_constructors /**< The constructor section. */ -} ir_img_section; - -/** Returns the section of a method. */ -ir_img_section get_method_img_section(const ir_entity *method); - -/** Sets the section of a method. */ -void set_method_img_section(ir_entity *method, ir_img_section section); - - /** * @page tyop type operations * This module specifies the kinds of types available in firm. @@ -1923,21 +1960,21 @@ void set_method_additional_property(ir_type *method, mtp_additional_property fla * upper 8 encode the calling conventions. */ typedef enum { - cc_reg_param = 0x01000000, /**< Transmit parameters in registers, else the stack is used. - This flag may be set as default on some architectures. */ - cc_last_on_top = 0x02000000, /**< The last non-register parameter is transmitted on top of - the stack. This is equivalent to the pascal - calling convention. If this flag is not set, the first - non-register parameter is used (stdcall or cdecl - calling convention) */ - cc_callee_clear_stk = 0x04000000, /**< The callee clears the stack. This forbids variadic - function calls (stdcall). */ - cc_this_call = 0x08000000, /**< The first parameter is a this pointer and is transmitted - in a special way. */ - cc_compound_ret = 0x10000000, /**< the method returns a compound - type */ - - cc_bits = (0xFF << 24) /**< the calling convention bits */ + cc_reg_param = 0x01000000, /**< Transmit parameters in registers, else the stack is used. + This flag may be set as default on some architectures. */ + cc_last_on_top = 0x02000000, /**< The last non-register parameter is transmitted on top of + the stack. This is equivalent to the pascal + calling convention. If this flag is not set, the first + non-register parameter is used (stdcall or cdecl + calling convention) */ + cc_callee_clear_stk = 0x04000000, /**< The callee clears the stack. This forbids variadic + function calls (stdcall). */ + cc_this_call = 0x08000000, /**< The first parameter is a this pointer and is transmitted + in a special way. */ + cc_compound_ret = 0x10000000, /**< The method returns a compound type. */ + cc_frame_on_caller_stk = 0x20000000, /**< The method did not allocate an own stack frame, instead the + caller must reserve size on its own stack. */ + cc_bits = (0xFF << 24)/**< The calling convention bits. */ } calling_convention; /* some often used cases: made as defines because firmjni cannot handle two @@ -2364,6 +2401,13 @@ int is_lowered_type(const ir_type *tp); */ ir_type *new_type_frame(ident *name); +/** + * Makes a clone of a frame type. + * Sets entity links from old frame entities to new onces and + * vice versa. + */ +ir_type *clone_frame_type(ir_type *type); + /** * Sets a lowered type for a type. This sets both associations * and marks lowered_type as a "lowered" one.