首页 > 解决方案 > PAUSE 指令 - RISC-V 中无法识别的操作码“暂停”

问题描述

我目前正在研究基于SiFive Freedom Unleashed SDK的 riscv64 linux 。

我想通过嵌入在我的 C 代码中的扩展 asm 指令来实现暂停指令。下面是一个例子:

#include <stdio.h>
#include <stdlib.h>

int main(){
        int a = 10;  
        __asm__ volatile("rep;nop;"::);
        return 0;
}

当我试图编译程序时,汇编器生成一个错误,提示:“错误:无法识别的操作码‘rep’”。

我试图用 替换它__asm__ __volatile__ ("pause"::);,并且发生了类似的错误:“错误:无法识别的操作码‘暂停’”。

根据 RISC-V 指令集手册:

PAUSE 编码为 FENCE 指令,pred=W, succ=0, fm=0, rd=x0, rs1=x0

因此,我假设正确的实现方式以 开头__asm__ volatile("fence"),但是如何实现约束(pred=W、succ=0、fm=0、rd=x0 和 rs1=x0)?

如果我的理解不正确,谁能告诉我如何用扩展 asm 实现暂停指令?

提前致谢。

标签: clinuxassemblyriscv

解决方案


推荐阅读