QEMU 实现新指令

news/2025/10/25 13:36:16/文章来源:https://www.cnblogs.com/yexuanyang/p/19165215

DecodeTree机制

DecodeTree是QEMU在17年引入的机制,在给riscv板卡实现新指令的时候引入的。

DecodeTree简化了指令格式的定义以及指令解析函数的实现。通过在.decode文件里面使用特定格式定义指令和指令格式,decodetree机制会通过脚本自动生成对应的解析函数。

DecodeTree的详细格式
Link,可以当manual,编程的时候查看:

  1. 汉化文档: https://gevico.github.io/learning-qemu-docs/ch2/sec2/qemu-accel-tcg/tcg-add-guest-insn/
  2. 全英官方: https://www.qemu.org/docs/master/devel/decodetree.html
  3. 汉化文档(内容和第一个差不多吧): https://lifeislife.cn/posts/qemu-decodetree详解/

例如添加这个指令,符合R-Type格式(应该是RISC-V里面的一种通用的指令格式)

31      25 24    20 19    15 14     12  11                7 6     0
+---------+--------+--------+----------+-------------------+-------+
|  func7  |  rs2   |  rs1   |  funct3  |         rd        | opcode| R-type
+---------+--------+--------+----------+-------------------+-------+6                           6                          0x7b
+---------+--------+--------+----------+-------------------+-------+
| 0000110 |  rs2   |  rs1   |    110   |         rd        |1111011| dma
+---------+--------+--------+----------+-------------------+-------+

insn32.decode添加指令信息的定义,我们直接复用R-type的指令解析定义@r

dma         0000110  ..... ..... 110 ..... 1111011 @r

下面的内容是insn32.decode里面已经有的,不用自己添加
@r的定义如下

# Formats 32:
@r       .......   ..... ..... ... ..... ....... &r                %rs2 %rs1 %rd

意思是从32位指令里提取出rs2 rs1 和 rd

然后rs2 rs1和rd的字段定义以及r-type的format sets定义如下:

# Format sets
&r    rd rs1 rs2# Fields
%rs2       20:5
%rs1       15:5
%rd        7:5

rs2表示从20位开始,大小为5位。其他的类似意思。

实现指令逻辑

指令的逻辑实现在后缀为.c.inc的文件中

可以仿照其他的.c.inc文件编写指令的逻辑

.c.inc文件里面使用定义的helper函数,在定义helper函数的宏指定的函数名前面加一个gen_helper_前缀。

比如定义

DEF_HELPER_4(dma, void, env, tl, tl, tl)

那么使用这个dma helper函数需要调用gen_helper_dma(...)

.c.inc文件的语法好像和C是一致的

例如:

static bool trans_dma(DisasContext *ctx, arg_dma *a)
{TCGv dst = get_gpr(ctx, a->rd, EXT_NONE);TCGv src = get_gpr(ctx, a->rs1, EXT_NONE);TCGv gran = get_gpr(ctx, a->rs2, EXT_NONE);gen_helper_dma(tcg_env, dst, src, gran);return true;
}

helper函数

指令实现需要使用到的helper函数在xxx_helper.c里面实现,在helper.h里面声明这些helper函数,使用QEMU提供的一类宏DEF_HELPER_[n]()。这个n是参数的数量。宏的第一个参数是helper的名字,第二个参数是函数返回值类型,之后的参数是函数的参数类型。
宏定义出来的函数名是第一个参数加上前缀helper_

如果helper函数里面需要传入State,那么用env标记。需要传入整型,使用i32或者使用tl表示目标架构的机器位宽。使用ptr表示传入一个void*指针

如果新增了xxx_helper.c,需要在QEMU的构建系统里面添加这个新的文件。QEMU使用meson构建,在同级目录下面的meson.build里面仿照其他文件添加的形式添加新文件。

xxx_helper.c里面实现helper函数需要使用HELPER(name)宏来定义函数签名

例如

