summary refs log tree commit diff
path: root/all.h
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin@c9x.me>2019-03-12 20:53:18 +0100
committerQuentin Carbonneaux <quentin@c9x.me>2019-03-12 20:53:18 +0100
commitfd65f4275be6dc6603be9610e88c55b8bfc1dc62 (patch)
tree95c8ecd45f90c9cf971e010ed63f1d2ad739f650 /all.h
parentc37347a4630fda601b4c40585ca25fff42f756c6 (diff)
downloadroux-fd65f4275be6dc6603be9610e88c55b8bfc1dc62.tar.gz
improve range-checking macros
They are now linear and can be
safely used with arguments that
have side-effects. This patch
also introduces an iscall()
macro and uses it to fix a
missing check for Ovacall in
liveness analysis.
Diffstat (limited to 'all.h')
-rw-r--r--all.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/all.h b/all.h
index 24a1755..e125f3a 100644
--- a/all.h
+++ b/all.h
@@ -171,12 +171,14 @@ enum {
 	Jjf1 = Jjffuo,
 };
 
-#define isstore(o) (Ostoreb <= o && o <= Ostored)
-#define isload(o) (Oloadsb <= o && o <= Oload)
-#define isext(o) (Oextsb <= o && o <= Oextuw)
-#define ispar(o) (Opar <= o && o <= Opare)
-#define isarg(o) (Oarg <= o && o <= Oarge)
-#define isret(j) (Jret0 <= j && j <= Jretc)
+#define INRANGE(x, l, u) ((unsigned)(x) - l <= u - l) /* linear in x */
+#define iscall(o) INRANGE(o, Ocall, Ovacall)
+#define isstore(o) INRANGE(o, Ostoreb, Ostored)
+#define isload(o) INRANGE(o, Oloadsb, Oload)
+#define isext(o) INRANGE(o, Oextsb, Oextuw)
+#define ispar(o) INRANGE(o, Opar, Opare)
+#define isarg(o) INRANGE(o, Oarg, Oarge)
+#define isret(j) INRANGE(j, Jret0, Jretc)
 
 enum Class {
 	Kx = -1, /* "top" class (see usecheck() and clsmerge()) */