This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

ARMCompiler6.18 armasm inline assembly syntax

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?

Parents Reply Children