Command line is qemu-system-arm -machine mps3-an547 -nographic -kernel test.elf -semihosting -semihosting-config enable=on,target=native
Binary is attached. It does
int main(int argc, char* argv[]) { SCB->NSACR |= (3U << 10U); /* enable Non-secure access to CP10 and CP11 coprocessors */ __DSB(); __ISB();
SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ (3U << 11U*2U) ); /* enable CP11 Full Access */ __DSB(); __ISB();
// enable DL branch cache #define CCR (*((volatile unsigned int *)0xE000ED14)) #define CCR_DL (1 << 19) CCR |= CCR_DL; __ISB();
uint32_t result; __asm volatile ("VMRS %0, fpscr" : "=r" (result) ); // <-- NOCP hardfault printf("fpscr = 0x%08lx\r\n", result); __asm volatile ("VMRS %0, mvfr0" : "=r" (result) ); printf("mvfr0 = 0x%08lx\r\n", result); __asm volatile ("VMRS %0, mvfr1" : "=r" (result) ); printf("mvfr1 = 0x%08lx\r\n", result); __asm volatile ("VMRS %0, mvfr2" : "=r" (result) ); printf("mvfr2 = 0x%08lx\r\n", result);
exit(0); }
Thank you for your help!
Command line is on,target= native
qemu-system-arm -machine mps3-an547 -nographic -kernel test.elf -semihosting -semihosting-config enable=
Binary is attached. It does
int main(int argc, char* argv[])
{
SCB->NSACR |= (3U << 10U); /* enable Non-secure access to CP10 and CP11 coprocessors */
__DSB();
__ISB();
SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */
(3U << 11U*2U) ); /* enable CP11 Full Access */
__DSB();
__ISB();
// enable DL branch cache
#define CCR (*((volatile unsigned int *)0xE000ED14))
#define CCR_DL (1 << 19)
CCR |= CCR_DL;
__ISB();
uint32_t result;
__asm volatile ("VMRS %0, fpscr" : "=r" (result) ); // <-- NOCP hardfault
printf("fpscr = 0x%08lx\r\n", result);
__asm volatile ("VMRS %0, mvfr0" : "=r" (result) );
printf("mvfr0 = 0x%08lx\r\n", result);
__asm volatile ("VMRS %0, mvfr1" : "=r" (result) );
printf("mvfr1 = 0x%08lx\r\n", result);
__asm volatile ("VMRS %0, mvfr2" : "=r" (result) );
printf("mvfr2 = 0x%08lx\r\n", result);
exit(0);
}
Thank you for your help!