ARM Releases Ne10: An Open Source Library with NEON Optimized Functions

Orange Pi Development Boards

The Advanced SIMD extension (aka NEON or “MPE” Media Processing Engine) is a combined 64- and 128-bit single instruction multiple data (SIMD) instruction set that provides standardized acceleration for media and signal processing applications for ARM Cortex A (ARMv7) processors and the goal of these instructions is similar to MMX, SSE and 3DNow! extensions for x86 processors.

Starting early 2011, ARM has been working internally on a project codenamed Snappy to develop common functions accelerated by NEON. They have now released the first version of Snappy, now called the Ne10 library, which is available on GitHub at .

The code has been developed in C and Assembler and tested on Ubuntu on ARM (Linaro). A Makefile is also included to build it for Android (AOSP). The current functions include vector and matrix operations accelerated by NEON instructions.

Since the library is open source, ARM hopes developers to make use of the Ne10 library in their open source packages, add new functions and port the Ne10 libraries to other operating systems.

In the video below Rod Crawford, Principal Engineer at ARM, explains why they started the NE10 Project, what can be done with it, and what’s next for the project.

If you would like to contribute to the project, you can join the community at

If you are not familiar with NEON or just want to improve your skills, you can check the ARM NEON Tutorial in C and Assembler and/or read the 5 parts Coding for NEON on ARM blog.

Finally, you may also want to see the performance improvement brought by NEON instructions on a real project (JPEG Decoding) by reading “Faster JPEG decoding on ARM with libjpeg-turbo and NEON Instructions” blog post.

Leave a Reply

1 Comment threads
0 Thread replies
Most reacted comment
Hottest comment thread
1 Comment authors
yehuda marko Recent comment authors
newest oldest most voted
Notify of
yehuda marko

it appears that the NE10 project is supported using GNU compiler , and 32 bit .

my compiler is llvm, is there another library that can work using llvm?
is there a way how to have it work in llvm , and 64bit aarch64?