diff options
Diffstat (limited to '')
-rw-r--r-- | src/vm_ppc.dasc | 69 |
1 files changed, 17 insertions, 52 deletions
diff --git a/src/vm_ppc.dasc b/src/vm_ppc.dasc index c85f1f10..ac399900 100644 --- a/src/vm_ppc.dasc +++ b/src/vm_ppc.dasc | |||
@@ -293,6 +293,7 @@ | |||
293 | |.type NODE, Node | 293 | |.type NODE, Node |
294 | |.type NARGS8, int | 294 | |.type NARGS8, int |
295 | |.type TRACE, GCtrace | 295 | |.type TRACE, GCtrace |
296 | |.type SBUF, SBuf | ||
296 | | | 297 | | |
297 | |//----------------------------------------------------------------------- | 298 | |//----------------------------------------------------------------------- |
298 | | | 299 | | |
@@ -2103,6 +2104,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
2103 | | stp BASE, L->base | 2104 | | stp BASE, L->base |
2104 | | stw PC, SAVE_PC | 2105 | | stw PC, SAVE_PC |
2105 | | bl extern lj_str_new // (lua_State *L, char *str, size_t l) | 2106 | | bl extern lj_str_new // (lua_State *L, char *str, size_t l) |
2107 | |->fff_resstr: | ||
2106 | | // Returns GCstr *. | 2108 | | // Returns GCstr *. |
2107 | | lp BASE, L->base | 2109 | | lp BASE, L->base |
2108 | | li CARG3, LJ_TSTR | 2110 | | li CARG3, LJ_TSTR |
@@ -2223,66 +2225,29 @@ static void build_subroutines(BuildCtx *ctx) | |||
2223 | | li CARG3, LJ_TSTR | 2225 | | li CARG3, LJ_TSTR |
2224 | | b ->fff_restv | 2226 | | b ->fff_restv |
2225 | | | 2227 | | |
2226 | |.ffunc string_reverse | 2228 | |.macro ffstring_op, name |
2229 | | .ffunc string_ .. name | ||
2227 | | ffgccheck | 2230 | | ffgccheck |
2228 | | cmplwi NARGS8:RC, 8 | 2231 | | cmplwi NARGS8:RC, 8 |
2229 | | lwz CARG3, 0(BASE) | 2232 | | lwz CARG3, 0(BASE) |
2230 | | lwz STR:CARG1, 4(BASE) | 2233 | | lwz STR:CARG2, 4(BASE) |
2231 | | blt ->fff_fallback | 2234 | | blt ->fff_fallback |
2232 | | checkstr CARG3 | 2235 | | checkstr CARG3 |
2233 | | lwz CARG2, DISPATCH_GL(tmpbuf.b)(DISPATCH) | 2236 | | la SBUF:CARG1, DISPATCH_GL(tmpbuf)(DISPATCH) |
2234 | | lwz TMP1, DISPATCH_GL(tmpbuf.e)(DISPATCH) | ||
2235 | | bne ->fff_fallback | 2237 | | bne ->fff_fallback |
2236 | | lwz CARG3, STR:CARG1->len | 2238 | | lwz TMP0, SBUF:CARG1->b |
2237 | | la CARG1, #STR(STR:CARG1) | 2239 | | stw L, SBUF:CARG1->L |
2238 | | li TMP2, 0 | 2240 | | stp BASE, L->base |
2239 | | add TMP3, CARG2, CARG3 | 2241 | | stw PC, SAVE_PC |
2240 | | cmplw TMP1, TMP3 | 2242 | | stw TMP0, SBUF:CARG1->p |
2241 | | subi TMP3, CARG3, 1 | 2243 | | bl extern lj_buf_putstr_ .. name |
2242 | | blt ->fff_fallback | 2244 | | bl extern lj_buf_tostr |
2243 | |1: // Reverse string copy. | 2245 | | b ->fff_resstr |
2244 | | cmpwi TMP3, 0 | ||
2245 | | lbzx TMP1, CARG1, TMP2 | ||
2246 | | blty ->fff_newstr | ||
2247 | | stbx TMP1, CARG2, TMP3 | ||
2248 | | subi TMP3, TMP3, 1 | ||
2249 | | addi TMP2, TMP2, 1 | ||
2250 | | b <1 | ||
2251 | | | ||
2252 | |.macro ffstring_case, name, lo | ||
2253 | | .ffunc name | ||
2254 | | ffgccheck | ||
2255 | | cmplwi NARGS8:RC, 8 | ||
2256 | | lwz CARG3, 0(BASE) | ||
2257 | | lwz STR:CARG1, 4(BASE) | ||
2258 | | blt ->fff_fallback | ||
2259 | | checkstr CARG3 | ||
2260 | | lwz CARG2, DISPATCH_GL(tmpbuf.b)(DISPATCH) | ||
2261 | | lwz TMP1, DISPATCH_GL(tmpbuf.e)(DISPATCH) | ||
2262 | | bne ->fff_fallback | ||
2263 | | lwz CARG3, STR:CARG1->len | ||
2264 | | la CARG1, #STR(STR:CARG1) | ||
2265 | | li TMP2, 0 | ||
2266 | | add TMP3, CARG2, CARG3 | ||
2267 | | cmplw TMP1, TMP3 | ||
2268 | | blt ->fff_fallback | ||
2269 | |1: // ASCII case conversion. | ||
2270 | | cmplw TMP2, CARG3 | ||
2271 | | lbzx TMP1, CARG1, TMP2 | ||
2272 | | bgey ->fff_newstr | ||
2273 | | subi TMP0, TMP1, lo | ||
2274 | | xori TMP3, TMP1, 0x20 | ||
2275 | | addic TMP0, TMP0, -26 | ||
2276 | | subfe TMP3, TMP3, TMP3 | ||
2277 | | rlwinm TMP3, TMP3, 0, 26, 26 // x &= 0x20. | ||
2278 | | xor TMP1, TMP1, TMP3 | ||
2279 | | stbx TMP1, CARG2, TMP2 | ||
2280 | | addi TMP2, TMP2, 1 | ||
2281 | | b <1 | ||
2282 | |.endmacro | 2246 | |.endmacro |
2283 | | | 2247 | | |
2284 | |ffstring_case string_lower, 65 | 2248 | |ffstring_op reverse |
2285 | |ffstring_case string_upper, 97 | 2249 | |ffstring_op lower |
2250 | |ffstring_op upper | ||
2286 | | | 2251 | | |
2287 | |//-- Bit library -------------------------------------------------------- | 2252 | |//-- Bit library -------------------------------------------------------- |
2288 | | | 2253 | | |