[英]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.