реклама на сайте
подробности

 
 
> функция memcpu
IDVM
сообщение Nov 30 2007, 16:01
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 12-10-07
Пользователь №: 31 291



Приветствую!
Народ, не подскажете , где можно найти memcpu для арма, желательно оптимизированную, что бы работала как можно быстрей??
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
aaarrr
сообщение Nov 30 2007, 16:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



memcpy, наверное? Для конкретного случая лучше написать свою на asm'е с использованием LDM/STM. У RealView библиотечная функция работает именно так, перекрыть её по производительности затруднительно.
Go to the top of the page
 
+Quote Post
elfsoft
сообщение Dec 4 2007, 09:49
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 6-07-07
Из: Минск, Беларусь
Пользователь №: 28 923



Цитата(aaarrr @ Nov 30 2007, 18:08) *
memcpy, наверное? Для конкретного случая лучше написать свою на asm'е с использованием LDM/STM. У RealView библиотечная функция работает именно так, перекрыть её по производительности затруднительно.


А можно где-нить на исходник этой функции посмотреть?.. rolleyes.gif
Go to the top of the page
 
+Quote Post
KAlex
сообщение Dec 4 2007, 10:49
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(elfsoft @ Dec 4 2007, 12:49) *
А можно где-нить на исходник этой функции посмотреть?.. rolleyes.gif

НУ где то так:
void memcpy( char *dest, char *source, char len ){
while (len--) *dest++ = *source++;
}
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 4 2007, 11:24
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(KAlex @ Dec 4 2007, 13:49) *
НУ где то так:
void memcpy( char *dest, char *source, char len ){
while (len--) *dest++ = *source++;
}

Если никуда не спешить, то можно и так smile.gif

Цитата(elfsoft @ Dec 4 2007, 12:49) *
А можно где-нить на исходник этой функции посмотреть?.. rolleyes.gif


Да простит меня фирма 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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 21:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016