mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-03 13:20:26 +02:00
Add safety check on number of integer and float arguments on x86_64.
This commit is contained in:
parent
adc42ad2ad
commit
58043d717d
2 changed files with 16 additions and 0 deletions
|
@ -38,6 +38,12 @@
|
|||
#define JIT_CAN_16 0
|
||||
#define JIT_REXTMP _R9D
|
||||
|
||||
/* Number or integer argument registers */
|
||||
#define JIT_ARG_MAX 6
|
||||
|
||||
/* Number of float argument registers */
|
||||
#define JIT_FP_ARG_MAX 8
|
||||
|
||||
#define JIT_R_NUM 3
|
||||
#define JIT_R(i) ((i) == 0 ? _EAX : _R9D + (i))
|
||||
#define JIT_V_NUM 3
|
||||
|
@ -132,7 +138,12 @@ struct jit_local_state {
|
|||
#define jit_callr(reg) CALLsr((reg))
|
||||
|
||||
/* Stack isn't used for arguments: */
|
||||
#if !defined(_ASM_SAFETY)
|
||||
#define jit_prepare_i(ni) (_jitl.argssize = (ni))
|
||||
#else
|
||||
#define jit_prepare_i(ni) ((ni) <= JIT_ARG_MAX ? _jitl.argssize = (ni) : JITFAIL("too many integer arguments"))
|
||||
#endif
|
||||
|
||||
|
||||
#define jit_pusharg_i(rs) (--_jitl.argssize, MOVQrr(rs, jit_arg_reg_order[_jitl.argssize]))
|
||||
#define jit_finish(sub) (MOVQir((long) (sub), JIT_REXTMP), \
|
||||
|
|
|
@ -290,8 +290,13 @@ union jit_double_imm {
|
|||
#define jit_ordr_d(d, s1, s2) (XORLrr ((d), (d)), UCOMISDrr ((s1), (s2)), SETNPr (jit_reg8((d))))
|
||||
#define jit_unordr_d(d, s1, s2) (XORLrr ((d), (d)), UCOMISDrr ((s1), (s2)), SETPr (jit_reg8((d))))
|
||||
|
||||
#if !defined(_ASM_SAFETY)
|
||||
#define jit_prepare_f(num) (_jitl.nextarg_putfp = _XMM0 + (num))
|
||||
#define jit_prepare_d(num) (_jitl.nextarg_putfp = _XMM0 + (num))
|
||||
#else
|
||||
#define jit_prepare_f(num) ((num) <= JIT_FP_ARG_MAX ? (_jitl.nextarg_putfp = _XMM0 + (num)) : JITFAIL("too many float arguments"))
|
||||
#define jit_prepare_d(num) ((num) <= JIT_FP_ARG_MAX ? (_jitl.nextarg_putfp = _XMM0 + (num)) : JITFAIL("too many float arguments"))
|
||||
#endif
|
||||
|
||||
#define jit_arg_f() (_XMM0 + _jitl.nextarg_getfp++)
|
||||
#define jit_arg_d() (_XMM0 + _jitl.nextarg_getfp++)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue