Qual é a diferença entre uma instrução LDM e uma instrução VLDM na arquitetura do conjunto de instruções ARM?
VLDM é para registros vetoriais contendo muitos valores de ponto flutuante (não tenho certeza se eles também podem conter inteiros, presumo que o uso do SIMD também seja permitido).
ARM Information Center
i.e. form NEON e VFP.
Nunca tinha visto esta instrução, pois tudo isso não existia quando escrevi ARM assembly.
LDM é tão antigo quanto ARM, significa "carregar muitos". Sem olhar para ele, eu assumo que VLDM é mais ou menos o mesmo que LDM, exceto que não é usado para carregar nos registros inteiros de propósito geral.
Uma trivia para LDM, você pode carregar todos os 16 registros de "propósito geral" (ou qualquer subconjunto de), significando que você pode fazer uma chamada de procedimento com ele, pois o PC (contador de programas) é R15 (PC um alias permitido).
p>LDM (e STM) desapareceu no ARMv8 (exceto no conjunto de instruções legado AArch32/ARMv7). No AArch64/ARMv8 você tem carga e armazenamento para pares de registros... LDM/STM não era muito "RISC" com ele tomando um número variável de ciclos dependendo de quantos registros foram carregados/armazenados. Não tenho certeza se o VLDM (e VSTM que eu assumo que existe) foi descartado, eu acho que não.Artigos semelhantes
- Que tipo de arquitetura de conjunto de instruções os processadores modernos usam?
- Quais são as vantagens e desvantagens das instruções do polegar em relação às instruções de 32 bits do ARM?
- Por que foi criado o conjunto de instruções do ARM Thumb?
- Porque é que você precisa de uma licença do ARM para projetar uma CPU ARM? Como são protegidos os conjuntos de instruções?