Windows 11 Launcher for AlderLake CPU optimize

Share your advanced PureBasic knowledge/code with the community.
User avatar
oryaaaaa
Addict
Addict
Posts: 825
Joined: Mon Jan 12, 2004 11:40 pm
Location: Okazaki, JAPAN

Windows 11 Launcher for AlderLake CPU optimize

Post by oryaaaaa »

Windows 11 Launcher for AlderLake CPU optimize

Test PC enviroment
Intel Core i7-13700 2.1GHz P-8 E-8 Cache-30MB (RapterLake)
PureBasic 6.00 LTS x64
Windows 11 x64

This code depend AlderLake CPU design.

1. Startup executable code after PureBasicStart:

Code: Select all

PureBasicStart:
NOP QWORD [Rip+2048]
NOP QWORD [Rip+2056]
NOP QWORD [Rip+2064]
NOP QWORD [Rip+2072]
NOP QWORD [Rip+2080]
NOP QWORD [Rip+2088]
NOP QWORD [Rip+2096]
NOP QWORD [Rip+2104]
NOP QWORD [Rip+2112]
NOP QWORD [Rip+2120]
NOP QWORD [Rip+2128]
NOP QWORD [Rip+2136]
NOP QWORD [Rip+2144]
NOP QWORD [Rip+2152]
NOP QWORD [Rip+2160]
NOP QWORD [Rip+2168]
NOP QWORD [Rip+2176]
NOP QWORD [Rip+2184]
NOP QWORD [Rip+2192]
NOP QWORD [Rip+2200]
NOP QWORD [Rip+2208]
NOP QWORD [Rip+2216]
NOP QWORD [Rip+2224]
NOP QWORD [Rip+2232]
NOP QWORD [Rip+2240]
NOP QWORD [Rip+2248]
NOP QWORD [Rip+2256]
NOP QWORD [Rip+2264]
NOP QWORD [Rip+2272]
NOP QWORD [Rip+2280]
NOP QWORD [Rip+2288]
NOP QWORD [Rip+2296]
NOP QWORD [Rip+2304]
NOP QWORD [Rip+2312]
NOP QWORD [Rip+2320]
NOP QWORD [Rip+2328]
NOP QWORD [Rip+2336]
NOP QWORD [Rip+2344]
NOP QWORD [Rip+2352]
NOP QWORD [Rip+2360]
NOP QWORD [Rip+2368]
NOP QWORD [Rip+2376]
NOP QWORD [Rip+2384]
NOP QWORD [Rip+2392]
NOP QWORD [Rip+2400]
NOP QWORD [Rip+2408]
NOP QWORD [Rip+2416]
NOP QWORD [Rip+2424]
NOP QWORD [Rip+2432]
NOP QWORD [Rip+2440]
NOP QWORD [Rip+2448]
NOP QWORD [Rip+2456]
NOP QWORD [Rip+2464]
NOP QWORD [Rip+2472]
NOP QWORD [Rip+2480]
NOP QWORD [Rip+2488]
NOP QWORD [Rip+2496]
NOP QWORD [Rip+2504]
NOP QWORD [Rip+2512]
NOP QWORD [Rip+2520]
NOP QWORD [Rip+2528]
NOP QWORD [Rip+2536]
NOP QWORD [Rip+2544]
NOP QWORD [Rip+2552]
NOP QWORD [Rip+2560]
NOP QWORD [Rip+2568]
NOP QWORD [Rip+2576]
NOP QWORD [Rip+2584]
NOP QWORD [Rip+2592]
NOP QWORD [Rip+2600]
NOP QWORD [Rip+2608]
NOP QWORD [Rip+2616]
NOP QWORD [Rip+2624]
NOP QWORD [Rip+2632]
NOP QWORD [Rip+2640]
NOP QWORD [Rip+2648]
NOP QWORD [Rip+2656]
NOP QWORD [Rip+2664]
NOP QWORD [Rip+2672]
NOP QWORD [Rip+2680]
NOP QWORD [Rip+2688]
NOP QWORD [Rip+2696]
NOP QWORD [Rip+2704]
NOP QWORD [Rip+2712]
NOP QWORD [Rip+2720]
NOP QWORD [Rip+2728]
NOP QWORD [Rip+2736]
NOP QWORD [Rip+2744]
NOP QWORD [Rip+2752]
NOP QWORD [Rip+2760]
NOP QWORD [Rip+2768]
NOP QWORD [Rip+2776]
NOP QWORD [Rip+2784]
NOP QWORD [Rip+2792]
NOP QWORD [Rip+2800]
NOP QWORD [Rip+2808]
NOP QWORD [Rip+2816]
NOP QWORD [Rip+2824]
NOP QWORD [Rip+2832]
NOP QWORD [Rip+2840]
NOP QWORD [Rip+2848]
NOP QWORD [Rip+2856]
NOP QWORD [Rip+2864]
NOP QWORD [Rip+2872]
NOP QWORD [Rip+2880]
NOP QWORD [Rip+2888]
NOP QWORD [Rip+2896]
NOP QWORD [Rip+2904]
NOP QWORD [Rip+2912]
NOP QWORD [Rip+2920]
NOP QWORD [Rip+2928]
NOP QWORD [Rip+2936]
NOP QWORD [Rip+2944]
NOP QWORD [Rip+2952]
NOP QWORD [Rip+2960]
NOP QWORD [Rip+2968]
NOP QWORD [Rip+2976]
NOP QWORD [Rip+2984]
NOP QWORD [Rip+2992]
NOP QWORD [Rip+3000]
NOP QWORD [Rip+3008]
NOP QWORD [Rip+3016]
NOP QWORD [Rip+3024]
NOP QWORD [Rip+3032]
NOP QWORD [Rip+3040]
NOP QWORD [Rip+3048]
NOP QWORD [Rip+3056]
NOP QWORD [Rip+3064]
NOP QWORD [Rip+3072]
NOP QWORD [Rip+3080]
NOP QWORD [Rip+3088]
NOP QWORD [Rip+3096]
NOP QWORD [Rip+3104]
NOP QWORD [Rip+3112]
NOP QWORD [Rip+3120]
NOP QWORD [Rip+3128]
NOP QWORD [Rip+3136]
NOP QWORD [Rip+3144]
NOP QWORD [Rip+3152]
NOP QWORD [Rip+3160]
NOP QWORD [Rip+3168]
NOP QWORD [Rip+3176]
NOP QWORD [Rip+3184]
NOP QWORD [Rip+3192]
NOP QWORD [Rip+3200]
NOP QWORD [Rip+3208]
NOP QWORD [Rip+3216]
NOP QWORD [Rip+3224]
NOP QWORD [Rip+3232]
NOP QWORD [Rip+3240]
NOP QWORD [Rip+3248]
NOP QWORD [Rip+3256]
NOP QWORD [Rip+3264]
NOP QWORD [Rip+3272]
NOP QWORD [Rip+3280]
NOP QWORD [Rip+3288]
NOP QWORD [Rip+3296]
NOP QWORD [Rip+3304]
NOP QWORD [Rip+3312]
NOP QWORD [Rip+3320]
NOP QWORD [Rip+3328]
NOP QWORD [Rip+3336]
NOP QWORD [Rip+3344]
NOP QWORD [Rip+3352]
NOP QWORD [Rip+3360]
NOP QWORD [Rip+3368]
NOP QWORD [Rip+3376]
NOP QWORD [Rip+3384]
NOP QWORD [Rip+3392]
NOP QWORD [Rip+3400]
NOP QWORD [Rip+3408]
NOP QWORD [Rip+3416]
NOP QWORD [Rip+3424]
NOP QWORD [Rip+3432]
NOP QWORD [Rip+3440]
NOP QWORD [Rip+3448]
NOP QWORD [Rip+3456]
NOP QWORD [Rip+3464]
NOP QWORD [Rip+3472]
NOP QWORD [Rip+3480]
NOP QWORD [Rip+3488]
NOP QWORD [Rip+3496]
NOP QWORD [Rip+3504]
NOP QWORD [Rip+3512]
NOP QWORD [Rip+3520]
NOP QWORD [Rip+3528]
NOP QWORD [Rip+3536]
NOP QWORD [Rip+3544]
NOP QWORD [Rip+3552]
NOP QWORD [Rip+3560]
NOP QWORD [Rip+3568]
NOP QWORD [Rip+3576]
NOP QWORD [Rip+3584]
NOP QWORD [Rip+3592]
NOP QWORD [Rip+3600]
NOP QWORD [Rip+3608]
NOP QWORD [Rip+3616]
NOP QWORD [Rip+3624]
NOP QWORD [Rip+3632]
NOP QWORD [Rip+3640]
NOP QWORD [Rip+3648]
NOP QWORD [Rip+3656]
NOP QWORD [Rip+3664]
NOP QWORD [Rip+3672]
NOP QWORD [Rip+3680]
NOP QWORD [Rip+3688]
NOP QWORD [Rip+3696]
NOP QWORD [Rip+3704]
NOP QWORD [Rip+3712]
NOP QWORD [Rip+3720]
NOP QWORD [Rip+3728]
NOP QWORD [Rip+3736]
NOP QWORD [Rip+3744]
NOP QWORD [Rip+3752]
NOP QWORD [Rip+3760]
NOP QWORD [Rip+3768]
NOP QWORD [Rip+3776]
NOP QWORD [Rip+3784]
NOP QWORD [Rip+3792]
NOP QWORD [Rip+3800]
NOP QWORD [Rip+3808]
NOP QWORD [Rip+3816]
NOP QWORD [Rip+3824]
NOP QWORD [Rip+3832]
NOP QWORD [Rip+3840]
NOP QWORD [Rip+3848]
NOP QWORD [Rip+3856]
NOP QWORD [Rip+3864]
NOP QWORD [Rip+3872]
NOP QWORD [Rip+3880]
NOP QWORD [Rip+3888]
NOP QWORD [Rip+3896]
NOP QWORD [Rip+3904]
NOP QWORD [Rip+3912]
NOP QWORD [Rip+3920]
NOP QWORD [Rip+3928]
NOP QWORD [Rip+3936]
NOP QWORD [Rip+3944]
NOP QWORD [Rip+3952]
NOP QWORD [Rip+3960]
NOP QWORD [Rip+3968]
NOP QWORD [Rip+3976]
NOP QWORD [Rip+3984]
NOP QWORD [Rip+3992]
NOP QWORD [Rip+4000]
NOP QWORD [Rip+4008]
NOP QWORD [Rip+4016]
NOP QWORD [Rip+4024]
NOP QWORD [Rip+4032]
NOP QWORD [Rip+4040]
NOP QWORD [Rip+4048]
NOP QWORD [Rip+4056]
NOP QWORD [Rip+4064]
NOP QWORD [Rip+4072]
NOP QWORD [Rip+4080]
NOP QWORD [Rip+4088]
; 
SUB
MOV
XOR
MOV
CALL
XOR
CALL
;
;
Import "MemoryModule.lib"
  MemoryLoadLibrary.i(MemoryPointer.i, size.i)
  MemoryGetProcAddress.i(Hmodule.i,*Function)
  MemoryFreeLibrary(HModule.i)
EndImport

DataSection
  DLL_Start:
  IncludeBinary "PureBasicProgram.dll"  
  DLL_End:
EndDataSection

Global *MemoryModule_DLL, *MemoryModule_Proc, MemoryModule_Name.s

