
Validação diferencial exaustiva de todas as 4,3B codificações de instruções AArch64.
Uma comparação exaustiva das decisões de alocação de instruções A64.
O Silica verifica cada uma das 4.294.967.296 palavras de instrução A64 possíveis. Ele compara se Capstone, LLVM, Unicorn e uma tabela compilada a partir dos diagramas de codificação XML da Arm aceitam cada palavra.
Um decodificador e um diagrama de codificação não respondem exatamente à mesma pergunta. Capstone e LLVM decodificam instruções, o Unicorn tenta a execução, e a tabela derivada de XML do Silica corresponde aos bits fixos nos diagramas de codificação da Arm. Compará-los é útil, mas uma divergência não é automaticamente um bug de decodificador.
As instruções A64 têm 32 bits de largura, então a comparação de alocação pode cobrir todo o espaço de entrada. As contagens de validade abaixo são exaustivas para as versões e configuração fixadas. A análise do texto das instruções é amostrada.
Estes artefatos usam ISA_A64_xml_A_profile-2026-06_mc e 256 shards cobrindo
todas as 2³² palavras.
| Resultado de alocação derivado de XML | Contagem | Participação |
|---|---|---|
| Corresponde a um padrão de codificação no escopo | 1.799.435.776 | 41,9% |
| Não corresponde a nenhum padrão de codificação no escopo | 2.495.531.520 | 58,1% |
Nos quatro bitmaps de validade, 723.801.678 palavras têm pelo menos uma classificação divergente. Isso é 16,9% de todo o espaço de palavras. É uma contagem de divergências, não uma contagem de bugs confirmados.
Concordância par a par com o bitmap de alocação derivado de XML:
| Ferramenta | Concordância |
|---|---|
| Capstone | 84,8% |
| LLVM | 87,6% |
| Unicorn | 88,3% |
Essas porcentagens não classificam a correção dos decodificadores. Em particular, a tabela XML compilada não avalia o pseudocódigo das instruções, a disponibilidade de recursos ou todas as restrições de tempo de decodificação. O Unicorn também responde por meio de execução e traps, e não por desmontagem. Cada diferença precisa de análise da família de instruções e da configuração antes de poder embasar um relatório de bug upstream.
O Silica registrou uma amostra determinística de 1.000.000 de palavras a partir das
1.266.064.016 palavras aceitas por todas as quatro verificações de validade. As saídas não são
simétricas: Capstone e LLVM retornam texto completo de desmontagem, a tabela XML
retorna apenas um mnemônico, e o Unicorn retorna o placeholder <valid>.
O classificador atual reporta:
| Classificação | Registros | Participação |
|---|---|---|
| Mesmo mnemônico normalizado, texto completo diferente | 862.648 | 86,3% |
| Mnemônico normalizado diferente | 137.352 | 13,7% |
O valor de 86,3% não é uma taxa de erro de operandos. Na maioria dos registros, uma instrução completa está sendo comparada com uma referência apenas de mnemônico. O tratamento de aliases também permanece conservador quando uma condição de alias XML não pode ser provada a partir do texto renderizado. Esses registros são pistas para análise, não descobertas sobre a correção do decodificador.
Os arquivos em artifacts/reproducers são dez registros distintos
selecionados dos primeiros cinco shards de divergência elegíveis. A seleção
prioriza categorias de texto e limita pares repetidos de (category, spec mnemonic).
Todos os dez arquivos atuais comparam o Capstone com o mnemônico derivado de XML.
Eles provam que os registros existem no corpus gerado e podem ser reproduzidos
a partir de uma palavra de instrução. Eles não foram adjudicados de forma independente como dez
bugs do Capstone, e não são evidência de que LLVM e Unicorn concordam sobre a
instrução renderizada. Três estão explicitamente marcados como NORMALIZATION_UNCERTAIN.
O gerador e o verificador são
g6_reproducers.py e
verify/g6_reproducers.py.
A varredura produz um grande conjunto de dados. O silica-scope é o seu leitor de terminal. Ele abre um diretório de artefatos do Silica, mostra as métricas e o mapa de 256 shards, filtra registros de divergência e consulta palavras individuais. Ele também pode abrir os dez registros de exemplo com suas limitações declaradas.
Instale-o a partir do PyPI com Python 3.11 ou mais recente:
pipx install silica-scope
Em seguida, execute-o a partir de um checkout do Silica ou aponte-o para um diretório de artefatos:
silica-scope
silica-scope /path/to/silica/artifacts
silica-scope --report
silica-scope é um leitor em Python puro. Ele não executa a varredura nem requer as bibliotecas decodificadoras nativas. Consulte o guia do leitor de terminal para controles de teclado e descoberta de artefatos.
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"]
O caminho de alto volume é escrito em Rust e chama cada decodificador em processo. Ele armazena um bit por codificação por oráculo, o que mantém a comparação exaustiva compacta e torna a divergência uma operação direta de bitmap. As falhas são bissectadas até a palavra de instrução exata.
O Python trata da compilação de XML, normalização, relatórios e verificação. Os esquemas de artefatos e as regras de amostragem estão documentados em docs/formats.md. A origem de cada valor principal é:
| Afirmação | Artefato | Recalculado por |
|---|---|---|
| Contagem de alocação de XML | artifacts/g1_metrics.json | G1 |
| Diferenças exaustivas de validade | quatro bitmaps de validade | G2 e G5 |
| Contagens de categorias da amostra | artifacts/g4_metrics.json | G4 |
| Percentagens de concordância par a par | artifacts/report/metrics.json | G5 |
| Dez registros de exemplo selecionados | artifacts/reproducers/*.md | G6 |
| Digest do artefato publicado | artifacts/result_hash.txt | G7 |
Crie o ambiente fixado e verifique se as entradas locais necessárias estão disponíveis:
micromamba create -y -p ./.venv -f environment.yml
micromamba run -p ./.venv silica doctor
A especificação XML da Arm não é incluída no repositório devido à sua licença. O silica doctor informa onde o Silica espera encontrá-la e quaisquer outros pré-requisitos em falta.
Os artefactos versionados podem ser inspecionados sem repetir a varredura:
silica-scope artifacts