Compiler generates bad code ?

I have spent a lot of time on this. Here is my observation:

I am porting a piece of GNU code to the MCB2130 card using the Keil toolset (including the limited compiler that comes with the board). I have a function call:

handle = function1(a, b, c, d);

handle is unsigned char. function1 has a number of different return codes. When I look at the generated code for one specific return code, I see the following:

923: return (-20);
00000024 4800 LDR R0,=0xFFFFFFEC
00000026 E0EC B L_204 ; T=0x00000202
924: }

So far so good.... but when I get to label L_204, I see the following:

0000022A L_204:
0000022A 4886 LDR R0,=0x218
0000022C 4485 ADD R13,R13,R0
0000022E B001 ADD R13,#0x4
00000230 BC08 POP {R3}
00000232 4718 BX R3
00000234 ENDP ;

Obviously, the first thing that this code does is to overwitre the return code. My handle is assigned a wrong value. I found out that if I remove some code inside function1, especially a call to another function, the L_204 code does not overwrite the return code (obvisouly function1 is now broken).

I am going to try the GNU compiler.

Any idea ?

Parents
  • I found out that if I remove some code inside function1, especially a call to another function, the L_204 code does not overwrite the return code (obvisouly function1 is now broken).

    ...

    Any idea ?


    Yes. Please contact our technical support department and report this problem so that we can get it fixed in the next compiler release.

    Jon

Reply
  • I found out that if I remove some code inside function1, especially a call to another function, the L_204 code does not overwrite the return code (obvisouly function1 is now broken).

    ...

    Any idea ?


    Yes. Please contact our technical support department and report this problem so that we can get it fixed in the next compiler release.

    Jon

Children
No data
More questions in this forum