mspgcc win32 build 2002-12-17 from www.mikrocontroller.net fail to compile working code with -O2 flag.

Here a example from the TCPIP source.

memcpy(&TxFrame2[ETH_SA_OFS], &MyMAC, 6);
1c0c:   3f 40 6d 11             mov     #4461,  r15     ;#0x116d
1c10:   b2 4f 06 02             mov     @r15+,  &0x0206     ;
1c14:   b2 4f 08 02             mov     @r15+,  &0x0208     ;
1c18:   b2 4f 0a 02             mov     @r15+,  &0x020a     ;
memcpy(&TxFrame2[ARP_SENDER_HA_OFS], &MyMAC, 6); // !HERE! 1c38: b2 4f 16 02 mov @r15+, &0x0216 ;
1c3c:   b2 4f 18 02             mov     @r15+,  &0x0218     ;
1c40:   b2 4f 1a 02             mov     @r15+,  &0x021a     ;

R15 should be reset to 0x116d in the second call of memcpy. I don't know if it's a bug in memcpy where the pointer on &MyMAC need some special keyword like "volatile" or it's a bug un the optimization.

memcpy(&TxFrame2[ETH_SA_OFS], &MyMAC, 6);
1c0c:   3f 40 6d 11             mov     #4461,  r15     ;#0x116d
1c10:   b2 4f 06 02             mov     @r15+,  &0x0206     ;
1c14:   b2 4f 08 02             mov     @r15+,  &0x0208     ;
1c18:   b2 4f 0a 02             mov     @r15+,  &0x020a     ;
*(unsigned int *)&TxFrame2[ETH_TYPE_OFS] = SWAPB(FRAME_ARP);
1c1c:   b2 40 08 06 0c 02       mov     #1544,  &0x020c     ;#0x0608

// ARP
*(unsigned int *)&TxFrame2[ARP_HARDW_OFS] = SWAPB(HARDW_ETH10);
1c22:   b2 40 00 01 0e 02       mov     #256,   &0x020e     ;#0x0100
*(unsigned int *)&TxFrame2[ARP_PROT_OFS] = SWAPB(FRAME_IP);
1c28:   b2 42 10 02             mov     #8,     &0x0210     ;subst r2 with 
As==11
*(unsigned int *)&TxFrame2[ARP_HLEN_PLEN_OFS] = SWAPB(IP_HLEN_PLEN);
1c2c:   b2 40 06 04 12 02       mov     #1030,  &0x0212     ;#0x0406
*(unsigned int *)&TxFrame2[ARP_OPCODE_OFS] = SWAPB(OP_ARP_REQUEST);
1c32:   b2 40 00 01 14 02       mov     #256,   &0x0214     ;#0x0100
memcpy(&TxFrame2[ARP_SENDER_HA_OFS], &MyMAC, 6); // !HERE! 1c38: b2 4f 16 02 mov @r15+, &0x0216 ;
1c3c:   b2 4f 18 02             mov     @r15+,  &0x0218     ;
1c40:   b2 4f 1a 02             mov     @r15+,  &0x021a     ;

--
Dominic Pageau


Reply via email to