diff options
author | Mike Pall <mike> | 2011-02-03 04:13:51 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2011-02-03 04:22:27 +0100 |
commit | df65b8b419c12327254dec0df116c62525aaabad (patch) | |
tree | b4ba6ea2841692123b49b3033420dbb7282cbcd6 /src/lj_ir.h | |
parent | 1027018b2135caf45057c3d3b3da03ffb0c6add3 (diff) | |
download | luajit-df65b8b419c12327254dec0df116c62525aaabad.tar.gz luajit-df65b8b419c12327254dec0df116c62525aaabad.tar.bz2 luajit-df65b8b419c12327254dec0df116c62525aaabad.zip |
FFI: Rename IR_CNEWP to IR_CNEWI and use it to box 64 bit integers.
Generates smaller IR and DCE eliminates many intermediate boxes.
Needs allocation sinking to eliminate the boxes kept alive by PHIs.
Diffstat (limited to 'src/lj_ir.h')
-rw-r--r-- | src/lj_ir.h | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/lj_ir.h b/src/lj_ir.h index dfafc5db..bde0ac04 100644 --- a/src/lj_ir.h +++ b/src/lj_ir.h | |||
@@ -113,7 +113,7 @@ | |||
113 | _(TNEW, AW, lit, lit) \ | 113 | _(TNEW, AW, lit, lit) \ |
114 | _(TDUP, AW, ref, ___) \ | 114 | _(TDUP, AW, ref, ___) \ |
115 | _(CNEW, AW, ref, ref) \ | 115 | _(CNEW, AW, ref, ref) \ |
116 | _(CNEWP, NW, ref, ref) /* CSE is ok, not marked as A. */ \ | 116 | _(CNEWI, NW, ref, ref) /* CSE is ok, not marked as A. */ \ |
117 | \ | 117 | \ |
118 | /* Write barriers. */ \ | 118 | /* Write barriers. */ \ |
119 | _(TBAR, S , ref, ___) \ | 119 | _(TBAR, S , ref, ___) \ |
@@ -188,7 +188,9 @@ IRFPMDEF(FPMENUM) | |||
188 | _(UDATA_UDTYPE, offsetof(GCudata, udtype)) \ | 188 | _(UDATA_UDTYPE, offsetof(GCudata, udtype)) \ |
189 | _(UDATA_FILE, sizeof(GCudata)) \ | 189 | _(UDATA_FILE, sizeof(GCudata)) \ |
190 | _(CDATA_TYPEID, offsetof(GCcdata, typeid)) \ | 190 | _(CDATA_TYPEID, offsetof(GCcdata, typeid)) \ |
191 | _(CDATA_PTR, sizeof(GCcdata)) | 191 | _(CDATA_PTR, sizeof(GCcdata)) \ |
192 | _(CDATA_INT64, sizeof(GCcdata)) \ | ||
193 | _(CDATA_INT64HI, sizeof(GCcdata) + 4) | ||
192 | 194 | ||
193 | typedef enum { | 195 | typedef enum { |
194 | #define FLENUM(name, ofs) IRFL_##name, | 196 | #define FLENUM(name, ofs) IRFL_##name, |
@@ -588,12 +590,12 @@ typedef union IRIns { | |||
588 | #define ir_kptr(ir) \ | 590 | #define ir_kptr(ir) \ |
589 | check_exp((ir)->o == IR_KPTR || (ir)->o == IR_KKPTR, mref((ir)->ptr, void)) | 591 | check_exp((ir)->o == IR_KPTR || (ir)->o == IR_KKPTR, mref((ir)->ptr, void)) |
590 | 592 | ||
593 | LJ_STATIC_ASSERT((int)IRT_GUARD == (int)IRM_W); | ||
594 | |||
591 | /* A store or any other op with a non-weak guard has a side-effect. */ | 595 | /* A store or any other op with a non-weak guard has a side-effect. */ |
592 | static LJ_AINLINE int ir_sideeff(IRIns *ir) | 596 | static LJ_AINLINE int ir_sideeff(IRIns *ir) |
593 | { | 597 | { |
594 | return (((ir->t.irt | ~IRT_GUARD) & lj_ir_mode[ir->o]) >= IRM_S); | 598 | return (((ir->t.irt | ~IRT_GUARD) & lj_ir_mode[ir->o]) >= IRM_S); |
595 | } | 599 | } |
596 | 600 | ||
597 | LJ_STATIC_ASSERT((int)IRT_GUARD == (int)IRM_W); | ||
598 | |||
599 | #endif | 601 | #endif |