检查 <Isa>.X64.IsSupported(其中 <Isa> 引用 System.Runtime.Intrinsics.X86 命名空间中的类)现在可能会生成与早期版本的 .NET 不同的结果。
提示
ISA 代表指令集体系结构。
引入的版本
5.0
更改描述
在早期版本的 .NET 中,某些 System.Runtime.Intrinsics.X86 硬件内部类型(例如,System.Runtime.Intrinsics.X86.Aes)未公开嵌套 X64 类。 对于这些类型,调用 <Isa>.X64.IsSupported 解析为父类 IsSupported 的嵌套 X64 类上的 <Isa> 属性。 这意味着,属性可能返回 true,即使 <Isa>.IsSupported 返回 false。
在 .NET 5 及更高版本中,所有的 System.Runtime.Intrinsics.X86 类型都公开一个嵌套的 X64 类,用于适当报告支持情况。 这可确保常规层次结构保持不变,如果 <Isa>.X64.IsSupportedtrue,则也可以假定 <Isa>.IsSupportedtrue。
更改原因
它的目的是,如果 <Isa>.X64.IsSupported 是 true,<Isa>.IsSupported 也暗示 true。 但是,由于成员解析在 C# 中的工作方式,没有嵌套的 X64 类的类会导致并不总是这种结果且用户代码中会出现 bug。
建议的操作
如有必要,请调整检查 IsSupported 的代码,以检查相应的 ISA。
受影响的 API
- System.Runtime.Intrinsics.X86.Aes.X64.IsSupported
- System.Runtime.Intrinsics.X86.Avx.X64.IsSupported
- System.Runtime.Intrinsics.X86.Avx2.X64.IsSupported
- System.Runtime.Intrinsics.X86.Fma.X64.IsSupported
- System.Runtime.Intrinsics.X86.Pclmulqdq.X64.IsSupported
- System.Runtime.Intrinsics.X86.Sse3.X64.IsSupported
- System.Runtime.Intrinsics.X86.Ssse3.X64.IsSupported