在D中如何64位mulhi-創(chuàng)新互聯(lián)

原文
Mulhi是一條可在任何64CPU上有效地使用如下操作的指令:

創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)崇陽,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
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);
}

為了完整,GDCx86后端有內(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)

成都網(wǎng)站建設(shè)公司