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