Umang Mehta
Umang Mehta

Reputation: 1

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

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.

Upvotes: 0

Views: 231

Answers (0)

Related Questions