This is the mail archive of the crossgcc@sourceware.cygnus.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more infromation.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Thanks for the help all that responded. I'm new to embedded stuff and knew that the volatile keyword existed but did not know what it was for. NOW I KNOW. All is working now with optimizations enabled. COOL. Chris Christopher Bahns wrote: > Hello, > > Anyone know how to take advantage of most of GCC's optimizations without > it performing certain local optimizations? I read through the -O and -f > options in the gcc manual and did not see anything specifically just for > local optimizations. There is the "-fgcse" (global common > subexpressions) but I guess this would not apply to commonizing > subexpressions locally within a function... don't really know. I did not > see any "-flcse" or similar option. > > Here's my problem: > I'm using a cross-compiler under Windows 98/NT for an m68k-coff target > (MC68306). I have certain symbols mapped to specific hardware addresses > so that I can interact with the hardware (as I assume most would do it). > In some cases I assign different values to the same address in > succession, or intermixed with the assignment of values to other > addresses. It is important for all assignments to occur because each one > causes the hardware to perform a particular action, and all actions need > to occur in the order I've placed them in the C-language functions. The > problem is that with any GCC optimization level (-O, -O1, -O2, or -O3), > it "optimizes" out all but the last assignment to a given location. This > causes my program not to work. Everything seems to be fine if I disable > all optimizations, but some parts of my program are time-critical and I > may need some of the optimizations for the program to work right. > > Of course, I can choose to disable all optimizations except the ones > that I specify explicitly with "-f" options, but I'd prefer to have as > many enabled as possible without breaking my program. > > Here is some example code: > _____________________________________________________________ > /* duart's base i/o address */ > #define IoPortAddr ((BYTE*)0xa0001) > > void InitDuart681(void) > { > /* disable transmitter and receiver */ > IoPortAddr[DUCRA] = ((0x0 << 4) | (0x2 << 2) | 0x2); > IoPortAddr[DUCRB] = ((0x0 << 4) | (0x2 << 2) | 0x2); > > /* reset UartA transmitter and receiver */ > IoPortAddr[DUCRA] = (0x2 << 4); > IoPortAddr[DUCRA] = (0x3 << 4); > > /* make sure we're not in break */ > IoPortAddr[DUCRA] = (0x7 << 4); > IoPortAddr[DUCRA] = (0x5 << 4); > > /* reset error status */ > IoPortAddr[DUCRA] = (0x4 << 4); > > /* set for no N81, normal operation */ > IoPortAddr[DUCRA] = (0x1 << 4); > IoPortAddr[DUMRA] = 0x13; > IoPortAddr[DUMRA] = 0x7; > > /* set port speed-- 9600 bps */ > IoPortAddr[DUCRA] = (0x1 << 4); > IoPortAddr[DUACR] = (DUacr |= 0x80); > IoPortAddr[DUCSRA] = 0xbb; > > /* init counter- counter mode, external clock source */ > IoPortAddr[DUACR] = (DUacr |= 0x30); > } > _____________________________________________________________ > > This is not the complete function, but you can see that it writes values > to the same location more than once, without ever accessing values from > that location. This tells the compiler that all assignments except the > last one (to a given location) are meaningless and can be discarded. I > have verified this by examining the assembler listing generated by GCC. > > Any suggestions? I've gotta think someone else has run into this before. > > Thanks for any help! > Chris > > ------------------------------------------------------------------------ > ------ > Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ > Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com
begin:vcard n:Bahns;Christopher tel;home:812-342-4714 tel;work:812-342-4714 x-mozilla-html:FALSE adr:;;;;;; version:2.1 email;internet:chris@bahns.com fn:Christopher Bahns end:vcard
------ Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |