How to utilize the CVTDQ2PD instruction?

Marc Glisse marc.glisse@inria.fr
Fri Sep 7 14:57:00 GMT 2012


On Fri, 7 Sep 2012, Ian Lance Taylor wrote:

> On Fri, Sep 7, 2012 at 5:05 AM, Henrik Mannerström
> <henrik.mannerstrom@gmail.com> wrote:
>>
>> If I understand the Intel reference correctly, the CVTDQ2PD should allow
>> me to convert two 64 bit integers into two 64 bit doubles in one blow.
>> How should I write this in gcc C/C++?
>>
>> Program 1 uses casting to illustrate the point, it outputs 0 and 1.
>> Program 2 was my naive attempt to use vectorization, it outputs 0 and
>> 4.94066e-324, which is _not_ what I intended.
>
>>   a.vd = __v2df(a.vi);
>
> This is just a type cast of the vector as a whole.  It doesn't convert
> the individual vector elements.

I always found it strange that vectors act like values everywhere, except 
for casts where they act like pointers. I understand this is convenient to 
allow calling intrinsics with vector types that don't exactly match, but 
it steals a good syntax that gcc's vector extensions can't use for true 
conversions.

-- 
Marc Glisse



More information about the Gcc-help mailing list