原文Mulhi
是一條可在任何64
位CPU
上有效地使用如下操作的指令:
ulong mulhi(ulong a, ulong b) {return (ucent(a) * ucent(b)) >>64;
}
在C++
用__int128
實現(xiàn)它.
這種運(yùn)算,因為允許一次完成大量移動和加法
,對快速哈希
很好用.你可能會問,這不就是傳統(tǒng)
的乘法?不,它不是,因為它不會右移
,高位
不會影響低位
.LDC
可用inline-(LLVM-)IR
:
ulong mulhi(ulong a, ulong b)
{import ldc.llvmasm;
return __ir!(`
%a = zext i64 %0 to i128
%b = zext i64 %1 to i128
%r = mul i128 %a, %b
%r2 = lshr i128 %r, 64
%r3 = trunc i128 %r2 to i64
ret i64 %r3`, ulong)(a, b);
}
為了完整,GDC
的x86
后端有內(nèi)置
函數(shù):
import gcc.builtins;
ulong mulhi(ulong a, ulong b)
{alias __m64 = __vector(short[4]);
__m64 res = __builtin_ia32_pmulhw(*cast(__m64*)&a, *cast(__m64*)&b);
return *cast(ulong*)&res;
}
__EOF__
_D3vec5mulhiFmmZm:
.cfi_startproc
movq %rdi, %xmm0
movq %rsi, %xmm1
pmulhw %xmm1, %xmm0
movq %xmm0, %rax
ret
.cfi_endproc
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前名稱:在D中如何64位mulhi-創(chuàng)新互聯(lián)
鏈接地址:http://muchs.cn/article42/pochc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、關(guān)鍵詞優(yōu)化、軟件開發(fā)、建站公司、外貿(mào)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容