libFirm
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
gen_arm_regalloc_if.h
1 
9 #ifndef FIRM_BE_ARM_GEN_ARM_REGALLOC_IF_H
10 #define FIRM_BE_ARM_GEN_ARM_REGALLOC_IF_H
11 
12 #include "arm_nodes_attr.h"
13 #include "bearch.h"
14 
16 enum reg_indices {
17  REG_FL,
18  REG_F0,
19  REG_F1,
20  REG_F2,
21  REG_F3,
22  REG_F4,
23  REG_F5,
24  REG_F6,
25  REG_F7,
26  REG_R0,
27  REG_R1,
28  REG_R2,
29  REG_R3,
30  REG_R4,
31  REG_R5,
32  REG_R6,
33  REG_R7,
34  REG_R8,
35  REG_R9,
36  REG_R10,
37  REG_R11,
38  REG_R12,
39  REG_SP,
40  REG_LR,
41  REG_PC,
42 
43  N_ARM_REGISTERS
44 };
45 
47 enum {
48  REG_FLAGS_FL,
49 };
50 
51 enum {
52  REG_FPA_F0,
53  REG_FPA_F1,
54  REG_FPA_F2,
55  REG_FPA_F3,
56  REG_FPA_F4,
57  REG_FPA_F5,
58  REG_FPA_F6,
59  REG_FPA_F7,
60 };
61 
62 enum {
63  REG_GP_R0,
64  REG_GP_R1,
65  REG_GP_R2,
66  REG_GP_R3,
67  REG_GP_R4,
68  REG_GP_R5,
69  REG_GP_R6,
70  REG_GP_R7,
71  REG_GP_R8,
72  REG_GP_R9,
73  REG_GP_R10,
74  REG_GP_R11,
75  REG_GP_R12,
76  REG_GP_SP,
77  REG_GP_LR,
78  REG_GP_PC,
79 };
80 
81 
83 enum {
84  N_arm_flags_REGS = 1,
85  N_arm_fpa_REGS = 8,
86  N_arm_gp_REGS = 16,
87 
88 };
89 
90 enum {
91  CLASS_arm_flags,
92  CLASS_arm_fpa,
93  CLASS_arm_gp,
94  N_ARM_CLASSES = 3
95 };
96 
97 extern const arch_register_req_t arm_class_reg_req_flags;
98 extern const arch_register_req_t arm_single_reg_req_flags_fl;
99 extern const arch_register_req_t arm_class_reg_req_fpa;
100 extern const arch_register_req_t arm_single_reg_req_fpa_f0;
101 extern const arch_register_req_t arm_single_reg_req_fpa_f1;
102 extern const arch_register_req_t arm_single_reg_req_fpa_f2;
103 extern const arch_register_req_t arm_single_reg_req_fpa_f3;
104 extern const arch_register_req_t arm_single_reg_req_fpa_f4;
105 extern const arch_register_req_t arm_single_reg_req_fpa_f5;
106 extern const arch_register_req_t arm_single_reg_req_fpa_f6;
107 extern const arch_register_req_t arm_single_reg_req_fpa_f7;
108 extern const arch_register_req_t arm_class_reg_req_gp;
109 extern const arch_register_req_t arm_single_reg_req_gp_r0;
110 extern const arch_register_req_t arm_single_reg_req_gp_r1;
111 extern const arch_register_req_t arm_single_reg_req_gp_r2;
112 extern const arch_register_req_t arm_single_reg_req_gp_r3;
113 extern const arch_register_req_t arm_single_reg_req_gp_r4;
114 extern const arch_register_req_t arm_single_reg_req_gp_r5;
115 extern const arch_register_req_t arm_single_reg_req_gp_r6;
116 extern const arch_register_req_t arm_single_reg_req_gp_r7;
117 extern const arch_register_req_t arm_single_reg_req_gp_r8;
118 extern const arch_register_req_t arm_single_reg_req_gp_r9;
119 extern const arch_register_req_t arm_single_reg_req_gp_r10;
120 extern const arch_register_req_t arm_single_reg_req_gp_r11;
121 extern const arch_register_req_t arm_single_reg_req_gp_r12;
122 extern const arch_register_req_t arm_single_reg_req_gp_sp;
123 extern const arch_register_req_t arm_single_reg_req_gp_lr;
124 extern const arch_register_req_t arm_single_reg_req_gp_pc;
125 
126 
127 extern const arch_register_t arm_registers[N_ARM_REGISTERS];
128 
129 extern arch_register_class_t arm_reg_classes[N_ARM_CLASSES];
130 
131 void arm_register_init(void);
132 
133 #endif