Recently, this bug has surfaced: 
http://d.puremagic.com/issues/show_bug.cgi?id=4400

In a nutshell, sometimes the byte alignment of arrays is 8 bytes instead 16 
bytes.

This was caused by my array append patch, because in large arrays, I store the 
length at the front of the array.  With some queries before I created my patch, 
I was told that 8 byte alignment was fine.  However, the alignment is easy to 
change since it's a couple specific functions that determine the padding and 
alignment.  So changing to 16 bytes is not an issue technically, and 
functionally, this is only on PAGE sized arrays and larger, so 16 bytes vs. 8 
bytes isn't likely to cause problems.

Bearophile's main argument stems from this.  I am not a processor or assembly 
expert, so I have no idea about this at all:

-----------------
The 16 bytes alignment was introduced because instructions like the SSE2 movapd
need 16 byte alignment:
http://en.wikipedia.org/wiki/MOVAPD
 
I have recently used it here:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=112670
 
And some other SSE* instructions work with 8 byte alignment too, but they are
slower (future CPUs can remove such alignment requirements, some of it has
being removed already, so in that future the GC can go back giving 8 bytes
aligned memory).
-----------------

So should I change it?

-Steve



      
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to