121
121
`#define TEMP_RV %rbx'
125
* Used by NBIF_SAVE_RESCHED_ARGS to save argument
126
* registers in locations preserved by C.
127
* May be registers or process-private memory locations.
128
* Must not be C caller-save registers.
129
* Must not overlap with any Erlang global registers.
131
`#define TEMP_ARG0 %r14'
132
`#define TEMP_ARG1 %r13'
133
`#define TEMP_ARG2 %rbx'
135
123
dnl XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
137
125
dnl X hipe_amd64_glue.S support X
235
223
`/* #define NBIF_RET_3 'NBIF_RET(3)` */'
236
224
`/* #define NBIF_RET_5 'NBIF_RET(5)` */'
239
dnl NBIF_SAVE_RESCHED_ARGS(ARITY)
240
dnl Used in the expensive_bif_interface_{1,2,3}() macros to copy
241
dnl the argument registers to locations preserved by C.
242
dnl Currently, 1 <= ARITY <= 3, so this simply moves the argument
243
dnl registers to C callee-save registers.
245
define(NBIF_MIN,`ifelse(eval($1 > $2),0,$1,$2)')dnl
246
define(NBIF_SVA_1,`ifelse(eval($1 < NR_ARG_REGS),0,,`movq ARG$1, TEMP_ARG$1; ')')dnl
247
define(NBIF_SVA_N,`ifelse(eval($1 >= 0),0,,`NBIF_SVA_N(eval($1-1))NBIF_SVA_1($1,ARG$1)')')dnl
248
define(NBIF_SAVE_RESCHED_ARGS,`NBIF_SVA_N(eval(NBIF_MIN($1,NR_ARG_REGS)-1))')dnl
249
`/* #define NBIF_SAVE_RESCHED_ARGS_1 'NBIF_SAVE_RESCHED_ARGS(1)` */'
250
`/* #define NBIF_SAVE_RESCHED_ARGS_2 'NBIF_SAVE_RESCHED_ARGS(2)` */'
251
`/* #define NBIF_SAVE_RESCHED_ARGS_3 'NBIF_SAVE_RESCHED_ARGS(3)` */'
253
226
`#endif /* HIPE_AMD64_ASM_H */'