<div dir="ltr">On 26 September 2013 12:22, Stanislav Manilov <span dir="ltr"><<a href="mailto:S.Z.Manilov@sms.ed.ac.uk" target="_blank">S.Z.Manilov@sms.ed.ac.uk</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>In the process I found out that clang doesn't support NEON (as per <a href="http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics-and.html" target="_blank">http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics-and.html</a>), but there has been at least some effort in adding it (<a href="https://www.codeaurora.org/patches/quic/llvm/32040/clang-Initial-Neon-support.patch" target="_blank">https://www.codeaurora.org/patches/quic/llvm/32040/clang-Initial-Neon-support.patch</a>).<br>
</div></div></blockquote><div><br></div><div>Hi Stanislav,</div><div><br></div><div>LLVM does support NEON on ARM32 for a very long time. The commit you're referring is about AArch64, and yes, support for ARM64 NEON is patchy at the moment, but it's progressing quite quickly. What back-end are you trying to use? 32-bits or 64-bits?</div>
<div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>I also tried compiling LLVM 2.9 + llvm-gcc but that failed too many times and I gave up. After some discussions with colleagues (notably Alberto Magni, who added OpenCL support to clang some time ago <a href="http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-November/012293.html" target="_blank">http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-November/012293.html</a>) my current plan is to implement the ARM NEON intrinsics as a shared library, using attributes as in:<br>
</div></div></blockquote><div><br></div><div>LLVM 2.9 is really old, and llvm-gcc is discontinued, so I wouldn't even try that. If you don't want to use trunk, I recommend you to use LLVM with Clang 3.3 and see what you get.</div>
<div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>typedef float float4 __attribute__((ext_vector_type(4)));</div><div>or if that doesn't work, I will try to implement the intrinsics in clang itself (not sure this is the best way of doing it).<br>
</div><div>Ideally, I want to be able to compile C code that includes ARM NEON intrinsics to other targets (TI processors, e.g.).<br></div></div></blockquote><div></div></div><br></div><div class="gmail_extra">So, if I get it right, you have a file with ARM NEON intrinsics (the ones defined in arm_neon.h) and passed it through LLVM 2.9 with LLVM-GCC front-end and failed.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">As of 2010, LLVM can compile every single NEON instruction, but you should use LLVM's own version of arm_neon.h, since the type definitions do vary between toolchains. In the end, they amount to the same thing on each toolchain, but their representation can be different.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">I suggest you try with Clang 3.3 and if that fails, we'll start from there.</div><div class="gmail_extra"><br></div><div class="gmail_extra">cheers,</div><div class="gmail_extra">
--renato</div></div>