// helper.h
DEF_HELPER_4(dma, void, env, tl, tl, tl)// xxx_helper.c
void HELPER(dma)(CPURISCVState *env, target_ulong dst, target_ulong src, target_ulong gran)
{int size = 8 << gran;for (int i = 0; i < size; i++) {for (int j = 0; j < size; j++) {uint32_t val = cpu_ldl_data(env, src + (i * size + j) * sizeof(uint32_t));cpu_stl_data(env, dst + (j * size + i) * sizeof(uint32_t), (uint32_t)val);}}
}

TCG API

TCG提供了一系列抽象的API来操作寄存器,将不同架构下的一些操作统一了,便于实现自定义指令,而且比用自己写的helper速度更快。

TCG提供了很多类型的操作,比如读取写入和一些数学计算。还提供了一些有关创建寄存器、创建临时寄存器、标签的操作。

TCG API 链接, 同样可以作为manual:

  1. QEMU源码的 tcg/tcg_op.h文件,具有所有tcg_op的声明
  2. QEMU wiki对tcg_ops的文字描述: https://wiki.qemu.org/Documentation/TCG/frontend-ops

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/946119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:JavaScript继承详讲

实用指南:JavaScript继承详讲pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

Python matplotlib 画图入门示例01

参考: https://www.cnblogs.com/emanlee/p/16025425.htmlMatplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。Matplotlib 可以用来绘制各种静态,动态,交互式的图表。Mat…

一文读懂x402 协议

x402 协议:未来互联网支付的“聪明”新方式,AI 和机器也能轻松用 今天我们来聊聊一个叫 x402 协议 的新鲜玩意儿。它就像是给互联网支付“升级”了,让付款变得超级简单,就像点开网页一样快。尤其适合 AI 机器人和机…

2025年防水膜厂家推荐排行榜,防水透气膜,防水膜材料,喇叭防水膜,防水网,手机防水膜,咪头防水网,耐高温防水膜公司精选

2025年防水膜厂家推荐排行榜:防水透气膜与防水膜材料企业深度解析 随着消费电子、汽车电子、医疗设备等行业的快速发展,防水膜技术已成为保障电子产品可靠性的关键要素。防水膜、防水透气膜、防水膜材料、喇叭防水膜…

2025年摩托车厂家权威推荐榜:覆盖街车、跑车、巡航车、越野车的最新选购指南及品牌实力解析

2025年摩托车厂家权威推荐榜:覆盖街车、跑车、巡航车、越野车的最新选购指南及品牌实力解析 行业背景与发展趋势 摩托车产业作为现代交通工具制造业的重要组成部分,近年来呈现出多元化、专业化的发展态势。随着全球环…

2025年摩托车/机车厂家权威推荐榜:专业制造工艺与卓越性能口碑之选,覆盖街车、跑车、巡航车型的源头厂家深度解析

2025年摩托车/机车厂家权威推荐榜:专业制造工艺与卓越性能口碑之选,覆盖街车、跑车、巡航车型的源头厂家深度解析 随着全球摩托车市场的持续升温,中国摩托车制造业正迎来新一轮技术革新与产业升级。在电动化、智能化…

dell服务器SD卡mirror的设置

dell服务器SD卡mirror的设置dell服务器SD卡mirror的设置BIOS下的IDSDM设置: System BIOS - System BIOS Settings->Integrated Devices a.Internal SD Card Port: 开启或关闭SD卡 b.Internal SD Card Redundancy: …

2025年冷水机/冷冻机/冰水机厂家权威推荐榜:工业制冷设备实力解析与高效节能选购指南

2025年冷水机/冷冻机/冰水机厂家权威推荐榜:工业制冷设备实力解析与高效节能选购指南 工业制冷设备作为现代制造业的重要基础设施,在塑料成型、食品加工、激光切割、化工生产等众多领域发挥着关键作用。随着"双…

2025年英语学习机推荐:小初高提分路径与主流选择指南

