删帖吧
本帖最后由 xyfree 于 2012-01-21 03:36 编辑滚 这是一个有意思的问题,回头编译一下,看看。 div, ldiv …… 回复 1# xyfree
有些编译器是会做这样的优化的。比如GCC的一些target。 优化也不可能改变算法吧 $ cat mult.cextern int a, b, c, d;
void
fun (void)
{
a = c / d;
b = c % d;
}
$ mips64el-linux-gcc -S mult.c
$ cat mult.s div $0,$3,$2
teq $2,$0,7
mfhi $3
mflo $2
move $3,$2
lw $2,%got_disp(a)($4)
sw $3,0($2)
lw $2,%got_disp(c)($4)
lw $3,0($2)
lw $2,%got_disp(d)($4)
lw $2,0($2)
div $0,$3,$2
teq $2,$0,7
mfhi $2
move $3,$2
$ mips64el-linux-gcc -S mult.c -O3
$ cat mult.s lui $5,%hi(__gnu_local_gp)
addiu $5,$5,%lo(__gnu_local_gp)
lw $2,%got_disp(c)($5)
lw $4,%got_disp(a)($5)
lw $3,0($2)
lw $2,%got_disp(d)($5)
lw $2,0($2)
div $0,$3,$2
teq $2,$0,7
mflo $3
sw $3,0($4)
lw $3,%got_disp(b)($5)
mfhi $2
j $31
sw $2,0($3) 回复 5# aaaaa5aa
有些处理器有这样的指令,这个指令可以同时得到商和余数。如果你的处理器有这样的指令,编译器就有可能做这样的优化,把除法和取余两个运算合并成一条指令。 回复 6# EricFisher
我查了一下mips的指令手册,它的div就会同时产生商和余数。 是的 有些处理器有这样的指令,这个指令可以同时得到商和余数。如果你的处理器有这样的指令,编译器就有可能做这样的优化,把除法和取余两个运算合并成一条指令。
哦,这样
页:
[1]
2