Observando o fluxo atual de desenvolvimento, não há indícios de mudanças significativas no suporte ao Cortex-M55 que já estejam em andamento para o GCC ou o ARM Compiler (armclang), até pelo menos novembro de 2022. O ecossistema parece estar em um momento de pausa estratégica, aguardando a implantação mais ampla dos microcontroladores baseados no Cortex-M55 (como os da série STM32N6, ainda não amplamente distribuídos), o que naturalmente trará uma onda de inspeção crítica dos resultados e, potencialmente, uma nova fase de refinamentos para a arquitetura ARMv8.1-M e o conjunto de instruções vetoriais Helium (MVE – M-Profile Vector Extension), além da implementação inicial.
Erros de Compilação no GCC Identificados Durante Testes
Durante testes práticos com instruções vetoriais Helium, alguns erros de compilação foram observados no GCC:
- Bug 107714 – MVE: modo de endereçamento inválido gerado para instruções
VLD2
- Bug 107515 – MVE: funções genéricas não aceitam escalares do tipo
_Float16
- 🩹 Outro problema relacionado ao manuseio de escalares genéricos foi endereçado neste patch:
https://gcc.gnu.org/pipermail/gcc-patches/2022-November/606575.html
Regressões de Código com GCC 12/13
Foi observado também que versões mais recentes do GCC (12 e 13) produzem código pior otimizado para Helium em comparação com o GCC 11. Isso foi confirmado por relatórios independentes:
- 🐞 Bug 107674 – Regressões nas instruções
VCTP
eLDR/STR
vetoriais em GCC 11/12/13
Até o momento da redação deste relatório, nenhum desses problemas havia sido totalmente resolvido.
Situação do ARMCLANG (Compilador da ARM)
Nenhum erro de compilação foi encontrado utilizando o armclang
, mas ele perdeu uma oportunidade significativa de otimização:
gerou muitas instruções redundantes de predição “todas as lanes” em loops Helium com unrolling completo.
Esse comportamento foi reportado internamente no caso 03389110
, mas nenhuma correção foi prometida.
Também foram relatados problemas visuais no Arm Development Studio ao exibir a desmontagem (disassembly) e variáveis com Helium, com algumas correções em andamento.
Contexto Adicional para STM32N6 e Toolchains
A linha STM32N6, anunciada com suporte ao Cortex-M55 e Helium, ainda é recente e não está plenamente integrada aos toolchains open-source. Os problemas relatados afetam diretamente o uso de instruções SIMD vetoriais com o MVE, que são parte essencial da proposta de eficiência de DSP no M55.
Sobre o GCC:
- O suporte ao Helium em GCC ainda é considerado experimental.
- O back-end para MVE começou a amadurecer no GCC 11, mas regressões apareceram nas versões seguintes.
- Desenvolvedores interessados em performance com MVE devem testar múltiplas versões do GCC e usar flags específicas para controle de vetorização (
-march=armv8.1-m.main+mve.fp
,-mfloat-abi=hard
, etc.).
Sobre o Clang/LLVM:
- O
Clang
ainda não possui suporte pleno ao Helium (MVE). - A ARM oferece o
armclang
, que é baseado em LLVM, mas com suporte proprietário ao MVE. - Esse compilador geralmente oferece melhor geração de código para ARMv8.1-M, mas é fechado e licenciado.
Dica para desenvolvedores STM32N6:
🔧 Para testar o suporte real no STM32N6:
- Use o toolchain oficial da ARM (
armclang
) para avaliar o uso das intrínsecas do Helium. - Ao usar GCC, prefira versões mais antigas como a 11 para códigos críticos que dependam do vetorizar adequado.
- Monitore os bugs na Bugzilla da GCC relacionados a
arm
+MVE
.