aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib_ffi.c2
-rw-r--r--src/lj_asm.c4
-rw-r--r--src/lj_record.c3
3 files changed, 5 insertions, 4 deletions
diff --git a/src/lib_ffi.c b/src/lib_ffi.c
index 2295cf15..1b1fa389 100644
--- a/src/lib_ffi.c
+++ b/src/lib_ffi.c
@@ -776,7 +776,7 @@ LJLIB_CF(ffi_metatype)
776 if (!(ctype_isstruct(ct->info) || ctype_iscomplex(ct->info) || 776 if (!(ctype_isstruct(ct->info) || ctype_iscomplex(ct->info) ||
777 ctype_isvector(ct->info))) 777 ctype_isvector(ct->info)))
778 lj_err_arg(L, 1, LJ_ERR_FFI_INVTYPE); 778 lj_err_arg(L, 1, LJ_ERR_FFI_INVTYPE);
779 tv = lj_tab_setinth(L, t, -(int32_t)id); 779 tv = lj_tab_setinth(L, t, -(int32_t)ctype_typeid(cts, ct));
780 if (!tvisnil(tv)) 780 if (!tvisnil(tv))
781 lj_err_caller(L, LJ_ERR_PROTMT); 781 lj_err_caller(L, LJ_ERR_PROTMT);
782 settabV(L, tv, mt); 782 settabV(L, tv, mt);
diff --git a/src/lj_asm.c b/src/lj_asm.c
index 6f5e0c45..0fcd8485 100644
--- a/src/lj_asm.c
+++ b/src/lj_asm.c
@@ -1888,6 +1888,7 @@ static void asm_head_side(ASMState *as)
1888 IRRef1 sloadins[RID_MAX]; 1888 IRRef1 sloadins[RID_MAX];
1889 RegSet allow = RSET_ALL; /* Inverse of all coalesced registers. */ 1889 RegSet allow = RSET_ALL; /* Inverse of all coalesced registers. */
1890 RegSet live = RSET_EMPTY; /* Live parent registers. */ 1890 RegSet live = RSET_EMPTY; /* Live parent registers. */
1891 RegSet pallow = RSET_GPR; /* Registers needed by the parent stack check. */
1891 IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */ 1892 IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */
1892 int32_t spadj, spdelta; 1893 int32_t spadj, spdelta;
1893 int pass2 = 0; 1894 int pass2 = 0;
@@ -1928,6 +1929,7 @@ static void asm_head_side(ASMState *as)
1928 sloadins[rs] = (IRRef1)i; 1929 sloadins[rs] = (IRRef1)i;
1929 rset_set(live, rs); /* Block live parent register. */ 1930 rset_set(live, rs); /* Block live parent register. */
1930 } 1931 }
1932 if (!ra_hasspill(regsp_spill(rs))) rset_clear(pallow, regsp_reg(rs));
1931 } 1933 }
1932 1934
1933 /* Calculate stack frame adjustment. */ 1935 /* Calculate stack frame adjustment. */
@@ -2044,7 +2046,7 @@ static void asm_head_side(ASMState *as)
2044 ExitNo exitno = as->J->exitno; 2046 ExitNo exitno = as->J->exitno;
2045#endif 2047#endif
2046 as->T->topslot = (uint8_t)as->topslot; /* Remember for child traces. */ 2048 as->T->topslot = (uint8_t)as->topslot; /* Remember for child traces. */
2047 asm_stack_check(as, as->topslot, irp, allow & RSET_GPR, exitno); 2049 asm_stack_check(as, as->topslot, irp, pallow, exitno);
2048 } 2050 }
2049} 2051}
2050 2052
diff --git a/src/lj_record.c b/src/lj_record.c
index b2639cbc..8e685a10 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -1976,8 +1976,7 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
1976 } 1976 }
1977 for (i = nvararg; i < nresults; i++) 1977 for (i = nvararg; i < nresults; i++)
1978 J->base[dst+i] = TREF_NIL; 1978 J->base[dst+i] = TREF_NIL;
1979 if (dst + (BCReg)nresults > J->maxslot) 1979 J->maxslot = dst + (BCReg)nresults;
1980 J->maxslot = dst + (BCReg)nresults;
1981 } else if (select_detect(J)) { /* y = select(x, ...) */ 1980 } else if (select_detect(J)) { /* y = select(x, ...) */
1982 TRef tridx = J->base[dst-1]; 1981 TRef tridx = J->base[dst-1];
1983 TRef tr = TREF_NIL; 1982 TRef tr = TREF_NIL;