IDVM 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба Приветствую! Народ, не подскажете , где можно найти memcpu для арма, желательно оптимизированную, что бы работала как можно быстрей?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба memcpy, наверное? Для конкретного случая лучше написать свою на asm'е с использованием LDM/STM. У RealView библиотечная функция работает именно так, перекрыть её по производительности затруднительно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
elfsoft 0 4 декабря, 2007 Опубликовано 4 декабря, 2007 · Жалоба memcpy, наверное? Для конкретного случая лучше написать свою на asm'е с использованием LDM/STM. У RealView библиотечная функция работает именно так, перекрыть её по производительности затруднительно. А можно где-нить на исходник этой функции посмотреть?.. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 4 декабря, 2007 Опубликовано 4 декабря, 2007 · Жалоба А можно где-нить на исходник этой функции посмотреть?.. :rolleyes: НУ где то так: void memcpy( char *dest, char *source, char len ){ while (len--) *dest++ = *source++; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 4 декабря, 2007 Опубликовано 4 декабря, 2007 · Жалоба НУ где то так: void memcpy( char *dest, char *source, char len ){ while (len--) *dest++ = *source++; } Если никуда не спешить, то можно и так :) А можно где-нить на исходник этой функции посмотреть?.. :rolleyes: Да простит меня фирма ARM: __rt_memcpy cmp r2,#3 bls _memcpy_lastbytes ands r12,r0,#3 beq _memcpy_dest_aligned ldrb r3,[r1],#1 cmp r12,#2 add r2,r2,r12 ldrlsb r12,[r1],#1 strb r3,[r0],#1 ldrccb r3,[r1],#1 strlsb r12,[r0],#1 sub r2,r2,#4 strccb r3,[r0],#1 _memcpy_dest_aligned ands r3,r1,#3 beq __rt_memcpy_w subs r2,r2,#4 bcc _memcpy_lastbytes ldr r12,[r1,-r3]! cmp r3,#2 beq _memcpy_src2_loop bhi _memcpy_src3_loop _memcpy_src1_loop mov r3,r12,lsr #8 ldr r12,[r1,#4]! subs r2,r2,#4 orr r3,r3,r12,lsl #24 str r3,[r0],#4 bcs _memcpy_src1_loop add r1,r1,#1 b _memcpy_lastbytes _memcpy_src2_loop mov r3,r12,lsr #16 ldr r12,[r1,#4]! subs r2,r2,#4 orr r3,r3,r12,lsl #16 str r3,[r0],#4 bcs _memcpy_src2_loop add r1,r1,#2 b _memcpy_lastbytes _memcpy_src3_loop mov r3,r12,lsr #24 ldr r12,[r1,#4]! subs r2,r2,#4 orr r3,r3,r12,lsl #8 str r3,[r0],#4 bcs _memcpy_src3_loop add r1,r1,#3 b _memcpy_lastbytes __rt_memcpy_w subs r2,r2,#0x20 stmfd r13!,{r4,r14} bcc _memcpy_small _memcpy_aligned_loop ldmcsia r1!,{r3,r4,r12,r14} stmcsia r0!,{r3,r4,r12,r14} ldmcsia r1!,{r3,r4,r12,r14} stmcsia r0!,{r3,r4,r12,r14} subcss r2,r2,#0x20 bcs _memcpy_aligned_loop _memcpy_small movs r12,r2,lsl #28 ldmcsia r1!,{r3,r4,r12,r14} stmcsia r0!,{r3,r4,r12,r14} ldmmiia r1!,{r3,r4} stmmiia r0!,{r3,r4} movs r12,r2,lsl #30 ldmfd r13!,{r4,r14} ldrcs r3,[r1],#4 strcs r3,[r0],#4 moveq pc,r14 _memcpy_lastbytes movs r2,r2,lsl #31 ldrmib r2,[r1],#1 ldrcsb r3,[r1],#1 ldrcsb r12,[r1],#1 strmib r2,[r0],#1 strcsb r3,[r0],#1 strcsb r12,[r0],#1 mov pc,r14 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться