aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lj_crecord.c5
-rw-r--r--src/lj_ffrecord.c4
2 files changed, 7 insertions, 2 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c
index 50fca4cc..326ff6de 100644
--- a/src/lj_crecord.c
+++ b/src/lj_crecord.c
@@ -273,13 +273,14 @@ static TRef crec_tv_ct(jit_State *J, CType *s, CTypeID sid, TRef sp)
273 goto err_nyi; /* NYI: specialize to the result. */ 273 goto err_nyi; /* NYI: specialize to the result. */
274 if (t == IRT_CDATA) 274 if (t == IRT_CDATA)
275 goto err_nyi; /* NYI: copyval of >64 bit integers. */ 275 goto err_nyi; /* NYI: copyval of >64 bit integers. */
276 if ((sinfo & CTF_BOOL) || t == IRT_CDATA) 276 if (t >= IRT_U32)
277 if (t == IRT_U32) lj_trace_err(J, LJ_TRERR_NYICONV); 277 goto err_nyi; /* NYI: on-trace handling of U32/I64/U64. */
278 return emitir(IRT(IR_XLOAD, t), sp, 0); 278 return emitir(IRT(IR_XLOAD, t), sp, 0);
279 } else if (ctype_isptr(sinfo)) { 279 } else if (ctype_isptr(sinfo)) {
280 IRType t = (LJ_64 && s->size == 8) ? IRT_P64 : IRT_P32; 280 IRType t = (LJ_64 && s->size == 8) ? IRT_P64 : IRT_P32;
281 sp = emitir(IRT(IR_XLOAD, t), sp, 0); 281 sp = emitir(IRT(IR_XLOAD, t), sp, 0);
282 } else if (ctype_isrefarray(sinfo) || ctype_isstruct(sinfo)) { 282 } else if (ctype_isrefarray(sinfo) || ctype_isstruct(sinfo)) {
283 cts->L = J->L;
283 sid = lj_ctype_intern(cts, CTINFO_REF(sid), CTSIZE_PTR); /* Create ref. */ 284 sid = lj_ctype_intern(cts, CTINFO_REF(sid), CTSIZE_PTR); /* Create ref. */
284 } else if (ctype_iscomplex(sinfo)) { 285 } else if (ctype_iscomplex(sinfo)) {
285 IRType t = s->size == 2*sizeof(double) ? IRT_NUM : IRT_CDATA; 286 IRType t = s->size == 2*sizeof(double) ? IRT_NUM : IRT_CDATA;
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c
index b7ee06cd..ca9f6ceb 100644
--- a/src/lj_ffrecord.c
+++ b/src/lj_ffrecord.c
@@ -266,6 +266,10 @@ static void LJ_FASTCALL recff_tonumber(jit_State *J, RecordFFData *rd)
266 recff_nyiu(J); /* Would need an inverted STRTO for this case. */ 266 recff_nyiu(J); /* Would need an inverted STRTO for this case. */
267 tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0); 267 tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0);
268 } 268 }
269#if LJ_HASFFI
270 } else if (tref_iscdata(tr)) {
271 recff_nyiu(J);
272#endif
269 } else { 273 } else {
270 tr = TREF_NIL; 274 tr = TREF_NIL;
271 } 275 }