On 05/22/14 17:51, Manu via Digitalmars-d wrote: > On 22 May 2014 23:53, Artur Skawina via Digitalmars-d > <[email protected]> wrote: >> On 05/22/14 12:54, Manu via Digitalmars-d wrote: >>> To address this, in GCC, you can use attributes or pragma's to specify >>> the code-gen on a per-function basis, ie: __attribute__ ((__target__ >>> ("sse2"))), or #pragma GCC target ("sse2") >>> To access this with GDC, I use the code above. >> >> Keep in mind that GDC will not inline those functions into callers >> marked with a different (or no) target attribute. > > Umm... really? Why? > Well, that's a colossal failure.
That is how GCC handles the attributes. Somebody more familiar with gcc development might give a better answer, but AIUI the reason is that if you mark a function with one "target" then the compiler shouldn't emit code for another, possibly unsupported, target. Yes, this does not really make sense, when /direct/ "cross-target" calls are allowed. A sane(r) approach would be to support just /indirect/ calls, but that's not what GCC does. > So... is it impossible then to force the compiler to emit specific > opcodes in GCC? The problem is the intrinsics don't actually map to > opcodes, they are reinterpreted however the compiler likes :/ /I/ would just use inline asm. The target attributes can be useful when auto-vectorization kicks in etc, though. artur
