Después de leer el manual de ARM Compiler versión 5 , dice que para los dispositivos sin una unidad de coma flotante, los flotantes se tratan mediante implementaciones de software, lo que probablemente sea más lento que tener una unidad de hardware.
Sin embargo, no pude encontrar ninguna información sobre cómo ARM Compiler 5 se ocuparía de los flotadores de doble precisión en dispositivos con FPU de precisión simple. Mi suposición sería que también usaría una implementación de software como si la FPU no existiera, pero en mi código, intenté ver el desensamblaje, ¡y parece que se están usando las instrucciones específicas de la FPU!
Por ejemplo,
696: spectral_line[2] = 6869.955; /* B */
0x0800250A ED9F0B81 VLDR d0,[pc,#0x204]
0x0800250E ED800B04 VSTR d0,[r0,#0x10]
este segmento de código ensamblador anterior fue generado por el compilador ARM 5, ¡aunque spectral_line
es una matriz de dobles!
¿Cómo/qué está haciendo el compilador aquí para manejar los números de doble precisión?
¡y parece que se están utilizando las instrucciones específicas de la FPU!
Eso es correcto. Tiene instrucciones de carga y almacenamiento disponibles en las FPU de precisión simple, pero ninguna de las instrucciones de cálculo reales .
Tenga en cuenta que esto puede hacer que algunos cálculos de software sean double
más lentos, ya que los argumentos de función residirán en la FPU pero deben transferirse de nuevo a los registros de la CPU para poder usarlos .
decano francos
pjc50