diff options
Diffstat (limited to 'src/lj_ir.c')
-rw-r--r-- | src/lj_ir.c | 14 |
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. */ |
314 | TRef lj_ir_kptr(jit_State *J, void *ptr) | 314 | TRef 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; |
329 | found: | 329 | found: |
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: { |