Перейти к содержанию
    

функция memcpu

Приветствую!

Народ, не подскажете , где можно найти memcpu для арма, желательно оптимизированную, что бы работала как можно быстрей??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

memcpy, наверное? Для конкретного случая лучше написать свою на asm'е с использованием LDM/STM. У RealView библиотечная функция работает именно так, перекрыть её по производительности затруднительно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

memcpy, наверное? Для конкретного случая лучше написать свою на asm'е с использованием LDM/STM. У RealView библиотечная функция работает именно так, перекрыть её по производительности затруднительно.

 

А можно где-нить на исходник этой функции посмотреть?.. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно где-нить на исходник этой функции посмотреть?.. :rolleyes:

НУ где то так:

void memcpy( char *dest, char *source, char len ){

while (len--) *dest++ = *source++;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

НУ где то так:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...