QEMU分支和交换(手臂拇指)指令未调用

时间:2018-09-22 02:13:48

标签: qemu thumb

因此,Im使用QEMU后端测试了手臂模拟器中的更改,并且分支和交换指令未触发我的微基准。

我关心的特定块: https://github.com/qemu/qemu/blob/19b599f7664b2ebfd0f405fb79c14dd241557452/target/arm/translate.c#L11748

无论如何,我认为我会先手动检查一下这些位

如此:

contents += '<a href="#" onclick="getAwardDetailsFunction('+obj.awardId+')">';

将等于: 100010000000000

所以如果要按switch语句:

contents += '<a href="#" onclick="getAwardDetailsFunction(\'' + obj.awardId.replace('\'', '&quot;') + '\')"</a>';

我们将得到:4.到目前为止一切顺利。

我们首先检查insn = (0b010001 << 10) 多数民众赞成在0仍然好,我们继续下一个条件 switch (insn >> 12) 返回1024,所以我们进入分支。 这是开始变得毛茸茸的地方。

我们做

if (insn & (1 << 11))

分支交换代码在情况3中 但if (insn & (1 << 10))将为0: 为了更清楚地说明op = (insn >> 8) & 3; switch (op) 根本没有排队。

我在这里想念什么?这是错误吗?

1 个答案:

答案 0 :(得分:1)

0100010000000000(即0b010001 << 10)不是Thumb BX指令,这就是为什么如果将其馈送到解码器中,它将不会沿着BX的代码路径前进的原因。如代码中的注释所示,BX和BLX的insn为0b0100_0111_xxxx_xxxx。 0100010000000000是寄存器-寄存器ADD指令。

您可以通过查看v7A Arm ARM(DDI0406C.c,可在https://developer.arm.com/docs/ddi0406/c/arm-architecture-reference-manual-armv7-a-and-armv7-r-edition上),尤其是A6.2节中的解码表来确认。