巢狀型別的硬體內建 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
類別的類別會公開不常見的狀況,並導致使用者程式碼出現錯誤。
建議的動作
如有必要,請調整檢查 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