On 2006-09-13, Peter Jansen <[email protected]> wrote:
> I have compiled the example and I need more code to check that it is not
> working. Its something to do with the optimizer (which is taking out the
> call to memset).
Take a look at the memcpy() example I just posted. You don't
need anything except to the generated source file to determine
that it's wrong.
> Here is the generated function,
>
>> /***********************
>> * Function `bar'
>> ***********************/
>> bar:
>> /* prologue: frame size = 0 */
>> .L__FrameSize_bar=0x0
>> .L__FrameOffset_bar=0x0
>> /* prologue end (size=0) */
>> mov #llo(21845), &foo+1
>> ret
>> /* epilogue: not required */
>> /* function bar size 4 (3) */
>> .Lfe1:
>> .size bar,.Lfe1-bar
>> /********* End of function ******/
>>
>> .comm foo,4,2
>
> The thing is that the ".comm foo,4,2" line specifies that foo must be
> word aligned, this goes to the linker which is required to align the
> variable foo at link time.
And it is.
> This should be done, Ill check.
foo is aligned just fine on a word boundary.
> For me the generated code looks fine.
What? You just admitted foo is aligned on a word boundary.
Therefore foo+1 _isn't_ on a word boundary. The compiler
generated a word move with &foo+1 as the destination. How is
that fine?
--
Grant Edwards grante Yow! Is something VIOLENT
at going to happen to a
visi.com GARBAGE CAN?