Is there a reason your target is defining double in an unuseful and
incompatible way rather than doing hard-single and soft-double? If you
have any control over the choice of ABI, I think the latter makes a
lot more sense.
I can see a few arguments for float==double, but haven't actually done that for our target yet.
A common error is to write 1.0 instead of 1.0f, where the former sometimes pulls in the soft double support.
Integer arguments to libm functions promote to double but I would prefer promote to 32 bit float.
Arguments to variadic functions promote to double. Again I would prefer 32 bit float.
Leaving long double as 64 bit, unlike in the question, means no loss of functionality relative to double == long double.
Cheers
Jon