guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 112/437: Add safety check on number of integer and float


From: Andy Wingo
Subject: [Guile-commits] 112/437: Add safety check on number of integer and float arguments on x86_64.
Date: Mon, 2 Jul 2018 05:13:55 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit 58043d717d9899ba68211a0eba84f3cc0bb596b9
Author: Paulo Cesar Pereira de Andrade <address@hidden>
Date:   Mon Aug 23 18:59:39 2010 -0300

    Add safety check on number of integer and float arguments on x86_64.
---
 lightning/i386/core-64.h | 11 +++++++++++
 lightning/i386/fp-64.h   |  5 +++++
 2 files changed, 16 insertions(+)

diff --git a/lightning/i386/core-64.h b/lightning/i386/core-64.h
index 4c0c5dc..01cc9d2 100644
--- a/lightning/i386/core-64.h
+++ b/lightning/i386/core-64.h
@@ -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), \
diff --git a/lightning/i386/fp-64.h b/lightning/i386/fp-64.h
index 2dfe399..a7b8a7b 100644
--- a/lightning/i386/fp-64.h
+++ b/lightning/i386/fp-64.h
@@ -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++)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]