[mono][interp] implement interp bitcast intrinsics#115443
[mono][interp] implement interp bitcast intrinsics#115443lewing merged 10 commits intodotnet:mainfrom
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.
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 MONObranches and consolidated all vectorAs<TFrom,TTo>to expression-bodiedUnsafe.BitCast. - Dropped exclusions and
ActiveIssueattributes 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.