summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfaissaloo <faissaloo@gmail.com>2016-07-25 10:43:50 +0100
committerfaissaloo <faissaloo@gmail.com>2016-07-25 10:43:50 +0100
commit2601b8ee61315a8faac65ded8950cebf168f83c2 (patch)
tree0da1310bd4d76454b9cf1d40be159654fa6c1678
parentb170a6bcb443f6e7ac045de38aef3da78be179a6 (diff)
downloaddbsh-2601b8ee61315a8faac65ded8950cebf168f83c2.tar.gz
Faster strlen
-rwxr-xr-xshbin1688 -> 1688 bytes
-rw-r--r--sh.asm18
2 files changed, 9 insertions, 9 deletions
diff --git a/sh b/sh
index 4257040..55db507 100755
--- a/sh
+++ b/sh
Binary files differ
diff --git a/sh.asm b/sh.asm
index 063bae1..ef147ac 100644
--- a/sh.asm
+++ b/sh.asm
@@ -318,15 +318,15 @@ _parse7: ; absolute path
;input: r12 (return address), r15 (buffer)
;output: r8 (length)
_strlen:
- xor r8, r8
-
-_strlen1:
- cmp byte [r8+r15], 0x0
- je _parse1
- cmp byte [r8+r15], 0xa
- je _parse1
- inc r8
- jmp _strlen1
+ mov r8, -17 ;We're always going to have to take 1 away because of the newline
+ xchg rsi, rcx ;bacup rcx, let rsi get clobbered
+ _strlen1:
+ add r8, 16
+ PcmpIstrI xmm0, [r15+r8],0
+ jnz _strlen1
+ add r8, rcx
+ xchg rsi,rcx
+ jmp _parse1
; input: rcx (a), r13 (b)
; output: rbx (string)