¿Cómo maneja el compilador ARM (Versión 5) los flotadores de precisión doble en dispositivos cuyo hardware de unidad de punto flotante solo admite precisión simple?

2

Después de leer el manual de ARM Compiler versión 5 , se dice que para los dispositivos sin unidad de punto flotante, los flotadores son a través de implementaciones de software, lo que probablemente será más lento que tener una unidad de hardware.

Sin embargo, no pude encontrar ninguna información sobre cómo el ARM Compiler 5 manejaría las flotaciones 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 utilizando 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 de ensamblaje anterior fue generado por el compilador ARM 5, ¡aunque spectral_line es una matriz de dobles!

¿Cómo / qué hace el compilador aquí para manejar los números de doble precisión?

    
pregunta a2xia

1 respuesta

4
  

¡y parece que se están utilizando las instrucciones específicas de FPU!

Eso es correcto. Las instrucciones de carga y almacenamiento están disponibles en las FPU de precisión única, pero ninguna de las instrucciones de cálculo actual .

Tenga en cuenta que esto puede hacer que algunos cálculos de software utilicen double más lento, ya que los argumentos de la función residirán en la FPU, pero se deben transferir de nuevo a los registros de la CPU para utilizarlos .

    
respondido por el Turbo J

Lea otras preguntas en las etiquetas