diff --git a/src/lj_crecord.c b/src/lj_crecord.c index 5e91737c..99303310 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c @@ -61,8 +61,7 @@ static CTypeID crec_constructor(jit_State *J, GCcdata *cd, TRef tr) CTypeID id; lua_assert(tref_iscdata(tr) && cd->ctypeid == CTID_CTYPEID); id = *(CTypeID *)cdataptr(cd); - tr = emitir(IRT(IR_ADD, IRT_PTR), tr, lj_ir_kintp(J, sizeof(GCcdata))); - tr = emitir(IRT(IR_XLOAD, IRT_INT), tr, 0); + tr = emitir(IRT(IR_FLOAD, IRT_INT), tr, IRFL_CDATA_INT); emitir(IRTG(IR_EQ, IRT_INT), tr, lj_ir_kint(J, (int32_t)id)); return id; } diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 8f1c8770..c1e30511 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c @@ -1992,6 +1992,7 @@ LJFOLDF(fload_cdata_typeid_kgc) /* Get the contents of immutable cdata objects. */ LJFOLD(FLOAD KGC IRFL_CDATA_PTR) +LJFOLD(FLOAD KGC IRFL_CDATA_INT) LJFOLD(FLOAD KGC IRFL_CDATA_INT64) LJFOLDF(fload_cdata_int64_kgc) {