[英]GCC and the Multiply Instruction
我在cygwin下的Windows 7計算機上以32位模式使用GCC。 我有以下功能:
unsigned f1(unsigned x, unsigned y)
{
return x*y;
}
我希望代碼執行無符號乘法,因此我希望它生成mul指令,而不是imul指令。 我用以下命令編譯程序:
gcc -m32 -S t4.c
生成的匯編代碼為:
.file "t4.c"
.text
.globl _f1
.def _f1; .scl 2; .type 32; .endef
_f1:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
imull 12(%ebp), %eax
popl %ebp
ret
.ident "GCC: (GNU) 4.8.2"
我相信所生成的代碼中包含錯誤的乘法指令,但是我很難相信GCC擁有如此簡單的錯誤。 請評論。
編譯器依賴於“假設”規則:符合標准的程序無法檢測到該程序做什么與該程序應該做什么之間的差異,因為這兩個指令的結果的最低32位相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.