c - 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 实现暂停指令?
提前致谢。
解决方案
推荐阅读
- python - 检查用户之前是否使用 Django 填写过问卷
- html - Angular中的ngx-color颜色选择器,无法设置宽度
- php - 覆盖 Codeigniter 4 中的默认 Myth\Auth 路由库
- python - 如何在 python 的特定场景中忽略 csv 分隔符?
- c - 使用命令行界面减少程序的代码?
- visual-studio-code - 如何在 vscode 的 Multi-root Workspaces 中获取活动工作区
- javascript - 当我保存方法的返回时,它保存未定义
- laravel-8 - Doctrine\DBAL\Driver\PDO\Exception SQLSTATE[28000] [1045] Access denied for user 我得到一个错误
- html - 如何为 tbody 中的所有表数据设置一个表头?
- javascript - 如何下载远程图像然后将图像作为图像文件上传以进行表单提交?