dotnet/runtime

Unnecessary sign-extension for `LeadingZeroCount(UInt64)`

Open

#119,699 建立於 2025年9月14日

在 GitHub 查看
 (14 留言) (1 反應) (0 負責人)C# (5,445 fork)batch import
area-CodeGen-coreclrhelp wanted

倉庫指標

Star
 (17,886 star)
PR 合併指標
 (平均合併 12天 11小時) (30 天內合併 661 個 PR)

描述

public static class LeadingZeroCount {
    public static nint M1(ulong mask) {
        return BitOperations.LeadingZeroCount(mask);
    }
    
    public static nint M2(ulong mask) {
        return (nint)ulong.LeadingZeroCount(mask);
    }
}

public static class TrailingZeroCount {
    public static nint M1(ulong mask) {
        return BitOperations.TrailingZeroCount(mask);
    }
    
    public static nint M2(ulong mask) {
        return (nint)ulong.TrailingZeroCount(mask);
    }
}

public static class PopCount {
    public static nint M1(ulong mask) {
        return BitOperations.PopCount(mask);
    }
    
    public static nint M2(ulong mask) {
        return (nint)ulong.PopCount(mask);
    }
}
// coreclr trunk-20250917+116db00b333e27b70b6e97c93bcfb304ca4245ab

LeadingZeroCount:M1(ulong):nint (FullOpts):
       xor      eax, eax
       lzcnt    rax, rdi
       cdqe     
       ret      

LeadingZeroCount:M2(ulong):nint (FullOpts):
       xor      eax, eax
       lzcnt    rax, rdi
       ret      

TrailingZeroCount:M1(ulong):nint (FullOpts):
       xor      eax, eax
       tzcnt    rax, rdi
       cdqe     
       ret      

TrailingZeroCount:M2(ulong):nint (FullOpts):
       xor      eax, eax
       tzcnt    rax, rdi
       ret      

PopCount:M1(ulong):nint (FullOpts):
       xor      eax, eax
       popcnt   rax, rdi
       cdqe     
       ret      

PopCount:M2(ulong):nint (FullOpts):
       xor      eax, eax
       popcnt   rax, rdi
       ret             

godbolt.org

貢獻者指南