Les vérifications IsSupported intrinsèques du matériel peuvent différer pour les types imbriqués

La vérification de <Isa>.X64.IsSupported, où <Isa> fait référence aux classes de l’espace de noms System.Runtime.Intrinsics.X86, peut maintenant produire un résultat différent des versions précédentes de .NET.

Conseil

ISA est l’acronyme d’architecture standard du secteur.

Version introduite

5,0

Description de la modification

Dans les versions précédentes de .NET, certains des types intrinsèques matériels System.Runtime.Intrinsics.X86, par exemple System.Runtime.Intrinsics.X86.Aes, n’exposaient pas de classe imbriquée X64. Pour ces types, l’appel de <Isa>.X64.IsSupported était résolu en propriété IsSupported sur une classe X64 imbriquée d’une classe parente de <Isa>. Cela signifiait que la propriété pouvait retourner true même lorsque <Isa>.IsSupported retourne false.

Dans .NET 5 et versions ultérieures, tous les types System.Runtime.Intrinsics.X86 exposent une classe X64 imbriquée qui prend en charge correctement les rapports. Cela garantit que la hiérarchie générale reste correcte et que si <Isa>.X64.IsSupported est true, <Isa>.IsSupported peut également être true.

Raison du changement

Il était prévu que si <Isa>.X64.IsSupported est true, <Isa>.IsSupported est également implicitement true. Toutefois, en raison du fonctionnement de la résolution des membres en C#, les classes qui n’avaient pas de classe imbriquée X64 exposaient une situation où cela n’était pas toujours le cas et entraînait des bogues dans le code utilisateur.

Si nécessaire, ajustez le code qui contrôle IsSupported pour vérifier l’ISA approprié.

API affectées