Здесь оптимизированный вариант для того и другого
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Bill 25 ноября 2004 г. 13:37
В ответ на: Малость ошибся для AVR отправлено Bill 25 ноября 2004 г. 13:22


unsigned *wordcopy(unsigned *dst, unsigned *src, int count)
{
unsigned *temp = dst;

while (count)
{
*dst++ = *src++;
--count;
}
return temp;
}
\ wordcopy:
49 {
\ 000000 0A12 PUSH.W R10
\ 000002 1D410400 MOV.W 0x4(SP), R13
50 unsigned *temp = dst;
\ 000006 0F4C MOV.W R12, R15
\ 000008 053C JMP ??wordcopy_1
51
52 while (count)
53 {
54 *dst++ = *src++;
\ ??wordcopy_0:
\ 00000A 0A4C MOV.W R12, R10
\ 00000C 2C53 ADD.W #0x2, R12
\ 00000E BA4E0000 MOV.W @R14+, 0(R10)
55 --count;
\ 000012 3D53 ADD.W #0xffff, R13
56 }
\ ??wordcopy_1:
\ 000014 0D93 CMP.W #0x0, R13
\ 000016 F923 JNE ??wordcopy_0
57 return temp;
\ 000018 0C4F MOV.W R15, R12
\ 00001A 3A41 POP.W R10
\ 00001C 3041 RET
58 }

Maximum stack usage in bytes:

Function CSTACK
-------- ------
wordcopy 4

Segment part sizes:

Function/Label Bytes
-------------- -----
wordcopy 30


\ wordcopy:
\ 00000000 2F7B MOV R23,R27
\ 00000002 2F6A MOV R22,R26
\ 00000004 01D8 MOVW R27 : R26,R17 : R16
\ 00000006 01F9 MOVW R31 : R30,R19 : R18
4 unsigned *temp = dst;
\ 00000008 C006 RJMP ??wordcopy_0
5
6 while (count)
7 {
8 *dst++ = *src++;
\ ??wordcopy_1:
\ 0000000A 9121 LD R18,Z+
\ 0000000C 9131 LD R19,Z+
\ 0000000E 932D ST X+,R18
\ 00000010 933D ST X+,R19
9 --count;
\ 00000012 5041 SUBI R20,1
\ 00000014 4050 SBCI R21,0
\ ??wordcopy_0:
\ 00000016 2F24 MOV R18,R20
\ 00000018 2B25 OR R18,R21
\ 0000001A F7B9 BRNE ??wordcopy_1
10 }
11 return temp;
\ 0000001C 2FA6 MOV R26,R22
\ 0000001E 2FB7 MOV R27,R23
\ 00000020 9508 RET
12 }

Maximum stack usage in bytes:

Function CSTACK RSTACK
-------- ------ ------
wordcopy 0 0

34 bytes in segment CODE


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru