Цитата(AHTOXA @ Dec 29 2010, 21:11)

Ха! Вот вам примерчик "нескольких регистровых проверок":
И откуда вы эту непотребность вытащили?
Поди, гнусь?
Вот эта строчка
Код
memcpy((void*)ptr, (const void*)(ptr+20), 20);
сгенерилась вот в такой код под IAR:
CODE
__aeabi_memcpy(_D, _S, _N);
0x327a: 0x2214 MOVS r2, #20 ; 0x14
0x327c: 0xf100 0x0114 ADD.W r1, r0, #20 ; 0x14
0x3280: 0xf003 0xf924 BL __aeabi_memcpy ; 0x64cc
........
__aeabi_memcpy:
0x64cc: 0xb34a CBZ r2, 0x6522
0x64ce: 0x078b LSLS r3, r1, #30
0x64d0: 0xd007 BEQ.N 0x64e2
0x64d2: 0xf811 0x3b01 LDRB.W r3, [r1], #0x1
0x64d6: 0xf800 0x3b01 STRB.W r3, [r0], #0x1
0x64da: 0x1e52 SUBS r2, r2, #1
0x64dc: 0xd021 BEQ.N 0x6522
0x64de: 0x078b LSLS r3, r1, #30
0x64e0: 0xd1f7 BNE.N 0x64d2
0x64e2: 0x0783 LSLS r3, r0, #30
0x64e4: 0xd11e BNE.N 0x6524
__aeabi_memcpy4:
__aeabi_memcpy8:
0x64e6: 0x3a10 SUBS r2, r2, #16 ; 0x10
0x64e8: 0xd307 BCC.N 0x64fa
0x64ea: 0xb430 PUSH {r4, r5}
0x64ec: 0xe8b1 0x1038 LDM r1!, {r3-r5, r12}
0x64f0: 0x3a10 SUBS r2, r2, #16 ; 0x10
0x64f2: 0xe8a0 0x1038 STM r0!, {r3-r5, r12}
0x64f6: 0xd2f9 BCS.N 0x64ec
0x64f8: 0xbc30 POP {r4, r5}
0x64fa: 0x0753 LSLS r3, r2, #29
0x64fc: 0xbf24 ITT CS
0x64fe: 0xe8b1 0x1008 LDMCS r1!, {r3, r12}
0x6502: 0xe8a0 0x1008 STMCS r0!, {r3, r12}
0x6506: 0xbf44 ITT MI
0x6508: 0xf851 0x3b04 LDRMI.W r3, [r1], #0x4
0x650c: 0xf840 0x3b04 STRMI.W r3, [r0], #0x4
0x6510: 0x07d2 LSLS r2, r2, #31
0x6512: 0xbf24 ITT CS
0x6514: 0xf831 0x2b02 LDRHCS.W r2, [r1], #0x2
0x6518: 0xf820 0x2b02 STRHCS.W r2, [r0], #0x2
0x651c: 0xbf44 ITT MI
0x651e: 0x780b LDRBMI r3, [r1]
0x6520: 0x7003 STRBMI r3, [r0]
0x6522: 0x4770 BX lr
0x6524: 0x3a08 SUBS r2, r2, #8
0x6526: 0xd307 BCC.N 0x6538
0x6528: 0xe8b1 0x1008 LDM r1!, {r3, r12}
0x652c: 0x3a08 SUBS r2, r2, #8
0x652e: 0xf840 0x3b04 STR.W r3, [r0], #0x4
0x6532: 0xf840 0xcb04 STR.W r12, [r0], #0x4
0x6536: 0xd2f7 BCS.N 0x6528
0x6538: 0x0753 LSLS r3, r2, #29
0x653a: 0xe7e4 B.N 0x6506
Оверхед, конечно, есть, но не бог весть какой значительный, в уплату универсальности.
ЗЫ: какой смысл смотреть исходник, когда подобные библиотечные функции жёстко "затачиваются" на ассемблере?