This is the version of "strlen" in my XP version of MSVCRT. It does not look like compiler generated code and it is about 2 years after Agner Fog designed his StrLen algo which is in the MASM32 library.
strlen:
mov ecx, [esp+4]
test ecx, 3
jz lbl1
lbl0:
mov al, [ecx]
inc ecx
test al, al
jz lbl2
test ecx, 3
jnz lbl0
add eax, 0
lbl1:
mov eax, [ecx]
mov edx, 7EFEFEFFh
add edx, eax
xor eax, 0FFFFFFFFh
xor eax, edx
add ecx, 4
test eax, 81010100h
jz lbl1
mov eax, [ecx-4]
test al, al
jz lbl5
test ah, ah
jz lbl4
test eax, 0FF0000h
jz lbl3
test eax, 0FF000000h
jz lbl2
jmp lbl1
lbl2:
lea eax, [ecx-1]
mov ecx, [esp+4]
sub eax, ecx
ret
lbl3:
lea eax, [ecx-2]
mov ecx, [esp+4]
sub eax, ecx
ret
lbl4:
lea eax, [ecx-3]
mov ecx, [esp+4]
sub eax, ecx
ret
lbl5:
lea eax, [ecx-4]
mov ecx, [esp+4]
sub eax, ecx
ret