dotnet / dotnet/BenchmarkDotNet

Migrate arm64 disassembler implementation to AsmArm64

Offen
#3,246 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Area:Diagnosers
Vorherrschende Sprache
C#
Sterne
11.5k
Forks
1.1k
Ø Merge
6 T. 11 Std.
Gemergte PRs (30 T.)
12

Beschreibung

Currently, BenchmarkDotNet using `Gee.External.Capstone` package for `arm64` disassembler.
And `Iced` for x86/x64 disassemblers.

`Gee.External.Capstone` package contains a lot of native dependency DLLs.
So It's better to migrate to use [AsmArm64](https://github.com/xoofx/AsmArm64).

### Support newer instruction
Currently, `Gee.External.Capstone` using capstone v4.0.2 binaries. and it looks like some instruction support are missing.

On .NET 11, arm64 minimum instruction requirement is updated.
So it might need to handle additional instructions that are emitted by JIT.
https://github.com/dotnet/docs/blob/main/docs/core/whats-new/dotnet-11/runtime.md#arm64-requirements

e.g. .NET 11 JIT looks like emitting `RETAA`/`RETBB`, but current `Gee.External.Capstone` can't handle these instructions.
https://github.com/dotnet/runtime/blob/7e807becb8c6b1917dac0565c674ade7947a8bec/src/coreclr/jit/instrsarm64.h#L1321C21-L1324

### Known Issues when migrated to AsmArm64
- Currently AsmArm64 don't support SVE/SVE2/SME instruction. (`Gee.External.Capstone` also doesn't support these instruction though)
- ~~Disassembler results has some differences (e.g. instructions are resolved to alias (`MOVZ` is printed as `MOV` automatically))~~

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne damit, die Integration des arm64-Disassemblers und die aktuelle Verwendung von Gee.External.Capstone zu lokalisieren, und vergleiche dann die erforderliche Instruktionsunterstützung mit AsmArm64. Prüfe die .NET 11 JIT-Beispiele, insbesondere RETAA und RETBB, und verifiziere, dass die Migration die erwarteten emittierten Instruktionen verarbeitet, ohne das bestehende arm64-Disassemblierungsverhalten zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
csharp
Bereich
devtools
Issue-Typ
Refactoring
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Aktiv
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.