dotnet/runtime

Unnecessary sign-extension for `LeadingZeroCount(UInt64)`

Open

#119,699 opened on 2025年9月14日

GitHub で見る
 (12 comments) (1 reaction) (0 assignees)C# (17,886 stars) (5,445 forks)batch import
area-CodeGen-coreclrhelp wanted

説明

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

コントリビューターガイド

Unnecessary sign-extension for `LeadingZeroCount(UInt64)` · dotnet/runtime#119699 | Good First Issue