Это фича свежего GCC. Вот IAR во всех вариантах: видно что первые 2
- целиком в FPU, вторые - процессорные, во много раз дольше. 470 tempf2 = (float)I_LED * 0.001f;
\ 0x28C 0x.... 0x.... LDR.W R10,??DataTable8_29
\ 0x290 0xF8BA 0x0000 LDRH R0,[R10, #+0]
\ 0x294 0xEE00 0x0A10 VMOV S0,R0
\ 0x298 0xEEB8 0x0A40 VCVT.F32.U32 S0,S0
\ 0x29C 0xEDDF 0x0ACF VLDR.W S1,??proc_calibr_main_1
\ 0x2A0 0xEE20 0x8A20 VMUL.F32 S16,S0,S1
470 tempf2 = (float)I_LED / 1000.0f;
\ 0x28C 0x.... 0x.... LDR.W R10,??DataTable8_29
\ 0x290 0xF8BA 0x0000 LDRH R0,[R10, #+0]
\ 0x294 0xEE00 0x0A10 VMOV S0,R0
\ 0x298 0xEEB8 0x0A40 VCVT.F32.U32 S0,S0
\ 0x29C 0xEDDF 0x0ACF VLDR.W S1,??proc_calibr_main_1
\ 0x2A0 0xEE80 0x8A20 VDIV.F32 S16,S0,S1 //это выполняется так же быстро
470 tempf2 = (float)I_LED * 0.001;
\ 0x288 0x.... 0x.... LDR.W R10,??DataTable8_29
\ 0x28C 0xF8BA 0x0000 LDRH R0,[R10, #+0]
\ 0x290 0xEE00 0x0A10 VMOV S0,R0
\ 0x294 0xEEB8 0x0A40 VCVT.F32.U32 S0,S0
\ 0x298 0xEE10 0x0A10 VMOV R0,S0
\ 0x29C 0x.... 0x.... BL __aeabi_f2d
\ 0x2A0 0x.... 0x.... LDR.W R2,??DataTable8_30
\ 0x2A4 0x.... 0x.... LDR.W R3,??DataTable8_31
\ 0x2A8 0x.... 0x.... BL __aeabi_dmul // !!!
\ 0x2AC 0x.... 0x.... BL __aeabi_d2f // !!
\ 0x2B0 0xEE08 0x0A10 VMOV S16,R0
470 tempf2 = I_LED * 0.001;
\ 0x288 0x.... 0x.... LDR.W R10,??DataTable8_29
\ 0x28C 0xF8BA 0x0000 LDRH R0,[R10, #+0]
\ 0x290 0x.... 0x.... BL __aeabi_ui2d // !!
\ 0x294 0x.... 0x.... LDR.W R2,??DataTable8_30
\ 0x298 0x.... 0x.... LDR.W R3,??DataTable8_31
\ 0x29C 0x.... 0x.... BL __aeabi_dmul // !!!
\ 0x2A0 0x.... 0x.... BL __aeabi_d2f // !!
\ 0x2A4 0xEE08 0x0A10 VMOV S16,R0