From: Dave M. <mc...@ne...> - 2002-08-12 06:45:36
|
Hi folks! My current project makes use of several functions with inline MCS-51 assembler. Some of these functions take an unsigned char as a parameter, which I notice is passed in dpl. But, the compiler still allocates a byte in data space, with a label like "_<funcname>_<paramname>_1_1". Since all calls to these functions put the passed byte in dpl before the lcall, this seems redundant. As I'm running very low on direct data space in this project, this has become an issue of some concern to me. Is there a way to prevent the compiler from allocating space for those parameters? Or (which seems more likely) am I just going about this in a suboptimal way? :-) Any suggestions would be appreciated. -Dave -- Dave McGuire "I haven't worn pants in 14 months!" St. Petersburg, FL -Pete Wargo |
From: Lou <co...@fi...> - 2002-08-18 00:13:59
|
I hate to say "me too", but... Me too. On pretty much all counts. It is amazing how precious a few bytes are when you only have 95 to play with. Not only is the memory allocated when it does not need to be, it also does not get referenced anywhere in the generated source. In other words, it is a total waste of a (or 2, or 4) perfectly good byte(s). The really icky thing is that it doesn't happen all of the time. It is deterministic, but I don't know what triggers it. It does happen in every single one of my callbacks, though. They get a single unsigned short parameter passed to them, which is not used yet, though it is there for when the need arises. Every one of those callbacks wastes 2 bytes. Here is an example of such a callback. static void exercise_bug(unsigned short arg) { /* not used */ arg; } It allocates _excercise_bug_arg_1_1, which never gets used, in DSEG. It happens even if I don't have the "not used" line in there. The purpose of that line is to make the compiler not issue a warning about not using the parameter. If I make the function not static, the problem goes away. But, then, of course, the symbol is visible to everybody. I don't know whether the problem has something to do with the function being declared as static (how could it?), or if I am just tickling the boundary of whatever the real problem is. On Mon, Aug 12, 2002 at 02:45:18AM -0400, Dave McGuire wrote: > > Hi folks! > > My current project makes use of several functions with inline MCS-51 > assembler. Some of these functions take an unsigned char as a parameter, > which I notice is passed in dpl. But, the compiler still allocates a byte > in data space, with a label like "_<funcname>_<paramname>_1_1". Since all > calls to these functions put the passed byte in dpl before the lcall, this > seems redundant. As I'm running very low on direct data space in this > project, this has become an issue of some concern to me. Is there a way to > prevent the compiler from allocating space for those parameters? Or > (which seems more likely) am I just going about this in a suboptimal way? > :-) > > Any suggestions would be appreciated. > > -Dave > > -- > Dave McGuire "I haven't worn pants in 14 months!" > St. Petersburg, FL -Pete Wargo > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > -- -- Saying Windows 2000 is the most powerful OS in the Microsoft family is like saying Moe was the smart Stooge. -Kevin Barkes |