diff options
Diffstat (limited to 'src/vm_mips.dasc')
-rw-r--r-- | src/vm_mips.dasc | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/vm_mips.dasc b/src/vm_mips.dasc index 5808e182..53000411 100644 --- a/src/vm_mips.dasc +++ b/src/vm_mips.dasc | |||
@@ -1736,14 +1736,15 @@ static void build_subroutines(BuildCtx *ctx) | |||
1736 | | beqz AT, ->fff_fallback | 1736 | | beqz AT, ->fff_fallback |
1737 | |. lw TMP0, STR:CARG1->len | 1737 | |. lw TMP0, STR:CARG1->len |
1738 | | mfc1 CARG3, f0 | 1738 | | mfc1 CARG3, f0 |
1739 | | lw TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) | 1739 | | lw CARG2, DISPATCH_GL(tmpbuf.b)(DISPATCH) |
1740 | | lw TMP1, DISPATCH_GL(tmpbuf.e)(DISPATCH) | ||
1740 | | li AT, 1 | 1741 | | li AT, 1 |
1741 | | blez CARG3, ->fff_emptystr // Count <= 0? | 1742 | | blez CARG3, ->fff_emptystr // Count <= 0? |
1742 | |. sltu AT, AT, TMP0 | 1743 | |. sltu AT, AT, TMP0 |
1743 | | beqz TMP0, ->fff_emptystr // Zero length string? | 1744 | | beqz TMP0, ->fff_emptystr // Zero length string? |
1744 | |. sltu TMP0, TMP1, CARG3 | 1745 | |. addu TMP3, CARG2, CARG3 |
1746 | | sltu TMP0, TMP1, TMP3 | ||
1745 | | or AT, AT, TMP0 | 1747 | | or AT, AT, TMP0 |
1746 | | lw CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) | ||
1747 | | bnez AT, ->fff_fallback // Fallback for > 1-char strings. | 1748 | | bnez AT, ->fff_fallback // Fallback for > 1-char strings. |
1748 | |. lbu TMP0, STR:CARG1[1] | 1749 | |. lbu TMP0, STR:CARG1[1] |
1749 | | addu TMP2, CARG2, CARG3 | 1750 | | addu TMP2, CARG2, CARG3 |
@@ -1762,14 +1763,14 @@ static void build_subroutines(BuildCtx *ctx) | |||
1762 | | beqz NARGS8:RC, ->fff_fallback | 1763 | | beqz NARGS8:RC, ->fff_fallback |
1763 | |. li AT, LJ_TSTR | 1764 | |. li AT, LJ_TSTR |
1764 | | bne CARG3, AT, ->fff_fallback | 1765 | | bne CARG3, AT, ->fff_fallback |
1765 | |. lw TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) | 1766 | |. lw CARG2, DISPATCH_GL(tmpbuf.b)(DISPATCH) |
1766 | | lw CARG3, STR:CARG1->len | 1767 | | lw CARG3, STR:CARG1->len |
1768 | | lw TMP1, DISPATCH_GL(tmpbuf.e)(DISPATCH) | ||
1767 | | addiu CARG1, STR:CARG1, #STR | 1769 | | addiu CARG1, STR:CARG1, #STR |
1768 | | lw CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) | 1770 | | addu CARG4, CARG2, CARG3 |
1769 | | sltu AT, TMP1, CARG3 | 1771 | | sltu AT, TMP1, CARG4 |
1770 | | bnez AT, ->fff_fallback | 1772 | | bnez AT, ->fff_fallback |
1771 | |. addu TMP3, CARG1, CARG3 | 1773 | |. addu TMP3, CARG1, CARG3 |
1772 | | addu CARG4, CARG2, CARG3 | ||
1773 | |1: // Reverse string copy. | 1774 | |1: // Reverse string copy. |
1774 | | lbu TMP1, 0(CARG1) | 1775 | | lbu TMP1, 0(CARG1) |
1775 | | sltu AT, CARG1, TMP3 | 1776 | | sltu AT, CARG1, TMP3 |
@@ -1787,11 +1788,12 @@ static void build_subroutines(BuildCtx *ctx) | |||
1787 | | beqz NARGS8:RC, ->fff_fallback | 1788 | | beqz NARGS8:RC, ->fff_fallback |
1788 | |. li AT, LJ_TSTR | 1789 | |. li AT, LJ_TSTR |
1789 | | bne CARG3, AT, ->fff_fallback | 1790 | | bne CARG3, AT, ->fff_fallback |
1790 | |. lw TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) | 1791 | |. lw CARG2, DISPATCH_GL(tmpbuf.b)(DISPATCH) |
1791 | | lw CARG3, STR:CARG1->len | 1792 | | lw CARG3, STR:CARG1->len |
1793 | | lw TMP1, DISPATCH_GL(tmpbuf.e)(DISPATCH) | ||
1792 | | addiu CARG1, STR:CARG1, #STR | 1794 | | addiu CARG1, STR:CARG1, #STR |
1793 | | lw CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) | 1795 | | addu TMP3, CARG2, CARG3 |
1794 | | sltu AT, TMP1, CARG3 | 1796 | | sltu AT, TMP1, TMP3 |
1795 | | bnez AT, ->fff_fallback | 1797 | | bnez AT, ->fff_fallback |
1796 | |. addu TMP3, CARG1, CARG3 | 1798 | |. addu TMP3, CARG1, CARG3 |
1797 | | move CARG4, CARG2 | 1799 | | move CARG4, CARG2 |