aboutsummaryrefslogtreecommitdiff
path: root/src/lj_ir.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_ir.h')
-rw-r--r--src/lj_ir.h25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/lj_ir.h b/src/lj_ir.h
index efc8205e..672aca4a 100644
--- a/src/lj_ir.h
+++ b/src/lj_ir.h
@@ -422,18 +422,29 @@ enum {
422 422
423#define irref_isk(ref) ((ref) < REF_BIAS) 423#define irref_isk(ref) ((ref) < REF_BIAS)
424 424
425/* Tagged IR references. */ 425/* Tagged IR references (32 bit).
426**
427** +-------+-------+---------------+
428** | irt | flags | ref |
429** +-------+-------+---------------+
430**
431** The tag holds a copy of the IRType and speeds up IR type checks.
432*/
426typedef uint32_t TRef; 433typedef uint32_t TRef;
427 434
428#define TREF(ref, t) (cast(TRef, (ref) + ((t)<<16))) 435#define TREF_REFMASK 0x0000ffff
436#define TREF_FRAME 0x00010000
437#define TREF_CONT 0x00020000
438
439#define TREF(ref, t) ((TRef)((ref) + ((t)<<24)))
429 440
430#define tref_ref(tr) (cast(IRRef1, (tr))) 441#define tref_ref(tr) ((IRRef1)(tr))
431#define tref_t(tr) (cast(IRType, (tr)>>16)) 442#define tref_t(tr) ((IRType)((tr)>>24))
432#define tref_type(tr) (cast(IRType, ((tr)>>16) & IRT_TYPE)) 443#define tref_type(tr) ((IRType)(((tr)>>24) & IRT_TYPE))
433#define tref_typerange(tr, first, last) \ 444#define tref_typerange(tr, first, last) \
434 ((((tr)>>16) & IRT_TYPE) - (TRef)(first) <= (TRef)(last-first)) 445 ((((tr)>>24) & IRT_TYPE) - (TRef)(first) <= (TRef)(last-first))
435 446
436#define tref_istype(tr, t) (((tr) & (IRT_TYPE<<16)) == ((t)<<16)) 447#define tref_istype(tr, t) (((tr) & (IRT_TYPE<<24)) == ((t)<<24))
437#define tref_isnil(tr) (tref_istype((tr), IRT_NIL)) 448#define tref_isnil(tr) (tref_istype((tr), IRT_NIL))
438#define tref_isfalse(tr) (tref_istype((tr), IRT_FALSE)) 449#define tref_isfalse(tr) (tref_istype((tr), IRT_FALSE))
439#define tref_istrue(tr) (tref_istype((tr), IRT_TRUE)) 450#define tref_istrue(tr) (tref_istype((tr), IRT_TRUE))