“孩子单词背了就忘、口语开不了口、家长陪读时间碎片化”——如果你正被这些问题困扰,英语学习机的搜索框里一定出现过“哪个牌子靠谱”“真能提分吗”“会不会买来吃灰”这样的关键词。2025年,教育硬件整体出货量同…

2025年英语学习机推荐:十大知名品牌排行榜与评测报告

“孩子马上幼升小,想提前培养英语语感,又怕伤眼、难坚持”“校内英语成绩卡在及格线,想找能精准提分的系统”“住校生,周末才回家,需要能离线学、家长远程可见进度的设备”——这些真实场景,对应着三类核心需求:…

2025年英语学习机推荐:市场报告级评测榜单新鲜出炉

在为孩子挑英语学习机的家长里,十个人有九个会问同一串问题:怕买回去孩子三分钟热度、怕课程与校内脱节、怕硬件用两年就卡、怕家长没时间督学。这些焦虑背后,是“双减”后家庭英语教育回归校内+家庭双线并行的现实…

2025年英语学习机推荐:主流品牌对比排行榜与避坑指南

引言与现状分析 “双减”后,家庭英语启蒙与校内提分需求同步上升,家长把“学习机”视为可在家落地的“第二课堂”。艾瑞《2025中国家庭教育支出报告》显示,3-12岁英语类硬件渗透率已达42%,但“买前焦虑”集中在三点…

2025年暖风机口碑排行榜:五款主流机型对比与避坑指南

冬天回到家,脚冷手僵,空调升温慢、油汀占地大,很多人把希望寄托在“即开即热”的暖风机上。可真正打开电商页面,PTC、石墨烯、远红外、直流变频、等离子杀菌……名词一堆,价格从九十九到两千元不等,噪音、耗电、…

深入解析:LeetCode 390 消除游戏

深入解析:LeetCode 390 消除游戏pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

2025年暖风机评测:五款口碑机型横向对比与推荐

寒冬来临,客厅、卧室、办公室甚至浴室都需要一台“即开即热”的暖风机,但用户普遍面临三大痛点:一是升温慢、热风直吹干燥;二是噪音大、耗电高;三是安全认证不全、售后响应慢。奥维云网2024年取暖器白皮书显示,暖…

感知节点@8@ ESP32+arduino+ 第六个程序 读取射频卡卡号

一、硬件与接线 1.1 RFID RC552 MFRC522简化功能框图: 先从RC522功能框图入手,可以从大方向上理解通讯原理。 上述主机一般指的就是手上的开发板,通信接口对应天线,MFRC522与主机通讯支持UART、SPI以及IIC,本…

一个关于cos的极限

\[\lim_{x\to 0}\dfrac{1 - \cos x}{x} = 0 \]第一种推导方法:使用勾股定理。 \[\begin{align*} \lim_{x\to 0}\dfrac{1 - \cos x}{x} &= \lim_{x\to 0}\dfrac{1 - \cos x}{x}\cdot \dfrac{1 + \cos x}{1 + \cos …

Ai元人文:共识锚定

从“概率模仿与监管”到“共识锚定与生成” 当前人工智能的发展正面临一个根本性瓶颈:如何让智能系统理解、承载并协同人类复杂多元的价值体系。传统的“价值对齐”范式在技术上主要依赖于统计拟合与行为约束:通过在…

QEMU 建模硬件

QEMU 建模硬件场景 建模一个RISCV架构的虚拟板卡G233 G233的datasheet如下 https://gevico.github.io/learning-qemu-docs/ch4/g233-board-datasheet/ 前置 [[QEMU 初始化流程]] 看完初始化流程之后再研究怎么建模新硬…

P14304 【MX-J27-T1】分块

P14304 【MX-J27-T1】分块 题解题目传送门 My Blog 我们发现这个题是 T1,但它的 \(n\) 很大,于是我们可以合理推断这是个结论题或诈骗题。 我们考虑 \([m^2,(m+1)^2)\) 这个区间里有哪些数满足题中所述的条件。显然 …