Встроенные проверки 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
разрешался в свойство IsSupported
вложенного класса X64
родительского класса <Isa>
. Это означало, что свойство может возвращать true
даже тогда, когда <Isa>.IsSupported
возвращает false
.
В .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