11#define IR_GP_REGS(_) \
45# define IR_FP_REGS(_) \
46 _(V0, d0, s0, h0, b0) \
47 _(V1, d1, s1, h1, b1) \
48 _(V2, d2, s2, h2, b2) \
49 _(V3, d3, s3, h3, b3) \
50 _(V4, d4, s4, h4, b4) \
51 _(V5, d5, s5, h5, b5) \
52 _(V6, d6, s6, h6, b6) \
53 _(V7, d7, s7, h7, b7) \
54 _(V8, d8, s8, h8, b8) \
55 _(V9, d9, s9, h9, b9) \
56 _(V10, d10, s10, h10, b10) \
57 _(V11, d11, s11, h11, b11) \
58 _(V12, d12, s12, h12, b12) \
59 _(V13, d13, s13, h13, b13) \
60 _(V14, d14, s14, h14, b14) \
61 _(V15, d15, s15, h15, b15) \
62 _(V16, d16, s16, h16, b16) \
63 _(V17, d17, s17, h17, b17) \
64 _(V18, d18, s18, h18, b18) \
65 _(V19, d19, s19, h19, b19) \
66 _(V20, d20, s20, h20, b20) \
67 _(V21, d21, s21, h21, b21) \
68 _(V22, d22, s22, h22, b22) \
69 _(V23, d23, s23, h23, b23) \
70 _(V24, d24, s24, h24, b24) \
71 _(V25, d25, s25, h25, b25) \
72 _(V26, d26, s26, h26, b26) \
73 _(V27, d27, s27, h27, b27) \
74 _(V28, d28, s28, h28, b28) \
75 _(V29, d29, s29, h29, b29) \
76 _(V30, d30, s30, h30, b30) \
77 _(V31, d31, s31, h31, b31) \
79#define IR_GP_REG_ENUM(code, name64, name32) \
82#define IR_FP_REG_ENUM(code, name64, name32, name16, name8) \
92#define IR_REG_GP_FIRST IR_REG_X0
93#define IR_REG_FP_FIRST IR_REG_V0
94#define IR_REG_GP_LAST (IR_REG_FP_FIRST - 1)
95#define IR_REG_FP_LAST (IR_REG_NUM - 1)
96#define IR_REG_SCRATCH (IR_REG_NUM)
97#define IR_REG_ALL (IR_REG_NUM + 1)
99#define IR_REGSET_64BIT 1
101#define IR_REG_INT_TMP IR_REG_X17
103#define IR_REG_STACK_POINTER \
105#define IR_REG_FRAME_POINTER \
108#if defined(__linux__)
109#define IR_REGSET_FIXED \
110 (IR_REGSET(IR_REG_INT_TMP) | IR_REGSET_INTERVAL(IR_REG_X29, IR_REG_X31))
112#define IR_REGSET_FIXED \
113 (IR_REGSET(IR_REG_INT_TMP) | IR_REGSET_INTERVAL(IR_REG_X29, IR_REG_X31) \
114 | IR_REGSET(IR_REG_X18))
117#define IR_REGSET_GP \
118 IR_REGSET_DIFFERENCE(IR_REGSET_INTERVAL(IR_REG_GP_FIRST, IR_REG_GP_LAST), IR_REGSET_FIXED)
119#define IR_REGSET_FP \
120 IR_REGSET_DIFFERENCE(IR_REGSET_INTERVAL(IR_REG_FP_FIRST, IR_REG_FP_LAST), IR_REGSET_FIXED)
122#define IR_REG_IP0 IR_REG_X16
123#define IR_REG_IP1 IR_REG_X17
124#define IR_REG_PR IR_REG_X18
125#define IR_REG_LR IR_REG_X30
126#define IR_REG_ZR IR_REG_X31
129#define IR_REG_INT_RET1 IR_REG_X0
130#define IR_REG_FP_RET1 IR_REG_V0
131#define IR_REG_INT_ARGS 8
132#define IR_REG_FP_ARGS 8
133#define IR_REG_INT_ARG1 IR_REG_X0
134#define IR_REG_INT_ARG2 IR_REG_X1
135#define IR_REG_INT_ARG3 IR_REG_X2
136#define IR_REG_INT_ARG4 IR_REG_X3
137#define IR_REG_INT_ARG5 IR_REG_X4
138#define IR_REG_INT_ARG6 IR_REG_X5
139#define IR_REG_INT_ARG7 IR_REG_X6
140#define IR_REG_INT_ARG8 IR_REG_X7
141#define IR_REG_FP_ARG1 IR_REG_V0
142#define IR_REG_FP_ARG2 IR_REG_V1
143#define IR_REG_FP_ARG3 IR_REG_V2
144#define IR_REG_FP_ARG4 IR_REG_V3
145#define IR_REG_FP_ARG5 IR_REG_V4
146#define IR_REG_FP_ARG6 IR_REG_V5
147#define IR_REG_FP_ARG7 IR_REG_V6
148#define IR_REG_FP_ARG8 IR_REG_V7
149#define IR_MAX_REG_ARGS 16
150#define IR_SHADOW_ARGS 0
152# define IR_REGSET_SCRATCH \
153 (IR_REGSET_INTERVAL(IR_REG_X0, IR_REG_X18) \
154 | IR_REGSET_INTERVAL(IR_REG_V0, IR_REG_V7) \
155 | IR_REGSET_INTERVAL(IR_REG_V16, IR_REG_V31))
157# define IR_REGSET_PRESERVED \
158 (IR_REGSET_INTERVAL(IR_REG_X19, IR_REG_X30) \
159 | IR_REGSET_INTERVAL(IR_REG_V8, IR_REG_V15))
#define IR_FP_REG_ENUM(code, name64, name32, name16, name8)
struct _ir_va_list ir_va_list
struct _ir_tmp_reg ir_tmp_reg
#define IR_GP_REG_ENUM(code, name64, name32)
struct _ir_tmp_reg ir_tmp_reg
int8_t hints[IR_MAX_REG_ARGS+3]