如果协处理器不存在,条件协处理器操作有效吗?

时间:2012-07-28 23:15:04

标签: assembly arm fpu

之类的说明
fstmiaxne ip!, {d8-d15}

如果当前条件代码确保除非协处理器存在之外不执行操作,那么当必要的协处理器可能不存在时,在ARM程序集中使用是否有效/安全?

2 个答案:

答案 0 :(得分:2)

这取决于架构版本和变体。从ARM体系结构参考手册(DDI 0406B):

  

未定义指令的条件执行

     

条件执行中描述的条件执行规则   第A8-8页适用于所有说明。这包括UNDEFINED   指令和其他可能导致进入的说明   未定义的指令异常。

     

如果此类指令未通过其条件检查,则行为取决于   关于架构概况和进入的潜在原因   未定义的指令异常,如下:

     
      
  • 在ARMv7-A配置文件中:

         

    - 如果潜在原因是执行指令本身   并取决于指令读取的数据值,指令   作为NOP执行,不会导致未定义的指令   异常。

         

    - 如果潜在原因是执行早期的协处理器   指令,或指令本身的执行,但没有   取决于指令读取的数据值,它是IMPLEMENTATION   定义指令是作为NOP执行还是导致执行   未定义的指令异常。实现必须处理所有   这种情况也是一样的。

  •   
  • 在ARMv7-R配置文件中,指令作为NOP执行,不会导致未定义指令异常。
  •   
     

注意

     

在ARMv7之前,所有实现都执行了任何失败的指令   它的状态检查为NOP,即使否则会导致   未定义的指令异常。未定义的指令处理程序   为这些实现编写的可能会假设没有检查   undefined指令通过了条件检查。这样的未定义   指令处理程序可能需要重写,以检查   条件在所有ARMv7-A上正常运行之前已通过   实现


由于您使用的是不推荐使用的VFP指令,我假设您在ARMv7之前处理了一个arch,因此您可以假设它将被视为NOP。

编辑:对于ARMv7-M(来自DDI 0403D):

  

未定义指令的条件执行

     

如果未定义的指令在ARMv7-M中的条件检查失败,则   指令表现为NOP,不会导致异常。

     

注意

     

条件字段为'1110'的Branch(B)指令未完成,除非通过条件检查合格,否则将发出异常   IT指令失败。


答案 1 :(得分:0)

这个网站似乎有一个答案:

http://www.peter-cockerell.net/aalp/html/app-a.html

  

另请注意,如果由于其条件代码导致ARM忽略指令而未执行指令,则它将永远不会“提供”给协处理器,或被捕获为未定义的指令。这意味着如果一条指令由于条件代码为“从不”而处于“无操作”状态,则其余指令可以是任何指令 - 它永远不会导致陷阱发生。

然而,如果没有声明的权威来源,我有点犹豫不得信任它。