0

这是读取 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");
}

我也不了解这个大会和学习。有人可以帮忙吗。

4

0 回答 0