diff options
Diffstat (limited to 'src/lj_crecord.c')
-rw-r--r-- | src/lj_crecord.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c index aa4c5842..95850611 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c | |||
@@ -621,7 +621,7 @@ static TRef crec_ct_tv(jit_State *J, CType *d, TRef dp, TRef sp, cTValue *sval) | |||
621 | emitir(IRTGI(IR_EQ), tr, lj_ir_kint(J, ud->udtype)); | 621 | emitir(IRTGI(IR_EQ), tr, lj_ir_kint(J, ud->udtype)); |
622 | sp = emitir(IRT(IR_FLOAD, IRT_PTR), sp, | 622 | sp = emitir(IRT(IR_FLOAD, IRT_PTR), sp, |
623 | ud->udtype == UDTYPE_IO_FILE ? IRFL_UDATA_FILE : | 623 | ud->udtype == UDTYPE_IO_FILE ? IRFL_UDATA_FILE : |
624 | IRFL_UDATA_BUF_R); | 624 | IRFL_SBUF_R); |
625 | } else { | 625 | } else { |
626 | sp = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, sizeof(GCudata))); | 626 | sp = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, sizeof(GCudata))); |
627 | } | 627 | } |
@@ -1918,10 +1918,25 @@ TRef lj_crecord_loadiu64(jit_State *J, TRef tr, cTValue *o) | |||
1918 | CTypeID id = argv2cdata(J, tr, o)->ctypeid; | 1918 | CTypeID id = argv2cdata(J, tr, o)->ctypeid; |
1919 | if (!(id == CTID_INT64 || id == CTID_UINT64)) | 1919 | if (!(id == CTID_INT64 || id == CTID_UINT64)) |
1920 | lj_trace_err(J, LJ_TRERR_BADTYPE); | 1920 | lj_trace_err(J, LJ_TRERR_BADTYPE); |
1921 | lj_needsplit(J); | ||
1921 | return emitir(IRT(IR_FLOAD, id == CTID_INT64 ? IRT_I64 : IRT_U64), tr, | 1922 | return emitir(IRT(IR_FLOAD, id == CTID_INT64 ? IRT_I64 : IRT_U64), tr, |
1922 | IRFL_CDATA_INT64); | 1923 | IRFL_CDATA_INT64); |
1923 | } | 1924 | } |
1924 | 1925 | ||
1926 | #if LJ_HASBUFFER | ||
1927 | TRef lj_crecord_topcvoid(jit_State *J, TRef tr, cTValue *o) | ||
1928 | { | ||
1929 | CTState *cts = ctype_ctsG(J2G(J)); | ||
1930 | if (!tref_iscdata(tr)) lj_trace_err(J, LJ_TRERR_BADTYPE); | ||
1931 | return crec_ct_tv(J, ctype_get(cts, CTID_P_CVOID), 0, tr, o); | ||
1932 | } | ||
1933 | |||
1934 | TRef lj_crecord_topuint8(jit_State *J, TRef tr) | ||
1935 | { | ||
1936 | return emitir(IRTG(IR_CNEWI, IRT_CDATA), lj_ir_kint(J, CTID_P_UINT8), tr); | ||
1937 | } | ||
1938 | #endif | ||
1939 | |||
1925 | #undef IR | 1940 | #undef IR |
1926 | #undef emitir | 1941 | #undef emitir |
1927 | #undef emitconv | 1942 | #undef emitconv |