summaryrefslogtreecommitdiff
path: root/src/vm_x86.dasc
diff options
context:
space:
mode:
authorMike Pall <mike>2012-09-12 16:58:47 +0200
committerMike Pall <mike>2012-09-12 16:58:47 +0200
commitaed20093781541c19b5c7d6149eda71a7141bc1c (patch)
treef86023d78e716262282c23d639a318dce1af7b65 /src/vm_x86.dasc
parent23932a6c8b7ef434bc963139b4160b1058fa6f7f (diff)
downloadluajit-aed20093781541c19b5c7d6149eda71a7141bc1c.tar.gz
luajit-aed20093781541c19b5c7d6149eda71a7141bc1c.tar.bz2
luajit-aed20093781541c19b5c7d6149eda71a7141bc1c.zip
Fix despecialization of ITERN when already running.
Diffstat (limited to '')
-rw-r--r--src/vm_x86.dasc3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/vm_x86.dasc b/src/vm_x86.dasc
index 8fe07a65..67984c6c 100644
--- a/src/vm_x86.dasc
+++ b/src/vm_x86.dasc
@@ -1566,7 +1566,7 @@ static void build_subroutines(BuildCtx *ctx)
1566 | add BASE, 8 1566 | add BASE, 8
1567 | mov ARG3, BASE 1567 | mov ARG3, BASE
1568 |.endif 1568 |.endif
1569 | mov SAVE_PC, PC // Redundant (but a defined value). 1569 | mov SAVE_PC, PC // Needed for ITERN fallback.
1570 | call extern lj_tab_next // (lua_State *L, GCtab *t, TValue *key) 1570 | call extern lj_tab_next // (lua_State *L, GCtab *t, TValue *key)
1571 | // Flag returned in eax (RD). 1571 | // Flag returned in eax (RD).
1572 | mov BASE, L:RB->base 1572 | mov BASE, L:RB->base
@@ -5433,6 +5433,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
5433 | cmp byte CFUNC:RB->ffid, FF_next_N; jne >5 5433 | cmp byte CFUNC:RB->ffid, FF_next_N; jne >5
5434 | branchPC RD 5434 | branchPC RD
5435 | mov dword [BASE+RA*8-8], 0 // Initialize control var. 5435 | mov dword [BASE+RA*8-8], 0 // Initialize control var.
5436 | mov dword [BASE+RA*8-4], 0xfffe7fff
5436 |1: 5437 |1:
5437 | ins_next 5438 | ins_next
5438 |5: // Despecialize bytecode if any of the checks fail. 5439 |5: // Despecialize bytecode if any of the checks fail.