# title
Learn the architecture - Neon programmers' guide

# topic.topics[].topics[].topics[].label
Single Instruction Multiple Data (vector mode)

# topic.topics[].topics[].topics[].label
Single Instruction Multiple Data (packed data mode)

# topic.topics[].topics[].label
Comparison between ARM NEON technology and other implementations

# topic.topics[].topics[].topics[].label
Comparison between NEON technology and the ARMv6 SIMD instructions

# topic.topics[].topics[].topics[].label
Comparison between NEON technology and other SIMD solutions

# topic.topics[].topics[].topics[].label
Comparison of NEON technology and Digital Signal Processors

# topic.topics[].topics[].label
Architecture support for NEON technology

# topic.topics[].topics[].topics[].label
Support for the Half-precision extension

# topic.topics[].topics[].topics[].label
Support for the Fused Multiply-Add instructions

# topic.topics[].topics[].topics[].label
VFP views of the NEON and floating-point register file

# topic.topics[].topics[].topics[].label
Enabling auto-vectorization in ARM Compiler toolchain

# topic.topics[].topics[].topics[].label
Enabling auto-vectorization in GCC compiler

# topic.topics[].topics[].topics[].label
Enabling the NEON unit in bare-metal applications

# topic.topics[].topics[].topics[].label
Enabling the NEON unit in a Linux stock kernel

# topic.topics[].topics[].topics[].label
Enabling the NEON unit in a Linux custom kernel

# topic.topics[].topics[].label
Generating NEON code using the vectorizing compiler

# topic.topics[].topics[].topics[].label
Vectorization example on unrolling addition function

# topic.topics[].topics[].topics[].label
Vectorizing example with vectorizing compilation

# topic.topics[].topics[].topics[].label
Vectorizing examples with different command line switches

# topic.topics[].topics[].topics[].label
Passing arguments in NEON and floating-point registers

# topic.topics[].topics[].topics[].label
Tell the compiler where to unroll inner loops

# topic.topics[].topics[].topics[].label
Option to enable use of NEON and floating-point instructions

# topic.topics[].topics[].topics[].label
Example GCC command line usage for NEON code optimization

# topic.topics[].topics[].label
Introduction to the NEON instruction syntax

# topic.topics[].topics[].topics[].label
Operations not affected by flush-to-zero mode

# topic.topics[].topics[].topics[].label
NEON instructions that can perform polynomial arithmetic

# topic.topics[].topics[].topics[].label
Difference between polynomial multiply and conventional multiply

# topic.topics[].topics[].topics[].label
Moving results back to normal C variables

# topic.topics[].topics[].topics[].label
Casting NEON variables between different types

# topic.topics[].topics[].label
Constructing a vector from a literal bit pattern

# topic.topics[].topics[].label
Constructing multiple vectors from interleaved memory

# topic.topics[].topics[].label
Loading a single lane of a vector from memory

# topic.topics[].topics[].label
Instructions without an equivalent intrinsic

# topic.topics[].topics[].topics[].label
NEON pipeline differences between Cortex-A processors

# topic.topics[].topics[].topics[].label
Mixed ARM and NEON instruction sequences

# topic.topics[].topics[].topics[].label
Passing data between ARM general-purpose registers and NEON registers

# topic.topics[].topics[].topics[].label
Example of how to read NEON instruction tables

# topic.topics[].label
NEON Code Examples with Mixed Operations

# topic.topics[].topics[].label
FPSCR, the floating-point status and control register

# topic.topics[].topics[].label
FPEXC, the floating-point exception register

# topic.topics[].topics[].label
FPSID, the floating-point system ID register

# topic.topics[].topics[].label
NEON general data processing instructions

# topic.topics[].topics[].topics[].label
VCVT (fixed-point or integer to floating-point)

# topic.topics[].topics[].topics[].label
VSHL, VQSHL, VQSHLU, and VSHLL (by immediate)

# topic.topics[].topics[].topics[].label
VMUL{L}, VMLA{L}, and VMLS{L} (by scalar)

# topic.topics[].topics[].topics[].label
VQDMULL, VQDMLAL, and VQDMLSL (by vector or by scalar)

# topic.topics[].topics[].topics[].label
Alignment restrictions in load and store, element and structure instructions

# topic.topics[].topics[].topics[].label
VLDn and VSTn (single n-element structure to one lane)

# topic.topics[].topics[].topics[].label
VLDn (single n-element structure to all lanes)

# topic.topics[].topics[].topics[].label
VLDn and VSTn (multiple n-element structures)

# topic.topics[].topics[].topics[].label
VMOV (between two ARM registers and a NEON register)

# topic.topics[].topics[].topics[].label
VMOV (between an ARM register and a NEON scalar)

# topic.topics[].topics[].topics[].label
VMRS and VMSR (between an ARM register and a NEON or VFP system register)

# topic.topics[].topics[].topics[].label
VCVT (between floating-point and integer)

# topic.topics[].topics[].topics[].label
VCVT (between floating-point and fixed-point)

# topic.topics[].topics[].topics[].label
VFMA, VFMS, VFNMA, VFNMS (Fused floating-point multiply accumulate and fused floating-point multiply subtract with optional negation)

# topic.topics[].topics[].topics[].label
VMUL, VMLA, VMLS, VNMUL, VNMLA, and VNMLS

# topic.topics[].topics[].topics[].label
VLDR and VSTR (post-increment and pre-decrement)

# metadata.contentDescription
This book provides a guide for programmers to effectively use NEON technology, the ARM Advanced SIMD architecture extension. The book provides information that will be useful to both assembly language and C programmers.