On Monday, 8 October 2012 at 21:36:08 UTC, F i L wrote:
Iain Buclaw wrote:
float a = 1, b = 2, c = 3, d = 4;
float4 f = [a,b,c,d];

===>
       movss   -16(%rbp), %xmm0
       movss   -12(%rbp), %xmm1

Nice, not even DMD can do this yet. Can these changes be pushed upstream?

No, the actual codegen is compilers-specific (and apparently wrong in the case of GDC, if this is the actual piece of code emitted for the code snippet).


On a side note, I understand GDC doesn't support the core.simd.__simd(...) command, and I'm sure you have good reasons for this. However, it would still be nice if:

a) this interface was supported through function-wrappers, or..
b) DMD/LDC could find common ground with GDC in SIMD instructions

LDC won't support core.simd.__simd in the forseeable future either. The reason is that it is a) untyped and b) highly x86-specific, both of which make it hard to integrate with LLVM – __simd is really just a glorified inline assembly expression (hm, this makes me think, maybe it could be implemented quite easily in terms of a transformation to LLVM inline assembly expressions…).

Is core.simd designed to really never be used and Manu's std.simd is really the starting place for libraries? (I believe I remember him mentioning that)

With all due respect to Walter, core.simd isn't really "designed" much at all, or at least this isn't visible in its current state – it rather seems like a quick hack to get some basic SIMD code working with DMD (but beware of ICEs).

Walter, if you are following this thread, do you have any plans for SIMD on non-x86 platforms?

David

Reply via email to