Page 2 of 2

Posted: Sat Oct 08, 2005 3:20 am
by jack
a small modification

Code: Select all

 Procedure.l STRLen(*pString) 
  !MOV eax, [esp] 
  
  !pxor     mm1, mm1 
  !MOV      ecx, eax 
  !MOV      edx, eax 
  !AND      ecx, -8 
  !AND      eax, 7 
  !movq     mm0, [ecx] 
  !por      mm0, [stringtbl+eax*8] 
  !@@: 
  !ADD      ecx, 8 
  !pcmpeqb  mm0, mm1 
  !packsswb mm0, mm0 
  !movd     eax, mm0 
  !movq     mm0, [ecx] 
  !TEST     eax, eax 
  !JZ       @b 
  
  !BSF      eax, eax 
  !SHR      eax, 2 
  !LEA      ecx, [ecx+eax-8] 
  !SUB      ecx, edx 
  !MOV eax, ecx 
  
  !emms 
  ProcedureReturn 
  !stringtbl:
  !dd 0, 0, 0, $FF
  !dd 0, $FFFF, 0, $FFFFFF
  !dd 0, $FFFFFFFF, $FF, $FFFFFFFF
  !dd $FFFF, $FFFFFFFF, $FFFFFF, $FFFFFFFF
 EndProcedure