I tried to switch my compiler from ARM V5 to V6, and I faced a inline assembly funciton conversion issue:
[Original]
DATA_RAM_FUNCTION __asm void prvEnableVFP_RTT(void) { PRESERVE8 /* The FPU enable bits are in the CPACR. */ ldr.w r0, = 0xE000ED88 ldr r1, [r0] /* Enable CP10 and CP11 coprocessors, then save back. */ // orr r1, r1, #( 0xf << 20 ) orr r1, r1, #0xf00000 str r1, [r0] bx r14 nop }
[After Conversion]
DATA_RAM_FUNCTION void prvEnableVFP_RTT(void) { __asm volatile( ".eabi_attribute Tag_ABI_align_preserved, 1 \n" "ldr.w r0, = %0 \n" "ldr r1, [r0] \n" "orr r1, r1, #0xf00000 \n" "str r1, [r0] \n" "bx r14 \n" "nop \n" : /* no outputs */ : "r"(0xE000ED88) : "r0", "r1", "r14" ); }
There is a error:
./.rtt-studio/Debug\rtthread.axf: Error: L6218E: Undefined symbol r2 (referred from lto-llvm-293411.o).
What's going wrong?
Actually I have no basis, and it seem that these operands are impossible to be the same. You gave me another train of thought.