We're still getting some odd results from the C51 toolchain from time to time. We get different builds if we manually delete all .OBJs than if we tell uVision to "build all". You'd think that would replace all the .OBJs. We get different code generated when the load is rebuilt with the two methods. And in the "build all" case, the loads often do not run correctly, while the manually deleted version does. I can't imagine why there's a difference in the two cases; you'd think "build all" would rebuild everything, and start just by deleting the existing .obj. A couple of examples of the same section of code from the two different build methods: version 1:
R MOV DPTR,#entry MOV A,R6 MOVX @DPTR,A INC DPTR MOV A,R7 MOVX @DPTR,A ; SOURCE LINE # 189 ; SOURCE LINE # 191 R MOV queues,#08H ; SOURCE LINE # 192 R MOV queues+01H,#08H ; SOURCE LINE # 194 R MOV DPTR,#entry MOVX A,@DPTR MOV R6,A INC DPTR MOVX A,@DPTR ADD A,#05H MOV DPL,A
MOV R3,AR7 MOV R2,AR6 ; SOURCE LINE # 189 ; SOURCE LINE # 191 R MOV queues,#08H ; SOURCE LINE # 192 R MOV queues+01H,#08H ; SOURCE LINE # 194 MOV A,R3 ADD A,#05H MOV DPL,A
R MOV DPTR,#link MOV A,R7 MOVX @DPTR,A INC DPTR MOV A,R4 MOVX @DPTR,A INC DPTR MOV A,R5 MOVX @DPTR,A ; SOURCE LINE # 552
R MOV DPTR,#igmp MOV A,R4 MOVX @DPTR,A INC DPTR MOV A,R5 MOVX @DPTR,A ;---- Variable 'link' assigned to Register 'R3' ---- MOV R3,AR7