6

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

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

谢谢!

4

2 回答 2

2

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

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

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

于 2013-01-24T15:07:26.780 回答
-1

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

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

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

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

游戏结束,熄灯。

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

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

于 2017-06-06T18:14:35.870 回答