Las comprobaciones intrínsecas de IsSupported de hardware pueden diferir en los tipos anidados

Comprobar <Isa>.X64.IsSupported, donde <Isa> hace referencia a las clases del espacio de nombres System.Runtime.Intrinsics.X86, ahora puede producir un resultado diferente a las versiones anteriores de .NET.

Sugerencia

ISA significa Arquitectura del conjunto de instrucciones.

Versión introducida

5.0

Descripción del cambio

En versiones anteriores de .NET, algunos de los tipos intrínsecos de hardware System.Runtime.Intrinsics.X86, por ejemplo, System.Runtime.Intrinsics.X86.Aes, no expusieron una clase X64 anidada. Para estos tipos, la llamada a <Isa>.X64.IsSupported se resolvía en una propiedad IsSupported en una clase X64 anidada de una clase principal <Isa>. Esto significaba que la propiedad podía devolver true incluso cuando <Isa>.IsSupported devuelve false.

En .NET 5 y versiones posteriores, todos los tipos System.Runtime.Intrinsics.X86 exponen una clase X64 anidada que notifica correctamente la compatibilidad. Esto garantiza que la jerarquía general siga siendo correcta y que, si <Isa>.X64.IsSupported es true, también se puede suponer que <Isa>.IsSupported sea true.

Motivo del cambio

Se pretendía que, si <Isa>.X64.IsSupported es true, se da por hecho que <Isa>.IsSupported también es true. Sin embargo, debido a cómo funciona la resolución de miembros en C#, las clases que no tenían una clase X64 anidada exponían una situación en la que este no siempre era el caso y se generaban errores en el código de usuario.

Si es necesario, ajuste el código que comprueba IsSupported para buscar el ISA adecuado.

APIs afectadas