diff options
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r-- | src/lj_opt_fold.c | 12 |
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. */ |
1772 | LJFOLD(FLOAD KGC IRFL_CDATA_PTR) | ||
1772 | LJFOLD(FLOAD KGC IRFL_CDATA_INT64) | 1773 | LJFOLD(FLOAD KGC IRFL_CDATA_INT64) |
1773 | LJFOLDF(fload_cdata_int64_kgc) | 1774 | LJFOLDF(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 | ||