2 * the 'generic' assemblercode emitter
3 * @author Hannes Jakschitsch
14 * Definition of symbolic segments
16 typedef enum _asm_segment_t {
17 ASM_SEGMENT_CONST = 1, /* < segment to store constant symbols */
18 ASM_SEGMENT_DATA_INIT, /* < segment to store initialized symbols */
19 ASM_SEGMENT_CODE, /* < segment to store code */
20 ASM_SEGMENT_DATA_UNINIT, /* < segment to store uninitialized symbols */
23 typedef enum _asm_arith_operation_t {
25 ASM_ARITH_OPERATION_ADD = 1,
26 ASM_ARITH_OPERATION_SUB,
27 ASM_ARITH_OPERATION_MUL
29 } asm_arith_operation_t;
34 typedef struct _assembler_t assembler_t;
36 typedef void (*dump_align_proc)(void* priv_data, asm_segment_t segment, int align);
37 typedef void (*dump_arith_tarval_proc)(void* priv_data, asm_segment_t segment, tarval *tv, int bytes);
38 typedef void (*dump_atomic_decl_proc)(void* priv_data, asm_segment_t segment, int bytes);
39 typedef void (*dump_string_proc)(void* priv_data, asm_segment_t segment, entity *ent);
40 typedef void (*dump_external_declaration_proc)(void* priv_data, asm_segment_t segment, const char* ld_name);
41 typedef void (*dump_local_declaration_proc)(void* priv_data, asm_segment_t segment, const char* ld_name );
42 // declares an uninitialized symbol.
43 typedef void (*dump_declare_uninitialized_symbol_proc)(void* priv_data, asm_segment_t segment, const char* ldname, int bytes, int align, ent_visibility visibility);
44 typedef void (*dump_declare_initialized_symbol_proc)(void* priv_data, asm_segment_t segment, const char* ldname, int bytes, int align, ent_visibility visibility);
45 //typedef void (*dump_declare_object_symbol_proc)(void* priv_data, asm_segment_t segment, const char* ld_name, int bytes);
46 //typedef void (*dump_declare_function_symbol_proc)(void* priv_data, asm_segment_t segment, const char* ld_name);
47 //typedef void (*dump_object_symbol_init_decl_proc)(void* priv_data, asm_segment_t segment, const char* ld_name);
48 // emits a zero padding directive.
49 typedef void (*dump_zero_padding_proc)(void* priv_data, asm_segment_t segment, int bytes);
50 typedef void (*dump_arith_op_proc)(void* priv_data, asm_segment_t segment, asm_arith_operation_t op);
51 typedef void (*dump_symconst_proc)(void* priv_data, asm_segment_t segment, ir_node *init);
52 /*typedef void (*dump_size_proc)(void* priv_data, asm_segment_t segment, int size);
53 typedef void (*dump_addr_name_proc)(void* priv_data, asm_segment_t segment, const char* addr_name);
54 typedef void (*dump_addr_ent_proc)(void* priv_data, asm_segment_t segment, const char* addr_ent); */
55 typedef void (*dump_newline_proc)(void* priv_data, asm_segment_t segment);
57 ///////////////////////////////////////////////////////////////////////////
59 typedef void (*dump_header_proc)(void* priv_data);
60 typedef void (*dump_footer_proc)(void* priv_data);
61 typedef void (*dump_segment_header_proc)(void* priv_data);
65 ///////////////////////////////////////////////////////////////////////////
68 dump_declare_uninitialized_symbol_proc dump_declare_uninitialized_symbol;
69 dump_declare_initialized_symbol_proc dump_declare_initialized_symbol;
71 ///////////////////////////////////////////////////////////////////////////
75 // declare an atomic value of BYTES size.
76 // e.g. .long or .byte
77 // needed when emitting an initializer
78 dump_atomic_decl_proc dump_atomic_decl;
79 // dump a target value. needed when emitting an initializer
80 dump_arith_tarval_proc dump_arith_tarval;
81 // dump a string. needed when emitting an initializer. improves readability.
82 dump_string_proc dump_string;
83 // dump a zero padding.
84 dump_zero_padding_proc dump_zero_padding;
85 // dump an arithmetic operator. used when initializers are expressions
86 // that cannot be evaluated and must be computed by the assembler.
87 dump_arith_op_proc dump_arith_op;
89 dump_symconst_proc dump_symconst;
91 ///////////////////////////////////////////////////////////////////////////
93 dump_newline_proc dump_newline;
94 dump_header_proc dump_header;
95 dump_footer_proc dump_footer;
96 dump_segment_header_proc dump_segment_header;