und dem C-Backend inkl. Optimierung zu schreiben.
Code: Alles auswählen
CompilerIf #PB_Compiler_Backend=#PB_Backend_C
Debug "c backend"
CompilerElse
Debug "fasm backend"
CompilerEndIf
CompilerIf #PB_Compiler_Backend=#PB_Backend_Asm
Procedure.l SwapLong(Value.l)
; !MOV Eax, [p.v_Value]
; !BSWAP Eax
ProcedureReturn
EndProcedure
CompilerEndIf
Procedure SwapLong1(e.l) ; Quelle PB-Forum
ProcedureReturn (e & $ff) << 24 + (e & $ff00) << 8 + (e >> 8) & $ff00 + (e >> 24) & $ff
EndProcedure
Procedure SwapLong2(num.l) ; Quelle Fremd-Forum
ProcedureReturn ((num & $ff000000) >> 24) | ((num & $00ff0000) >> 8) | ((num & $0000ff00) << 8) | (num << 24)
EndProcedure
; ------------------------------------------------------------------------------------------------------------------
CompilerIf #PB_Compiler_Backend=#PB_Backend_Asm
Debug Hex(SwapLong($11223344), #PB_Long)
title$=" Messung: ASM-Compiler"
CompilerElse
title$=" Messung: C-Compiler"
CompilerEndIf
Debug Hex(SwapLong1($11223344), #PB_Long)
Debug Hex(SwapLong2($11223344), #PB_Long)
x.l=0
CompilerIf #PB_Compiler_Backend=#PB_Backend_Asm
StartTime.q = ElapsedMilliseconds() ; ermittelt den aktuellen Wert
For i=1 To 80000000
x=SwapLong($11223344)
Next
Text$=Text$+"ASM :" + Str(ElapsedMilliseconds() - StartTime) + " ms" + #CRLF$
Debug ElapsedMilliseconds() - StartTime ;
CompilerEndIf
StartTime = ElapsedMilliseconds() ; ermittelt den aktuellen Wert
For i=1 To 80000000
x=SwapLong1($11223344)
Next
Text$=Text$+"PB_ :" + Str(ElapsedMilliseconds() - StartTime) + " ms" + #CRLF$
Debug ElapsedMilliseconds() - StartTime ;
StartTime = ElapsedMilliseconds() ; ermittelt den aktuellen Wert
For i=1 To 80000000
x=SwapLong2($11223344)
Next
Text$=Text$+"Ext :" + Str(ElapsedMilliseconds() - StartTime) + " ms" + #CRLF$
Debug ElapsedMilliseconds() - StartTime ;
MessageRequester(title$, Text$, #PB_MessageRequester_Ok)
Debug "--------------" : Debug "Fertig."
Mach ich daraus eine C-kompilierte EXE wird leider nur "0ms" angezeigt, die Test-For-Next-Schleifen wurden wohl wegoptimiert.
Mit welchem kleinen Trick kann ich das wegoptimieren bestimmter Teile in PB am besten verhindern ? (Optimieren Aus ist keine Option ....)