直接写入ARM Cortex A8的分支预测器中的全局历史缓冲区(GHB)或BTB?

时间:2014-09-11 04:58:00

标签: assembly arm branch prediction cortex-a8

我有兴趣直接修改BTB(分支目标缓冲区)和Cortex A8上的GHB的内容。 ARM手册说的是:

  

在指令侧GHB数组中写入一个条目,例如:

LDR R0, =0x3333AAAA;            
MCR p15, 0, R0, c15, c1, 0;     Move R0 to I-L1 Data 0 Register
LDR R1, =0x0000020C;            
MCR p15, 0, R1, c15, c5, 2;     Write I-L1 Data 0 Register to GHB
  

要读取指令侧GHB数组中的一个条目,例如:

LDR R1, =0x0000020C;      
MCR p15, 0, R1, c15, c7, 2;     Read GHB into I-L1 Data 0 Register
MRC p15, 0, R0, c15, c1, 0;     Move I-L1 Data 0 Register to R0

我只对数据的格式感兴趣。据推测,GHB的内容是2位,对吧?因此,重点是为4096个值中的特定值提供一些索引,将该索引加载到寄存器中,然后将您要查找的值读入寄存器(在示例中为r0)。

但我不清楚这种格式是什么。我从其他来源读到:

  

GHB由所遇到的最后十个分支的方向的10位历史和PC的4位索引。

任何人都可以帮助解释一下这个问题和/或为实际索引提供有效的格式来读/写吗?我将很快在实际的硬件上尝试这个,并且假设我只能从I-L1数据0寄存器获得00,01,10或11,无论我将哪个索引加载到r1中(如上例所示) ),但任何更多的解释表示赞赏。

(如果你想获得有关如何索引BTB的相同信息,那也会很棒!下面的说明如下)

  

在指令侧BTB阵列中写入一个条目,例如:

LDR R0, =0x01234567;            
MCR p15, 0, R0, c15, c1, 0;     Move R0 to I-L1 Data 0 Register
LDR R2, =0x0DDFFFFF;            
MCR p15, 0, R2, c15, c1, 1;     Move R0 to I-L1 Data 1 Register
LDR R1, =0x40000408;            
MCR p15, 0, R1, c15, c5, 3;     Write I-L1 Data 0 or 1 Register to BTB
  

读取指令侧BTB阵列中的一个条目,例如:

LDR R1, =0x40000408;            
MCR p15, 0, R1, c15, c7, 3;     Read BTB into I-L1 Data 0 or 1 Register
MRC p15, 0, R0, c15, c1, 0;     Move I-L1 Data 0 Register to R0
MRC p15, 0, R2, c15, c1, 1;     Move I-L1 Data 1 Register to R2

谢谢!

0 个答案:

没有答案