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.
This commit is contained in:
Quentin Carbonneaux 2019-03-12 20:53:18 +01:00
parent c37347a463
commit fd65f4275b
3 changed files with 10 additions and 8 deletions

14
all.h
View file

@ -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()) */