summaryrefslogtreecommitdiff
path: root/src/lj_opt_fold.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r--src/lj_opt_fold.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c
index 9675fca2..ef397aea 100644
--- a/src/lj_opt_fold.c
+++ b/src/lj_opt_fold.c
@@ -1768,12 +1768,18 @@ LJFOLDF(fload_cdata_typeid_kgc)
1768 return NEXTFOLD; 1768 return NEXTFOLD;
1769} 1769}
1770 1770
1771/* The content of int64 cdata objects is immutable. */ 1771/* Get the contents of immutable cdata objects. */
1772LJFOLD(FLOAD KGC IRFL_CDATA_PTR)
1772LJFOLD(FLOAD KGC IRFL_CDATA_INT64) 1773LJFOLD(FLOAD KGC IRFL_CDATA_INT64)
1773LJFOLDF(fload_cdata_int64_kgc) 1774LJFOLDF(fload_cdata_int64_kgc)
1774{ 1775{
1775 if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD)) 1776 if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD)) {
1776 return INT64FOLD(*(uint64_t *)cdataptr(ir_kcdata(fleft))); 1777 void *p = cdataptr(ir_kcdata(fleft));
1778 if (irt_is64(fins->t))
1779 return INT64FOLD(*(uint64_t *)p);
1780 else
1781 return INTFOLD(*(int32_t *)p);
1782 }
1777 return NEXTFOLD; 1783 return NEXTFOLD;
1778} 1784}
1779 1785