<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Did I said in my first post, pragma? With pragma you don't activate a behavior unless you need something pragma provides. Locally, in pragma's scope. So you will not break anything, anywhere outside pragma's scope.<div><br></div><div>gm2 is very precise with bitpacking and aligning. I did not check for byte/bit order, or anything gm2 recently, too much work (most of it in Modula-3). As this is perfectly logical system programming requirement I do not doubt Gaius will be positive to such proposal.</div><div><br></div><div>What good is bitfield interop when our pointers are 64bit aligned and GCC's are 32bit? And when every interop question is answered with "write critical piece in C" ? </div><div><br></div><div>Proposed pragma would not break anything, it is local behavior.</div><div><br></div><div>I believe in "mental model", but I also believe in evolution. Do you? :) All of us have decades of experience accumulated, and my decades changed my models, as slow as it is. I see this pattern, I see this need. I see solution through alternate bit/byte packing into structures inside pragma scope.</div><div><br></div><div>As for your example, outside of proposed pragma scope it will be 32 bit aligned. But, if it is a 64 bit value - in GCC it will be 32bit aligned, while cm3 will (most probably) align it to 64bit. There goes interop. Ooops.</div><div><br></div><div>TIA</div><div><br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>--</div><div>Divided by a common language</div><div><br></div><div>Dragiša Durić</div><div><a href="mailto:dragisha@m3w.org">dragisha@m3w.org</a></div><div><br></div></div></span><br class="Apple-interchange-newline"></span><br class="Apple-interchange-newline">
</div>
<br><div><div>On Aug 25, 2012, at 5:06 AM, Jay K wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="font-family: Calibri; font-size: 16px; "> > What mental model?<br><div> > We have network order. Everything network is bit streams, from left to right, most</div><div> > significant bits/bytes.</div><div> </div><div> </div><div>Does any Modula-2 or Modula-3 or C compiler follow this model?</div><div>For a little endian target? I'm skeptical.</div><div>If it really is obvious, maybe we can make cm3 follow it?</div><div>Even if it breaks bitfield interop with C?</div><div>I would like to have m3front and M3C.m3 not have any target-endian dependentness.</div><div>I do believe it would break pickles, and some floating point code in m3core/libm3.</div><div>  ..because..you see.. I think there some mental model in C compiler writer's heads...that cm3 tries to adhere to, but which I might have diverged a bit from (look at the history of Target.m3).</div><div> </div><div> </div><div>In particular, standard C only allows bit fields to be of type "int" or "unsigned".</div><div>However it is a common extension to allow the type of a bitfield to also unsigned/signed char, short, long, and long long, and this does I believe affect the layout. Does that fit your mental model? In your model, must a 32bit bit field be aligned on a 32bit boundary?</div><div> </div><div>What does this look like:</div><div> </div><div>struct {</div><div>  unsigned a : 1;</div><div>  unsigned b : 32;</div><div>};</div><div>?</div></span></span></blockquote></div><br></div></body></html>