在D中如何64位mulhi-创新互联

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

创新互联主要从事成都做网站、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务崇阳,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
ulong mulhi(ulong a, ulong b) {return (ucent(a) * ucent(b)) >>64;
}

C++__int128实现它.
这种运算,因为允许一次完成大量移动和加法,对快速哈希很好用.你可能会问,这不就是传统的乘法?不,它不是,因为它不会右移,高位不会影响低位.
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后端有内置函数:

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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:在D中如何64位mulhi-创新互联
文章链接:http://ybzwz.com/article/pochc.html