【发布时间】:2018-09-22 02:13:48
【问题描述】:
所以我在带有 QEMU 后端的 arm 模拟器中测试更改,并且我的微基准测试没有被触发分支和交换指令。
无论如何,我想我会先手动检查这些位
所以:
insn = (0b010001 << 10)
将等于: 100010000000000
所以如果那是命中 switch 语句:
switch (insn >> 12)
我们会得到:4。到目前为止一切顺利。
我们首先检查if (insn & (1 << 11))
那是 0 仍然很好,我们继续下一个条件
if (insn & (1 << 10)) 返回 1024,所以我们选择了分支。
这就是事情开始变得棘手的地方。
我们这样做
op = (insn >> 8) & 3;
switch (op)
分支交换代码在案例 3 中
但(0b100010000000000 >> 8) & 3 将是 0:
为了更清楚0b1000100 & 0b11根本不排队。
我在这里缺少什么?这是一个错误吗?
【问题讨论】:
-
我不太清楚你在问什么。你从哪里得到
insn = (0b010001 << 10)输入?是什么让您认为错误出在您链接到的代码中,而不是微基准测试中(那是您的代码,qemu 的一部分)?