core.simd 3 operand instructions?

jerro a at a.com
Thu Sep 6 23:05:37 PDT 2012


On Friday, 7 September 2012 at 05:56:19 UTC, jerro wrote:
> On Thursday, 6 September 2012 at 19:21:22 UTC, Benjamin Thaut 
> wrote:
>> Looking at core.simd I noticed that all simd instructions that 
>> take 3 operands (usually two operands and some kind of 
>> constant third value), are commented out for the opcodes. Most 
>> likely because __simd() does not have a 4th parameter which 
>> could be used to pass in the additional value for some of the 
>> opcodes.
>>
>> Are there plans to fix this? Because for example the shuffle 
>> instructions are pretty important (try doing a cross product 
>> without simd shuffle instructions...)
>>
>> Kind Regards
>> Benjamin Thaut
>
> I can't answer your question, but if you are using GDC, you 
> could use gcc builtins . They have the same names as in GCC - 
> take a look at *mmintrin.h files to find out SSE builtin 
> names). For LDC, you could use pragma 
> intrinsic(http://www.dsource.org/projects/ldc/wiki/Docs) and 
> pragma shufflevector. You declare function that you want to 
> compile to llvm shufflevector instruction like this:
>
> pragma(shufflevector)
>     float4 shufflevector(float4, float4, int, int, int, int);
>
> Then shufflevector() is used in the same way as Clang's 
> __builtin_shufflevector 
> (http://clang.llvm.org/docs/LanguageExtensions.html#__builtin_shufflevector)

I forgot to mention Manu's std.simd 
(https://github.com/TurkeyMan/phobos/blob/master/std/simd.d). It 
is supposed to be wrapper around compiler specific intrinsics. If 
your are using SIMD mostly for operation on geometric vectors, it 
should fit your use case well (for example, it already includes a 
cross3 function). It currently only really supports GDC, though.


More information about the Digitalmars-d mailing list