The following code creates some interesting asm with the following flags: -g -c -Os -fno-force-mem -mmcu=msp430x437
It looks like it unrolled the loop in 64 byte chunks and is instead iterating over that. While this is faster this would hardly ever get run so I would rather have it small. attached are list files with the -fno-force-mem on and off and the C file. If I change the span it iterates over to a nonmultiple of 64 I get the expected asm. My question is what does no-force-mem have to do with this and why isn't auto increment addressing being used? In this case it would save quite a bit here. -Chris --- #include <msp430x44x.h> int test() { unsigned int sum = 0; unsigned int *addr; for (addr = (int *)0x8000; addr != 0x0000; addr++) { sum += *addr; } return sum; } ------- for (addr = (int *)0x8000; addr != 0x0000; addr++) {^M 2: 3e 40 00 80 mov #-32768,r14 ;#0x8000 sum += *addr;^M 6: 2f 5e add @r14, r15 ; 8: 1f 5e 02 00 add 2(r14), r15 ; c: 1f 5e 04 00 add 4(r14), r15 ; 10: 1f 5e 06 00 add 6(r14), r15 ; 14: 1f 5e 08 00 add 8(r14), r15 ; 18: 1f 5e 0a 00 add 10(r14),r15 ; 1c: 1f 5e 0c 00 add 12(r14),r15 ; 20: 1f 5e 0e 00 add 14(r14),r15 ; 24: 1f 5e 10 00 add 16(r14),r15 ; 28: 1f 5e 12 00 add 18(r14),r15 ; 2c: 1f 5e 14 00 add 20(r14),r15 ; 30: 1f 5e 16 00 add 22(r14),r15 ; 34: 1f 5e 18 00 add 24(r14),r15 ; 38: 1f 5e 1a 00 add 26(r14),r15 ; 3c: 1f 5e 1c 00 add 28(r14),r15 ; 40: 1f 5e 1e 00 add 30(r14),r15 ; 44: 1f 5e 20 00 add 32(r14),r15 ; 48: 1f 5e 22 00 add 34(r14),r15 ; 4c: 1f 5e 24 00 add 36(r14),r15 ; 50: 1f 5e 26 00 add 38(r14),r15 ; 54: 1f 5e 28 00 add 40(r14),r15 ; 58: 1f 5e 2a 00 add 42(r14),r15 ; 5c: 1f 5e 2c 00 add 44(r14),r15 ; 60: 1f 5e 2e 00 add 46(r14),r15 ; 64: 1f 5e 30 00 add 48(r14),r15 ; 68: 1f 5e 32 00 add 50(r14),r15 ; 6c: 1f 5e 34 00 add 52(r14),r15 ; 70: 1f 5e 36 00 add 54(r14),r15 ; 74: 1f 5e 38 00 add 56(r14),r15 ; 78: 1f 5e 3a 00 add 58(r14),r15 ; 7c: 1f 5e 3c 00 add 60(r14),r15 ; 80: 1f 5e 3e 00 add 62(r14),r15 ; 84: 3e 50 40 00 add #64, r14 ;#0x0040 88: be 23 jnz $-130 ;abs 0x6 }
test.c
Description: Binary data
test.lst
Description: Binary data
test.unr.lst
Description: Binary data