Hardwareintrinsische IsSupported-Überprüfungen können für geschachtelte Typen abweichen
Bei der Überprüfung von <Isa>.X64.IsSupported
, wobei <Isa>
auf die Klassen im Namespace System.Runtime.Intrinsics.X86 verweist, kann das Ergebnis jetzt von früheren .NET-Versionen abweichen.
Tipp
ISA steht für Industriestandardarchitektur.
Eingeführt in Version
5.0
Änderungsbeschreibung
In früheren .NET-Versionen machten einige der hardwareintrinsischen System.Runtime.Intrinsics.X86-Typen wie System.Runtime.Intrinsics.X86.Aes keine geschachtelte X64
-Klasse verfügbar. Für diese Typen wurde der Aufruf von <Isa>.X64.IsSupported
in eine IsSupported
-Eigenschaft in einer geschachtelten X64
-Klasse aufgelöst, der die Klasse <Isa>
übergeordnet ist. Das bedeutete, dass die Eigenschaft true
zurückgeben konnte, auch wenn <Isa>.IsSupported
false
zurückgibt.
In .NET 5 und höher machen alle System.Runtime.Intrinsics.X86-Typen eine geschachtelte X64
-Klasse verfügbar, die Unterstützung entsprechend meldet. Dadurch wird sichergestellt, dass die allgemeine Hierarchie korrekt erhalten bleibt. Wenn <Isa>.X64.IsSupported
true
entspricht, kann zudem angenommen werden, dass <Isa>.IsSupported
true
entspricht.
Grund für die Änderung
Wenn <Isa>.X64.IsSupported
true
entspricht, ist beabsichtigt, dass für <Isa>.IsSupported
true
impliziert werden kann. Aufgrund der Funktionsweise der Memberauflösung in C# führten Klassen ohne geschachtelte X64
-Klasse in Situationen, in denen das nicht der Fall war, zu Fehlern im Benutzercode.
Empfohlene Maßnahme
Passen Sie Code mit Überprüfungen auf IsSupported
ggf. an, damit die richtige ISA überprüft wird.
Betroffene APIs
- 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