
Validation différentielle exhaustive de tous les 4,3 milliards d'encodages d'instructions AArch64.
Une comparaison exhaustive des décisions d'allocation d'instructions A64.
Silica vérifie chacun des 4 294 967 296 mots d'instruction A64 possibles. Il compare si Capstone, LLVM, Unicorn et une table compilée à partir des diagrammes d'encodage XML d'Arm acceptent chaque mot.
Un décodeur et un diagramme d'encodage ne répondent pas exactement à la même question. Capstone et LLVM décodent des instructions, Unicorn tente une exécution, et la table dérivée du XML de Silica correspond aux bits fixes des diagrammes d'encodage d'Arm. Les comparer est utile, mais une divergence n'est pas automatiquement un bug de décodeur.
Les instructions A64 font 32 bits de large, de sorte que la comparaison d'allocation peut couvrir l'intégralité de l'espace d'entrée. Les décomptes de validité ci-dessous sont exhaustifs pour les versions et la configuration épinglées. L'analyse du texte des instructions est échantillonnée.
Ces artefacts utilisent ISA_A64_xml_A_profile-2026-06_mc et 256 fragments couvrant
l'ensemble des 2³² mots.
| Résultat d'allocation dérivé du XML | Décompte | Part |
|---|---|---|
| Correspond à un motif d'encodage dans le périmètre | 1 799 435 776 | 41,9 % |
| Ne correspond à aucun motif d'encodage dans le périmètre | 2 495 531 520 | 58,1 % |
Sur les quatre bitmaps de validité, 723 801 678 mots ont au moins une classification divergente. Cela représente 16,9 % de l'espace total des mots. Il s'agit d'un décompte de désaccords, et non d'un décompte de bugs confirmés.
Concordance par paire avec le bitmap d'allocation dérivé du XML :
| Outil | Concordance |
|---|---|
| Capstone | 84,8 % |
| LLVM | 87,6 % |
| Unicorn | 88,3 % |
Ces pourcentages ne classent pas la justesse des décodeurs. En particulier, la table XML compilée n'évalue pas le pseudocode des instructions, la disponibilité des fonctionnalités, ni toutes les contraintes au moment du décodage. Unicorn répond également par l'exécution et les pièges plutôt que par le désassemblage. Chaque différence nécessite une analyse de la famille d'instructions et de la configuration avant de pouvoir étayer un rapport de bug en amont.
Silica a enregistré un échantillon déterministe de 1 000 000 de mots parmi les
1 266 064 016 mots acceptés par les quatre vérifications de validité. Les sorties ne sont pas
symétriques : Capstone et LLVM renvoient un texte de désassemblage complet, la table XML
ne renvoie qu'un mnémonique, et Unicorn renvoie l'espace réservé <valid>.
Le classificateur actuel rapporte :
| Classification | Enregistrements | Part |
|---|---|---|
| Même mnémonique normalisé, texte complet différent | 862 648 | 86,3 % |
| Mnémonique normalisé différent | 137 352 | 13,7 % |
La valeur de 86,3 % n'est pas un taux d'erreur d'opérande. Dans la plupart des enregistrements, une instruction complète est comparée à une référence composée uniquement d'un mnémonique. La gestion des alias reste également prudente lorsqu'une condition d'alias XML ne peut être prouvée à partir du texte rendu. Ces enregistrements sont des pistes d'analyse, et non des constats sur la justesse des décodeurs.
Les fichiers dans artifacts/reproducers sont dix enregistrements
distincts sélectionnés parmi les cinq premiers fragments de désaccord éligibles. La sélection
privilégie les catégories de texte et plafonne les paires (category, spec mnemonic) répétées.
Les dix fichiers actuels comparent tous Capstone avec le mnémonique dérivé du XML.
Ils prouvent que les enregistrements existent dans le corpus généré et peuvent être reproduits à partir d'un seul mot d'instruction. Ils n'ont pas été arbitrés de manière indépendante comme dix bugs Capstone, et ils ne constituent pas une preuve que LLVM et Unicorn s'accordent sur l'instruction rendue. Trois sont explicitement marqués NORMALIZATION_UNCERTAIN.
Le générateur et le vérificateur sont
g6_reproducers.py et
verify/g6_reproducers.py.
Le balayage produit un jeu de données volumineux. silica-scope en est le lecteur en terminal. Il ouvre un répertoire d'artefacts Silica, affiche les métriques et la carte des 256 shards, filtre les enregistrements de désaccord et recherche des mots individuels. Il peut également ouvrir les dix enregistrements d'exemple avec leurs limitations indiquées.
Installez-le depuis PyPI avec Python 3.11 ou une version plus récente :
pipx install silica-scope
Puis exécutez-le depuis un checkout Silica ou pointez-le vers un répertoire d'artefacts :
silica-scope
silica-scope /path/to/silica/artifacts
silica-scope --report
silica-scope est un lecteur en Python pur. Il n'exécute pas le balayage et ne nécessite pas les bibliothèques de décodage natives. Consultez le guide du lecteur terminal pour les commandes clavier et la découverte des artefacts.
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"]
Le chemin à haut volume est écrit en Rust et appelle chaque décodeur en cours de processus. Il stocke un bit par encodage par oracle, ce qui maintient la comparaison exhaustive compacte et fait de la divergence une opération directe sur bitmap. Les plantages sont bisectés jusqu'au mot d'instruction exact.
Python gère la compilation XML, la normalisation, la génération de rapports et la vérification. Les schémas d'artefacts et les règles d'échantillonnage sont documentés dans docs/formats.md. La source de chaque valeur phare est :
| Affirmation | Artefact | Recalculé par |
|---|---|---|
| Nombre d'allocations XML | artifacts/g1_metrics.json | G1 |
| Différences de validité exhaustives | quatre bitmaps de validité | G2 et G5 |
| Décomptes de catégories d'échantillons | artifacts/g4_metrics.json | G4 |
| Pourcentages d'accord par paires | artifacts/report/metrics.json | G5 |
| Dix enregistrements d'exemple sélectionnés | artifacts/reproducers/*.md | G6 |
| Empreinte de l'artefact publié | artifacts/result_hash.txt | G7 |
Créez l'environnement épinglé et vérifiez que les entrées locales requises sont disponibles :
micromamba create -y -p ./.venv -f environment.yml
micromamba run -p ./.venv silica doctor
La spécification XML d'Arm n'est pas intégrée en raison de sa licence. silica doctor
indique où Silica s'attend à la trouver ainsi que tout autre prérequis manquant.