*MemoryModule_DLL =MemoryLoadLibrary(?DLL_Start, ?DLL_End-?DLL_Start)
MemoryModule_Name = Space(256)
PokeS(@MemoryModule_Name, "Main", StringByteLength("Main", #PB_Ascii), #PB_Ascii)
*MemoryModule_Proc = MemoryGetProcAddress(*MemoryModule_DLL, @MemoryModule_Name)
CallFunctionFast(*MemoryModule_Proc)
MemoryFreeLibrary(*MemoryModule_DLL)

End
;
;
I don't released library and test soucecode for Japanese laws.


2. Set code loop program after loop label

Code: Select all

Macro InstructionCache4Loop
  !NOP QWORD [Rip+2048]
  !NOP QWORD [Rip+2056]
  !NOP QWORD [Rip+2064]
  !NOP QWORD [Rip+2072]
  !NOP QWORD [Rip+2080]
  !NOP QWORD [Rip+2088]
  !NOP QWORD [Rip+2096]
  !NOP QWORD [Rip+2104]
  !NOP QWORD [Rip+2112]
  !NOP QWORD [Rip+2120]
  !NOP QWORD [Rip+2128]
  !NOP QWORD [Rip+2136]
  !NOP QWORD [Rip+2144]
  !NOP QWORD [Rip+2152]
  !NOP QWORD [Rip+2160]
  !NOP QWORD [Rip+2168]
  !NOP QWORD [Rip+2176]
  !NOP QWORD [Rip+2184]
  !NOP QWORD [Rip+2192]
  !NOP QWORD [Rip+2200]
  !NOP QWORD [Rip+2208]
  !NOP QWORD [Rip+2216]
  !NOP QWORD [Rip+2224]
  !NOP QWORD [Rip+2232]
  !NOP QWORD [Rip+2240]
  !NOP QWORD [Rip+2248]
  !NOP QWORD [Rip+2256]
  !NOP QWORD [Rip+2264]
  !NOP QWORD [Rip+2272]
  !NOP QWORD [Rip+2280]
  !NOP QWORD [Rip+2288]
  !NOP QWORD [Rip+2296]
  !NOP QWORD [Rip+2304]
  !NOP QWORD [Rip+2312]
  !NOP QWORD [Rip+2320]
  !NOP QWORD [Rip+2328]
  !NOP QWORD [Rip+2336]
  !NOP QWORD [Rip+2344]
  !NOP QWORD [Rip+2352]
  !NOP QWORD [Rip+2360]
  !NOP QWORD [Rip+2368]
  !NOP QWORD [Rip+2376]
  !NOP QWORD [Rip+2384]
  !NOP QWORD [Rip+2392]
  !NOP QWORD [Rip+2400]
  !NOP QWORD [Rip+2408]
  !NOP QWORD [Rip+2416]
  !NOP QWORD [Rip+2424]
  !NOP QWORD [Rip+2432]
  !NOP QWORD [Rip+2440]
  !NOP QWORD [Rip+2448]
  !NOP QWORD [Rip+2456]
  !NOP QWORD [Rip+2464]
  !NOP QWORD [Rip+2472]
  !NOP QWORD [Rip+2480]
  !NOP QWORD [Rip+2488]
  !NOP QWORD [Rip+2496]
  !NOP QWORD [Rip+2504]
  !NOP QWORD [Rip+2512]
  !NOP QWORD [Rip+2520]
  !NOP QWORD [Rip+2528]
  !NOP QWORD [Rip+2536]
  !NOP QWORD [Rip+2544]
  !NOP QWORD [Rip+2552]
  !NOP QWORD [Rip+2560]
  !NOP QWORD [Rip+2568]
  !NOP QWORD [Rip+2576]
  !NOP QWORD [Rip+2584]
  !NOP QWORD [Rip+2592]
  !NOP QWORD [Rip+2600]
  !NOP QWORD [Rip+2608]
  !NOP QWORD [Rip+2616]
  !NOP QWORD [Rip+2624]
  !NOP QWORD [Rip+2632]
  !NOP QWORD [Rip+2640]
  !NOP QWORD [Rip+2648]
  !NOP QWORD [Rip+2656]
  !NOP QWORD [Rip+2664]
  !NOP QWORD [Rip+2672]
  !NOP QWORD [Rip+2680]
  !NOP QWORD [Rip+2688]
  !NOP QWORD [Rip+2696]
  !NOP QWORD [Rip+2704]
  !NOP QWORD [Rip+2712]
  !NOP QWORD [Rip+2720]
  !NOP QWORD [Rip+2728]
  !NOP QWORD [Rip+2736]
  !NOP QWORD [Rip+2744]
  !NOP QWORD [Rip+2752]
  !NOP QWORD [Rip+2760]
  !NOP QWORD [Rip+2768]
  !NOP QWORD [Rip+2776]
  !NOP QWORD [Rip+2784]
  !NOP QWORD [Rip+2792]
  !NOP QWORD [Rip+2800]
  !NOP QWORD [Rip+2808]
  !NOP QWORD [Rip+2816]
  !NOP QWORD [Rip+2824]
  !NOP QWORD [Rip+2832]
  !NOP QWORD [Rip+2840]
  !NOP QWORD [Rip+2848]
  !NOP QWORD [Rip+2856]
  !NOP QWORD [Rip+2864]
  !NOP QWORD [Rip+2872]
  !NOP QWORD [Rip+2880]
  !NOP QWORD [Rip+2888]
  !NOP QWORD [Rip+2896]
  !NOP QWORD [Rip+2904]
  !NOP QWORD [Rip+2912]
  !NOP QWORD [Rip+2920]
  !NOP QWORD [Rip+2928]
  !NOP QWORD [Rip+2936]
  !NOP QWORD [Rip+2944]
  !NOP QWORD [Rip+2952]
  !NOP QWORD [Rip+2960]
  !NOP QWORD [Rip+2968]
  !NOP QWORD [Rip+2976]
  !NOP QWORD [Rip+2984]
  !NOP QWORD [Rip+2992]
  !NOP QWORD [Rip+3000]
  !NOP QWORD [Rip+3008]
  !NOP QWORD [Rip+3016]
  !NOP QWORD [Rip+3024]
  !NOP QWORD [Rip+3032]
  !NOP QWORD [Rip+3040]
  !NOP QWORD [Rip+3048]
  !NOP QWORD [Rip+3056]
  !NOP QWORD [Rip+3064]
  !NOP QWORD [Rip+3072]
  !NOP QWORD [Rip+3080]
  !NOP QWORD [Rip+3088]
  !NOP QWORD [Rip+3096]
  !NOP QWORD [Rip+3104]
  !NOP QWORD [Rip+3112]
  !NOP QWORD [Rip+3120]
  !NOP QWORD [Rip+3128]
  !NOP QWORD [Rip+3136]
  !NOP QWORD [Rip+3144]
  !NOP QWORD [Rip+3152]
  !NOP QWORD [Rip+3160]
  !NOP QWORD [Rip+3168]
  !NOP QWORD [Rip+3176]
  !NOP QWORD [Rip+3184]
  !NOP QWORD [Rip+3192]
  !NOP QWORD [Rip+3200]
  !NOP QWORD [Rip+3208]
  !NOP QWORD [Rip+3216]
  !NOP QWORD [Rip+3224]
  !NOP QWORD [Rip+3232]
  !NOP QWORD [Rip+3240]
  !NOP QWORD [Rip+3248]
  !NOP QWORD [Rip+3256]
  !NOP QWORD [Rip+3264]
  !NOP QWORD [Rip+3272]
  !NOP QWORD [Rip+3280]
  !NOP QWORD [Rip+3288]
  !NOP QWORD [Rip+3296]
  !NOP QWORD [Rip+3304]
  !NOP QWORD [Rip+3312]
  !NOP QWORD [Rip+3320]
  !NOP QWORD [Rip+3328]
  !NOP QWORD [Rip+3336]
  !NOP QWORD [Rip+3344]
  !NOP QWORD [Rip+3352]
  !NOP QWORD [Rip+3360]
  !NOP QWORD [Rip+3368]
  !NOP QWORD [Rip+3376]
  !NOP QWORD [Rip+3384]
  !NOP QWORD [Rip+3392]
  !NOP QWORD [Rip+3400]
  !NOP QWORD [Rip+3408]
  !NOP QWORD [Rip+3416]
  !NOP QWORD [Rip+3424]
  !NOP QWORD [Rip+3432]
  !NOP QWORD [Rip+3440]
  !NOP QWORD [Rip+3448]
  !NOP QWORD [Rip+3456]
  !NOP QWORD [Rip+3464]
  !NOP QWORD [Rip+3472]
  !NOP QWORD [Rip+3480]
  !NOP QWORD [Rip+3488]
  !NOP QWORD [Rip+3496]
  !NOP QWORD [Rip+3504]
  !NOP QWORD [Rip+3512]
  !NOP QWORD [Rip+3520]
  !NOP QWORD [Rip+3528]
  !NOP QWORD [Rip+3536]
  !NOP QWORD [Rip+3544]
  !NOP QWORD [Rip+3552]
  !NOP QWORD [Rip+3560]
  !NOP QWORD [Rip+3568]
  !NOP QWORD [Rip+3576]
  !NOP QWORD [Rip+3584]
  !NOP QWORD [Rip+3592]
  !NOP QWORD [Rip+3600]
  !NOP QWORD [Rip+3608]
  !NOP QWORD [Rip+3616]
  !NOP QWORD [Rip+3624]
  !NOP QWORD [Rip+3632]
  !NOP QWORD [Rip+3640]
  !NOP QWORD [Rip+3648]
  !NOP QWORD [Rip+3656]
  !NOP QWORD [Rip+3664]
  !NOP QWORD [Rip+3672]
  !NOP QWORD [Rip+3680]
  !NOP QWORD [Rip+3688]
  !NOP QWORD [Rip+3696]
  !NOP QWORD [Rip+3704]
  !NOP QWORD [Rip+3712]
  !NOP QWORD [Rip+3720]
  !NOP QWORD [Rip+3728]
  !NOP QWORD [Rip+3736]
  !NOP QWORD [Rip+3744]
  !NOP QWORD [Rip+3752]
  !NOP QWORD [Rip+3760]
  !NOP QWORD [Rip+3768]
  !NOP QWORD [Rip+3776]
  !NOP QWORD [Rip+3784]
  !NOP QWORD [Rip+3792]
  !NOP QWORD [Rip+3800]
  !NOP QWORD [Rip+3808]
  !NOP QWORD [Rip+3816]
  !NOP QWORD [Rip+3824]
  !NOP QWORD [Rip+3832]
  !NOP QWORD [Rip+3840]
  !NOP QWORD [Rip+3848]
  !NOP QWORD [Rip+3856]
  !NOP QWORD [Rip+3864]
  !NOP QWORD [Rip+3872]
  !NOP QWORD [Rip+3880]
  !NOP QWORD [Rip+3888]
  !NOP QWORD [Rip+3896]
  !NOP QWORD [Rip+3904]
  !NOP QWORD [Rip+3912]
  !NOP QWORD [Rip+3920]
  !NOP QWORD [Rip+3928]
  !NOP QWORD [Rip+3936]
  !NOP QWORD [Rip+3944]
  !NOP QWORD [Rip+3952]
  !NOP QWORD [Rip+3960]
  !NOP QWORD [Rip+3968]
  !NOP QWORD [Rip+3976]
  !NOP QWORD [Rip+3984]
  !NOP QWORD [Rip+3992]
  !NOP QWORD [Rip+4000]
  !NOP QWORD [Rip+4008]
  !NOP QWORD [Rip+4016]
  !NOP QWORD [Rip+4024]
  !NOP QWORD [Rip+4032]
  !NOP QWORD [Rip+4040]
  !NOP QWORD [Rip+4048]
  !NOP QWORD [Rip+4056]
  !NOP QWORD [Rip+4064]
  !NOP QWORD [Rip+4072]
  !NOP QWORD [Rip+4080]
  !NOP QWORD [Rip+4088]
  ; This code is line limit 255 > QWORD [Rip+2048]
  ; 0x00000461 - 0x00000C61 = 2048 bytes
  ;Debug $C61 -$461
  ;InstructionCache4Loop
  ; 2048 / 8 = 256 + 0 = 256
EndMacro
;
;
StartDrawing(ImageOutput(#TemporaryImage))
*MemoryTarget = DrawingBuffer()
StopDrawing()

StartDrawing(ImageOutput(ImageNumber))
*MemoryOrigin = DrawingBuffer()
StopDrawing()

W = ImageWidth(ImageNumber)
H = ImageHeight(ImageNumber)

InstructionCache4Loop
For Y = 0 To H - 1
  For X = 0 To W - 1
    Target = ((H - Y - 1) + (X * H)) << 2
    Origin = (X+Y*W) <<2
    CopyMemory(*MemoryOrigin+Origin, *MemoryTarget+Target, 4)
  Next
Next
;
;
AlderLake CPU ... VERY SLOW
XOR Rax, Rax

Optimized ... FAST
MOV Rax, 0

Thank you.
Rinzwind
Enthusiast
Enthusiast
Posts: 690
Joined: Wed Mar 11, 2009 4:06 pm
Location: NL

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by Rinzwind »

No, thank you.
BarryG
Addict
Addict
Posts: 4173
Joined: Thu Apr 18, 2019 8:17 am

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by BarryG »

What trick or tip is this? What does it do?
User avatar
idle
Always Here
Always Here
Posts: 5898
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by idle »

Maybe it's like a master surgeon, he washes his hands before and after serious ops 🤔
User avatar
mk-soft
Always Here
Always Here
Posts: 6246
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by mk-soft »

Force processor cache optimisation. However, this is different for each processor. Only brings something in very special cases ...
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Bitblazer
Enthusiast
Enthusiast
Posts: 762
Joined: Mon Apr 10, 2017 6:17 pm
Location: Germany
Contact:

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by Bitblazer »

mk-soft wrote: Wed May 24, 2023 10:52 pm Force processor cache optimisation. However, this is different for each processor. Only brings something in very special cases ...
+1

You could include a code to measure the actual cpu cache size and use the results to create dynamic code for this kind of loop unrolling. That way these tricks would actually cover more than 0.0000001% of computers :D

Just an idea for improvement.
User avatar
oryaaaaa
Addict
Addict
Posts: 825
Joined: Mon Jan 12, 2004 11:40 pm
Location: Okazaki, JAPAN

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by oryaaaaa »

Bug head solutions, a music playback software R&D project, has been receiving improvement follow-up from the Military Technical Institute, and we have been collaborating with them for the purpose of investigating "jitterless limit criteria" for ultra-low noise digital output on civilian PCs. In the meantime, I am posting about a technique that was deemed acceptable for code sharing on the PureBasic forum. In this code, the two lines "Nop [rip] Nop [rip]" are repeated, but note that it is easy to get "execution ignoring clock control" under the condition that this is not set.

The purpose of this code-sharing is "game development" and experiments have PS4 consoles running faster than PS5, the main recent title being "Tower of fantasy as OBELISK". Currently only PS5 is available, but I could buy a PS4 at pre-order. Please please investigate the history of this code sharing as all games will be affected without it.

Translated with DeepL free

lab's voice:
Many PS5 titles can affect the same performance on PS4 just by using this CPU cache. The related patents "should be nationalized by the governments of each country as much as possible. This "cannot be handled by INTEL, AMD and ARM.

I am only write lab's voice.

Code: Select all

; CALL Procedure
; // CPU instruction cache tartget [Procedure]  rcx rdx r8 r9 setup
NOP QWORD [Rip]
NOP QWORD [Procedure]
NOP QWORD [Rip]
NOP QWORD [Procedure+16]
NOP QWORD [Rip]
NOP QWORD [Procedure+32]
NOP QWORD [Rip]
NOP QWORD [Procedure+48]
NOP QWORD [Rip]
NOP QWORD [Procedure+64]
NOP QWORD [Rip]
NOP QWORD [Procedure+80]
NOP QWORD [Rip]
NOP QWORD [Procedure+96]
NOP QWORD [Rip]
NOP QWORD [Procedure+112]
NOP QWORD [Rip]
NOP QWORD [Procedure+128]
NOP QWORD [Rip]
NOP QWORD [Procedure+144]
NOP QWORD [Rip]
NOP QWORD [Procedure+160]
NOP QWORD [Rip]
NOP QWORD [Procedure+176]
NOP QWORD [Rip]
NOP QWORD [Procedure+192]
NOP QWORD [Rip]
NOP QWORD [Procedure+208]
NOP QWORD [Rip]
NOP QWORD [Procedure+224]
NOP QWORD [Rip]
NOP QWORD [Procedure+240]
NOP QWORD [Rip]
NOP QWORD [Rip]
  CALL   Procedure

; EndProcedure
; // CPU instruction cache tartget [Ret] rax xmm0 setup
NOP QWORD [Rip]
NOP QWORD [Rsp]
NOP QWORD [Rip]
NOP QWORD [Rsp+16]
NOP QWORD [Rip]
NOP QWORD [Rsp+32]
NOP QWORD [Rip]
NOP QWORD [Rsp+48]
NOP QWORD [Rip]
NOP QWORD [Rsp+64]
NOP QWORD [Rip]
NOP QWORD [Rsp+80]
NOP QWORD [Rip]
NOP QWORD [Rsp+96]
NOP QWORD [Rip]
NOP QWORD [Rsp+112]
NOP QWORD [Rip]
NOP QWORD [Rsp+128]
NOP QWORD [Rip]
NOP QWORD [Rsp+144]
NOP QWORD [Rip]
NOP QWORD [Rsp+160]
NOP QWORD [Rip]
NOP QWORD [Rsp+176]
NOP QWORD [Rip]
NOP QWORD [Rsp+192]
NOP QWORD [Rip]
NOP QWORD [Rsp+208]
NOP QWORD [Rip]
NOP QWORD [Rsp+224]
NOP QWORD [Rip]
NOP QWORD [Rsp+240]
NOP QWORD [Rip]
NOP QWORD [Rip]
  RET

Code: Select all

; for PureBasic 6.02 LTS x64 Windows
Global NewList Buffer.s()
Global FileHandle.i, LineNo.i, CPU_Instruction_Cache_Flags.i
Global CPU_Instruction_Cache_CALL_STR.s

FileHandle = ReadFile(#PB_Any, "PureBasic.asm")

If FileHandle
  While Eof(FileHandle)=0
    AddElement(Buffer())
    Buffer() = ReadString(FileHandle)
  Wend
  CloseFile(FileHandle)
EndIf

Macro CPU_Instruction_Cache_CALL
  PreviousElement(Buffer())
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD ["+CPU_Instruction_Cache_CALL_STR+"]"
  For LineNo = 1 To 15
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD ["+CPU_Instruction_Cache_CALL_STR+"+"+Str(LineNo*16)+"]"
  Next
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  ; CALL FINALCORDING_CALL
  NextElement(Buffer())
EndMacro

Macro CPU_Instruction_Cache_RET
  PreviousElement(Buffer())
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rsp]"
  For LineNo = 1 To 15
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rsp+"+Str(LineNo*16)+"]"
  Next
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  ; RET
  NextElement(Buffer())
EndMacro

CPU_Instruction_Cache_Flags = 0
ForEach Buffer()
  If Left(Buffer(), 15)="PureBasicStart:"
    CPU_Instruction_Cache_Flags = 1
  ElseIf Left(Buffer(), 7)= "section"
    CPU_Instruction_Cache_Flags = 0
  ElseIf Left(Buffer(), 16)= "_PB_DataSection:"
    CPU_Instruction_Cache_Flags = 0
  EndIf
  If CPU_Instruction_Cache_Flags
    If Left(Buffer(), 6) ="  CALL" Or  Left(Buffer(), 4) ="CALL"
      CPU_Instruction_Cache_CALL_STR = StringField(RemoveString(RemoveString(Buffer(), "CALL"), " "), 1, ";")
      CPU_Instruction_Cache_CALL_STR = RemoveString(CPU_Instruction_Cache_CALL_STR, "QWORD")
      CPU_Instruction_Cache_CALL
    ElseIf Left(Buffer(), 3) ="RET" Or Left(Buffer(), 5) ="  RET"
      CPU_Instruction_Cache_RET
    EndIf
  EndIf
Next

FileHandle = CreateFile(#PB_Any, "PureBasic_Cached_Instructions.asm")
ForEach Buffer()
  WriteStringN(FileHandle, Buffer())
Next
FlushFileBuffers(FileHandle)
CloseFile(FileHandle)

I can not talk about this code shares.
My back said "OMAE WA MO SINDEIRU"
User avatar
oryaaaaa
Addict
Addict
Posts: 825
Joined: Mon Jan 12, 2004 11:40 pm
Location: Okazaki, JAPAN

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by oryaaaaa »

I'm sharing code from oryaaaaa's recent creation, "MajiorityCleanES80", after being told by "First Class Programmers" that they want me to release a build program. Ready to run and unchanged, MajiorityCleanES80 is an ultra-low noise digital output support resident software with zero-idiom optimization. Discussed primarily in the JPLAY forum "Computer audio - PINK HQ". The difficult problem with this application is that "if badly written, it will corrupt a $100,000.00 audio environment" and it always feels like "tomorrow never die".

Even if the result is considered "no operation" for the startup process part, the internal design of the CPU is structured "designed with analog circuits and calculates digital logic processing," and the digital output could be an unstable signal if the electronic bit standards of all registers are not fixed. This writing corresponds to SandyBridge SkyLake KabyLake CometLake AlderLake RapterLake. However, it is not very effective when tried on Haswell Broadwell RocketLake ATOM, as it can easily become uncontrollable. In the technical technical books, "Electronics Engineering", "Semiconductor Engineering", "Semiconductor Manufacturing Engineering", "Laser Processing Engineering", "High Frequency Radio Engineering", I have studied and made this area, and I have several years of "SCREEN System Engineer" as actual experience.

Translated with DeepL free

Code: Select all

; PureBasicForumTips_BuildExecutable.pb
; Copyright (c) 2017-2023, Hiroyuki Yokota
SetPriorityClass_(GetCurrentProcess_(),#IDLE_PRIORITY_CLASS)

#NBFILE = "ExtremeStabilizer_202308_D80b.pb" ; with Thread Safe /THREAD /XP
; #RCFILE = "MinorityClean_202104_B175f_SOAP.rc"
; ; ; #NBVER = "0.0.0.0"
; ; ; #NBVER4 = "0,0,0,0"
; ; ; #NBNAME = "High-Quality bit Stabilizer for Broadcast"
#NBEXE = "J:\ExtremeStabilizer80.exe"
; #NBEXE2 = "J:\ExtremeStabilizerNop55.exe"
#NBDIR = "ExtremeStabilizer_2023_Rev80_x64"
#NBDIR2 = "ExtremeStabilizer_2023_Rev80_x64\ExtremeStabilizer 80 x64"
; ; ; ; #NBCopyright = "Hiroyuki Yokota (oryaaaaa)"
; ; ; ; #NBMAIL = "oryaaaaa@gmail.com"
file$=OpenFileRequester("PureBasic", "*.pb", "*.pb|"+#NBFILE, 0)
dir$ = GetPathPart(file$)
dir55$ = GetPathPart(file$)
DeleteFile(dir$+"PureBasic.asm")

Select MessageRequester("CHECK", GetFilePart(file$), #PB_MessageRequester_YesNo)
  Case #PB_MessageRequester_No
    End
EndSelect

Global RandMax.i
RandMax = 999*999

Macro PureBasicStart_Before_SSE2
  AddElement(Buffer()) : Buffer() = "XORPS xmm0, xmm0"
  AddElement(Buffer()) : Buffer() = "MOVDQ2Q mm0, xmm0"
  AddElement(Buffer()) : Buffer() = "MOVDQ2Q mm1, xmm0"
  AddElement(Buffer()) : Buffer() = "MOVDQ2Q mm2, xmm0"
CUT!

IncludeFile "Macro_XOR_Rax_MOVZX_Rax.pbi"

Macro MOV_Rax_Rax_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV al, al"
  AddElement(Buffer()) : Buffer() = "MOV ah, ah"
  AddElement(Buffer()) : Buffer() = "MOV ax, ax"
  AddElement(Buffer()) : Buffer() = "MOV Rax, Rax"
  AddElement(Buffer()) : Buffer() = "MOV ax, ax"
  AddElement(Buffer()) : Buffer() = "MOV ah, ah"
  AddElement(Buffer()) : Buffer() = "MOV al, al"
EndMacro

Macro MOV_R8_R8_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV R8b, R8b"
  AddElement(Buffer()) : Buffer() = "MOV R8w, R8w"
  AddElement(Buffer()) : Buffer() = "MOV R8, R8"
  AddElement(Buffer()) : Buffer() = "MOV R8w, R8w"
  AddElement(Buffer()) : Buffer() = "MOV R8b, R8b"
EndMacro

Macro MOV_Rsp_Rsp_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV spl, spl"
  AddElement(Buffer()) : Buffer() = "MOV sp, sp"
  AddElement(Buffer()) : Buffer() = "MOV Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "MOV sp, sp"
  AddElement(Buffer()) : Buffer() = "MOV spl, spl"
EndMacro

Macro SIMPLE_MOVE_REGISTERS_Up_and_Down
  ; Limited 100ms over. after CALL PB_Delay MC177
  MOV_Rax_Rax_Up_Down
  MOV_Rdx_Rdx_Up_Down
  MOV_Rsp_Rsp_Up_Down
  MOV_Rsi_Rsi_Up_Down
  MOV_R9_R9_Up_Down
  MOV_R11_R11_Up_Down
  MOV_R13_R13_Up_Down
  MOV_R15_R15_Up_Down
  MOV_Rcx_Rcx_Up_Down
  MOV_Rbx_Rbx_Up_Down
  MOV_Rbp_Rbp_Up_Down
  MOV_Rdi_Rdi_Up_Down
  MOV_R8_R8_Up_Down
  MOV_R10_R10_Up_Down
  MOV_R12_R12_Up_Down
  MOV_R14_R14_Up_Down
EndMacro

Global NewList Buffer.s()
ClearList(Buffer())

If file$ And FileSize(file$)>0
  Compiler = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", Chr(34)+file$+Chr(34)+" /MMX /UNICODE /commented /XP /THREAD /OPTIMIZER", dir$, #PB_Program_Open | #PB_Program_Read)
  dir$+"PureBasic.asm"
  ooos.i = 0
  Output$ = "" : Output_1$ = ""
  If Compiler
    While ProgramRunning(Compiler)
      If AvailableProgramOutput(Compiler)
        If ooos>50
          If ooos%2 = 1
            Output_1$ + ReadProgramString(Compiler) + Chr(13)
          Else
            Output_1$ + ReadProgramString(Compiler) + Space(2)
          EndIf
        Else
          If ooos%2 = 1
            Output$ + ReadProgramString(Compiler) + Chr(13)
          Else
            Output$ + ReadProgramString(Compiler) + Space(2)
          EndIf
        EndIf
        ooos + 1
      EndIf
    Wend
    Output$ + Chr(13) + Chr(13)
    Output_1$ + Chr(13) + Chr(13)
    Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
    Output_1$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
    CloseProgram(Compiler) ; Close the connection to the program
  EndIf
Else
  MessageRequester("Error!", "There was an error creating the assembly code file.")
EndIf

; End  ;;; If you read PureBasic.asm file.

Delay(3000)

If ReadFile(2, dir$)
  While Eof(2)=0
    AddElement(Buffer())
    Buffer() = ReadString(2)
  Wend
  CloseFile(2)
EndIf

Global atMarkPos1.i, atMarkPos2.i
Global NewList atMarkName.s()
ForEach Buffer()
  If Left(Buffer(), 24) = "  LEA    rax,[_Procedure"
    AddElement(atMarkName())
    atMarkPos1 = FindString(Buffer(), "[") + 1
    atMarkPos2 = FindString(Buffer(), "]")
    atMarkName() = Mid(Buffer(), atMarkPos1, atMarkPos2-atMarkPos1)
    PreviousElement(Buffer())
    XOR_Rax_MOVZX_Rax
    AddElement(Buffer()) : Buffer() = "SMSW Rax"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP ["+atMarkName()+"]"
    NextElement(Buffer())
  EndIf
Next

Global NewList InstructionName.s()
Global NewList EndIfName.s()
ForEach Buffer()
  If FindString(Buffer(), "extrn ")
    AddElement(InstructionName())
    InstructionName() = RemoveString(Buffer(), "extrn ")
  EndIf
  If ListSize(InstructionName())>1
    If Left(Buffer(), 1)=";"
      Break
    EndIf
  EndIf
Next
ForEach Buffer()
  If Left(Buffer(), 10) = "_Procedure" And Right(Buffer(), 1)=":"
    AddElement(InstructionName())
    InstructionName() = RemoveString(Buffer(), ":")
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    InstructionName_NopEndIF:
    NextElement(Buffer())
    If Left(Buffer(), 6) = "_EndIf" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 6) = "_While" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 5) = "_Wend" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 2) = "No" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 2) = "Ok" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 4) = "_For" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 5) = "_Next" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 7) = "_Repeat" And Right(Buffer(), 1)=":"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 6) = "_Until" And Right(Buffer(), 1)=":"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 3) = "End" And Right(Buffer(), 1)=":"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 17) = "_EndProcedureZero" And Right(Buffer(), 1)=":"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF
    ElseIf Left(Buffer(), 13) = "_EndProcedure"
    Else
      Goto InstructionName_NopEndIF
    EndIf
    InstructionName_NopEndIF2:
    PreviousElement(Buffer())
    If Left(Buffer(), 10) = "_Procedure" And Right(Buffer(), 1)=":"
    Else
      Goto InstructionName_NopEndIF2
    EndIf
    ForEach EndIfName()
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP ["+EndIfName()+"]"
    Next
    ClearList(EndIfName())
  EndIf
