diff options
Diffstat (limited to 'src/lj_opt_loop.c')
-rw-r--r-- | src/lj_opt_loop.c | 12 |
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); |