C 中的汇编代码ARMv8 架构

问题描述

我正在开发 Cortex-A72 (Armv8),我需要实现这个伪代码

put addr1 into X9
put addr2 into X10
for i := 0 to N − 1 do
STR X0,[X9]
STR X0,[X10]
DC CVAC,X9
DC CVAC,X10

遵循我的 C 代码

int main(){

    unsigned char temp = 0xff;
    unsigned char *mem;
    mem = mmap(NULL,BUF_SIZE,PROT_READ | PROT_WRITE,MAP_ANON | MAP_PRIVATE,-1,0);
    if (mem == MAP_Failed){
        perror("mmap()");
        return 1;
    }
    memset(mem,0xff,BUF_SIZE);
    /* Select two random addresses within memory pool*/
    size_t offset1 = (rand()<<12)%BUF_SIZE;
    size_t offset2 = (rand()<<12)%BUF_SIZE;
    unsigned char *addr1 = (unsigned char*) (mem+offset1);  
    unsigned char *addr2= (unsigned char*) (mem+offset2)

    for (int i = 0; i < 10000; i++){
        asm volatile("str %x1,%x0" : "=m"(*addr1) : "r"(temp));
        asm volatile("str %x1,%x0" : "=m"(*addr2) : "r"(temp));
        __asm__ __volatile__("dc cvac,%0\n\t" : : "r" (addr1));
        __asm__ __volatile__("dc cvac,%0\n\t" : : "r" (addr2));
    }
      
     .
     .
     .
    
}

我只想知道我是否以正确的方式使用汇编代码。 目标是直接访问物理内存中的数据,绕过缓存。

解决方法

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

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

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