Next

ForEach Buffer()
  If Left(Buffer(), 14) = "extrn PB_Delay"
    InstructionName_NopEndIF_A:
    NextElement(Buffer())
    If Left(Buffer(), 6) = "_EndIf" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 6) = "_While" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 5) = "_Wend" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 2) = "No" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 2) = "Ok" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 4) = "_For" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 5) = "_Next" And Right(Buffer(), 1)=":"
      AddElement(EndIfName()) : EndIfName() = RemoveString(Buffer(), ":")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 7) = "_Repeat" And Right(Buffer(), 1)=":"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 6) = "_Until" And Right(Buffer(), 1)=":"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 3) = "End" And Right(Buffer(), 1)=":"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Goto InstructionName_NopEndIF_A
    ElseIf Left(Buffer(), 15) = "  JMP   _PB_EOP"
    Else
      Goto InstructionName_NopEndIF_A
    EndIf
    InstructionName_NopEndIF2_A:
    PreviousElement(Buffer())
    If Left(Buffer(), 14) = "extrn PB_Delay"
    Else
      Goto InstructionName_NopEndIF2_A
    EndIf
    ForEach EndIfName()
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP ["+EndIfName()+"]"
    Next
    ClearList(EndIfName())
  EndIf
Next

Global NewList MemoryAddress.s()
Global MemoryAddress_no.i = 1
ForEach Buffer()
  If Left(Buffer(), 4) = "LEA " ; Or Left(Buffer(), 7) = "MOVNTI "
    PreviousElement(Buffer())
    AddElement(Buffer())
    Buffer() = "MemoryAddress"+Str(MemoryAddress_no)+":"
    NextElement(Buffer())
    AddElement(MemoryAddress())
    MemoryAddress() = "MemoryAddress"+Str(MemoryAddress_no)
    MemoryAddress_no + 2
  EndIf
