我已经看过一张图片,展示了3种设计条件指令的方法。它看起来像:
1. One step:
bz s1, label ; branch if s1 = 0
jecxa label ; branch if ecx = 0
2. Two steps with tags:
CP A, 0 ; set flags
JR Z, MULEND ; jump if Z = 1
cmp eax, 0 ; set flags
jz mulend ; jump if zf = 1
3. Two step with predicates:
cmp.eq p1, p2 = r1, r2 ; if r1=r2
(p1) add r3 = 1, r3 ; then r3 := r3 +1
(p2) add r3 = 3, r3 ; else r3 := r3 + 3
我不知道发生了什么。我可以在谷歌搜索,但我找不到任何东西。如果有人知道它是什么,请将我引荐到某个地方。
我想比较那些控制程序流程的免费方法: 所以:
Advantages:
1. There is no data-dependency ( flag register)
2. None?
3. There is less branch instruction in implementation of if-then-else
Disadvantages:
1. None?
2. There is data-dependency ( flag register)
3. Data-dependency of registers for the true-predicate and the false-predicate
请标记并说出其他内容。
答案 0 :(得分:1)
您想要什么样的其他信息?我打算将此作为评论发布,但它可以作为答案。
谓词版本对我来说看起来很奇怪,但这可能是因为我习惯看到谓词指令只是使用标志作为输入。
translateY(-50%)
生成两个单独的结果,彼此相反,这似乎很奇怪。这比让指令使用谓词的倒数更容易吗? (2结果cmp与每个谓词指令编码中的额外位)
除此之外,如果您看过x86,一切看起来都非常明显和直截了当。 IIRC,MIPS更像是“一步”版本,因为它的比较指令使用GP寄存器作为输出而不是FLAGS寄存器。