错误:'asm' 操作数有不可能的约束 (A53) - gcc 9.3.1

问题描述

这是读取 64 位地址空间的代码。 gcc 9.3.1 出现问题,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");
}

我也不了解这个程序集和学习。有人可以帮忙吗。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)