是否有如下指令
fstmiaxne ip!, {d8-d15}当必要的协处理器可能不存在时,在ARM装配中使用有效/安全,如果当前的条件代码确保除非存在协处理器,否则不执行操作?
发布于 2012-07-30 19:41:54
这取决于架构版本和变体。来自ARM架构参考手册(DDI 0406B):
未定义指令的
条件执行
在A8-8页的条件执行中描述的条件执行规则适用于所有指令。这包括未定义的指令和会导致进入未定义的指令异常的其他指令。
如果此类指令未通过其条件检查,则行为取决于体系结构配置文件和进入未定义指令异常的潜在原因,如下所示:
ARMv7-A配置文件中的
-如果潜在原因是指令本身的执行,并取决于指令读取的数据值,则指令将作为NOP执行,不会导致未定义的指令异常。
-如果潜在原因是执行较早的协处理器指令,或执行指令本身,但不依赖于指令读取的数据值,则由实现定义指令是作为NOP执行还是导致未定义的指令异常。实现必须以相同的方式处理所有这类情况。
备注
在ARMv7之前,所有实现都将未通过其条件检查的任何指令作为NOP执行,即使否则会导致未定义的指令异常。为这些实现编写的未定义指令处理程序可能会假定未定义指令已通过其条件检查,而不进行检查。在这些未定义的指令处理程序在所有ARMv7-A实现上正确运行之前,它们可能需要重写,以检查条件是否通过
由于您使用的是一个废弃的VFP指令作为示例,我假设您在处理ARMv7之前正在处理一个arch,所以看起来您可以假定它将被视为NOP。
编辑:对于ARMv7-M (来自DDI 0403D):
未定义指令的
条件执行
如果未定义的指令未通过ARMv7-M中的条件检查,则该指令的行为类似于NOP,不会导致异常。
备注
条件字段为‘1110’的Branch (B)指令未定义,除非由IT指令的条件检查失败限定,否则将发生异常。
发布于 2012-07-29 07:26:19
这个网站似乎有一个答案:
http://www.peter-cockerell.net/aalp/html/app-a.html
还请注意,如果一条指令由于其条件代码导致ARM忽略而未执行,则该指令将永远不会‘提供’给协处理器,或作为未定义的指令被捕获。这意味着,如果一条指令由于其条件代码为“never”而成为“无操作”,那么指令的其余部分可以是任何东西--它永远不会导致陷阱发生。
然而,在没有权威来源的情况下,我有点犹豫要不要相信它。
https://stackoverflow.com/questions/11705412
复制相似问题