dotnet / dotnet/runtime

Unnecessary sign-extension for `LeadingZeroCount(UInt64)`

Open
#119,699 14 comments 1 reaction 0 assignees View on GitHub
area-CodeGen-coreclr help wanted
Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Description

```cs
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);
}
}
```

```asm
// 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](https://csharp.godbolt.org/z/M99qvqMGa)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.