![]() |
1
8
分支已经需要将分支目标偏移量编码为立即数,在其中拟合两个立即数操作数会比较困难。使两者都小得多将使它们适合,但也会降低教学的有用性。 这样的分支偶尔会有用,但在我看来,您高估了它的有用性:在典型的循环中,不需要直接将循环计数器与其边界值进行比较,事实上,大多数循环变量甚至都无法将其放入编译的代码中。 作为一个小例子(使用更高的计数以避免循环完全展开),
由Clang编译成:
地址 然后循环,直到到达该地址,从循环中删除循环计数器。
这是一个有点特殊的情况,但也有其他的伎俩。例如,在许多情况下,循环退出测试可以被转换为当寄存器被递减到零时退出的循环,这是因为RISCV已经很容易测试。
|