added debugging support, implemented shuffle (Perm for x87 :-)
[libfirm] / ir / be / beasm_types.h
1 /**
2  * the 'generic' assemblercode emitter
3  * @author Hannes Jakschitsch
4  * @date 19.01.2005
5  */
6
7 #ifndef _BEASM_TYPES_H
8 #define _BEASM_TYPES_H
9
10 #include "type.h"
11
12
13 /**
14  *      Definition of symbolic segments
15  **/
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 */
21 } asm_segment_t;
22
23 typedef enum _asm_arith_operation_t {
24
25   ASM_ARITH_OPERATION_ADD = 1,
26   ASM_ARITH_OPERATION_SUB,
27   ASM_ARITH_OPERATION_MUL
28
29 } asm_arith_operation_t;
30
31
32
33
34 typedef struct _assembler_t assembler_t;
35
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, visibility visibility);
44 typedef void (*dump_declare_initialized_symbol_proc)(void* priv_data, asm_segment_t segment, const char* ldname, int bytes, int align, 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);
56
57 ///////////////////////////////////////////////////////////////////////////
58
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);
62
63 struct _assembler_t {
64
65         ///////////////////////////////////////////////////////////////////////////
66   // declarators
67
68   dump_declare_uninitialized_symbol_proc dump_declare_uninitialized_symbol;
69   dump_declare_initialized_symbol_proc dump_declare_initialized_symbol;
70
71         ///////////////////////////////////////////////////////////////////////////
72   // initializers
73
74
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;
88   // dump a symconst
89   dump_symconst_proc dump_symconst;
90
91         ///////////////////////////////////////////////////////////////////////////
92   // formatters.
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;
97
98         void *private_data;
99 };
100
101
102
103 #endif