<div dir="ltr">Hi David,<br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 7, 2015 at 4:59 PM, David T. Lewis <span dir="ltr">&lt;<a href="mailto:lewis@mail.msen.com" target="_blank">lewis@mail.msen.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Eliot,<br>
<br>
$ grep -r DOUBLE_WORD_ALIGNMENT *<br>
Cross/vm/sqMemoryAccess.h:#if defined(DOUBLE_WORD_ALIGNMENT) || defined(DOUBLE_WORD_ORDER)<br>
Cross/vm/sqMemoryAccess.h:#else /*!(DOUBLE_WORD_ORDER||DOUBLE_WORD_ALIGNMENT)*/<br>
Cross/plugins/FilePlugin/sqFilePluginBasicPrims.c:#if DOUBLE_WORD_ALIGNMENT<br>
Cross/plugins/FilePlugin/sqFilePluginBasicPrims.c:#if DOUBLE_WORD_ALIGNMENT<br>
Cross/plugins/FilePlugin/sqFilePluginBasicPrims.c:#if DOUBLE_WORD_ALIGNMENT<br>
Cross/plugins/FilePlugin/sqFilePluginBasicPrims.c:#if DOUBLE_WORD_ALIGNMENT<br>
iOS/vm/iPhone/config.h:/* #undef        DOUBLE_WORD_ALIGNMENT */<br>
Mac OS/vm/config.h:/* #undef    DOUBLE_WORD_ALIGNMENT */<br>
unix/vm/config.cmake:TRY_RUN (DOUBLE_WORD_ALIGNMENT tmp ${bld} ${config}/testDoubleWordAlignment.c)<br>
unix/vm/config.cmake:CONFIG_DEFINE (DOUBLE_WORD_ALIGNMENT)<br>
win32/vm/sqWin32.h:#    undef  DOUBLE_WORD_ALIGNMENT<br>
win32/vm/sqConfig.h:#  define DOUBLE_WORD_ALIGNMENT<br>
<br>
<br>
So it looks like DOUBLE_WORD_ALIGNMENT is used in FilePlugin to handle setting<br>
fields in the SQFile data structure. It looks like it is trying to deal with<br>
alignment of members of C data structures, which would vary by compiler and<br>
platform. It does not look like something that would be related to word size<br>
on the object memory, rather it looks like an optimization to handle different<br>
compiler conventions in laying out C data structures.<br></blockquote><div><br></div><div>It is one side of two linked issues.  DOUBLE_WORD_ALIGNMENT is true if the platform is sensitive to 32-bit alignment, i.e. if moving an object from or to a memory address on an odd 32-bit boundary would cause an error.  This is only an issue if objects are only aligned on a 32-bit boundary.  Since all our platforms are affected by this (since e.g. with SSE2, x86 will cause an error if one attempts to move e.g. a double to/from an odd 32-bit address) we can reduce this to the second issue.  If objects are aligned on 32-bit boundaries (as they are in the standard 32-bit VM) then care must be taken when moving aligned data to/from objects.  Hence OBJECTS_32BIT_ALIGNED actually expresses the problem better.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Judging by the name, OBJECTS_32BIT_ALIGNED sounds like it is addressing<br>
a different issue? But I do not understand the intent of the change.<br></blockquote><div><br></div><div>The intent is to avoid generating the expensive alignment-insensitive code in the 64-bit VM and in Spur, where all objects are aligned on a 64-bit boundary.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Dave<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Wed, Jan 07, 2015 at 04:57:45PM -0500, David T. Lewis wrote:<br>
&gt; Hi Eliot,<br>
&gt;<br>
&gt; I&#39;m pretty sure you have access to do the update.<br>
&gt;<br>
&gt; I am away and can&#39;t check now, but I&#39;d suggest just do a grep -r through<br>
&gt; the trunk SVN and make sure nobody is using DOUBLE_WORD_ALIGNMENT. I don&#39;t<br>
&gt; know what it is used for without checking.<br>
&gt;<br>
&gt; The plugin change sounds good, although you might want to call it<br>
&gt; &quot;re_config&quot; instead of &quot;reconfig&quot; because &quot;reconfig&quot; suggests another<br>
&gt; meaning ;-)<br>
&gt;<br>
&gt; Dave<br>
&gt;<br>
&gt; &gt; Hi David,  Hi All,<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;     I need to make some changes to platforms/Cross/plugins, which is<br>
&gt; &gt; shared<br>
&gt; &gt; between the trunk vm and the Cog branch.<br>
&gt; &gt;<br>
&gt; &gt; 1. DOUBLE_WORD_ALIGNMENT changes to OBJECTS_32BIT_ALIGNED.  In Spur<br>
&gt; &gt; objects<br>
&gt; &gt; are always 64-bit aligned, even in the 32-bit version, so none of the slow<br>
&gt; &gt; access to avoid unaligned float access is necessary.  I&#39;ve written it like<br>
&gt; &gt; this in platforms/Cross/vm/sqMemoryAccess.h.  The changes begin on the #if<br>
&gt; &gt; (SQ_IMAGE64 || SPURVM) line<br>
&gt; &gt;<br>
&gt; &gt; #if (SQ_VI_BYTES_PER_WORD == 4)<br>
&gt; &gt; # define SQ_IMAGE32 1<br>
&gt; &gt; #else<br>
&gt; &gt; # define SQ_IMAGE64 1<br>
&gt; &gt; #endif<br>
&gt; &gt;<br>
&gt; &gt; #if (SQ_IMAGE64 || SPURVM)<br>
&gt; &gt; # define OBJECTS_32BIT_ALIGNED 0<br>
&gt; &gt; #else<br>
&gt; &gt; # define OBJECTS_32BIT_ALIGNED 1<br>
&gt; &gt; #endif<br>
&gt; &gt;<br>
&gt; &gt; 2. platforms/Cross/plugins/RePlugin/config.h gets renamed<br>
&gt; &gt; to platforms/Cross/plugins/RePlugin/reconfig.h to avoid conflicts with the<br>
&gt; &gt; VM&#39;s config.h<br>
&gt; &gt;<br>
&gt; &gt; I&#39;m not sure that I have permission to change trunk.  But if I do would it<br>
&gt; &gt; be OK if I made these changes?  If not, would you, David, make the change<br>
&gt; &gt; to trunk&#39;s platforms/Cross/vm/sqMemoryAccess.h  after which I&#39;ll check-in<br>
&gt; &gt; the  platforms/Cross/plugins changes?<br>
&gt; &gt; --<br>
&gt; &gt; best,<br>
&gt; &gt; Eliot<br>
&gt; &gt;<br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">best,<div>Eliot</div></div>
</div></div>