假设处理器具有使编译器能够将初始预测状态指定为分支指令的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吗?
答案 0 :(得分:0)
您的代码存在错误。
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: