aboutsummaryrefslogtreecommitdiff
path: root/src/vm_x86.dasc
diff options
context:
space:
mode:
authorMike Pall <mike>2013-02-27 21:17:27 +0100
committerMike Pall <mike>2013-02-27 21:28:28 +0100
commit116cdd7e9a578efffa5a9ca38167d059d12296d7 (patch)
treecc78e44c4b7a2175f2b16bc5f8898597a72bb228 /src/vm_x86.dasc
parent28cfcf77445e144335961a020e3e08d84cf0091f (diff)
downloadluajit-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.dasc27
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]