[英]mips number of clock cycles and how improving code
我真的是MIPS的新手,我遇到了这些问题,我为他们找到了许多不同的答案……如果有人可以提供帮助,那就太好了。 谢谢
此代码需要几个时钟周期?
#Macro Instructions
li $t0, 32 # 1 or 2 cycles ?
# lui $at, Upper 16-bits of value
# ori Rd, $at, Lower 16-bits of value
# -----------------------------------
# ori Rt, $0, value
#
# Which set of instructions will be executed?
div $t2, $t2, $t0 # 41 cycles?
# bne Rt, $0,
# break $0
# ok: div Rs, Rt
# mflo Rd
#Integer Instruction
lw $t2, 0($t13) # 1 cycles?
sw $t2, 0($t3) # 1 cycles?
如何显着改善这四行代码? 通过避免使用宏或...?
li $t0, 32
您可以通过反汇编可执行文件或目标文件来轻松检查这一文件。 使用带有-d
或-D
选项的MIPS工具链中的objdump
。 我猜想汇编器足够聪明,不会为如此小的值生成lui
。
div $t2, $t2, $t0
由于您要除以2(32)的幂,因此有一种更快的方法:按log2(divisor)
位(即5位)右移:
srl $t2, $t2, 5 # if $t2 is unsigned
要么
sra $t2, $t2, 5 # if $t2 is signed
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.