-
Notifications
You must be signed in to change notification settings - Fork 5.2k
[mono][interp] implement interp bitcast intrinsics #115443
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Tagging subscribers to this area: @BrzVlad, @kotlarmilos |
This comment was marked as outdated.
This comment was marked as outdated.
this will also help reduce the impact of #116221 |
The failure in windows minijit is preexisting n BitCast, #109345 I'll take a look but may mark it as known |
I've disabled the jit intrinsic for the already failing case. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR implements interpreter support for BitConverter
and Unsafe.BitCast
intrinsics in Mono, unifies As<TFrom,TTo>
methods to use Unsafe.BitCast
, and re-enables previously excluded hardware intrinsic tests.
- Added interpreter-side handling for
DoubleToInt64Bits
,Int32BitsToSingle
,BitCast
, etc. - Removed Mono-specific
#if MONO
branches and consolidated all vectorAs<TFrom,TTo>
to expression-bodiedUnsafe.BitCast
. - Dropped exclusions and
ActiveIssue
attributes for Vector128/256/512 hardware intrinsic tests so they now run.
Reviewed Changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 2 comments.
Show a summary per file
File | Description |
---|---|
src/tests/issues.targets | Removed exclusion lists for Vector128/256/512 hardware intrinsic tests |
src/tests/JIT/HardwareIntrinsics/General/Vector256_1/Program.Vector256_1.cs | Removed ActiveIssue attribute |
src/tests/JIT/HardwareIntrinsics/General/Vector128_1/Program.Vector128_1.cs | Removed ActiveIssue attribute |
src/mono/mono/mini/intrinsics.c | Added skip for SIMD bitcast on Windows x64 when not using LLVM |
src/mono/mono/mini/interp/transform.c | Implemented interpreter handling for BitConverter.*Bits and Unsafe.BitCast |
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector64.cs | Always use Unsafe.BitCast in Vector64.As<TFrom,TTo> |
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.cs | Always use Unsafe.BitCast in Vector128.As<TFrom,TTo> |
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256.cs | Always use Unsafe.BitCast in Vector256.As<TFrom,TTo> |
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector512.cs | Always use Unsafe.BitCast in Vector512.As<TFrom,TTo> |
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.Numerics.cs | Simplified AsPlane /AsQuaternion methods to expression-bodied Unsafe.BitCast |
src/libraries/System.Private.CoreLib/src/System/Numerics/Vector4.Extensions.cs | Simplified extension methods to expression-bodied Unsafe.BitCast |
src/libraries/System.Private.CoreLib/src/System/Numerics/Vector.cs | Always use Unsafe.BitCast in Vector.As<TFrom,TTo> |
src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.Extensions.cs | Simplified AsVector4 to expression-bodied Unsafe.BitCast |
src/libraries/System.Private.CoreLib/src/System/Numerics/Plane.Extensions.cs | Simplified AsVector4 to expression-bodied Unsafe.BitCast |
based on #103915 should now avoid the regressions in dotnet/perf-autofiling-issues#36484 because wasm handles BitCast of vector types in AOT and interpreter now. Mono JIT/AOT 32bit platforms other than wasm still don't have an simd intrinsic path in bitcast but I'm not sure if that matters.