diff options
Diffstat (limited to 'src/vm_ppcspe.dasc')
-rw-r--r-- | src/vm_ppcspe.dasc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/vm_ppcspe.dasc b/src/vm_ppcspe.dasc index c4a44191..ea33c08b 100644 --- a/src/vm_ppcspe.dasc +++ b/src/vm_ppcspe.dasc | |||
@@ -1184,8 +1184,12 @@ static void build_subroutines(BuildCtx *ctx) | |||
1184 | |//-- Base library: catch errors ---------------------------------------- | 1184 | |//-- Base library: catch errors ---------------------------------------- |
1185 | | | 1185 | | |
1186 | |.ffunc pcall | 1186 | |.ffunc pcall |
1187 | | lwz TMP1, L->maxstack | ||
1188 | | add TMP2, BASE, NARGS8:RC | ||
1187 | | cmplwi NARGS8:RC, 8 | 1189 | | cmplwi NARGS8:RC, 8 |
1188 | | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) | 1190 | | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) |
1191 | | cmplw cr1, TMP1, TMP2 | ||
1192 | | cror 4*cr0+lt, 4*cr0+lt, 4*cr1+lt | ||
1189 | | blt ->fff_fallback | 1193 | | blt ->fff_fallback |
1190 | | mr TMP2, BASE | 1194 | | mr TMP2, BASE |
1191 | | la BASE, 8(BASE) | 1195 | | la BASE, 8(BASE) |
@@ -1196,8 +1200,12 @@ static void build_subroutines(BuildCtx *ctx) | |||
1196 | | b ->vm_call_dispatch | 1200 | | b ->vm_call_dispatch |
1197 | | | 1201 | | |
1198 | |.ffunc_2 xpcall | 1202 | |.ffunc_2 xpcall |
1203 | | lwz TMP1, L->maxstack | ||
1204 | | add TMP2, BASE, NARGS8:RC | ||
1199 | | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) | 1205 | | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) |
1200 | | mr TMP2, BASE | 1206 | | mr TMP2, BASE |
1207 | | cmplw TMP1, TMP2 | ||
1208 | | blt ->fff_fallback | ||
1201 | | checkfunc CARG2 // Traceback must be a function. | 1209 | | checkfunc CARG2 // Traceback must be a function. |
1202 | | checkfail ->fff_fallback | 1210 | | checkfail ->fff_fallback |
1203 | | la BASE, 16(BASE) | 1211 | | la BASE, 16(BASE) |