error: 'asm' operand has impossible constraints (A53) - gcc 9.3.1

190 Views Asked by At

This is code to read 64bit address space. Issue showed up with gcc 9.3.1, did not have issue with earlier version of gcc

    static inline void write_to_64bit_address(uint64_t address, 
    uint32_t data) {
    uint32_t address_upper = (uint32_t)(address >> 32);
    uint32_t address_lower = (uint32_t)(address);
    uint32_t smc_code = SMC_LONG_ADDRESS_WRITE_SINGLE;
    asm volatile("mov r0, %[smc_code]\n"
                 "mov r1, %[addr_upper]\n"
                 "mov r2, %[addr_lower]\n"
                 "mov r3, %[data_all]\n"
                 "mov r4, %[smc_zero]\n"
                 "mov r5, %[smc_zero]\n"
                 "mov r6, %[smc_zero]\n"
                 "smc #0\n"
                 :
                 : [smc_code] "r"(smc_code),
                   [addr_upper] "r"(address_upper),
                   [addr_lower] "r"(address_lower),
                   [data_all] "r"(data),
                   [smc_zero] "g"(SMC_ZERO)
                 : "r0","r1","r2","r3","r4", "r5", "r6");
}

I don't understand this assembly as well and learning. Can someone help.

0

There are 0 best solutions below