Next

Global CodeLoop.i, ReadStr.s

ForEach Buffer()
  If FindString(Buffer(), "PureBasicStart:")
    PureBasicStart_Before_SSE2
    XOR_Rax_MOVZX_Rax
    XOR_Rdx_MOVZX_Rdx
    XOR_R8_MOVZX_R8
    XOR_Rbx_MOVZX_Rbx
    XOR_Rcx_MOVZX_Rcx
    XOR_R9_MOVZX_R9
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP [PureBasicStart]"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP [GateOfBabylon]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "JMP GateOfBabylon"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "JMP GateOfBabylon"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "JMP PureBasicStart"
    ForEach InstructionName()
      AddElement(Buffer()) : Buffer() = "FNOP"
      AddElement(Buffer()) : Buffer() = "FNOP"
      AddElement(Buffer()) : Buffer() = "JMP "+InstructionName()
    Next
    ForEach MemoryAddress()
      AddElement(Buffer()) : Buffer() = "FNOP"
      AddElement(Buffer()) : Buffer() = "FNOP"
      AddElement(Buffer()) : Buffer() = "JMP "+MemoryAddress()
    Next
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "JMP ALL_REGISTER_INC255_DEC255_PreCompileRun"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "JMP ALL_REGISTER_INC255_DEC255_End_PreCompileRun"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "JMP ALL_REGISTER_INC255_DEC255_in"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "JMP MainThread_1_Start"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "JMP MainThread_1_Start"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "FNOP"
    AddElement(Buffer()) : Buffer() = "GateOfBabylon:"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    For CodeLoop=1 To 512
      AddElement(Buffer()) : Buffer() = "FNOP"
    Next
    SIMPLE_MOVE_REGISTERS_Up_and_Down
    AddElement(Buffer()) : Buffer() = "MOVQ mm0, Rax"
    AddElement(Buffer()) : Buffer() = "MOVQ mm1, Rdx"
    AddElement(Buffer()) : Buffer() = "MOVQ mm2, Rsp"
    AddElement(Buffer()) : Buffer() = "MOVQ mm3, Rsi"
    AddElement(Buffer()) : Buffer() = "MOVQ mm4, R9"
    AddElement(Buffer()) : Buffer() = "MOVQ mm5, R11"
    AddElement(Buffer()) : Buffer() = "MOVQ mm6, R13"
    AddElement(Buffer()) : Buffer() = "MOVQ mm7, R15"
    IncludeFile "XOR_MOV_RabcdR8910_30_IncDec255_Code_addElement.txt"
    AddElement(Buffer()) : Buffer() = "XORPS xmm0, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rax, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rdx, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rsp, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rsi, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R9, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R11, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R13, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R15, xmm0"
    SIMPLE_MOVE_REGISTERS_Up_and_Down
    IncludeFile "XOR_MOV_RabcdR8910_30_IncDec255_Code_addElement.txt"
    AddElement(Buffer()) : Buffer() = "MOVQ Rax, mm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rdx, mm1"
    AddElement(Buffer()) : Buffer() = "MOVQ Rsp, mm2"
    AddElement(Buffer()) : Buffer() = "MOVQ Rsi, mm3"
    AddElement(Buffer()) : Buffer() = "MOVQ R9, mm4"
    AddElement(Buffer()) : Buffer() = "MOVQ R11, mm5"
    AddElement(Buffer()) : Buffer() = "MOVQ R13, mm6"
    AddElement(Buffer()) : Buffer() = "MOVQ R15, mm7"
    ;
    AddElement(Buffer()) : Buffer() = "MOVQ mm0, Rcx"
    AddElement(Buffer()) : Buffer() = "MOVQ mm1, Rbx"
    AddElement(Buffer()) : Buffer() = "MOVQ mm2, Rbp"
    AddElement(Buffer()) : Buffer() = "MOVQ mm3, Rdi"
    AddElement(Buffer()) : Buffer() = "MOVQ mm4, R8"
    AddElement(Buffer()) : Buffer() = "MOVQ mm5, R10"
    AddElement(Buffer()) : Buffer() = "MOVQ mm6, R12"
    AddElement(Buffer()) : Buffer() = "MOVQ mm7, R14"
    IncludeFile "XOR_MOV_RabcdR8910_30_IncDec255_Code_addElement2.txt"
    AddElement(Buffer()) : Buffer() = "XORPS xmm0, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rcx, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rbx, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rbp, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rdi, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R8, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R10, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R12, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R14, xmm0"
    SIMPLE_MOVE_REGISTERS_Up_and_Down
    IncludeFile "XOR_MOV_RabcdR8910_30_IncDec255_Code_addElement2.txt"
    AddElement(Buffer()) : Buffer() = "MOVQ Rcx, mm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rbx, mm1"
    AddElement(Buffer()) : Buffer() = "MOVQ Rbp, mm2"
    AddElement(Buffer()) : Buffer() = "MOVQ Rdi, mm3"
    AddElement(Buffer()) : Buffer() = "MOVQ R8, mm4"
    AddElement(Buffer()) : Buffer() = "MOVQ R10, mm5"
    AddElement(Buffer()) : Buffer() = "MOVQ R12, mm6"
    AddElement(Buffer()) : Buffer() = "MOVQ R14, mm7"
    AddElement(Buffer()) : Buffer() = "EMMS"
    SIMPLE_MOVE_REGISTERS_Up_and_Down
  ElseIf Left(Buffer(), 33) = "; Procedure MainThread_1(dummy.i)"
    NextElement(Buffer())
    PureBasicStart_Before_SSE2
    XOR_Rax_MOVZX_Rax
    XOR_Rdx_MOVZX_Rdx
    XOR_R8_MOVZX_R8
    XOR_Rbx_MOVZX_Rbx
    XOR_Rcx_MOVZX_Rcx
    XOR_R9_MOVZX_R9
    SIMPLE_MOVE_REGISTERS_Up_and_Down
    AddElement(Buffer()) : Buffer() = "MOVQ mm0, Rax"
    AddElement(Buffer()) : Buffer() = "MOVQ mm1, Rdx"
    AddElement(Buffer()) : Buffer() = "MOVQ mm2, Rsp"
    AddElement(Buffer()) : Buffer() = "MOVQ mm3, Rsi"
    AddElement(Buffer()) : Buffer() = "MOVQ mm4, R9"
    AddElement(Buffer()) : Buffer() = "MOVQ mm5, R11"
    AddElement(Buffer()) : Buffer() = "MOVQ mm6, R13"
    AddElement(Buffer()) : Buffer() = "MOVQ mm7, R15"
    IncludeFile "XOR_MOV_RabcdR8910_30_IncDec255_Code_addElement.txt"
    AddElement(Buffer()) : Buffer() = "XORPS xmm0, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rax, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rdx, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rsp, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rsi, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R9, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R11, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R13, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R15, xmm0"
    SIMPLE_MOVE_REGISTERS_Up_and_Down
    IncludeFile "XOR_MOV_RabcdR8910_30_IncDec255_Code_addElement.txt"
    AddElement(Buffer()) : Buffer() = "MOVQ Rax, mm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rdx, mm1"
    AddElement(Buffer()) : Buffer() = "MOVQ Rsp, mm2"
    AddElement(Buffer()) : Buffer() = "MOVQ Rsi, mm3"
    AddElement(Buffer()) : Buffer() = "MOVQ R9, mm4"
    AddElement(Buffer()) : Buffer() = "MOVQ R11, mm5"
    AddElement(Buffer()) : Buffer() = "MOVQ R13, mm6"
    AddElement(Buffer()) : Buffer() = "MOVQ R15, mm7"
    ;
    AddElement(Buffer()) : Buffer() = "MOVQ mm0, Rcx"
    AddElement(Buffer()) : Buffer() = "MOVQ mm1, Rbx"
    AddElement(Buffer()) : Buffer() = "MOVQ mm2, Rbp"
    AddElement(Buffer()) : Buffer() = "MOVQ mm3, Rdi"
    AddElement(Buffer()) : Buffer() = "MOVQ mm4, R8"
    AddElement(Buffer()) : Buffer() = "MOVQ mm5, R10"
    AddElement(Buffer()) : Buffer() = "MOVQ mm6, R12"
    AddElement(Buffer()) : Buffer() = "MOVQ mm7, R14"
    IncludeFile "XOR_MOV_RabcdR8910_30_IncDec255_Code_addElement2.txt"
    AddElement(Buffer()) : Buffer() = "XORPS xmm0, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rcx, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rbx, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rbp, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rdi, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R8, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R10, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R12, xmm0"
    AddElement(Buffer()) : Buffer() = "MOVQ R14, xmm0"
    SIMPLE_MOVE_REGISTERS_Up_and_Down
    IncludeFile "XOR_MOV_RabcdR8910_30_IncDec255_Code_addElement2.txt"
    AddElement(Buffer()) : Buffer() = "MOVQ Rcx, mm0"
    AddElement(Buffer()) : Buffer() = "MOVQ Rbx, mm1"
    AddElement(Buffer()) : Buffer() = "MOVQ Rbp, mm2"
    AddElement(Buffer()) : Buffer() = "MOVQ Rdi, mm3"
    AddElement(Buffer()) : Buffer() = "MOVQ R8, mm4"
    AddElement(Buffer()) : Buffer() = "MOVQ R10, mm5"
    AddElement(Buffer()) : Buffer() = "MOVQ R12, mm6"
    AddElement(Buffer()) : Buffer() = "MOVQ R14, mm7"
    AddElement(Buffer()) : Buffer() = "EMMS"
    SIMPLE_MOVE_REGISTERS_Up_and_Down
    Break
  EndIf
