เขียนโดยตรงไปยังบัฟเฟอร์ประวัติโลก (GHB) หรือ BTB ในตัวทำนายสาขาของ ARM Cortex A8 หรือไม่

ฉันสนใจที่จะซ่อมแซมเนื้อหาของ BTB (บัฟเฟอร์เป้าหมายสาขา) และ GHB บน Cortex A8 โดยตรง คู่มือ 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 บิตของทิศทางของ 10 สาขาสุดท้ายที่พบและ 4 บิตของพีซี

ใครสามารถช่วยอธิบายเพิ่มเติมอีกหน่อยและ/หรือจัดเตรียมรูปแบบที่ถูกต้องสำหรับดัชนีจริงเพื่อใช้ในการอ่าน/เขียน ฉันจะลองทำสิ่งนี้กับฮาร์ดแวร์จริงเร็วๆ นี้ และสันนิษฐานว่าฉันควรได้รับ 00, 01, 10 หรือ 11 จากการลงทะเบียน I-L1 Data 0 เท่านั้น ไม่ว่าฉันจะโหลดดัชนีใดลงใน 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

ขอบคุณ!


person user770901    schedule 11.09.2014    source แหล่งที่มา