@@ -156,6 +156,7 @@ enum _ir_reg {
156156# define IR_REG_FP_RET1 IR_REG_XMM0
157157# define IR_REG_INT_ARGS 6
158158# define IR_REG_FP_ARGS 8
159+ # define IR_MAX_REG_ARGS 20 /* IR_REG_INT_PNARGS + IR_REG_FP_ARGS */
159160# define IR_REG_INT_ARG1 IR_REG_RDI
160161# define IR_REG_INT_ARG2 IR_REG_RSI
161162# define IR_REG_INT_ARG3 IR_REG_RDX
@@ -190,37 +191,36 @@ enum _ir_reg {
190191 | IR_REGSET(IR_REG_RCX) | IR_REGSET(IR_REG_R8) | IR_REGSET(IR_REG_R9) \
191192 | IR_REGSET_INTERVAL(IR_REG_XMM0, IR_REG_XMM7))
192193
193- # if __has_attribute (preserve_none )
194-
195- # define IR_HAVE_PRESERVE_NONE 1
194+ # define IR_HAVE_PRESERVE_NONE 1
196195
197196/* 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 \
215219 (IR_REGSET_INTERVAL(IR_REG_R12, IR_REG_R15) | IR_REGSET(IR_REG_RDI) \
216220 | IR_REGSET(IR_REG_RSI) | IR_REGSET(IR_REG_RDX) | IR_REGSET(IR_REG_RCX) \
217221 | IR_REGSET(IR_REG_R8) | IR_REGSET(IR_REG_R9) | IR_REGSET(IR_REG_R11) \
218222 | IR_REGSET(IR_REG_RAX) | IR_REGSET_INTERVAL(IR_REG_XMM0, IR_REG_XMM7))
219223
220- # else /* !preserve_none */
221- # define IR_MAX_REG_ARGS 14 /* IR_REG_INT_ARGS + IR_REG_FP_ARGS */
222- # endif
223-
224224typedef struct _ir_va_list {
225225 uint32_t gp_offset ;
226226 uint32_t fp_offset ;
0 commit comments