diff options
author | Mike Pall <mike> | 2012-09-12 16:58:47 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2012-09-12 16:58:47 +0200 |
commit | aed20093781541c19b5c7d6149eda71a7141bc1c (patch) | |
tree | f86023d78e716262282c23d639a318dce1af7b65 /src/vm_x86.dasc | |
parent | 23932a6c8b7ef434bc963139b4160b1058fa6f7f (diff) | |
download | luajit-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.dasc | 3 |
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. |