We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello all,
I wrote end embedded assembly function for an ARM Cortex A9 (the specific device is Zynq, from Xilinx) as follow
float my_fun(float x)
{
asm volatile ("vdup.f32 d0, r0 \n\t");
my_neon_fun(x);
asm volatile ("vmov.f32 r0, s0 \n\t");
};
my_neon_fun(x) is another already tested and working function that uses NEON assembly instructions and returns its result in S0. According to ARM convention, I copy the return value in R0 as last operation. However, when I compile the entire project, the compiler add to the generated assembly code, the following instruction as last instruction of my_fun
"mov r0, r3"
This causes that the R0 register, which should contain the return value, is overwritten with a wrong value.
Please note that it ONLY happen when I DO NOT activate the compiler optimization (-O0). Does anyone know why it happens?
Thanks in advance
Regards,
Andrea