From: SourceForge.net <no...@so...> - 2003-12-20 12:36:21
|
Feature Requests item #863474, was opened at 2003-12-20 12:54 Message generated for change (Comment added) made by bernhardheld You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=863474&group_id=599 Category: None Group: None Status: Open Priority: 5 Submitted By: Frieder Ferlemann (frief) Assigned to: Nobody/Anonymous (nobody) Summary: i = ((int)c1<<8) | c2; is rather long Initial Comment: the relatively common operation of combining two unsigned char variables into an integer produces long code: unsigned char c1,c2; unsigned int i; void main() { i = ((int)c1<<8) | c2; } ;test.c:7: i=((int)c1<<8) | c2; ; genCast mov r2,_c1 mov r3,#0x00 ; genLeftShift ; genLeftShiftLiteral ; genlshTwo mov ar3,r2 mov r2,#0x00 ; genCast mov r4,_c2 mov r5,#0x00 ; genOr mov a,r4 orl a,r2 mov _i,a mov a,r5 orl a,r3 mov (_i + 1),a (likewise if you use '+' instead of '|') Frieder ---------------------------------------------------------------------- >Comment By: Bernhard Held (bernhardheld) Date: 2003-12-20 13:36 Message: Logged In: YES user_id=203539 Still not perfect, but much shorter: void foo() { ((char near *) &i)[0] = c2; ((char near *) &i)[1] = c1; } ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=863474&group_id=599 |