Qual è la differenza tra un'istruzione LDM e una VLDM nell'architettura del set di istruzioni ARM?
VLDM è per i registri vettoriali che contengono molti valori in virgola mobile (non so se possono contenere anche interi, presumo che sia consentito anche un uso SIMD).
ARM Information Center
i.e. forma NEON e VFP.
Non avevo mai visto questa istruzione, in quanto non esisteva quando ho scritto l'ultimo assemblaggio ARM.
LDM è vecchio come ARM, sta per "load many". Senza cercare, presumo che VLDM sia più o meno la stessa cosa di LDM, tranne che non viene usata per caricare nei registri interi di uso generale.
Una curiosità per LDM, si possono caricare tutti e 16 i registri "general-purpose" (o qualsiasi sottoinsieme), il che significa che si può fare una chiamata di procedura con essa, dato che PC (program counter) è R15 (PC è un alias consentito).
LDM (e STM) è sparito in ARMv8 (tranne che nel set di istruzioni legacy AArch32/ARMv7). Nell'AArch64/ARMv8 hai load e store per coppie di registri... LDM/STM non era molto "RISC" con un numero variabile di cicli a seconda di quanti registri caricati/stoccati. Non sono sicuro che VLDM (e VSTM che presumo esista) sia abbandonato, penso di no.
Articoli simili
- Quali sono i vantaggi e gli svantaggi del set di istruzioni Thumb rispetto alle istruzioni ARM a 32 bit?
- Perché è necessaria una licenza di ARM per progettare una CPU ARM? Come sono protetti i set di istruzioni?
- Perché è stato creato il set di istruzioni ARM Thumb?
- Qual è la differenza tra l'architettura ARM e il RISC regolare?