
Erschöpfende differenzielle Validierung aller 4,3 Mrd. AArch64-Befehlskodierungen.
Ein erschöpfender Vergleich der Entscheidungen zur A64-Instruktionszuweisung.
Silica prüft jedes der 4.294.967.296 möglichen A64-Instruktionswörter. Es vergleicht, ob Capstone, LLVM, Unicorn und eine aus Arms XML-Encoding-Diagrammen kompilierte Tabelle jedes Wort akzeptieren.
Ein Decoder und ein Encoding-Diagramm beantworten nicht exakt dieselbe Frage. Capstone und LLVM dekodieren Instruktionen, Unicorn versucht die Ausführung, und Silicas aus XML abgeleitete Tabelle gleicht die festen Bits in Arms Encoding-Diagrammen ab. Der Vergleich ist nützlich, aber eine Abweichung ist nicht automatisch ein Decoder-Bug.
A64-Instruktionen sind 32 Bit breit, sodass der Zuweisungsvergleich den gesamten Eingaberaum abdecken kann. Die folgenden Gültigkeitszählungen sind erschöpfend für die festgelegten Versionen und die Konfiguration. Die Analyse des Instruktionstexts ist stichprobenbasiert.
Diese Artefakte verwenden ISA_A64_xml_A_profile-2026-06_mc und 256 Shards, die
alle 2³² Wörter abdecken.
| Aus XML abgeleitetes Zuweisungsergebnis | Anzahl | Anteil |
|---|---|---|
| Entspricht einem im Geltungsbereich liegenden Encoding-Muster | 1.799.435.776 | 41,9% |
| Entspricht keinem im Geltungsbereich liegenden Encoding-Muster | 2.495.531.520 | 58,1% |
Über die vier Gültigkeits-Bitmaps hinweg haben 723.801.678 Wörter mindestens eine abweichende Klassifizierung. Das sind 16,9% des gesamten Wortraums. Es ist eine Anzahl von Abweichungen, keine Anzahl bestätigter Bugs.
Paarweise Übereinstimmung mit der aus XML abgeleiteten Zuweisungs-Bitmap:
| Tool | Übereinstimmung |
|---|---|
| Capstone | 84,8% |
| LLVM | 87,6% |
| Unicorn | 88,3% |
Diese Prozentwerte bewerten nicht die Korrektheit der Decoder. Insbesondere wertet die kompilierte XML-Tabelle keinen Instruktions-Pseudocode, keine Feature-Verfügbarkeit und nicht jede Decode-Zeit-Bedingung aus. Unicorn antwortet zudem über Ausführung und Traps statt über Disassemblierung. Jede Abweichung erfordert eine Analyse der Instruktionsfamilie und der Konfiguration, bevor sie einen Upstream-Bug-Report stützen kann.
Silica zeichnete eine deterministische Stichprobe von 1.000.000 Wörtern aus den
1.266.064.016 Wörtern auf, die von allen vier Gültigkeitsprüfungen akzeptiert werden. Die Ausgaben sind nicht
symmetrisch: Capstone und LLVM liefern vollständigen Disassemblierungstext, die XML-Tabelle
liefert nur einen Mnemonic, und Unicorn liefert den Platzhalter <valid>.
Der aktuelle Klassifizierer meldet:
| Klassifizierung | Datensätze | Anteil |
|---|---|---|
| Gleicher normalisierter Mnemonic, unterschiedlicher Volltext | 862.648 | 86,3% |
| Unterschiedlicher normalisierter Mnemonic | 137.352 | 13,7% |
Der Wert von 86,3% ist keine Operanden-Fehlerrate. In den meisten Datensätzen wird eine vollständige Instruktion mit einer Referenz verglichen, die nur aus einem Mnemonic besteht. Auch die Alias-Behandlung bleibt konservativ, wenn eine XML-Alias-Bedingung nicht aus dem gerenderten Text bewiesen werden kann. Diese Datensätze sind Hinweise für die Analyse, keine Befunde zur Korrektheit der Decoder.
Die Dateien in artifacts/reproducers sind zehn verschiedene
Datensätze, ausgewählt aus den ersten fünf geeigneten Abweichungs-Shards. Die Auswahl
bevorzugt Textkategorien und begrenzt wiederholte (category, spec mnemonic)-Paare.
Alle zehn aktuellen Dateien vergleichen Capstone mit dem aus XML abgeleiteten Mnemonic.
Sie belegen, dass die Datensätze im generierten Korpus existieren und aus einem einzigen Instruktionswort reproduziert werden können. Sie wurden nicht unabhängig als zehn Capstone-Bugs beurteilt, und sie sind kein Beweis dafür, dass LLVM und Unicorn bei der gerenderten Instruktion übereinstimmen. Drei sind ausdrücklich als NORMALIZATION_UNCERTAIN gekennzeichnet.
Der Generator und der Verifier sind
g6_reproducers.py und
verify/g6_reproducers.py.
Der Sweep erzeugt einen großen Datensatz. silica-scope ist sein Terminal-Reader. Er öffnet ein Silica-Artefaktverzeichnis, zeigt die Metriken und die 256-Shard-Karte, filtert Disagreement-Datensätze und schlägt einzelne Wörter nach. Er kann auch die zehn Beispieldatensätze mit ihren angegebenen Einschränkungen öffnen.
Installieren Sie ihn von PyPI mit Python 3.11 oder neuer:
pipx install silica-scope
Dann führen Sie es aus einem Silica-Checkout aus oder richten Sie es auf ein Artefaktverzeichnis:
silica-scope
silica-scope /path/to/silica/artifacts
silica-scope --report
silica-scope ist ein reiner Python-Reader. Er führt den Sweep nicht aus und benötigt nicht die nativen Decoder-Bibliotheken. Siehe die Anleitung für den Terminal-Reader für Tastatursteuerung und Artefakt-Erkennung.
flowchart LR
XML["Arm XML encoding diagrams"] --> SPEC["compiled allocation matcher"]
SPEC --> SWEEP["parallel 32-bit sweep"]
CAP["Capstone"] --> SWEEP
LLVM["LLVM"] --> SWEEP
UNI["Unicorn"] --> SWEEP
SWEEP --> MAP["validity bitmaps"]
MAP --> DIFF["exhaustive XOR comparison"]
DIFF --> CORPUS["classified disagreement corpus"]
CORPUS --> OUT["metrics · examples · result hash"]
Der High-Volume-Pfad ist in Rust geschrieben und ruft jeden Decoder prozessintern auf. Er speichert ein Bit pro Kodierung pro Orakel, was den erschöpfenden Vergleich kompakt hält und Abweichungen zu einer direkten Bitmap-Operation macht. Abstürze werden bis auf das exakte Instruktionswort eingegrenzt.
Python übernimmt die XML-Kompilierung, Normalisierung, Berichterstellung und Verifikation. Artefakt-Schemata und Sampling-Regeln sind in docs/formats.md dokumentiert. Die Quelle jedes hervorgehobenen Werts ist:
| Behauptung | Artefakt | Neu berechnet durch |
|---|---|---|
| XML-Zuweisungsanzahl | artifacts/g1_metrics.json | G1 |
| Erschöpfende Gültigkeitsunterschiede | vier Gültigkeits-Bitmaps | G2 und G5 |
| Stichproben-Kategorieanzahlen | artifacts/g4_metrics.json | G4 |
| Paarweise Übereinstimmungsprozentsätze | artifacts/report/metrics.json | G5 |
| Zehn ausgewählte Beispielaufzeichnungen | artifacts/reproducers/*.md | G6 |
| Veröffentlichter Artefakt-Digest | artifacts/result_hash.txt | G7 |
Erstellen Sie die festgelegte Umgebung und prüfen Sie, ob die erforderlichen lokalen Eingaben verfügbar sind:
micromamba create -y -p ./.venv -f environment.yml
micromamba run -p ./.venv silica doctor
Die XML-Spezifikation von Arm wird aufgrund ihrer Lizenz nicht mitgeliefert. silica doctor meldet, wo Silica sie erwartet und welche anderen Voraussetzungen fehlen.
Die eingecheckten Artefakte können ohne erneuten Durchlauf des Sweeps eingesehen werden:
silica-scope artifacts