MCU.TEC geral Situação Atual do Suporte GCC/Clang para Cortex-M55 e STM32N6

Situação Atual do Suporte GCC/Clang para Cortex-M55 e STM32N6

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:

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 e LDR/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.
0 0 votos
Classificação do artigo
Inscrever-se
Notificar de
guest
0 Comentários
mais antigos
mais recentes Mais votado
Feedbacks embutidos
Ver todos os comentários

Related Post

0
Adoraria saber sua opinião, comente.x