嵌套类型的硬件内部 IsSupported 检查可能有所不同
现在,如果检查 <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
解析为父类 <Isa>
的嵌套 X64
类上的 IsSupported
属性。 这意味着即使 <Isa>.IsSupported
返回 false
,该属性也可返回 true
。
在 .NET 5 及更高版本中,所有 System.Runtime.Intrinsics.X86 类型都公开适当报告支持的嵌套的 X64
类。 这可确保一般层次结构保持正确;如果 <Isa>.X64.IsSupported
为 true
,则也可假定 <Isa>.IsSupported
为 true
。
更改原因
预期结果是,如果 <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
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