对于Cortex M0 M3 M4 的我知道可以在其《Technical Reference Manual 》> Programmers Model > Instruction set summary 里面查看
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0432c/CHDCICDF.html
但是到了M7, 他告诉我去ARM-V7-M的手册中找
“The processor implements the ARMv7-M instruction set and features provided by the ARMv7E-M architecture profile. For more information about the ARMv7-M instructions, see the ARM®v7-M Architecture Reference Manual.” -----《ARM Cortex-M7 Processor Technical Reference Manual》Programmers Model > Instruction set summary > Binary compatibility with other Cortex processors
但是在 V7-M 手册里,也没有找到具体的指令执行周期。请问应该去哪里找呢
对于什么样的指令可以同时执行,这其实主要是从以下三个角度来考虑:
- Data Hazard
也就是说,首先考虑,前后两条指令使用的寄存器是否有依赖关系;其次,目标流水线对与这种依赖关系是如何处理的——直接拒绝双发射,还是通过bypass(forwarding)的方法允许在合适的时间双发射——这也意味着,双发射不一定是成对发射的,也可以存在某条指令发射以后,当Data Hazard得到缓解时立即发射吓一跳指令的可能(也可能是后来的依赖的存在依赖的指令被撤回等待Data Hazard得到缓解后再发射的可能性)——具体怎么样,这属于Cortex-M7具体实现的问题,而具体实现往往是非公开的。所以这里你我都不知道如何评估。
- Control Hazard
异常来了咋办?出现阻塞了咋办?这些也都是处理器实现的细节,有多个策略,我们缺乏公开资料的情况下,是无法讨论的。
- Structural Hazard
当你只有一个ALU的时候,你永远无法同时发射两个数值运算指令就是这个道理。Cortex-M7拥有两个ALU,但是只有一个LSU(Load Store Unit),所以,很容易根据这个信息判断出哪些指令存在双发射的可能。