David,
The FPU implements Single Precision floating point. At the moment you declared your variable as double, the compiler wasn't able to use the FPU and implemented your operations with its own routines.
You also should be careful with integer and float promotions in C. This is, any integer constant will be promoted to the natural integer (probably uint32_t) and any floating point constant will be promoted to double.
Here's and example of what I'm talking about (using GCC), declaring d_aux as float:
d_aux = d_aux * 0.9012555 + 0.11152547;
movw r3, #0
movt r3, #0
ldr r3, [r3, #0]
mov r0, r3
bl 0 <__aeabi_f2d>
mov r2, r0
mov r3, r1
mov r0, r2
mov r1, r3
add r3, pc, #72
ldrd r2, r3, [r3]
bl 0 <__aeabi_dmul>
mov r2, r0
mov r3, r1
mov r0, r2
mov r1, r3
add r3, pc, #64
ldrd r2, r3, [r3]
bl 0 <__aeabi_dadd>
mov r2, r0
mov r3, r1
mov r0, r2
mov r1, r3
bl 0 <__aeabi_d2f>
mov r2, r0
movw r3, #0
The statements in read show how the compiler called the double functions to perform the arithmetic and the final is a conversion from double to float. This is the double promotion.
Now, the same code but with casts:
d_aux = d_aux * (float)0.9012555 + (float)0.11152547;
movw r3, #0
movt r3, #0
vldr s14, [r3]
vldr s15, [pc, #48]
vmul.f32 s14, s14, s15
vldr s15, [pc, #44]
vadd.f32 s15, s14, s15
movw r3, #0
movt r3, #0
vstr s15, [r3]
As you can see, the compiler now used the FP instructions and registers.
Could you please try this on your environment, first, declare d_aux as float and cast your constants to confirm the compiler will use the FPU instructions?
Also, make sure to "tell" MQX that FPU is in used. There should be a macro on your PSP or BSP config file that enables the kernel FPU management for context switch.