Next

Global NS_Find_1.i, NS_Find_2.i, NS_Find_3.i, NS_Find_4.i, NS_Find_5.i
Global NS_Find_B1.i, NS_Find_B2.s
ForEach Buffer()
  NS_Find_1 = FindString(Buffer(), "MOV ")
  If NS_Find_1
    NS_Find_2 = FindString(Buffer(), "[PB_")
    NS_Find_3 = FindString(Buffer(), ",")
    NS_Find_B1 = FindString(Buffer(), "]", NS_Find_2)
    NS_Find_B2 = Mid(Buffer(), NS_Find_2, NS_Find_B1-NS_Find_2+1)
    If NS_Find_2>0 And NS_Find_3>0 And NS_Find_2<NS_Find_3
      Buffer() = ReplaceString(Buffer(), "MOV", "MOVNTI")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP "+NS_Find_B2
    EndIf
  EndIf
Next


Global Sub_pos.i, Sub_max.i
ForEach Buffer()
  If FindString(Buffer(), " SUB    rsp,") And Val(StringField(Buffer(), 2, ","))>0
    Sub_pos = 0 : Sub_max =0
    Sub_max = Val(StringField(Buffer(), 2, ","))
    Buffer() = ""
    MOV_Rsp_Rsp_Up_Down
    For Sub_pos=1 To Sub_max
      AddElement(Buffer()) : Buffer() = "DEC rsp" ; Sub
    Next
    MOV_Rsp_Rsp_Up_Down
  EndIf
Next
Global Add_pos.i, Add_max.i
ForEach Buffer()
  If FindString(Buffer(), " ADD    rsp,") And Val(StringField(Buffer(), 2, ","))>0
    Add_max = 0 : Add_pos = 0
    Add_max = Val(StringField(Buffer(), 2, ","))
    Buffer() = ""
    MOV_Rsp_Rsp_Up_Down
    For Add_pos=1 To Add_max
      AddElement(Buffer()) : Buffer() = "INC rsp" ; Add
    Next
    MOV_Rsp_Rsp_Up_Down
  EndIf
Next
ForEach Buffer()
  If FindString(Buffer(), "PUSH ")
    If FindString(Buffer(), "rax")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_Rax_Rax_Up_Down
    ElseIf  FindString(Buffer(), "rbx")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_Rbp_Rbp_Up_Down
    ElseIf  FindString(Buffer(), "rcx")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_Rcx_Rcx_Up_Down
    ElseIf  FindString(Buffer(), "rdx")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_Rdx_Rdx_Up_Down
    ElseIf  FindString(Buffer(), "rsi")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_Rsi_Rsi_Up_Down
    ElseIf  FindString(Buffer(), "rbp")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_Rbp_Rbp_Up_Down
      ;     ElseIf  FindString(Buffer(), "rsp")
      ;       MOV_Rsp_Rsp_Up_Down
    ElseIf  FindString(Buffer(), "rdi")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_Rdi_Rdi_Up_Down
    ElseIf  FindString(Buffer(), "r8")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_R8_R8_Up_Down
    ElseIf  FindString(Buffer(), "r9")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_R9_R9_Up_Down
    ElseIf  FindString(Buffer(), "r10")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_R10_R10_Up_Down
    ElseIf  FindString(Buffer(), "r11")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_R11_R11_Up_Down
    ElseIf  FindString(Buffer(), "r12")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_R12_R12_Up_Down
    ElseIf  FindString(Buffer(), "r13")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_R13_R13_Up_Down
    ElseIf  FindString(Buffer(), "r14")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_R14_R14_Up_Down
    ElseIf  FindString(Buffer(), "r15")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      MOV_R15_R15_Up_Down
    Else
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
    EndIf
    NextElement(Buffer())
    MOV_Rsp_Rsp_Up_Down
  EndIf
Next
ForEach Buffer()
  If FindString(Buffer(), "POP ")
    If FindString(Buffer(), "rax")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_Rax_Rax_Up_Down
    ElseIf  FindString(Buffer(), "rbx")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_Rbp_Rbp_Up_Down
    ElseIf  FindString(Buffer(), "rcx")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_Rcx_Rcx_Up_Down
    ElseIf  FindString(Buffer(), "rdx")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_Rdx_Rdx_Up_Down
    ElseIf  FindString(Buffer(), "rsi")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_Rsi_Rsi_Up_Down
    ElseIf  FindString(Buffer(), "rbp")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_Rbp_Rbp_Up_Down
      ;     ElseIf  FindString(Buffer(), "rsp")
      ;       MOV_Rsp_Rsp_Up_Down
    ElseIf  FindString(Buffer(), "rdi")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_Rdi_Rdi_Up_Down
    ElseIf  FindString(Buffer(), "r8")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_R8_R8_Up_Down
    ElseIf  FindString(Buffer(), "r9")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_R9_R9_Up_Down
    ElseIf  FindString(Buffer(), "r10")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_R10_R10_Up_Down
    ElseIf  FindString(Buffer(), "r11")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_R11_R11_Up_Down
    ElseIf  FindString(Buffer(), "r12")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_R12_R12_Up_Down
    ElseIf  FindString(Buffer(), "r13")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_R13_R13_Up_Down
    ElseIf  FindString(Buffer(), "r14")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_R14_R14_Up_Down
    ElseIf  FindString(Buffer(), "r15")
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      MOV_R15_R15_Up_Down
    Else
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
    EndIf
    MOV_Rsp_Rsp_Up_Down
  EndIf
Next

;// ES30 Start
ForEach Buffer()
  If FindString(Buffer(), "PUSH ")
    PreviousElement(Buffer())
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    NextElement(Buffer())
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
  EndIf
