我刚刚开始使用 P1020 PowerPC IC 并遇到了我的第一个问题。我正在查看 P1020 参考手册和 e500 ppc 文档,但找不到我的问题的答案。
如何读取 64 位值 - 创建为时基模块的两个 32 位低 TBL 和 32 位高 TBU 寄存器 - 并防止竞争条件?是否保证该值正确(寄存器被锁存?)。有没有可以以原子方式读取两个寄存器的汇编指令?我在哪里可以在文档中找到此类信息?谢谢
我刚刚开始使用 P1020 PowerPC IC 并遇到了我的第一个问题。我正在查看 P1020 参考手册和 e500 ppc 文档,但找不到我的问题的答案。
如何读取 64 位值 - 创建为时基模块的两个 32 位低 TBL 和 32 位高 TBU 寄存器 - 并防止竞争条件?是否保证该值正确(寄存器被锁存?)。有没有可以以原子方式读取两个寄存器的汇编指令?我在哪里可以在文档中找到此类信息?谢谢
PowerPC 架构文档对此有专门的部分 - 请参阅https://wiki.alcf.anl.gov/images/f/的第 2.2.1.2 节“在 32 位模式下读取时基”(第 60 页)fb/ PowerPC_-组装-_IBM_Programming_Environment_2.3.pdf。
简而言之:您要读取时基的上部,然后读取下部,然后再读取上部,并比较上部的两次读取。如果它们不相等,那么您的读取跨越了一个进位,因此再次执行所有三个读取。
正如文件在汇编中描述的那样:
loop:
mftbu rx # load from TBU
mftb ry # load from TBL
mftbu rz # load from TBU
cmpw rz, rx # see if ‘old’ = ‘new’
bne loop # loop if carry occurred