diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib_ffi.c | 2 | ||||
-rw-r--r-- | src/lj_asm.c | 4 | ||||
-rw-r--r-- | src/lj_record.c | 3 |
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; |