Значит так режим ARM, интерверкинг выключен.
При оптимизации "Balanced" выдает такой код.
При оптимизации "Speed" выдает такой
Код
\ In section .text, align 4, keep-with-next
25 u32_t crc32_update(void *data, u32_t crc, u32_t len)
26 {
\ crc32_update:
\ 00000000 00402DE9 PUSH {LR}
\ 00000004 04D04DE2 SUB SP,SP,#+4
27 u32_t i,z;
28 u8_t *buf = data;
29 for (i = 0; i < len; i++)
\ 00000008 000052E3 CMP R2,#+0
\ 0000000C 0C00000A BEQ ??crc32_update_0
\ 00000010 38309FE5 LDR R3,??crc32_update_1 ;; 0xedb88320
30 {
31 crc ^= buf[i];
\ ??crc32_update_2:
\ 00000014 00C0D0E5 LDRB R12,[R0, #+0]
\ 00000018 01102CE0 EOR R1,R12,R1
32 for (z = 0; z < 8; z++ )
\ 0000001C 08C0A0E3 MOV R12,#+8
33 crc = crc & 0x01 ? (crc >> 1) ^ poly32 : crc >> 1;
\ ??crc32_update_3:
\ 00000020 A1E0A0E1 LSR LR,R1,#+1
\ 00000024 010011E3 TST R1,#0x1
\ 00000028 0E102310 EORNE R1,R3,LR
\ 0000002C 0E10A001 MOVEQ R1,LR
\ 00000030 01C05CE2 SUBS R12,R12,#+1
\ 00000034 F9FFFF1A BNE ??crc32_update_3
34 }
\ 00000038 010080E2 ADD R0,R0,#+1
\ 0000003C 012052E2 SUBS R2,R2,#+1
\ 00000040 F3FFFF1A BNE ??crc32_update_2
35 return (crc);
\ ??crc32_update_0:
\ 00000044 0100A0E1 MOV R0,R1
\ 00000048 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning
\ 0000004C 0080BDE8 POP {PC} ;; return
\ ??crc32_update_1:
\ 00000050 2083B8ED DC32 0xedb88320
36 }
Здесь он зачем-то в стеке резервирует 4 байта
При оптимизации "Size" такой
Код
\ In section .text, align 4, keep-with-next
25 u32_t crc32_update(void *data, u32_t crc, u32_t len)
26 {
\ crc32_update:
\ 00000000 00502DE9 PUSH {R12,LR}
27 u32_t i,z;
28 u8_t *buf = data;
29 for (i = 0; i < len; i++)
\ 00000004 0030A0E3 MOV R3,#+0
\ 00000008 020000EA B ??crc32_update_0
30 {
31 crc ^= buf[i];
32 for (z = 0; z < 8; z++ )
\ ??crc32_update_1:
\ 0000000C 01E05EE2 SUBS LR,LR,#+1
\ 00000010 0500001A BNE ??crc32_update_2
\ 00000014 013083E2 ADD R3,R3,#+1
\ ??crc32_update_0:
\ 00000018 020053E1 CMP R3,R2
\ 0000001C 0800002A BCS ??crc32_update_3
\ 00000020 00C0D3E7 LDRB R12,[R3, +R0]
\ 00000024 01102CE0 EOR R1,R12,R1
\ 00000028 08E0A0E3 MOV LR,#+8
33 crc = crc & 0x01 ? (crc >> 1) ^ poly32 : crc >> 1;
\ ??crc32_update_2:
\ 0000002C A1C0A0E1 LSR R12,R1,#+1
\ 00000030 010011E3 TST R1,#0x1
\ 00000034 10109F15 LDRNE R1,??crc32_update_4 ;; 0xedb88320
\ 00000038 0C102110 EORNE R1,R1,R12
\ 0000003C 0C10A001 MOVEQ R1,R12
\ 00000040 F1FFFFEA B ??crc32_update_1
34 }
35 return (crc);
\ ??crc32_update_3:
\ 00000044 0100A0E1 MOV R0,R1
\ 00000048 0280BDE8 POP {R1,PC} ;; return
\ ??crc32_update_4:
\ 0000004C 2083B8ED DC32 0xedb88320
36 }