Actually, I think the C counterpart is actually __attribute__((__target__("targetstring"))), with bonus underscores ;)


On 27 May 2013 18:15, Manu <turkeyman@gmail.com> wrote:
So we talked about this at DConf.

Working on std.simd, I need to be able to change the target parameter on a per-function basis.
GCC supports this via: __attribute__((target("sse2"))) for instance.

I need the ability to set this from D, but the trick is, I need to be able to set the target string according to a template arg.

Eg:
  enum Targets { SSE2, SSE3 };
  enum targets[] = [ "sse2", "sse3" ];

  @attribute("target", targets[T]) // <- attribute needs to refer to the template arg T
  void func(Targets T)();


  {
    // this way, it is possibly to produce dynamic selection of code paths optimised for different CPU features (a task which is usually very tedious in C/C++)
    func!(Targets.SSE2)();
  }