This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
"sp_switch" is a SH target specific function attribute that causes a load to SP on entry to a function (and restore on exit). It allow a function to run with a different stack. A godsend on the SH2, where you only have a small amount of fast internal ram. Except that it doesn't work. #1. The optimizer will gladly move the SP load and restore code to a random place in the function. Which is of course a problem, it needs to be exactly the first and final (except the RTE) in the function. I've fixed this one, by changing the machine description. I'll submitthat fix to someone "in the loop" eventually. #2. How is it supposed to work anyway? Here's an example: //------------------- // C code input //------------------- volatile int x; #pragma interrupt void timerinterrupt() __attribute__ ((sp_switch ("blah"))); void timerinterrupt() { x+=1 } //------------------- // result of "cc1 -S -Os test.c" //------------------- .file "test.c" .text .align 1 .global _timerinterrupt .type _timerinterrupt,@function _timerinterrupt: mov.l r0,@-r15 mov.l #_blah,r0 mov.l @r0,r0 mov.l r15,@-r0 mov r0,r15 mov.l r1,@-r15 mov.l r2,@-r15 mov.l .L4,r2 mov.l @r2,r1 mov.l r14,@-r15 add #1,r1 mov.l r1,@r2 mov r15,r14 mov r14,r15 mov.l @r15+,r14 mov.l @r15+,r2 mov.l @r15+,r1 mov.l @r15+,r15 mov.l @r15+,r0 rte nop .L5: .align 2 .L4: .long _x .Lfe1: .size _timerinterrupt,.Lfe1-_timerinterrupt .comm _x,4,4 .ident "GCC: (GNU) 3.0" The BIG question I have is what was the writer of this feature expecting "blah" to be? Considering the SH can only load constants of values -128 to 127? So if "blah" is variable if needs to be in this range. Unlikely I think. Can any one think of anything workable to put in place of "blah" here? I'm seriously considering changing the definition to remove the #, thus allowing "blah" be a label close somewhere nearby. I'm betting this feature was never made to work before now. ------ 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] |