mirror of
https://github.com/NaC-L/Mergen.git
synced 2026-05-12 09:40:34 +00:00
cdd52c271a
- add nested lift diagnostics and helper-level profiling for protected381 targets - refactor function signature specs and optimize folderBinOps fast paths - implement the full SCAS family and document VMP 3.6 INT dispatcher findings - add reproducible profiling scripts and root VMP testing notes
72 lines
3.1 KiB
PowerShell
72 lines
3.1 KiB
PowerShell
$ErrorActionPreference = 'Stop'
|
|
$repo = Split-Path -Parent (Split-Path -Parent $PSScriptRoot)
|
|
$rewriteDir = Join-Path $repo 'scripts\rewrite'
|
|
|
|
$icedLifter = Join-Path $repo 'build_iced\lifter.exe'
|
|
$zydisLifter = Join-Path $repo 'build_zydis\lifter.exe'
|
|
$icedMicro = Join-Path $repo 'build_iced\rewrite_microtests.exe'
|
|
$zydisMicro = Join-Path $repo 'build_zydis\rewrite_microtests.exe'
|
|
|
|
foreach ($p in @($icedLifter, $zydisLifter, $icedMicro, $zydisMicro)) {
|
|
if (!(Test-Path $p)) { throw "Missing: $p -- build both variants first" }
|
|
}
|
|
|
|
$iterations = 10
|
|
$icedMicroTimes = @()
|
|
$zydisMicroTimes = @()
|
|
$icedBaselineTimes = @()
|
|
$zydisBaselineTimes = @()
|
|
|
|
for ($i = 1; $i -le $iterations; $i++) {
|
|
Write-Host "`n===== Iteration $i / $iterations ====="
|
|
|
|
# --- microtests ---
|
|
$im = Measure-Command { & $icedMicro 2>&1 | Out-Null }
|
|
$icedMicroTimes += $im.TotalSeconds
|
|
|
|
$zm = Measure-Command { & $zydisMicro 2>&1 | Out-Null }
|
|
$zydisMicroTimes += $zm.TotalSeconds
|
|
|
|
# --- baseline ---
|
|
$ib = Measure-Command {
|
|
& powershell -NoProfile -ExecutionPolicy Bypass -File (Join-Path $rewriteDir 'run.ps1') -LifterPath $icedLifter 2>&1 | Out-Null
|
|
}
|
|
$icedBaselineTimes += $ib.TotalSeconds
|
|
|
|
$zb = Measure-Command {
|
|
& powershell -NoProfile -ExecutionPolicy Bypass -File (Join-Path $rewriteDir 'run.ps1') -LifterPath $zydisLifter 2>&1 | Out-Null
|
|
}
|
|
$zydisBaselineTimes += $zb.TotalSeconds
|
|
|
|
Write-Host (" ICED micro={0:F3}s baseline={1:F2}s" -f $im.TotalSeconds, $ib.TotalSeconds)
|
|
Write-Host (" ZYDIS micro={0:F3}s baseline={1:F2}s" -f $zm.TotalSeconds, $zb.TotalSeconds)
|
|
}
|
|
|
|
function Avg([double[]]$a) { ($a | Measure-Object -Average).Average }
|
|
function Min([double[]]$a) { ($a | Measure-Object -Minimum).Minimum }
|
|
function Max([double[]]$a) { ($a | Measure-Object -Maximum).Maximum }
|
|
|
|
$iMicroAvg = Avg $icedMicroTimes
|
|
$zMicroAvg = Avg $zydisMicroTimes
|
|
$iBaseAvg = Avg $icedBaselineTimes
|
|
$zBaseAvg = Avg $zydisBaselineTimes
|
|
|
|
Write-Host "`n========== RESULTS ($iterations iterations) =========="
|
|
Write-Host ("")
|
|
Write-Host (" Microtests (avg):")
|
|
Write-Host (" ICED : {0:F3}s (min={1:F3} max={2:F3})" -f $iMicroAvg, (Min $icedMicroTimes), (Max $icedMicroTimes))
|
|
Write-Host (" ZYDIS : {0:F3}s (min={1:F3} max={2:F3})" -f $zMicroAvg, (Min $zydisMicroTimes), (Max $zydisMicroTimes))
|
|
Write-Host (" delta : {0:+0.000;-0.000}s" -f ($zMicroAvg - $iMicroAvg))
|
|
Write-Host ("")
|
|
Write-Host (" Baseline (avg):")
|
|
Write-Host (" ICED : {0:F2}s (min={1:F2} max={2:F2})" -f $iBaseAvg, (Min $icedBaselineTimes), (Max $icedBaselineTimes))
|
|
Write-Host (" ZYDIS : {0:F2}s (min={1:F2} max={2:F2})" -f $zBaseAvg, (Min $zydisBaselineTimes), (Max $zydisBaselineTimes))
|
|
Write-Host (" delta : {0:+0.00;-0.00}s" -f ($zBaseAvg - $iBaseAvg))
|
|
Write-Host ("")
|
|
$iTotalAvg = $iMicroAvg + $iBaseAvg
|
|
$zTotalAvg = $zMicroAvg + $zBaseAvg
|
|
Write-Host (" Total (avg):")
|
|
Write-Host (" ICED : {0:F2}s" -f $iTotalAvg)
|
|
Write-Host (" ZYDIS : {0:F2}s" -f $zTotalAvg)
|
|
Write-Host (" delta : {0:+0.00;-0.00}s ({1:+0.0;-0.0}%)" -f ($zTotalAvg - $iTotalAvg), ((($zTotalAvg - $iTotalAvg) / $iTotalAvg) * 100))
|