void cgDbgTrashFrame(IRLS& env, const IRInstruction* inst) { auto const fp = srcLoc(env, inst, 0).reg(); auto const off = cellsToBytes(inst->extra<DbgTrashFrame>()->offset.offset); for (auto i = 0; i < kNumActRecCells; ++i) { trashTV(vmain(env), fp, off + cellsToBytes(i), kTVTrashJITFrame); } }
void cgInlineReturnNoFrame(IRLS& env, const IRInstruction* inst) { auto& v = vmain(env); if (RuntimeOption::EvalHHIRGenerateAsserts) { auto const extra = inst->extra<InlineReturnNoFrame>(); auto const offset = cellsToBytes(extra->offset.offset); for (auto i = 0; i < kNumActRecCells; ++i) { trashTV(v, rvmfp(), offset - cellsToBytes(i), kTVTrashJITFrame); } } v << inlineend{}; }
void cgDbgTrashMem(IRLS& env, const IRInstruction* inst) { auto const ptr = srcLoc(env, inst, 0).reg(); trashTV(vmain(env), ptr, 0, kTVTrashJITHeap); }
void cgDbgTrashStk(IRLS& env, const IRInstruction* inst) { auto const sp = srcLoc(env, inst, 0).reg(); auto const off = cellsToBytes(inst->extra<DbgTrashStk>()->offset.offset); trashTV(vmain(env), sp, off, kTVTrashJITStk); }