Page 2 of 2
Re: String
Posted: Wed Jan 10, 2018 6:13 pm
by Olliv
CELTIC88 wrote:Last edited by CELTIC88 on Wed Jan 10, 2018 7:12 am, edited 1 time in total.
wilbert wrote:Complex instructions like LODSW, STOSW and LOOP are usually slower.
CELTIC88' original code before his latest modifying :
Code: Select all
DisableDebugger
EnableASM
Procedure LODSandSTOS(d, l) ;Size 22 byte
CompilerIf #PB_Compiler_Unicode
Macro _SUA:W:EndMacro
CompilerElse
Macro _SUA:B:EndMacro
CompilerEndIf
PUSH esi edi ebx
MOV bl ,'>'
MOV ecx, [esp + 8 + 12]
MOV esi, [esp + 4 + 12]
MOV edi, [esp + 4 + 12]
!looop:
LODS#_SUA
CMP Al, '>'
JNE .__skip
XOR bl, 2
MOV Al,bl
!.__skip:
STOS#_SUA
LOOP looop
POP ebx edi esi
EndProcedure
STRr.s = ">>>>>>>>>>>>>>>xXXX<<<<"
LODSandSTOS(@STRr)
MessageRequester("", STRr)
EnableDebugger
If you had added normally your faster code, the beginners could more easily observe the speed difference between
and
and cross this with info of wilbert.

Re: String
Posted: Wed Apr 11, 2018 7:49 pm
by Michael Vogel
Short question, why is the iteration RegularSortBrakes3 slower than RegularSortBrakes2?
Code: Select all
#Tokbit='.'
Procedure.s RegularSortBrakes0(*s.Character)
Protected symbol='<'
While *s\c
If *s\c=#Tokbit
*s\c=symbol
symbol!2
EndIf
*s+SizeOf(Character)
Wend
EndProcedure
Procedure.s RegularSortBrakes1(*ptrChar.Character)
EnableASM
MOV al,62 ;>
MOV ebp,dword [p.p_ptrChar]
DEC ebp
CompilerIf #PB_Compiler_Unicode
DEC ebp
CompilerEndIf
!jump1:
CompilerIf #PB_Compiler_Unicode
INC ebp
CompilerEndIf
INC ebp
MOV bl,byte [ebp]
CMP bl,0
JZ efin1
CMP bl,#Tokbit
JNE jump1
XOr al,2
MOV byte [ebp],al
JMP jump1
!efin1:
DisableASM
EndProcedure
Procedure.s RegularSortBrakes2(*ptrChar.Character)
EnableASM
MOV al,62 ;>
MOV ebp,dword [p.p_ptrChar]
JMP jumpStart
!jumpLoop:
CompilerIf #PB_Compiler_Unicode
INC ebp
CompilerEndIf
INC ebp
!jumpStart:
MOV bl,byte [ebp]
CMP bl,0
JZ jumpExit
CMP bl,#Tokbit
JNE jumpLoop
XOr al,2
MOV byte [ebp],al
JMP jumpLoop
!jumpExit:
DisableASM
EndProcedure
Procedure.s RegularSortBrakes3(*ptrChar.Character)
EnableASM
MOV al,62 ;>
MOV ebp,dword [p.p_ptrChar]
JMP jumpStart
!jumpLoop:
CompilerIf #PB_Compiler_Unicode
INC ebp
CompilerEndIf
INC ebp
!jumpStart:
MOV bl,byte [ebp]
CMP bl,0
JZ jumpExit
CMP bl,#Tokbit
JE jumpChange
CompilerIf #PB_Compiler_Unicode
INC ebp
CompilerEndIf
INC ebp
MOV bl,byte [ebp]
CMP bl,0
JZ jumpExit
CMP bl,#Tokbit
JE jumpChange
CompilerIf #PB_Compiler_Unicode
INC ebp
CompilerEndIf
INC ebp
MOV bl,byte [ebp]
CMP bl,0
JZ jumpExit
CMP bl,#Tokbit
JNE jumpLoop
!jumpChange:
XOr al,2
MOV byte [ebp],al
JMP jumpLoop
!jumpExit:
DisableASM
EndProcedure
#Q=#DOUBLEQUOTE$
#N=100000
t.s="<"+#Q+"name"+#Q+"iiiiiii|iiiiiiii|iiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiii|iiiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiiiiiiii|iiiiiiiiiiiiiiiii|iiiiiiiii|iii|iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiiiiiiiiii|iiiiiiiiii|iiiiiiii|iiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiii|iiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|iiiiiiiiiiiii|iiiiiiiiiii|iiiiiiiiii>< S| - S><\d\d>e<\d\d>< | - ><*?><<<iiii>< *><\d*>< >>|< >|<>><<iiiiiiiiii|iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii>><*>?:=?:=?:=?:="
t+".hallo..a..b..c..d..e..f..g..h..i..j..k..l..m..n..o..p..q..r..s..t..u..v..w..x..y..z."
z+ElapsedMilliseconds()
For i=1 To #N>>10
s.s=t
Next i
z-ElapsedMilliseconds()
z<<10
For i=1 To #N
s.s=t
For j=0 To 9
RegularSortBrakes3(@s)
Next j
Next i
z+ElapsedMilliseconds()
MessageRequester(Str(z)+"ms",s)