aboutsummaryrefslogtreecommitdiff
path: root/src/lj_ir.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_ir.c')
-rw-r--r--src/lj_ir.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/lj_ir.c b/src/lj_ir.c
index e81beb81..e1ce5839 100644
--- a/src/lj_ir.c
+++ b/src/lj_ir.c
@@ -311,21 +311,21 @@ found:
311} 311}
312 312
313/* Intern 32 bit pointer constant. */ 313/* Intern 32 bit pointer constant. */
314TRef lj_ir_kptr(jit_State *J, void *ptr) 314TRef lj_ir_kptr_(jit_State *J, IROp op, void *ptr)
315{ 315{
316 IRIns *ir, *cir = J->cur.ir; 316 IRIns *ir, *cir = J->cur.ir;
317 IRRef ref; 317 IRRef ref;
318 lua_assert((void *)(intptr_t)i32ptr(ptr) == ptr); 318 lua_assert((void *)(intptr_t)i32ptr(ptr) == ptr);
319 for (ref = J->chain[IR_KPTR]; ref; ref = cir[ref].prev) 319 for (ref = J->chain[op]; ref; ref = cir[ref].prev)
320 if (mref(cir[ref].ptr, void) == ptr) 320 if (mref(cir[ref].ptr, void) == ptr)
321 goto found; 321 goto found;
322 ref = ir_nextk(J); 322 ref = ir_nextk(J);
323 ir = IR(ref); 323 ir = IR(ref);
324 setmref(ir->ptr, ptr); 324 setmref(ir->ptr, ptr);
325 ir->t.irt = IRT_P32; 325 ir->t.irt = IRT_P32;
326 ir->o = IR_KPTR; 326 ir->o = op;
327 ir->prev = J->chain[IR_KPTR]; 327 ir->prev = J->chain[op];
328 J->chain[IR_KPTR] = (IRRef1)ref; 328 J->chain[op] = (IRRef1)ref;
329found: 329found:
330 return TREF(ref, IRT_P32); 330 return TREF(ref, IRT_P32);
331} 331}
@@ -382,7 +382,9 @@ void lj_ir_kvalue(lua_State *L, TValue *tv, const IRIns *ir)
382 case IR_KPRI: setitype(tv, irt_toitype(ir->t)); break; 382 case IR_KPRI: setitype(tv, irt_toitype(ir->t)); break;
383 case IR_KINT: setintV(tv, ir->i); break; 383 case IR_KINT: setintV(tv, ir->i); break;
384 case IR_KGC: setgcV(L, tv, ir_kgc(ir), irt_toitype(ir->t)); break; 384 case IR_KGC: setgcV(L, tv, ir_kgc(ir), irt_toitype(ir->t)); break;
385 case IR_KPTR: case IR_KNULL: setlightudV(tv, mref(ir->ptr, void)); break; 385 case IR_KPTR: case IR_KKPTR: case IR_KNULL:
386 setlightudV(tv, mref(ir->ptr, void));
387 break;
386 case IR_KNUM: setnumV(tv, ir_knum(ir)->n); break; 388 case IR_KNUM: setnumV(tv, ir_knum(ir)->n); break;
387#if LJ_HASFFI 389#if LJ_HASFFI
388 case IR_KINT64: { 390 case IR_KINT64: {