CODE
**********************************************************************
-O0
000320 490e LDR r1,|L8.860|
000322 6008 STR r0,[r1,#0] ; SigRe
;;;3771 pSigRe = SigRe;
000324 460c MOV r4,r1
;;;3772 for (uint32_t i = FFT_N; i--; ) {
000326 f44f6680 MOV r6,#0x400
00032a e00f B |L8.844|
|L8.812|
;;;3775 *pSigRe++ = log2f(*pSigRe) * 15.0515;
00032c 6820 LDR r0,[r4,#0]
00032e f7fffffe BL log2f
000332 900b STR r0,[sp,#0x2c]
000334 f7fffffe BL __aeabi_f2d
000338 4680 MOV r8,r0
00033a 4a14 LDR r2,|L8.908|
00033c 4b14 LDR r3,|L8.912|
00033e f7fffffe BL __aeabi_dmul
000342 e9cd010c STRD r0,r1,[sp,#0x30]
000346 f7fffffe BL __aeabi_d2f
00034a c401 STM r4!,{r0}
|L8.844|
00034c 1e30 SUBS r0,r6,#0 ;3772
00034e f1a60601 SUB r6,r6,#1 ;3772
000352 d1eb BNE |L8.812|
|L8.860|
DCD SigRe
|L8.908|
DCD 0x353f7cee
|L8.912|
DCD 0x402e1a5e
********************************************************************************
-O0
000320 490e LDR r1,|L8.860|
000322 6008 STR r0,[r1,#0] ; SigRe
;;;3771 pSigRe = SigRe;
000324 460c MOV r4,r1
;;;3772 for (uint32_t i = FFT_N; i--; ) {
000326 f44f6680 MOV r6,#0x400
00032a e010 B |L8.846|
|L8.812|
;;;3775 *pSigRe = log2f(*pSigRe) * 15.0515;
00032c 6820 LDR r0,[r4,#0]
00032e f7fffffe BL log2f
000332 900b STR r0,[sp,#0x2c]
000334 f7fffffe BL __aeabi_f2d
000338 4680 MOV r8,r0
00033a 4a14 LDR r2,|L8.908|
00033c 4b14 LDR r3,|L8.912|
00033e f7fffffe BL __aeabi_dmul
000342 e9cd010c STRD r0,r1,[sp,#0x30]
000346 f7fffffe BL __aeabi_d2f
00034a 6020 STR r0,[r4,#0]
;;;3776 pSigRe++;
00034c 1d24 ADDS r4,r4,#4
|L8.846|
00034e 1e30 SUBS r0,r6,#0 ;3772
000350 f1a60601 SUB r6,r6,#1 ;3772
000354 d1ea BNE |L8.812|
|L8.860|
DCD SigRe
|L8.908|
DCD 0x353f7cee
|L8.912|
DCD 0x402e1a5e
********************************************************************************
-O3 -Otime
;;;3775 *pSigRe++ = log2f(*pSigRe) * 15.0515;
000264 f24038ff MOV r8,#0x3ff ;3722
0002d8 4c0a LDR r4,|L8.772|
0002da 4d17 LDR r5,|L8.824|
0002dc 4e17 LDR r6,|L8.828|
|L8.734|
0002de 6820 LDR r0,[r4,#0] ;3775
0002e0 f7fffffe BL log2f
0002e4 f7fffffe BL __aeabi_f2d
0002e8 462a MOV r2,r5 ;3775
0002ea 4633 MOV r3,r6 ;3775
0002ec f7fffffe BL __aeabi_dmul
0002f0 f7fffffe BL __aeabi_d2f
0002f4 f8440b04 STR r0,[r4],#4 ;3775
0002f8 f1b80801 SUBS r8,r8,#1 ;3775
0002fc d2ef BCS |L8.734|
|L8.772|
DCD extram
|L8.824|
DCD 0x353f7cee
|L8.828|
DCD 0x402e1a5e
********************************************************************************
-O3 -Otime
;;;3771 pSigRe = SigRe;
;;;3772 for (uint32_t i = FFT_N; i--; ) {
;;;3775 *pSigRe = log2f(*pSigRe) * 15.0515;
;;;3776 pSigRe++;
;;;3777 }
000264 f24038ff MOV r8,#0x3ff ;3722
0002d8 4c0a LDR r4,|L8.772|
0002da 4d17 LDR r5,|L8.824|
0002dc 4e17 LDR r6,|L8.828|
|L8.734|
0002de 6820 LDR r0,[r4,#0] ;3775
0002e0 f7fffffe BL log2f
0002e4 f7fffffe BL __aeabi_f2d
0002e8 462a MOV r2,r5 ;3775
0002ea 4633 MOV r3,r6 ;3775
0002ec f7fffffe BL __aeabi_dmul
0002f0 f7fffffe BL __aeabi_d2f
0002f4 f8440b04 STR r0,[r4],#4 ;3775
0002f8 f1b80801 SUBS r8,r8,#1 ;3775
0002fc d2ef BCS |L8.734|
|L8.772|
DCD extram
|L8.824|
DCD 0x353f7cee
|L8.828|
DCD 0x402e1a5e
В общем, для Keil нет разницы. Как нет и никакого преимущества писать сразу *SigRe++ = ...
Учту замечание CppCheck. Но, чтобы снизошло озарение и просветление, так нет.
CODE
***********************************************************************
-O3
;;;3775 *pSigRe++ = log2f(*pSigRe) * 15.0515;
000208 f24035ff MOV r5,#0x3ff
000280 4c09 LDR r4,|L8.680|
000282 4e12 LDR r6,|L8.716|
000284 4f12 LDR r7,|L8.720|
|L8.646|
000286 6820 LDR r0,[r4,#0] ;3775
000288 f7fffffe BL log2f
00028c f7fffffe BL __aeabi_f2d
000290 4632 MOV r2,r6 ;3775
000292 463b MOV r3,r7 ;3775
000294 f7fffffe BL __aeabi_dmul
000298 f7fffffe BL __aeabi_d2f
00029c c401 STM r4!,{r0} ;3775
00029e 1e6d SUBS r5,r5,#1 ;3775
0002a0 d2f1 BCS |L8.646|
|L8.680|
DCD extram
|L8.716|
DCD 0x353f7cee
|L8.720|
DCD 0x402e1a5e