Does dmd have SSE intrinsics?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Sep 22 14:35:08 PDT 2009


grauzone wrote:
> Robert Jacques wrote:
>> On Tue, 22 Sep 2009 12:32:25 -0400, Andrei Alexandrescu 
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>> Daniel Keep wrote:
>> [snip]
>>>>  The problem is that currently you have a class of types which can be
>>>> passed as arguments but cannot be returned.
>>>>  For example, Tango's Variant has this horrible hack where the ACTUAL
>>>> definition of Variant.get is:
>>>>      returnT!(S) get(S)();
>>>>  where you have:
>>>>      template returnT(T)
>>>>     {
>>>>         static if( isStaticArrayType!(T) )
>>>>             alias typeof(T.dup) returnT;
>>>>         else
>>>>             alias T returnT;
>>>>     }
>>>>  I can't recall the number of times this stupid hole in the language 
>>>> has
>>>> bitten me.  As for safety concerns, it's really no different to 
>>>> allowing
>>>> people to return delegates.  Not a very good reason, but I *REALLY* 
>>>> hate
>>>> having to special-case static arrays.
>>>
>>> Yah, same in std.variant. I think there it's called 
>>> DecayStaticToDynamicArray!T. Has someone added the correct handling 
>>> of static arrays to bugzilla? Walter wants to implement it, but we 
>>> want to make sure it's not forgotten.
>>
>> Well, what is the correct handling? Struct style RVO or delegate 
>> auto-magical heap allocation? Something else?
>>
>> Both solutions are far from perfect.
>> RVO breaks the reference semantics of arrays, though it works for many 
>> common cases and is high performance. This would be my choice, as I 
>> would like to efficiently return short vectors from functions.
>> Delegate style heap allocation runs into the whole 
>> I'd-rather-be-safe-than-sorry issue of excessive heap allocations. I'd 
>> imagine this would be better for generic code, since it would always 
>> work.
> 
> I think static arrays should be value types. Then this isn't a problem 
> anymore, and returning a static array can be handled exactly like 
> returning structs.
> 
> Didn't Walter once say that a type shouldn't behave differently, if it's 
> wrapped into a struct? With current static array semantics, this rule is 
> violated. If a static array has reference or value semantics kind of 
> depends, if it's inside a struct: if you copy a struct, the embedded 
> static array obviously looses its reference semantics.

Yah.

> Also, I second that it should be possible to declare void variables. 
> It'd be really useful for doing return value handling when transparently 
> wrapping delegate calls in generic code.

I think that already works.


Andrei



More information about the Digitalmars-d mailing list