After reading ARM Compiler version 5's manual, it says that for devices without a floating point unit, floats are dealt with through software implementations, which is likely going to be slower than having a hardware unit.
However, I couldn't find any information on how the ARM Compiler 5 would deal with double precision floats on devices with single-precision FPUs. My assumption would be that it would also use a software implementation as if the FPU didn't exist, but in my code, I tried looking at the disassembly, and it appears that the FPU-specific instructions are being used!
For example,
696: spectral_line[2] = 6869.955; /* B */
0x0800250A ED9F0B81 VLDR d0,[pc,#0x204]
0x0800250E ED800B04 VSTR d0,[r0,#0x10]
this above assembly code segment was generated by the ARM 5 compiler, even though spectral_line
is an array of doubles!
How/what is the compiler doing here to handle the double-precision numbers?