www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Re: Does dmd have SSE intrinsics?

Robert Jacques:

 Well, fixed length arrays are an implicit/explicit pointer to some  
 (stack/heap) allocated memory. So returning a fixed length array usually  
 means returning a pointer to now invalid stack memory. Allowing  
 fixed-length arrays to be returned by value would be nice, but basically  
 means the compiler is wrapping the array in a struct, which is easy enough  
 to do yourself. Using wrappers also avoids the breaking the logical  
 semantics of arrays (i.e. pass by reference).

As usual this discussion is developing into other directions that are both interesting and bordeline too complex for me :-) Arrays are the most common and useful data structure (beside single values/variables). And experience shows me that in some situations static arrays can lead to higher performance (for example if you have a matrix, and its number of columns is known at compile time and such number is a power of 2, then the compiler can use just a shift to find a cell). So I'd like to see improving the D management of such arrays (for me it's a MUCH more common problem than for example the last contravariant argument types discussed by Andrei. I am for improving simple things that I can understand and use every day first, and complex things later. D2 is getting too much difficult for me), even if some extra annotations are necessary. The possible ways that can be useful: - To return small arrays (for example the ones used by SSE/AVX registers) by value. Non need to create silly wrapper structs. The compiler has to show a performance warning when such arrays is bigger than 1024 bytes of RAM. - LLVM has good stack-allocated (alloca) arrays, like the ones introduced by C99. Having a way to use them in D too is good. - A way to return just the reference to a dynamic array when the function already takes in input the reference to it. - To automatically allocate and copy returned static arrays on the heap, to keep the situation safe and avoid too many copies of large arrays (so it gets copied only once here). I'm not sure about this. Bye, bearophile
Sep 22 2009