@@ -156,6 +156,7 @@ enum _ir_reg {
156
156
# define IR_REG_FP_RET1 IR_REG_XMM0
157
157
# define IR_REG_INT_ARGS 6
158
158
# define IR_REG_FP_ARGS 8
159
+ # define IR_MAX_REG_ARGS 20 /* IR_REG_INT_PNARGS + IR_REG_FP_ARGS */
159
160
# define IR_REG_INT_ARG1 IR_REG_RDI
160
161
# define IR_REG_INT_ARG2 IR_REG_RSI
161
162
# define IR_REG_INT_ARG3 IR_REG_RDX
@@ -190,37 +191,36 @@ enum _ir_reg {
190
191
| IR_REGSET(IR_REG_RCX) | IR_REGSET(IR_REG_R8) | IR_REGSET(IR_REG_R9) \
191
192
| IR_REGSET_INTERVAL(IR_REG_XMM0, IR_REG_XMM7))
192
193
193
- # if __has_attribute (preserve_none )
194
-
195
- # define IR_HAVE_PRESERVE_NONE 1
194
+ # define IR_HAVE_PRESERVE_NONE 1
196
195
197
196
/* https://github.com/llvm/llvm-project/blob/68bfe91b5a34f80dbcc4f0a7fa5d7aa1cdf959c2/llvm/lib/Target/X86/X86CallingConv.td#L1029 */
198
- # define IR_REG_INT_PNARGS 12
199
- # define IR_REG_INT_PNARG1 IR_REG_R12
200
- # define IR_REG_INT_PNARG2 IR_REG_R13
201
- # define IR_REG_INT_PNARG3 IR_REG_R14
202
- # define IR_REG_INT_PNARG4 IR_REG_R15
203
- # define IR_REG_INT_PNARG5 IR_REG_RDI
204
- # define IR_REG_INT_PNARG6 IR_REG_RSI
205
- # define IR_REG_INT_PNARG7 IR_REG_RDX
206
- # define IR_REG_INT_PNARG8 IR_REG_RCX
207
- # define IR_REG_INT_PNARG9 IR_REG_R8
208
- # define IR_REG_INT_PNARG10 IR_REG_R9
209
- # define IR_REG_INT_PNARG11 IR_REG_R11
210
- # define IR_REG_INT_PNARG12 IR_REG_RAX
211
-
212
- # define IR_MAX_REG_ARGS 20 /* IR_REG_INT_PNARGS + IR_REG_FP_ARGS */
213
-
214
- # define IR_REGSET_PNARGS \
197
+ # define IR_REG_INT_PNARGS 12
198
+ # define IR_REG_INT_PNARG1 IR_REG_R12
199
+ # define IR_REG_INT_PNARG2 IR_REG_R13
200
+ # define IR_REG_INT_PNARG3 IR_REG_R14
201
+ # define IR_REG_INT_PNARG4 IR_REG_R15
202
+ # define IR_REG_INT_PNARG5 IR_REG_RDI
203
+ # define IR_REG_INT_PNARG6 IR_REG_RSI
204
+ # define IR_REG_INT_PNARG7 IR_REG_RDX
205
+ # define IR_REG_INT_PNARG8 IR_REG_RCX
206
+ # define IR_REG_INT_PNARG9 IR_REG_R8
207
+ # define IR_REG_INT_PNARG10 IR_REG_R9
208
+ # define IR_REG_INT_PNARG11 IR_REG_R11
209
+ # define IR_REG_INT_PNARG12 IR_REG_RAX
210
+
211
+ /* https://github.com/llvm/llvm-project/blob/68bfe91b5a34f80dbcc4f0a7fa5d7aa1cdf959c2/llvm/lib/Target/X86/X86CallingConv.td#L1183 */
212
+ # define IR_REGSET_PNPRESERVED IR_REGSET(IR_REG_RBP)
213
+
214
+ # define IR_REGSET_PNSCRATCH \
215
+ (IR_REGSET_DIFFERENCE(IR_REGSET_INTERVAL(IR_REG_GP_FIRST, IR_REG_GP_LAST), IR_REGSET_PNPRESERVED) \
216
+ | IR_REGSET_FP)
217
+
218
+ # define IR_REGSET_PNARGS \
215
219
(IR_REGSET_INTERVAL(IR_REG_R12, IR_REG_R15) | IR_REGSET(IR_REG_RDI) \
216
220
| IR_REGSET(IR_REG_RSI) | IR_REGSET(IR_REG_RDX) | IR_REGSET(IR_REG_RCX) \
217
221
| IR_REGSET(IR_REG_R8) | IR_REGSET(IR_REG_R9) | IR_REGSET(IR_REG_R11) \
218
222
| IR_REGSET(IR_REG_RAX) | IR_REGSET_INTERVAL(IR_REG_XMM0, IR_REG_XMM7))
219
223
220
- # else /* !preserve_none */
221
- # define IR_MAX_REG_ARGS 14 /* IR_REG_INT_ARGS + IR_REG_FP_ARGS */
222
- # endif
223
-
224
224
typedef struct _ir_va_list {
225
225
uint32_t gp_offset ;
226
226
uint32_t fp_offset ;
0 commit comments