Because of a discrepancy between the ARMv7M Architecture and the ARM EABI, it is not safe to use normal C functions directly as interrupt handlers. The EABI requires the stack be 8-byte aligned, whereas ARMv7M only guarantees 4-byte alignment when calling an interrupt vector. This can cause subtle runtime failures, usually when 8-byte types are used.
Functions that are used directly as interrupt handlers should be
annotated with __attribute__((__interrupt__)).
This tells the compiler to
add special stack alignment code to the function prologue.
The ARM CS3 implementation treats all systems as address vector processors. On traditional ARM systems (everything except M profile devices) an exception causes the processor to jump to a fixed address. However the arrangement of these addresses is such that the CS3 code vector model is not feasible.
The default CS3 vector table emulates an address vector system by placing an indirect branch at the real exception vector. If you override the entire vector table (rather than individual vectors) the indirect stubs are not included, and your replacement table is placed at address zero.
Sourcery G++ includes preliminary support for automatic generation of NEON SIMD vector code. Autovectorization is a compiler optimization where loops involving normal integer or floating-point code are transformed into loops that use NEON SIMD instruction to process several data elements at once.
To enable generation of NEON vector code specify
-ftree-vectorize -mfpu=neon -mfloat-abi=softfp.
-mfpu=neon also enables generations of VFPv3 scalar
floating-point code.
Sourcery G++ also includes preliminary support for manual generation
of NEON SIMD code using C intrinsic functions. These intrinsics,
the same as those supported by the ARM RVCT compiler, are defined
in the arm_neon.h header
and are documented in the 'ARM NEON Intrinsics' section of the GCC
manual. The options -mfpu=neon
-mfloat-abi=softfp must be specified to use these
intrinsics; -ftree-vectorize is not required.
NEON support is still under active development. It has not been subject to extensive testing, and may not yet take full advantage of all the features provided by the NEON architecture.