summaryrefslogtreecommitdiff
path: root/src/lj_opt_loop.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_opt_loop.c')
-rw-r--r--src/lj_opt_loop.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/lj_opt_loop.c b/src/lj_opt_loop.c
index e5ad5b43..e0e6990e 100644
--- a/src/lj_opt_loop.c
+++ b/src/lj_opt_loop.c
@@ -167,7 +167,7 @@ static void loop_subst_snap(jit_State *J, SnapShot *osnap,
167 SnapEntry *loopmap, IRRef1 *subst) 167 SnapEntry *loopmap, IRRef1 *subst)
168{ 168{
169 SnapEntry *nmap, *omap = &J->cur.snapmap[osnap->mapofs]; 169 SnapEntry *nmap, *omap = &J->cur.snapmap[osnap->mapofs];
170 MSize nmapofs, nframelinks; 170 MSize nmapofs, depth;
171 MSize on, ln, nn, onent = osnap->nent; 171 MSize on, ln, nn, onent = osnap->nent;
172 BCReg nslots = osnap->nslots; 172 BCReg nslots = osnap->nslots;
173 SnapShot *snap = &J->cur.snap[J->cur.nsnap]; 173 SnapShot *snap = &J->cur.snap[J->cur.nsnap];
@@ -179,11 +179,11 @@ static void loop_subst_snap(jit_State *J, SnapShot *osnap,
179 nmapofs = snap->mapofs; 179 nmapofs = snap->mapofs;
180 } 180 }
181 J->guardemit.irt = 0; 181 J->guardemit.irt = 0;
182 nframelinks = osnap->nframelinks; 182 depth = osnap->depth;
183 /* Setup new snapshot. */ 183 /* Setup new snapshot. */
184 snap->mapofs = (uint16_t)nmapofs; 184 snap->mapofs = (uint16_t)nmapofs;
185 snap->ref = (IRRef1)J->cur.nins; 185 snap->ref = (IRRef1)J->cur.nins;
186 snap->nframelinks = (uint8_t)nframelinks; 186 snap->depth = (uint8_t)depth;
187 snap->nslots = nslots; 187 snap->nslots = nslots;
188 snap->count = 0; 188 snap->count = 0;
189 nmap = &J->cur.snapmap[nmapofs]; 189 nmap = &J->cur.snapmap[nmapofs];
@@ -205,10 +205,10 @@ static void loop_subst_snap(jit_State *J, SnapShot *osnap,
205 while (snap_slot(loopmap[ln]) < nslots) /* Copy remaining loop slots. */ 205 while (snap_slot(loopmap[ln]) < nslots) /* Copy remaining loop slots. */
206 nmap[nn++] = loopmap[ln++]; 206 nmap[nn++] = loopmap[ln++];
207 snap->nent = (uint8_t)nn; 207 snap->nent = (uint8_t)nn;
208 J->cur.nsnapmap = (uint16_t)(nmapofs + nn + nframelinks); 208 J->cur.nsnapmap = (uint16_t)(nmapofs + nn + 1 + depth);
209 omap += onent; 209 omap += onent;
210 nmap += nn; 210 nmap += nn;
211 for (nn = 0; nn < nframelinks; nn++) /* Copy frame links. */ 211 for (nn = 0; nn <= depth; nn++) /* Copy PC + frame links. */
212 nmap[nn] = omap[nn]; 212 nmap[nn] = omap[nn];
213} 213}
214 214
@@ -314,7 +314,7 @@ static void loop_undo(jit_State *J, IRRef ins, MSize nsnap)
314 SnapShot *snap = &J->cur.snap[nsnap-1]; 314 SnapShot *snap = &J->cur.snap[nsnap-1];
315 SnapEntry *map = J->cur.snapmap; 315 SnapEntry *map = J->cur.snapmap;
316 map[snap->mapofs + snap->nent] = map[J->cur.snap[0].nent]; /* Restore PC. */ 316 map[snap->mapofs + snap->nent] = map[J->cur.snap[0].nent]; /* Restore PC. */
317 J->cur.nsnapmap = (uint16_t)(snap->mapofs + snap->nent + snap->nframelinks); 317 J->cur.nsnapmap = (uint16_t)(snap->mapofs + snap->nent + 1 + snap->depth);
318 J->cur.nsnap = nsnap; 318 J->cur.nsnap = nsnap;
319 J->guardemit.irt = 0; 319 J->guardemit.irt = 0;
320 lj_ir_rollback(J, ins); 320 lj_ir_rollback(J, ins);