diff options
Diffstat (limited to 'src/lj_ir.h')
-rw-r--r-- | src/lj_ir.h | 25 |
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 | */ | ||
426 | typedef uint32_t TRef; | 433 | typedef 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)) |