Hi all,
as you see in the disassembly listing below, there is
a small lack of optimisation:
The compiler refuses to use autoincrement when moving
byte blocks. With integer values it works ok.
move bytes:
6: ee 4f 00 00 mov.b @r15, 0(r14) ;
a: 1f 53 inc r15 ;
c: 1e 53 inc r14 ;
move integers:
1c: be 4f 00 00 mov @r15+, 0(r14) ;
20: 2e 53 incd r14 ;
I assume this can be fixed easily, but I'm not too much
involved in gcc programming now, so I ask for your support.
Regards,
Ralf
See the whole listing below:
test.o: file format elf32-msp430
Disassembly of section .text:
00000000 <copybytes>:
void copybytes(char *src, char *dst, int len)
{
while (len--)
0: 3d 53 add #-1, r13 ;r3 As==11
2: 3d 93 cmp #-1, r13 ;r3 As==11
4: 07 24 jz $+16 ;abs 0x14
*dst++ = *src++;
6: ee 4f 00 00 mov.b @r15, 0(r14) ;
a: 1f 53 inc r15 ;
c: 1e 53 inc r14 ;
e: 3d 53 add #-1, r13 ;r3 As==11
10: 3d 93 cmp #-1, r13 ;r3 As==11
12: f9 23 jnz $-12 ;abs 0x6
}
14: 30 41 ret
00000016 <copywords>:
void copywords(int *src, int *dst, int len)
{
while (len--)
16: 3d 53 add #-1, r13 ;r3 As==11
18: 3d 93 cmp #-1, r13 ;r3 As==11
1a: 06 24 jz $+14 ;abs 0x28
*dst++ = *src++;
1c: be 4f 00 00 mov @r15+, 0(r14) ;
20: 2e 53 incd r14 ;
22: 3d 53 add #-1, r13 ;r3 As==11
24: 3d 93 cmp #-1, r13 ;r3 As==11
26: fa 23 jnz $-10 ;abs 0x1c
}
28: 30 41 ret