Next
ForEach Buffer()
  If FindString(Buffer(), "POP ")
    PreviousElement(Buffer())
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    NextElement(Buffer())
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
  EndIf
Next
;// ES30 End

ForEach Buffer()
  NS_Find_1 = FindString(Buffer(), "MOV ")
  If NS_Find_1
    NS_Find_2 = FindString(Buffer(), "[")
    NS_Find_3 = FindString(Buffer(), ",")
    NS_Find_5 = FindString(LCase(Buffer()), "qword")
    NS_Find_B1 = FindString(Buffer(), "]", NS_Find_2)
    NS_Find_B2 = Mid(Buffer(), NS_Find_2, NS_Find_B1-NS_Find_2+1)
    If Not NS_Find_5
      NS_Find_5 = FindString(LCase(Buffer()), "dword")
    EndIf
    NS_Find_4 = FindString(LCase(Buffer()), "a", NS_Find_3)
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "b", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "c", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "d", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "p", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "i", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "r8", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "r9", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "r10", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "r11", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "r12", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "r13", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "r14", NS_Find_3)
    EndIf
    If Not NS_Find_4
      NS_Find_4 = FindString(LCase(Buffer()), "r15", NS_Find_3)
    EndIf
    If NS_Find_2>0 And NS_Find_3>0 And NS_Find_2<NS_Find_3 And NS_Find_5>0 And NS_Find_4>0
      PreviousElement(Buffer())
      MOV_Rsp_Rsp_Up_Down
      NextElement(Buffer())
      Buffer() = ReplaceString(Buffer(), "MOV", "MOVNTI")
      AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP "+NS_Find_B2
    EndIf
  EndIf
Next

ForEach Buffer()
  If Left(Buffer(),14) ="  MOV    rax,1" And Right(Buffer(), 2) = ",1"
    DeleteElement(Buffer())
    XOR_Rax_MOVZX_Rax
    AddElement(Buffer()) : Buffer() = "INC al"
    AddElement(Buffer()) : Buffer() = "MOVZX ax, al"
    AddElement(Buffer()) : Buffer() = "MOVZX Rax, al"
    AddElement(Buffer()) : Buffer() = "MOVZX ax, al"
  EndIf
Next

ForEach Buffer()
  If Left(Buffer(),40) ="  ADD    qword [PB_StringBasePosition],2"
    DeleteElement(Buffer())
    XOR_R8_MOVZX_R8
    AddElement(Buffer()) : Buffer() = "INC R8b"
    AddElement(Buffer()) : Buffer() = "INC R8b"
    AddElement(Buffer()) : Buffer() = "MOVZX R8w, R8b"
    AddElement(Buffer()) : Buffer() = "MOVZX R8, R8b"
    AddElement(Buffer()) : Buffer() = "MOVZX R8w, R8b"
    AddElement(Buffer()) : Buffer() = "  ADD    qword [PB_StringBasePosition],R8"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP [PB_StringBasePosition]"
  EndIf
Next

; Start Bug head 12.08
;   If Left(Buffer(),13) ="AddXCHG512_S_"
; End Bug head 12.08

; Start Bug head 12.08
;   If Left(Buffer(),14) ="AddXCHG8192_S_"
; End Bug head 12.08

Macro XCHG_Rax_Rsp_FINALCORDING_CALL
  PreviousElement(Buffer())
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD ["+FINALCORDING_CALL+"]"
  For LineNo = 1 To 15
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD ["+FINALCORDING_CALL+"+"+Str(LineNo*16)+"]"
  Next
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  ; CALL FINALCORDING_CALL
  NextElement(Buffer())
EndMacro

Macro XCHG_Rax_Rsp_FINALCORDING_Jump
  PreviousElement(Buffer())
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD ["+FINALCORDING_CALL+"]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  ; JMP FINALCORDING_CALL
  NextElement(Buffer())
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
 EndMacro

Macro XCHG_Rax_Rsp_FINALCORDING_RET
  PreviousElement(Buffer())
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rsp]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rsp+16]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rsp+32]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rsp+48]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rsp+64]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
  ; RET
  NextElement(Buffer())
  AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
EndMacro

Global FINALCORDING_CALL.s
Global FINALCORDING_Skip.i, CodeLoopRET.i
;*** FINAL CORDING ONLY MinorityClean 36 2020/07/10 23:25

ForEach Buffer()
  If Right(Buffer(), 34) ="rcx,qword [v_MT_Thread_MainThread]"
    Buffer() = "XORPS xmm0, xmm0"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "MOVDQ2Q mm0, xmm0"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP [v_MT_Thread_MainThread]"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "MOVQ mm0, [v_MT_Thread_MainThread]"
    XOR_Rcx_MOVZX_Rcx
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "MOVQ Rcx, mm0"
    MOV_Rcx_Rcx_Up_Down
    AddElement(Buffer()) : Buffer() = "EMMS"
    NextElement(Buffer())
  EndIf
Next

ForEach Buffer()
  If Left(Buffer(), 6) ="XORPS "
    PreviousElement(Buffer())
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
    AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    AddElement(Buffer()) : Buffer() = "NOP [Rip]"
    NextElement(Buffer())
  EndIf
Next

;;// ES45 ES48
Global LEA_String.s
ForEach Buffer()
  If FindString(Buffer(), "LEA ")
    If FindString(Buffer(), "!LEA ")=0
      LEA_String = RemoveString(Buffer(), " ")
      LEA_String = RemoveString(LEA_String, "LEA")
      LEA_String = StringField(LEA_String, 1, ",")
      PreviousElement(Buffer())
      If FindString(Buffer(), "RDRAND ")
        Buffer() = ReplaceString(Buffer(), "RDRAND ", "SMSW ")
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
        NextElement(Buffer())
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      ElseIf FindString(Buffer(), "SMSW ")
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
        NextElement(Buffer())
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      Else
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
        AddElement(Buffer()) : Buffer() = "SMSW "+LEA_String
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
        NextElement(Buffer())
        AddElement(Buffer()) : Buffer() = "NOP [Rip]"
      EndIf
    EndIf
  EndIf
Next
;;// ES45 ES48 End

