<div dir="ltr">By 'it', you mean supporting @target? Or handling specific targets + mangling?<div><br></div><div style>I still need to be able to do something like '@attribute("target", T) void func(string T)()', or maybe '@target(T) void func(string T)()' one way or another. The template argument would be responsible for the appropriate mangling in this case.</div>
<div style>The reason is to be compatible with the DMD/LDC solutions, which would also use template selection.f</div><div style><br></div><div style>The part I don't know is if T, a template argument to the function, can be used in the attribute declaration? This is critical.</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On 27 May 2013 20:38, Iain Buclaw <span dir="ltr"><<a href="mailto:ibuclaw@ubuntu.com" target="_blank">ibuclaw@ubuntu.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">On 27 May 2013 11:18, Manu <<a href="mailto:turkeyman@gmail.com">turkeyman@gmail.com</a>> wrote:<br>
> On 27 May 2013 19:01, Iain Buclaw <<a href="mailto:ibuclaw@ubuntu.com">ibuclaw@ubuntu.com</a>> wrote:<br>
>><br>
>> On 27 May 2013 09:21, Manu <<a href="mailto:turkeyman@gmail.com">turkeyman@gmail.com</a>> wrote:<br>
>> > Actually, I think the C counterpart is actually<br>
>> > __attribute__((__target__("targetstring"))), with bonus underscores ;)<br>
>> ><br>
>> ><br>
>> > On 27 May 2013 18:15, Manu <<a href="mailto:turkeyman@gmail.com">turkeyman@gmail.com</a>> wrote:<br>
>> >><br>
>> >> So we talked about this at DConf.<br>
>> >><br>
>> >> Working on std.simd, I need to be able to change the target parameter<br>
>> >> on a<br>
>> >> per-function basis.<br>
>> >> GCC supports this via: __attribute__((target("sse2"))) for instance.<br>
>> >><br>
>> >> I need the ability to set this from D, but the trick is, I need to be<br>
>> >> able<br>
>> >> to set the target string according to a template arg.<br>
>> >><br>
>> >> Eg:<br>
>> >>   enum Targets { SSE2, SSE3 };<br>
>> >>   enum targets[] = [ "sse2", "sse3" ];<br>
>> >><br>
>> >>   @attribute("target", targets[T]) // <- attribute needs to refer to<br>
>> >> the<br>
>> >> template arg T<br>
>> >>   void func(Targets T)();<br>
>> >><br>
>> >><br>
>><br>
>> I'll turn on rudimentary support, as the backend takes care of pretty<br>
>> much all the work.  But I think this should work as UDAs work off CTFE<br>
>> with string manipulation.<br>
>><br>
>><br>
>> >>   {<br>
>> >>     // this way, it is possibly to produce dynamic selection of code<br>
>> >> paths<br>
>> >> optimised for different CPU features (a task which is usually very<br>
>> >> tedious<br>
>> >> in C/C++)<br>
>> >>     func!(Targets.SSE2)();<br>
>> >>   }<br>
>> >><br>
>> ><br>
>><br>
>> As a small experiment, I could turn on versioning for these<br>
>> functions...  However is only available for x86 targets.<br>
>><br>
>> eg:<br>
>><br>
>> void foo() @target("sse")    // mangled 'foo.sse'<br>
>> {<br>
>> }<br>
>><br>
>> void foo() @target("mmx")   // mangled 'foo.mmx'<br>
>> {<br>
>> }<br>
><br>
><br>
> I'm confused, are you suggesting to handle these particular values<br>
> explicitly in gdc?<br>
> I was giving examples of the code I want to write (and work). I can handle<br>
> this in std.simd.<br>
> I don't think there's any reason to handle arch-specific cases like that in<br>
> gdc.<br>
><br>
> Or rather, was the point you were trying to make here the possible support<br>
> of a @target() attribute (which affects the mangling), rather than<br>
> @attribute("target")?<br>
<br>
</div></div>OK, if your confused, I won't do it then... :)<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
Iain Buclaw<br>
<br>
*(p < e ? p++ : p) = (c & 0x0f) + '0';<br>
</div></div></blockquote></div><br></div>