[英]Predicting branches
假定處理器具有使編譯器將初始預測狀態指定為分支指令的LT或LNT的功能。 考慮以下形式的聲明
如果A> B那么A = A + 1 ELSE B = B + 1
(a)為上述語句生成匯編語言代碼。
(b)在沒有其他信息的情況下,討論編譯器應如何在匯編代碼中為分支指令指定初始預測狀態。
(c)對包含上述語句的程序的執行行為的研究表明,變量A的值通常大於變量B的值。如果此信息可供編譯器使用,請討論它如何影響初始值。分支指令的預測狀態。
我想我有a和b部分。 對於a部分,不是這樣的:
假設R0包含A中的值,R1包含B中的值。
Branch_if_R0>R1 LOOP //Compares A and B
Add R1, R1, #1 //A>B is false so B=B+1
LOOP Add R0, R0, #1 //A>B is true so A=A+1
至於b部分,由於循環條件在循環的開始,所以這不是LNT嗎? 對於c部分,如果我們知道A通常大於B,那么這不是LT嗎?
您的代碼有錯誤。
IF A > B THEN A = A + 1 ELSE B = B + 1
匯編語言
cmp R0, R1
jg LOOP //Compares A and B
Add R1, R1, #1 //A>B is false so B=B+1
jmp LOOP1
LOOP: Add R0, R0, #1 //A>B is true so A=A+1
LOOP1:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.