diff options
author | Mike Pall <mike> | 2013-02-27 21:17:27 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2013-02-27 21:28:28 +0100 |
commit | 116cdd7e9a578efffa5a9ca38167d059d12296d7 (patch) | |
tree | cc78e44c4b7a2175f2b16bc5f8898597a72bb228 /src/vm_x86.dasc | |
parent | 28cfcf77445e144335961a020e3e08d84cf0091f (diff) | |
download | luajit-116cdd7e9a578efffa5a9ca38167d059d12296d7.tar.gz luajit-116cdd7e9a578efffa5a9ca38167d059d12296d7.tar.bz2 luajit-116cdd7e9a578efffa5a9ca38167d059d12296d7.zip |
String buffer refactoring, part 2.
Switch to pointers for start/pos/end of buffer.
Abstract out some buffer writers.
Diffstat (limited to '')
-rw-r--r-- | src/vm_x86.dasc | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/vm_x86.dasc b/src/vm_x86.dasc index 0a53ffde..3fd897ec 100644 --- a/src/vm_x86.dasc +++ b/src/vm_x86.dasc | |||
@@ -2356,20 +2356,21 @@ static void build_subroutines(BuildCtx *ctx) | |||
2356 | | cmp dword STR:RB->len, 1 | 2356 | | cmp dword STR:RB->len, 1 |
2357 | | jb ->fff_emptystr // Zero length string? | 2357 | | jb ->fff_emptystr // Zero length string? |
2358 | | jne ->fff_fallback_2 // Fallback for > 1-char strings. | 2358 | | jne ->fff_fallback_2 // Fallback for > 1-char strings. |
2359 | | cmp [DISPATCH+DISPATCH_GL(tmpbuf.sz)], RC; jb ->fff_fallback_2 | ||
2360 | | movzx RA, byte STR:RB[1] | 2359 | | movzx RA, byte STR:RB[1] |
2361 | | mov RB, [DISPATCH+DISPATCH_GL(tmpbuf.buf)] | 2360 | | mov RB, [DISPATCH+DISPATCH_GL(tmpbuf.b)] |
2361 | | add RB, RC | ||
2362 | | cmp [DISPATCH+DISPATCH_GL(tmpbuf.e)], RB; jb ->fff_fallback_2 | ||
2362 | |.if X64 | 2363 | |.if X64 |
2363 | | mov TMP3, RC | 2364 | | mov TMP3, RC |
2364 | |.else | 2365 | |.else |
2365 | | mov ARG3, RC | 2366 | | mov ARG3, RC |
2366 | |.endif | 2367 | |.endif |
2367 | |1: // Fill buffer with char. Yes, this is suboptimal code (do you care?). | 2368 | |1: // Fill buffer with char. |
2368 | | mov [RB], RAL | 2369 | | sub RB, 1 |
2369 | | add RB, 1 | ||
2370 | | sub RC, 1 | 2370 | | sub RC, 1 |
2371 | | mov [RB], RAL | ||
2371 | | jnz <1 | 2372 | | jnz <1 |
2372 | | mov RD, [DISPATCH+DISPATCH_GL(tmpbuf.buf)] | 2373 | | mov RD, [DISPATCH+DISPATCH_GL(tmpbuf.b)] |
2373 | | jmp ->fff_newstr | 2374 | | jmp ->fff_newstr |
2374 | | | 2375 | | |
2375 | |.ffunc_1 string_reverse | 2376 | |.ffunc_1 string_reverse |
@@ -2379,15 +2380,16 @@ static void build_subroutines(BuildCtx *ctx) | |||
2379 | | mov RC, STR:RB->len | 2380 | | mov RC, STR:RB->len |
2380 | | test RC, RC | 2381 | | test RC, RC |
2381 | | jz ->fff_emptystr // Zero length string? | 2382 | | jz ->fff_emptystr // Zero length string? |
2382 | | cmp [DISPATCH+DISPATCH_GL(tmpbuf.sz)], RC; jb ->fff_fallback_1 | ||
2383 | | add RB, #STR | ||
2384 | | mov TMP2, PC // Need another temp register. | 2383 | | mov TMP2, PC // Need another temp register. |
2384 | | mov PC, [DISPATCH+DISPATCH_GL(tmpbuf.b)] | ||
2385 | | lea RA, [PC+RC] | ||
2386 | | cmp [DISPATCH+DISPATCH_GL(tmpbuf.e)], RA; jb ->fff_fallback_1 | ||
2387 | | add RB, #STR | ||
2385 | |.if X64 | 2388 | |.if X64 |
2386 | | mov TMP3, RC | 2389 | | mov TMP3, RC |
2387 | |.else | 2390 | |.else |
2388 | | mov ARG3, RC | 2391 | | mov ARG3, RC |
2389 | |.endif | 2392 | |.endif |
2390 | | mov PC, [DISPATCH+DISPATCH_GL(tmpbuf.buf)] | ||
2391 | |1: | 2393 | |1: |
2392 | | movzx RA, byte [RB] | 2394 | | movzx RA, byte [RB] |
2393 | | add RB, 1 | 2395 | | add RB, 1 |
@@ -2402,17 +2404,18 @@ static void build_subroutines(BuildCtx *ctx) | |||
2402 | | .ffunc_1 name | 2404 | | .ffunc_1 name |
2403 | | ffgccheck | 2405 | | ffgccheck |
2404 | | cmp dword [BASE+4], LJ_TSTR; jne ->fff_fallback | 2406 | | cmp dword [BASE+4], LJ_TSTR; jne ->fff_fallback |
2407 | | mov TMP2, PC // Need another temp register. | ||
2405 | | mov STR:RB, [BASE] | 2408 | | mov STR:RB, [BASE] |
2406 | | mov RC, STR:RB->len | 2409 | | mov RC, STR:RB->len |
2407 | | cmp [DISPATCH+DISPATCH_GL(tmpbuf.sz)], RC; jb ->fff_fallback_1 | 2410 | | mov PC, [DISPATCH+DISPATCH_GL(tmpbuf.b)] |
2411 | | lea RA, [PC+RC] | ||
2412 | | cmp [DISPATCH+DISPATCH_GL(tmpbuf.e)], RA; jb ->fff_fallback_1 | ||
2408 | | add RB, #STR | 2413 | | add RB, #STR |
2409 | | mov TMP2, PC // Need another temp register. | ||
2410 | |.if X64 | 2414 | |.if X64 |
2411 | | mov TMP3, RC | 2415 | | mov TMP3, RC |
2412 | |.else | 2416 | |.else |
2413 | | mov ARG3, RC | 2417 | | mov ARG3, RC |
2414 | |.endif | 2418 | |.endif |
2415 | | mov PC, [DISPATCH+DISPATCH_GL(tmpbuf.buf)] | ||
2416 | | jmp >3 | 2419 | | jmp >3 |
2417 | |1: // ASCII case conversion. Yes, this is suboptimal code (do you care?). | 2420 | |1: // ASCII case conversion. Yes, this is suboptimal code (do you care?). |
2418 | | movzx RA, byte [RB+RC] | 2421 | | movzx RA, byte [RB+RC] |