diff options
author | Quentin Carbonneaux <quentin@c9x.me> | 2019-03-12 20:53:18 +0100 |
---|---|---|
committer | Quentin Carbonneaux <quentin@c9x.me> | 2019-03-12 20:53:18 +0100 |
commit | fd65f4275be6dc6603be9610e88c55b8bfc1dc62 (patch) | |
tree | 95c8ecd45f90c9cf971e010ed63f1d2ad739f650 /all.h | |
parent | c37347a4630fda601b4c40585ca25fff42f756c6 (diff) | |
download | roux-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.h | 14 |
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()) */ |