diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_ffrecord.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c index 9ea81e54..527b6c06 100644 --- a/src/lj_ffrecord.c +++ b/src/lj_ffrecord.c | |||
| @@ -796,7 +796,7 @@ static TRef recff_string_start(jit_State *J, GCstr *s, int32_t *st, TRef tr, | |||
| 796 | emitir(IRTGI(IR_EQ), tr, tr0); | 796 | emitir(IRTGI(IR_EQ), tr, tr0); |
| 797 | tr = tr0; | 797 | tr = tr0; |
| 798 | } else { | 798 | } else { |
| 799 | tr = emitir(IRTI(IR_ADD), tr, lj_ir_kint(J, -1)); | 799 | tr = emitir(IRTGI(IR_ADDOV), tr, lj_ir_kint(J, -1)); |
| 800 | emitir(IRTGI(IR_GE), tr, tr0); | 800 | emitir(IRTGI(IR_GE), tr, tr0); |
| 801 | start--; | 801 | start--; |
| 802 | } | 802 | } |
| @@ -848,7 +848,7 @@ static void LJ_FASTCALL recff_string_range(jit_State *J, RecordFFData *rd) | |||
| 848 | } else if ((MSize)end <= str->len) { | 848 | } else if ((MSize)end <= str->len) { |
| 849 | emitir(IRTGI(IR_ULE), trend, trlen); | 849 | emitir(IRTGI(IR_ULE), trend, trlen); |
| 850 | } else { | 850 | } else { |
| 851 | emitir(IRTGI(IR_UGT), trend, trlen); | 851 | emitir(IRTGI(IR_GT), trend, trlen); |
| 852 | end = (int32_t)str->len; | 852 | end = (int32_t)str->len; |
| 853 | trend = trlen; | 853 | trend = trlen; |
| 854 | } | 854 | } |
| @@ -856,7 +856,7 @@ static void LJ_FASTCALL recff_string_range(jit_State *J, RecordFFData *rd) | |||
| 856 | if (rd->data) { /* Return string.sub result. */ | 856 | if (rd->data) { /* Return string.sub result. */ |
| 857 | if (end - start >= 0) { | 857 | if (end - start >= 0) { |
| 858 | /* Also handle empty range here, to avoid extra traces. */ | 858 | /* Also handle empty range here, to avoid extra traces. */ |
| 859 | TRef trptr, trslen = emitir(IRTI(IR_SUB), trend, trstart); | 859 | TRef trptr, trslen = emitir(IRTGI(IR_SUBOV), trend, trstart); |
| 860 | emitir(IRTGI(IR_GE), trslen, tr0); | 860 | emitir(IRTGI(IR_GE), trslen, tr0); |
| 861 | trptr = emitir(IRT(IR_STRREF, IRT_PGC), trstr, trstart); | 861 | trptr = emitir(IRT(IR_STRREF, IRT_PGC), trstr, trstart); |
| 862 | J->base[0] = emitir(IRT(IR_SNEW, IRT_STR), trptr, trslen); | 862 | J->base[0] = emitir(IRT(IR_SNEW, IRT_STR), trptr, trslen); |
| @@ -867,7 +867,7 @@ static void LJ_FASTCALL recff_string_range(jit_State *J, RecordFFData *rd) | |||
| 867 | } else { /* Return string.byte result(s). */ | 867 | } else { /* Return string.byte result(s). */ |
| 868 | ptrdiff_t i, len = end - start; | 868 | ptrdiff_t i, len = end - start; |
| 869 | if (len > 0) { | 869 | if (len > 0) { |
| 870 | TRef trslen = emitir(IRTI(IR_SUB), trend, trstart); | 870 | TRef trslen = emitir(IRTGI(IR_SUBOV), trend, trstart); |
| 871 | emitir(IRTGI(IR_EQ), trslen, lj_ir_kint(J, (int32_t)len)); | 871 | emitir(IRTGI(IR_EQ), trslen, lj_ir_kint(J, (int32_t)len)); |
| 872 | if (J->baseslot + len > LJ_MAX_JSLOTS) | 872 | if (J->baseslot + len > LJ_MAX_JSLOTS) |
| 873 | lj_trace_err_info(J, LJ_TRERR_STACKOV); | 873 | lj_trace_err_info(J, LJ_TRERR_STACKOV); |
