AnsweredAssumed Answered

Undefined Instruction exception when executing an mcr instruction

Question asked by Philippe Wicker on Jan 4, 2014
Latest reply on Oct 28, 2014 by Marco Cassol

Hello all,


I'm getting an undefined instruction exception when I call enable_neon_fpu() (from the SDK 1.1: file sdk/core/src/CortexA9.s). The exception is triggered when the processor tries to execute the 3rd instruction in the following piece of code:


  .global enable_neon_fpu


  .func enable_neon_fpu


  /* set NSACR, both Secure and Non-secure access are allowed to NEON */

  MRC p15, 0, r0, c1, c1, 2

  ORR r0, r0, #(0x3<<10) @ enable fpu/neon

  MCR p15, 0, r0, c1, c1, 2

  /* Set the CPACR for access to CP10 and CP11*/

  LDR r0, =0xF00000

  MCR p15, 0, r0, c1, c0, 2

  /* Set the FPEXC EN bit to enable the FPU */

  MOV r3, #0x40000000


  MCR p10, 7, r3, c8, c0, 0



The application is a bare-metal executable which first calls platform_init() (from the SDK 1.1: file apps/common/platform_init.c). enable_neon_fpu() is the first SDK routine called from platform_init(). The executable is loaded in the processor - an iMX6Q - using a Lauterbach USB probe and the TR32 debugger. The same binary works if I load it using an OCD compatible probe (Olimex). So I'd tend to believe that there may be an initialisation problem in the case of the Lauterbach probe. I've checked the CPSR when the exception triggers: its value is 0x600001D3 which means that the processor is in the supervisor mode.

Any idea of what could cause this exception?