[M3devel] m3_load/store using bitfields for everything
Tony Hosking
hosking at cs.purdue.edu
Mon Jun 1 01:01:55 CEST 2009
Jay, things changed from gcc 3.2 to 3.3. 3.3 works fine for me on all
the h/w targets I've tried using -O3 (PPC, x86, AMD64, SPARC). I
suspect this is specific to your gcc-apple hybrid.
On 1 Jun 2009, at 00:49, Jay wrote:
> The bitfield problem still seems present.
>
>
> m3-libs/m3core/src/runtime/common/RTIO.m3:
>
>
> PROCEDURE Flush () =
> BEGIN
> IF (len > 0) THEN
> RTOS.Write (ADR (buf[0]), len);
> len := 0;
> END;
> END Flush.
>
>
> In question is just the line "len := 0", it is line 79, len is a
> module-global.
>
>
> Without any optimization, the bitfield code yields:
>
> .stabd 68,0,79
> ldr r3, L53+12 @ tmp110,
> L51:
> add r3, pc, r3 @ tmp110, tmp110
> ; r3 contains the address of the module globals
> mov r2, r3 @ tmp109, tmp110
> ; now r2 does
> ldr r3, [r2, #52] @,
> ; r3 now contains the address of len
> str r3, [sp, #0] @,
> ldr r3, [sp, #0] @ tmp112,
> str r3, [sp, #0] @ tmp112,
> ldr r3, [sp, #0] @,
> str r3, [r2, #52] @,
>
> which I believe never actually stores to the global -- at least not
> any value it doesn't already have.
>
>
> The non-bitfield code, again, not optimized, yields:
>
> .stabd 68,0,79
> ldr r3, L53+12 @ tmp113,
> L51:
> add r3, pc, r3 @ tmp113, tmp113
> add r3, r3, #52 @ D.789, tmp113,
> ; r3 now contains the address of len
> mov r2, r3 @ D.790, D.789
> ; now r2 does
> mov r3, #0 @ tmp114,
> ; r3=0
> str r3, [r2, #0] @ tmp114,* D.790
> ; len=0
>
>
> Which is pretty clearly ok -- it is actually putting zero in a
> register and storing that in the global.
>
>
> Granted, this is using gcc 4.2 (the gcc-apple directory). Some/all
> of the volitization is skipped, but has that ever been a problem
> when not optimizing?
> (actually I think it has, I remember debugging an m3/cygwin problem
> early on where code got thrown out because the compiler didn't think
> it did anything, I don't remember the details)
>
> Anyway, the #ifndef GCC_APPLE does workaround this successfully --
> cm3 does startup ok on my iphone :).
> It's that this bitfield stuff also caused problems on Mips so I'm
> leary of it, I wonder if it is just not a great idea.
>
>
> - Jay
>
> >
> > >>
> > >> m3_load/store using bitfields for everything caused module-global
> > >> references to disappear on MIPS64_OPENBSD (all MIPS?). I worked
> > >> around that by declaring that the module-globals are at least of
> > >> size 2 * biggest_alignment.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20090601/8f2baa59/attachment-0001.html>
More information about the M3devel
mailing list