Apple的处理器上独家预约颗粒(ERG)

时间:2013-01-24 13:59:51

标签: ios assembly arm processor

有谁知道Apple的A5,A5X,A6和A6X处理器上的ERG是什么?

我们遇到了一个带有LDREX / STREX指令的模糊错误,A5和A6之间的行为也不同。我唯一的解释是他们有不同的ERG,但在这方面找不到任何东西。我也找不到检索此值的方法,在iOS上的用户模式下似乎禁止使用MRC指令。

谢谢!

2 个答案:

答案 0 :(得分:2)

在OMAP 4460(ARM Cortex-A9,与Apple A5 / A5X相同)上,ERG为32字节(与缓存行大小相同)。

我不知道那些值是在A6 / A6X上(如果没有加载你自己的驱动程序就无法找到它,你在Apple设备上无法做到),但我的猜测是缓存行大小增加了到64字节,ERG也是如此。

或者,您可以针对最多512字(2K字节)的架构优化算法。

答案 1 :(得分:-1)

使用ldrex / strex时,ERG大小是关键的考虑因素。

当发出ldrex时,如果在发生ldrex读取的ERG中发生了内存访问,则strex将失败。

具有包含ldrex / strex目标和一些附加数据的结构并不罕见,其中在ldrex / strex对之间访问附加数据(例如,存储由ldex加载的值)。

如果ldrex / strex目标在结构中填充不足(即选择的ERG大小太小),那么访问结构的其他成员将导致strex始终失败。

游戏结束,熄灭。

关于ldrex / strex,ARM实现了“本地监视器”和“全局监视器”。在只有本地监视器的系统上,ldrex / strex失败的唯一方法是在发布strex之前在同一地址上发出两个ldrex - 只有具有全局监视器的系统实际上会注意到ERG中的内存总线流量。 ldrex / strex target。

ARM系统变化很大,我怀疑有些系统只有本地监视器,因此实际上并不支持ldrex / strex。