summaryrefslogtreecommitdiff
path: root/cgstack.h
diff options
context:
space:
mode:
authorJohn van Groningen2003-07-11 13:47:24 +0000
committerJohn van Groningen2003-07-11 13:47:24 +0000
commit2255def3b1d52edce2b87c30ddff0a206abda7cd (patch)
tree406f668067c28094b4a64a59d6549554bcb54f51 /cgstack.h
parentfix bug in floating point subtract and divide (diff)
add .c and .h files
Diffstat (limited to 'cgstack.h')
-rw-r--r--cgstack.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/cgstack.h b/cgstack.h
new file mode 100644
index 0000000..e47f8b5
--- /dev/null
+++ b/cgstack.h
@@ -0,0 +1,51 @@
+
+#define VECTOR_ELEMENT_SIZE 32
+#define VECTOR_ELEMENT_MASK 31
+#define LOG_VECTOR_ELEMENT_SIZE 5
+
+#define test_bit(v,b) ((v)[(b)>>5] & (((ULONG)1) << ((b) & 31)))
+#define clear_bit(v,b) (v)[(b)>>5] &= ~(((ULONG)1) << ((b) & 31))
+#define set_bit(v,b) (v)[(b)>>5] |= (((ULONG)1) << ((b) & 31))
+
+extern INSTRUCTION_GRAPH s_get_b (int offset);
+extern INSTRUCTION_GRAPH s_get_a (int offset);
+extern INSTRUCTION_GRAPH s_pop_a (VOID);
+extern INSTRUCTION_GRAPH s_pop_b (VOID);
+extern void s_put_b (int offset,INSTRUCTION_GRAPH graph);
+extern void s_put_a (int offset,INSTRUCTION_GRAPH graph);
+extern void s_push_a (INSTRUCTION_GRAPH graph);
+extern void s_push_b (INSTRUCTION_GRAPH graph);
+extern void s_remove_a (VOID);
+extern void s_remove_b (VOID);
+
+extern void initialize_stacks (VOID);
+extern void init_a_stack (int a_stack_size);
+extern void init_b_stack (int b_stack_size,ULONG vector[]);
+#ifdef MORE_PARAMETER_REGISTERS
+void init_ab_stack (int a_stack_size,int b_stack_size,ULONG vector[]);
+#endif
+extern int get_a_stack_size (VOID);
+extern int get_b_stack_size (ULONG *vector_p[]);
+extern void release_a_stack (VOID);
+extern void release_b_stack (VOID);
+extern void insert_graph_in_b_stack (INSTRUCTION_GRAPH graph,int b_stack_size,ULONG *vector);
+
+extern struct basic_block *allocate_empty_basic_block (VOID);
+extern void generate_code_for_previous_blocks (int jmp_jsr_or_rtn_flag);
+extern void begin_new_basic_block (VOID);
+extern void insert_basic_block (int block_graph_kind,int a_stack_size,int b_stack_size,ULONG *vector_p,LABEL *label);
+extern void insert_basic_block_with_extra_parameters_on_stack (int block_graph_kind,int a_stack_size,int b_stack_size,
+ ULONG *vector_p,int extra_a_stack_size,int extra_b_stack_size,LABEL *label);
+
+extern void adjust_stack_pointers (VOID);
+extern void end_basic_block_with_registers (int n_a_parameters,int n_b_parameters,ULONG vector[]);
+extern int end_basic_block_with_registers_and_return_b_stack_offset
+ (int n_a_parameters,int n_b_parameters,ULONG vector[],int n_adress_parameter_registers);
+extern void end_stack_elements (int n_a_parameters,int n_b_parameters,ULONG vector[]);
+extern int adjust_stack_pointers_without_altering_condition_codes (int float_condition,int condition);
+extern void linearize_stack_graphs (VOID);
+
+extern INSTRUCTION_GRAPH search_and_remove_graph_from_b_stack (INSTRUCTION_GRAPH calculate_with_overflow_graph);
+extern void linearize_stack_graphs_with_overflow_test (INSTRUCTION_GRAPH test_overflow_graph,INSTRUCTION_GRAPH store_calculate_with_overflow_graph);
+
+extern struct block_graph global_block;