Menulis langsung ke buffer sejarah global (GHB) atau BTB di prediktor cabang ARM Cortex A8?

Saya tertarik mengutak-atik langsung isi BTB (branch target buffer) dan GHB di Cortex A8. Manual ARM mengatakan hal-hal seperti:

Untuk menulis satu entri dalam array GHB sisi instruksi, misalnya:

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

Untuk membaca satu entri di sisi instruksi array GHB, misalnya:

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

Saya hanya tertarik dengan format datanya. Kira-kira isi GHBnya 2 bit ya? Jadi intinya adalah membuat beberapa indeks untuk nilai tertentu dari 4096, memuat indeks tersebut ke dalam register, lalu membaca nilai yang Anda cari ke dalam register (dalam contoh, r0).

Tapi saya tidak jelas apa formatnya. Saya telah membaca dari sumber lain bahwa:

GHB diindeks oleh riwayat 10-bit dari arah sepuluh cabang terakhir yang ditemui dan 4 bit PC.

Adakah yang bisa membantu menjelaskan hal ini lebih lanjut dan/atau memberikan format yang valid untuk indeks aktual yang akan digunakan untuk membaca/menulis? Saya akan segera mencobanya pada perangkat keras sebenarnya, dan mungkin saya hanya akan mendapatkan 00, 01, 10 atau 11 dari register I-L1 Data 0, terlepas dari indeks mana yang saya muat ke r1 (seperti pada contoh di atas ), tetapi penjelasan lebih lanjut sangat kami hargai.

(Jika Anda ingin memberikan informasi yang sama tentang cara mengindeks BTB, itu bagus juga! Petunjuknya ada di bawah)

Untuk menulis satu entri dalam array BTB sisi instruksi, misalnya:

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

Untuk membaca satu entri di sisi instruksi array BTB, misalnya:

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

Terima kasih!


person user770901    schedule 11.09.2014    source sumber