From: Charles J. <jo...@un...> - 2000-06-17 11:14:56
|
Hi, I experimented a strange behavior with the conversion from unsigned short to signed int. It appears that sdcc generates (incorrectly ?) a sign extension code. As a consequence, any unsigned short above 127 is converted into a negative integer. Here is an example : /* testi.c */ #include "reg51.h" void dummy1(int i) {return;} unsigned short dummy2(void){return (unsigned short)200;} int main() { unsigned short s; int i; s=dummy2(); i=s; dummy1(i); return i; } TESTI.LST : 0041 296 _main: 0041 297 C$testi.c$11$1$1 ==. 298 ; testi.c 11 0041 12s00r3D 299 lcall _dummy2 0044 AA 82 300 mov r2,dpl 0046 301 C$testi.c$12$1$1 ==. 302 ; testi.c 12 0046 EA 303 mov a,r2 0047 33 304 rlc a ; BUG ? 0048 95 E0 305 subb a,acc ; BUG ? 004A FB 306 mov r3,a 004B 307 C$testi.c$13$1$1 ==. 308 ; testi.c 13 004B C0 02 309 push ar2 004D C0 03 310 push ar3 004F 8A 82 311 mov dpl,r2 0051 8B 83 312 mov dph,r3 0053 12s00r38 313 lcall _dummy1 0056 D0 03 314 pop ar3 0058 D0 02 315 pop ar2 005A 316 C$testi.c$15$1$1 ==. The problem appears at TESTI.LST:304. Thanks in advance for any comment. Charles. -- Charles JOUBERT (mailto:jo...@un...) IUFM de Montpellier |LEM - cc079 - UM II |tel: 04 67 14 34 42 2, place Marcel GODECHOT BP 4152 |Place Eugene BATAILLON |fax: 04 67 04 21 30 34092 Montpellier Cedex 5 |34095 Montpellier Cedex 5| |
From: Sandeep D. <sa...@dd...> - 2000-06-19 15:55:47
|
Hi Charles, This was a bug. Have fixed it in the current source tree The next release ( 2.2.1 ), will have the fix. regards Sandeep -----Original Message----- From: sdc...@li... [mailto:sdc...@li...]On Behalf Of Charles JOUBERT Sent: Saturday, June 17, 2000 4:13 AM To: sdc...@li... Subject: [Sdcc-user] unsigned short to signed int conversion bug ? Hi, I experimented a strange behavior with the conversion from unsigned short to signed int. It appears that sdcc generates (incorrectly ?) a sign extension code. As a consequence, any unsigned short above 127 is converted into a negative integer. Here is an example : /* testi.c */ #include "reg51.h" void dummy1(int i) {return;} unsigned short dummy2(void){return (unsigned short)200;} int main() { unsigned short s; int i; s=dummy2(); i=s; dummy1(i); return i; } TESTI.LST : 0041 296 _main: 0041 297 C$testi.c$11$1$1 ==. 298 ; testi.c 11 0041 12s00r3D 299 lcall _dummy2 0044 AA 82 300 mov r2,dpl 0046 301 C$testi.c$12$1$1 ==. 302 ; testi.c 12 0046 EA 303 mov a,r2 0047 33 304 rlc a ; BUG ? 0048 95 E0 305 subb a,acc ; BUG ? 004A FB 306 mov r3,a 004B 307 C$testi.c$13$1$1 ==. 308 ; testi.c 13 004B C0 02 309 push ar2 004D C0 03 310 push ar3 004F 8A 82 311 mov dpl,r2 0051 8B 83 312 mov dph,r3 0053 12s00r38 313 lcall _dummy1 0056 D0 03 314 pop ar3 0058 D0 02 315 pop ar2 005A 316 C$testi.c$15$1$1 ==. The problem appears at TESTI.LST:304. Thanks in advance for any comment. Charles. -- Charles JOUBERT (mailto:jo...@un...) IUFM de Montpellier |LEM - cc079 - UM II |tel: 04 67 14 34 42 2, place Marcel GODECHOT BP 4152 |Place Eugene BATAILLON |fax: 04 67 04 21 30 34092 Montpellier Cedex 5 |34095 Montpellier Cedex 5| _______________________________________________ Sdcc-user mailing list Sdc...@li... http://lists.sourceforge.net/mailman/listinfo/sdcc-user |