;;// ES 42 ALLSET QWORD [v_a] [p_b]
ForEach Buffer()
  If FindString(Buffer(),"[")>0
    If FindString(UCase(Buffer()), "QWORD")=0
      If FindString(UCase(Buffer()), "DWORD")>0
        ; skip
      ElseIf FindString(UCase(Buffer()), "MOVNTI ")>0
        If FindString(Buffer(), "Eax", FindString(Buffer(), ","))
        ElseIf FindString(Buffer(), "Ebx", FindString(Buffer(), ","))
        ElseIf FindString(Buffer(), "Ecx", FindString(Buffer(), ","))
        ElseIf FindString(Buffer(), "Edx", FindString(Buffer(), ","))
        ElseIf FindString(Buffer(), "R8d", FindString(Buffer(), ","))
        ElseIf FindString(Buffer(), "R9d", FindString(Buffer(), ","))
        Else
          Buffer() = ReplaceString(Buffer(), "[", " QWORD [", #PB_String_NoCase)
        EndIf
      ElseIf FindString(UCase(Buffer()), "BYTE")>0
        ; skip
      ElseIf FindString(UCase(Buffer()), "WORD")>0
        ; skip
      Else
        If FindString(UCase(Buffer()), "MOVSS ")>0
          ; skip
        Else
          Buffer() = ReplaceString(Buffer(), "[", " QWORD [", #PB_String_NoCase)          
        EndIf
      EndIf
    EndIf
  EndIf
Next
;// ES42 End

;// ES53 : NOP [Rip] / Line set
Output_1$ + Chr(13) + Chr(13) + "//EXTREME//" + Chr(13) + Chr(13)
Global ES49Flags.i, ES53Inst.s, ES53buf.s, LineNo.i
ES49Flags = 0
ForEach Buffer()
  If Left(Buffer(), 15)="PureBasicStart:"
    ES49Flags = 1
  ElseIf Left(Buffer(), 7)= "section"
    ES49Flags = 0
  ElseIf Left(Buffer(), 16)= "_PB_DataSection:"
    ES49Flags = 0
  EndIf
  If ES49Flags
    If FindString(Buffer(), "NOP") And Left(Buffer(), 1)<>";"
        DeleteElement(Buffer())
    EndIf
  EndIf
Next
;///
ES49Flags = 0
ForEach Buffer()
  If Left(Buffer(), 15)="PureBasicStart:"
    ES49Flags = 1
  ElseIf Left(Buffer(), 7)= "section"
    ES49Flags = 0
  ElseIf Left(Buffer(), 16)= "_PB_DataSection:"
    ES49Flags = 0
  EndIf
  If ES49Flags
    ES53buf = Buffer()
    If FindString(ES53buf, "NOP")=0 And Left(ES53buf, 1)<>";"
      If FindString(ES53buf, "[")
        ES53Inst = Mid(ES53buf, FindString(ES53buf, "[") ,  FindString(ES53buf, "]") - FindString(ES53buf, "[") + 1 )
        PreviousElement(Buffer())
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+24]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD "+ES53Inst
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        NextElement(Buffer())
      ElseIf Right(RemoveString(ES53buf, " "), 1)=":"
        ; skip
      Else
        PreviousElement(Buffer())
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        NextElement(Buffer())
      EndIf
    EndIf
    If Left(Buffer(), 6) ="  CALL"
      FINALCORDING_CALL = StringField(RemoveString(RemoveString(Buffer(), "CALL"), " "), 1, ";")
      FINALCORDING_CALL = RemoveString(FINALCORDING_CALL, "QWORD")
      XCHG_Rax_Rsp_FINALCORDING_CALL
    ElseIf Left(Buffer(), 4) ="CALL"
      FINALCORDING_CALL = StringField(RemoveString(RemoveString(Buffer(), "CALL"), " "), 1, ";")
      FINALCORDING_CALL = RemoveString(FINALCORDING_CALL, "QWORD")
      XCHG_Rax_Rsp_FINALCORDING_CALL
      ;
    ElseIf Left(Buffer(), 3) ="  J"
      FINALCORDING_CALL = RemoveString(Left(Buffer(), 5), " ")
      FINALCORDING_CALL = StringField(RemoveString(RemoveString(Buffer(), FINALCORDING_CALL), " "), 1, ";")
      FINALCORDING_CALL = RemoveString(FINALCORDING_CALL, "QWORD")
      XCHG_Rax_Rsp_FINALCORDING_Jump
    ElseIf Left(Buffer(), 1) ="J"
      FINALCORDING_CALL = RemoveString(Left(Buffer(), 3), " ")
      FINALCORDING_CALL = StringField(RemoveString(RemoveString(Buffer(), FINALCORDING_CALL), " "), 1, ";")
      FINALCORDING_CALL = RemoveString(FINALCORDING_CALL, "QWORD")
      XCHG_Rax_Rsp_FINALCORDING_Jump
      ;
    ElseIf Left(Buffer(), 3) ="RET"
      XCHG_Rax_Rsp_FINALCORDING_RET
    ElseIf Left(Buffer(), 5) ="  RET"
      XCHG_Rax_Rsp_FINALCORDING_RET
    EndIf
  EndIf
Next
;// ES53 End : NOP [Rip] / Line set

;;// ES 40 "Russian programmer You should DWORD to QWORD"
ForEach Buffer()
  If FindString(UCase(Buffer()), "JMP")>0 And FindString(UCase(Buffer()), "QWORD")=0
    Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
  ElseIf FindString(UCase(Buffer()), "JE")>0 And FindString(UCase(Buffer()), "QWORD")=0
    Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
  ElseIf FindString(UCase(Buffer()), "JZ")>0 And FindString(UCase(Buffer()), "QWORD")=0
    Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
  ElseIf FindString(UCase(Buffer()), "JNE")>0 And FindString(UCase(Buffer()), "QWORD")=0
    Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
  ElseIf FindString(UCase(Buffer()), "JNZ")>0 And FindString(UCase(Buffer()), "QWORD")=0
    Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
  EndIf
Next
;// ES40 End

;;// ES 39 "Russian programmer You should DWORD to QWORD"
ForEach Buffer()
  If FindString(UCase(Buffer()), "CALL ")>0
    If FindString(UCase(Buffer()), "QWORD")=0
      Buffer() = ReplaceString(Buffer(), "CALL ", "CALL QWORD ", #PB_String_NoCase)
    EndIf
  EndIf
Next
;// ES39 End

Global ES53flags.i
ForEach Buffer()
  If FindString(UCase(RemoveString(Buffer(), " ")), "NOPQWORD[RIP]")
    ES53flags + 1
  Else
    ES53flags = 0
  EndIf
  If ES53flags = 2
    DeleteElement(Buffer())
    ES53flags = 1
  EndIf
Next

fileno = CreateFile(#PB_Any, dir$)
ForEach Buffer()
  WriteStringN(fileno, Buffer())
Next
FlushFileBuffers(fileno)
CloseFile(fileno)

; dir2$ = dir$
file$ = dir$
dir$ = GetPathPart(file$)

Delay(5000)
Global RandMax_Str.s
RandMax_Str.s = Chr(Month(Date())+Random(78, 65))+Chr(Month(Date())+Random(78, 65))+Chr(Month(Date())+Random(78, 65))

Compiler = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", Chr(34)+file$+Chr(34)+" /MMX /UNICODE /THREAD /XP /REASM /OPTIMIZER /ICON "+Chr(34)+"NR5_ES.ico"+Chr(34)+" /OUTPUT "+Chr(34)+#NBEXE+RandMax_Str+Chr(34), dir$, #PB_Program_Open | #PB_Program_Read)
If Compiler
  While ProgramRunning(Compiler)
    If AvailableProgramOutput(Compiler)
      Output2$ + ReadProgramString(Compiler) + Chr(13)
    EndIf
  Wend
  Output2$ + Chr(13) + Chr(13)
  Output2$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
  CloseProgram(Compiler) ; Close the connection to the program
EndIf

CreateDirectory(GetUserDirectory(#PB_Directory_Documents)+#NBDIR)
CreateDirectory(GetUserDirectory(#PB_Directory_Documents)+#NBDIR2)
RenameFile(#NBEXE+RandMax_Str, GetUserDirectory(#PB_Directory_Documents)+#NBDIR2+"\"+GetFilePart(#NBEXE+RandMax_Str))
RenameFile(file$, dir$+"ExtremeStabilizer_"+FormatDate("%yyyy_%mm%dd_%hh%ii_", Date())+GetFilePart(file$))

MessageRequester("Output", Output$)
MessageRequester("Output2", Output_1$)
MessageRequester("Output", Output2$)
; MessageRequester("Output", Output3$)

End
User avatar
oryaaaaa
Addict
Addict
Posts: 825
Joined: Mon Jan 12, 2004 11:40 pm
Location: Okazaki, JAPAN

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by oryaaaaa »

ASIO transfer processing or a method that can be limited to repeated processing to achieve high-speed processing. Initially, the process is slow because it is not cached, but if it becomes a repetitive process, it becomes a high-speed process. However, if the instruction cache area (Rsp+48 or Rsp-48) is expanded, "the effect of digital jitter noise" has been confirmed, and the reliability of processing is compromised.

Translated with DeepL Translator (free version)

Code: Select all

;
; [Rsp-48]:
: Setup Rcx Rdx R8 R9 xmm0
; CALL this part
; [Rsp]:
; Return Rax xmm0
; [Rsp+48]:
;
NOP QWORD [Rip]
NOP QWORD [Rsp-48]
NOP QWORD [Rip]
NOP QWORD [Rsp-32]
NOP QWORD [Rip]
NOP QWORD [Rsp-16]
NOP QWORD [Rip]
NOP QWORD [Rsp]
NOP QWORD [Rip]
NOP QWORD [Rsp+16]
NOP QWORD [Rip]
NOP QWORD [Rsp+32]
NOP QWORD [Rip]
NOP QWORD [Rsp+48]
NOP QWORD [Rip]
NOP QWORD [Rip]
RET
NOP QWORD [Rip]
These are being researched and developed by "myself alone, and programming is done by me alone".
Bug head Nontallion Aiming for accurate sound
Bug head Elementary Restore accurate sound
Bug head Elegant Recovers pre-recorded sound waves
Bug head Resampler Experimental use of arithmetic processing
Sisters Elementary Applies industry opinion
Sisters Resampler Applies industry opinion
MajiorityCleanES Eliminate noise from PCs
Rewrite data PCIE-SSD Improve write quality
Bug head Radio EDM radio playback for foreign countries
Art photo Print High quality photo printing, for photo exhibition
Art photo Viewer High quality illustration photo viewer
Saoriesky Accurate sound restoration and recording (plan)
https://www.mics.ne.jp/~halt-and-halt/

Countries with the highest number of users
Japan, Russia, China, Korea, Taiwan, Germany, Italy and United State.

Thank you.
User avatar
oryaaaaa
Addict
Addict
Posts: 825
Joined: Mon Jan 12, 2004 11:40 pm
Location: Okazaki, JAPAN

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by oryaaaaa »

I think New technique for AlderLake CPU instructions cache.
F:\test>"C:\Program Files\PureBasic\Compilers\pbcompiler.exe" /COMMENTED Gadget.pb
PureBasic 6.02 LTS (Windows - x64)
Compiling Gadget.pb
Loading external libraries...
Starting compilation...
119 lines processed.
Creating and launching executable.

- Feel the ..PuRe.. Power -

F:\test>AfterWaitWindowEvent.exe
"AfterWaitWindowEvent.exe"

Code: Select all

Global NewList Buffer.s()
Global NewList InstructionName.s()
Global String_SetClipboardText.s

If ReadFile(2, "PureBasic.asm")
  While Eof(2)=0
    AddElement(Buffer())
    Buffer() = ReadString(2)
  Wend
  CloseFile(2)
EndIf

ClearList(InstructionName())
ForEach Buffer()
  If FindString(Buffer(), "extrn ")
    AddElement(InstructionName())
    InstructionName() = RemoveString(Buffer(), "extrn ")
  EndIf
  If ListSize(InstructionName())>1
    If Left(Buffer(), 1)=";"
      Break
    EndIf
  EndIf
Next
ForEach Buffer()
  If Left(Buffer(), 10) = "_Procedure" And Right(Buffer(), 1)=":"
    AddElement(InstructionName())
    InstructionName() = RemoveString(Buffer(), ":")
  EndIf
Next  

ClearList(Buffer())
AddElement(Buffer()) : Buffer() = "Macro AfterWaitWindowEvent"
ForEach InstructionName()
  AddElement(Buffer()) : Buffer() = " !NOP QWORD ["+InstructionName()+"]"
  AddElement(Buffer()) : Buffer() = " !NOP QWORD ["+InstructionName()+"+8]"
  AddElement(Buffer()) : Buffer() = " !NOP QWORD ["+InstructionName()+"+16]"
Next
AddElement(Buffer()) : Buffer() = " !NOP QWORD [Rip]"
AddElement(Buffer()) : Buffer() = " !NOP QWORD [Rip]"
AddElement(Buffer()) : Buffer() = "EndMacro"

ForEach Buffer()
  String_SetClipboardText + Buffer() + Chr(13) + Chr(10)
Next

SetClipboardText(String_SetClipboardText)

End
Copy and paste for Gadget.pb

Code: Select all

;
; ------------------------------------------------------------
;
;   PureBasic - Gadget example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

Macro AfterWaitWindowEvent
 !NOP QWORD [PB_AddGadgetItem]
 !NOP QWORD [PB_AddGadgetItem+8]
 !NOP QWORD [PB_AddGadgetItem+16]
 !NOP QWORD [PB_ButtonGadget]
 !NOP QWORD [PB_ButtonGadget+8]
 !NOP QWORD [PB_ButtonGadget+16]
 !NOP QWORD [PB_CheckBoxGadget]
 !NOP QWORD [PB_CheckBoxGadget+8]
 !NOP QWORD [PB_CheckBoxGadget+16]
 !NOP QWORD [PB_CloseGadgetList]
 !NOP QWORD [PB_CloseGadgetList+8]
 !NOP QWORD [PB_CloseGadgetList+16]
 !NOP QWORD [PB_ComboBoxGadget]
 !NOP QWORD [PB_ComboBoxGadget+8]
 !NOP QWORD [PB_ComboBoxGadget+16]
 !NOP QWORD [PB_DisableGadget]
 !NOP QWORD [PB_DisableGadget+8]
 !NOP QWORD [PB_DisableGadget+16]
 !NOP QWORD [PB_EndAlphaImage]
 !NOP QWORD [PB_EndAlphaImage+8]
 !NOP QWORD [PB_EndAlphaImage+16]
 !NOP QWORD [PB_EndVectorDrawing]
 !NOP QWORD [PB_EndVectorDrawing+8]
 !NOP QWORD [PB_EndVectorDrawing+16]
 !NOP QWORD [PB_Event_Free]
 !NOP QWORD [PB_Event_Free+8]
 !NOP QWORD [PB_Event_Free+16]
 !NOP QWORD [PB_Event_Init]
 !NOP QWORD [PB_Event_Init+8]
 !NOP QWORD [PB_Event_Init+16]
 !NOP QWORD [PB_EventGadget]
 !NOP QWORD [PB_EventGadget+8]
 !NOP QWORD [PB_EventGadget+16]
 !NOP QWORD [PB_EventType]
 !NOP QWORD [PB_EventType+8]
 !NOP QWORD [PB_EventType+16]
 !NOP QWORD [PB_FrameGadget]
 !NOP QWORD [PB_FrameGadget+8]
 !NOP QWORD [PB_FrameGadget+16]
 !NOP QWORD [PB_FreeDesktops]
 !NOP QWORD [PB_FreeDesktops+8]
 !NOP QWORD [PB_FreeDesktops+16]
 !NOP QWORD [PB_FreeFileSystem]
 !NOP QWORD [PB_FreeFileSystem+8]
 !NOP QWORD [PB_FreeFileSystem+16]
 !NOP QWORD [PB_FreeFonts]
 !NOP QWORD [PB_FreeFonts+8]
 !NOP QWORD [PB_FreeFonts+16]
 !NOP QWORD [PB_FreeGadgets]
 !NOP QWORD [PB_FreeGadgets+8]
 !NOP QWORD [PB_FreeGadgets+16]
 !NOP QWORD [PB_FreeImages]
 !NOP QWORD [PB_FreeImages+8]
 !NOP QWORD [PB_FreeImages+16]
 !NOP QWORD [PB_FreeMemorys]
 !NOP QWORD [PB_FreeMemorys+8]
 !NOP QWORD [PB_FreeMemorys+16]
 !NOP QWORD [PB_FreeObjects]
 !NOP QWORD [PB_FreeObjects+8]
 !NOP QWORD [PB_FreeObjects+16]
 !NOP QWORD [PB_FreeWindows]
 !NOP QWORD [PB_FreeWindows+8]
 !NOP QWORD [PB_FreeWindows+16]
 !NOP QWORD [PB_GadgetToolTip]
 !NOP QWORD [PB_GadgetToolTip+8]
 !NOP QWORD [PB_GadgetToolTip+16]
 !NOP QWORD [PB_GetGadgetState]
 !NOP QWORD [PB_GetGadgetState+8]
 !NOP QWORD [PB_GetGadgetState+16]
 !NOP QWORD [PB_GetGadgetText]
 !NOP QWORD [PB_GetGadgetText+8]
 !NOP QWORD [PB_GetGadgetText+16]
 !NOP QWORD [PB_Init2DDrawing]
 !NOP QWORD [PB_Init2DDrawing+8]
 !NOP QWORD [PB_Init2DDrawing+16]
 !NOP QWORD [PB_InitAlphaImage]
 !NOP QWORD [PB_InitAlphaImage+8]
 !NOP QWORD [PB_InitAlphaImage+16]
 !NOP QWORD [PB_InitBMPImagePlugin]
 !NOP QWORD [PB_InitBMPImagePlugin+8]
 !NOP QWORD [PB_InitBMPImagePlugin+16]
 !NOP QWORD [PB_InitDesktop]
 !NOP QWORD [PB_InitDesktop+8]
 !NOP QWORD [PB_InitDesktop+16]
 !NOP QWORD [PB_InitFont]
 !NOP QWORD [PB_InitFont+8]
 !NOP QWORD [PB_InitFont+16]
 !NOP QWORD [PB_InitGadget]
 !NOP QWORD [PB_InitGadget+8]
 !NOP QWORD [PB_InitGadget+16]
 !NOP QWORD [PB_InitImage]
 !NOP QWORD [PB_InitImage+8]
 !NOP QWORD [PB_InitImage+16]
 !NOP QWORD [PB_InitImageDecoder]
 !NOP QWORD [PB_InitImageDecoder+8]
 !NOP QWORD [PB_InitImageDecoder+16]
 !NOP QWORD [PB_InitList]
 !NOP QWORD [PB_InitList+8]
 !NOP QWORD [PB_InitList+16]
 !NOP QWORD [PB_InitMap]
 !NOP QWORD [PB_InitMap+8]
 !NOP QWORD [PB_InitMap+16]
 !NOP QWORD [PB_InitMemory]
 !NOP QWORD [PB_InitMemory+8]
 !NOP QWORD [PB_InitMemory+16]
 !NOP QWORD [PB_InitRequester]
 !NOP QWORD [PB_InitRequester+8]
 !NOP QWORD [PB_InitRequester+16]
 !NOP QWORD [PB_InitVectorDrawing]
 !NOP QWORD [PB_InitVectorDrawing+8]
 !NOP QWORD [PB_InitVectorDrawing+16]
 !NOP QWORD [PB_InitWindow]
 !NOP QWORD [PB_InitWindow+8]
 !NOP QWORD [PB_InitWindow+16]
 !NOP QWORD [PB_ListViewGadget]
 !NOP QWORD [PB_ListViewGadget+8]
 !NOP QWORD [PB_ListViewGadget+16]
 !NOP QWORD [PB_MessageRequester2]
 !NOP QWORD [PB_MessageRequester2+8]
 !NOP QWORD [PB_MessageRequester2+16]
 !NOP QWORD [PB_OpenWindow2]
 !NOP QWORD [PB_OpenWindow2+8]
 !NOP QWORD [PB_OpenWindow2+16]
 !NOP QWORD [PB_OptionGadget]
 !NOP QWORD [PB_OptionGadget+8]
 !NOP QWORD [PB_OptionGadget+16]
 !NOP QWORD [PB_PanelGadget]
 !NOP QWORD [PB_PanelGadget+8]
 !NOP QWORD [PB_PanelGadget+16]
 !NOP QWORD [PB_RemoveGadgetItem]
 !NOP QWORD [PB_RemoveGadgetItem+8]
 !NOP QWORD [PB_RemoveGadgetItem+16]
 !NOP QWORD [PB_SetGadgetState]
 !NOP QWORD [PB_SetGadgetState+8]
 !NOP QWORD [PB_SetGadgetState+16]
 !NOP QWORD [PB_SetGadgetText]
 !NOP QWORD [PB_SetGadgetText+8]
 !NOP QWORD [PB_SetGadgetText+16]
 !NOP QWORD [PB_Str]
 !NOP QWORD [PB_Str+8]
 !NOP QWORD [PB_Str+16]
 !NOP QWORD [PB_StringGadget]
 !NOP QWORD [PB_StringGadget+8]
 !NOP QWORD [PB_StringGadget+16]
 !NOP QWORD [PB_TextGadget]
 !NOP QWORD [PB_TextGadget+8]
 !NOP QWORD [PB_TextGadget+16]
 !NOP QWORD [PB_TrackBarGadget]
 !NOP QWORD [PB_TrackBarGadget+8]
 !NOP QWORD [PB_TrackBarGadget+16]
 !NOP QWORD [PB_WaitWindowEvent]
 !NOP QWORD [PB_WaitWindowEvent+8]
 !NOP QWORD [PB_WaitWindowEvent+16]
 !NOP QWORD [ExitProcess]
 !NOP QWORD [ExitProcess+8]
 !NOP QWORD [ExitProcess+16]
 !NOP QWORD [GetModuleHandleW]
 !NOP QWORD [GetModuleHandleW+8]
 !NOP QWORD [GetModuleHandleW+16]
 !NOP QWORD [HeapCreate]
 !NOP QWORD [HeapCreate+8]
 !NOP QWORD [HeapCreate+16]
 !NOP QWORD [HeapDestroy]
 !NOP QWORD [HeapDestroy+8]
 !NOP QWORD [HeapDestroy+16]
 !NOP QWORD [memset]
 !NOP QWORD [memset+8]
 !NOP QWORD [memset+16]
 !NOP QWORD [SYS_CopyString]
 !NOP QWORD [SYS_CopyString+8]
 !NOP QWORD [SYS_CopyString+16]
 !NOP QWORD [SYS_AllocateString4]
 !NOP QWORD [SYS_AllocateString4+8]
 !NOP QWORD [SYS_AllocateString4+16]
 !NOP QWORD [PB_StringBase]
 !NOP QWORD [PB_StringBase+8]
 !NOP QWORD [PB_StringBase+16]
 !NOP QWORD [SYS_InitString]
 !NOP QWORD [SYS_InitString+8]
 !NOP QWORD [SYS_InitString+16]
 !NOP QWORD [SYS_FreeStrings]
 !NOP QWORD [SYS_FreeStrings+8]
 !NOP QWORD [SYS_FreeStrings+16]
 !NOP QWORD [Rip]
 !NOP QWORD [Rip]
EndMacro

#WindowWidth  = 390
#WindowHeight = 350

AfterWaitWindowEvent
If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "PureBasic - Gadget Demonstration", #PB_Window_MinimizeGadget)
    
  Top = 10
  GadgetHeight = 24

  FrameGadget(#PB_Any, 10, Top, 370, 290, "Player...") : Top+20

  StringGadget(0,  20, Top, 200, GadgetHeight, "")
  ButtonGadget(1, 223, Top,  72, GadgetHeight, "Play")
  ButtonGadget(2, 295, Top,  72, GadgetHeight, "Stop")  : Top+35
  DisableGadget(2,1)
  
  GadgetToolTip(1,"Play the current song")
  
  PanelGadget(3, 20, Top, #WindowWidth-50, #WindowHeight-Top-60)
    AddGadgetItem(3, 0, "MP3 PlayList")
      ListViewGadget(4, 6, 10, 230, 148)

      For k=0 To 30
        AddGadgetItem(4, -1, "Music Song n° "+Str(k))
      Next

      ButtonGadget(5,  250, 10, 80, GadgetHeight, "Add")
      ButtonGadget(6,  250, 38, 80, GadgetHeight, "Remove")
      ButtonGadget(7,  250, 66, 80, GadgetHeight, "Select")
      GadgetToolTip(7, "Select the current song")
      
      TrackBarGadget(17, 10, 168, 310, 25, 0, 100)

    AddGadgetItem(3, 1, "Options")
      Top = 10
      CheckBoxGadget(10, 10, Top, 250, GadgetHeight, "Enable low-pass filter") : Top+30
      CheckBoxGadget(11, 10, Top, 250, GadgetHeight, "Enable visual plug-in")  : Top+30
      ComboBoxGadget(12, 10, Top, 250, 21) : Top+30
        AddGadgetItem(12, -1, "FireWorks")
        AddGadgetItem(12, -1, "OpenGL spectrum")
        AddGadgetItem(12, -1, "Bump bass")
      SetGadgetState(12,0)
      DisableGadget(12,1)
      
      OptionGadget(13, 10, Top, 80, GadgetHeight, "640*480") : Top+20
      OptionGadget(14, 10, Top, 80, GadgetHeight, "800*600") : Top+20
      OptionGadget(15, 10, Top, 80, GadgetHeight, "1024*768")
      SetGadgetState(13, 1)
      
      ButtonGadget(16, 150, Top, 80, GadgetHeight, "Info")
  CloseGadgetList()

  TextGadget  (9, 10, #WindowHeight-30, 250, 24, "PureBasic - Gadget demonstration")
  ButtonGadget(8, #WindowWidth-100, #WindowHeight-36, 80, 24, "Quit")

  SetGadgetState(3, 0)

  Repeat
    Event = WaitWindowEvent()
    AfterWaitWindowEvent
    
    If Event = #PB_Event_Gadget

      Select EventGadget()
        Case 1 ; Play
          DisableGadget(2,0)  ; Enable the 'Stop' gadget
          DisableGadget(1,1)  ; Disable the 'Play' Gadget
      
        Case 2 ; Stop
          DisableGadget(1,0)  ; Enable the 'Play' gadget
          DisableGadget(2,1)  ; Disable the 'Stop' Gadget
        
        Case 4
          If EventType() = 2
            SetGadgetText(0, GetGadgetText(4)) ; Get the current item from the ListView..
          EndIf

        Case 5 ; Add
          AddGadgetItem(4, -1, "New Item Added...")

        Case 6 ; Remove
          RemoveGadgetItem(4, GetGadgetState(4)) ; Remove the current element of the ListView

        Case 7 ; Select
          SetGadgetText(0, GetGadgetText(4)) ; Get the current item from the ListView..
  
        Case 8 ; Quit...
          Event = #PB_Event_CloseWindow

        Case 11 ; Enable PlugIn..
          DisableGadget(12, 1-GetGadgetState(11))
          
        Case 16 ;
          If GetGadgetState(13) : Result$ = GetGadgetText(13) : EndIf
          If GetGadgetState(14) : Result$ = GetGadgetText(14) : EndIf
          If GetGadgetState(15) : Result$ = GetGadgetText(15) : EndIf
         
          MessageRequester("Info", "Selected screen mode: "+Result$, 0)
        
        Case 17
          SetGadgetText(0, Str(GetGadgetState(17)))
          
      EndSelect

    EndIf

  Until Event = #PB_Event_CloseWindow

EndIf

End
This CPU instructions cache is very fast processing, best performance.
Thank you.
User avatar
Caronte3D
Addict
Addict
Posts: 1361
Joined: Fri Jan 22, 2016 5:33 pm
Location: Some Universe

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by Caronte3D »

What is the purpose of this code? acceleration? I don't see any difference with or without this macro.

EDITED: I don't have a AlderLake CPU :lol:
DarkDragon
Addict
Addict
Posts: 2345
Joined: Mon Jun 02, 2003 9:16 am
Location: Germany
Contact:

Re: Windows 11 Launcher for AlderLake CPU optimize

Post by DarkDragon »

oryaaaaa wrote: Sat Aug 19, 2023 12:03 pmMy back said "OMAE WA MO SINDEIRU"
It sounds like you're working in a strict environment. I wouldn't do this then, don't risk your job or life. Still, あなたはやさしい人です、ありがとうございます.
bye,
Daniel
Post Reply