Niet-foutbelastingen van Arm64 SVE vereisen een maskerparameter

Alle Arm64 SVE-api's voor niet-standaardbelasting zijn bijgewerkt om een mask parameter op de eerste positie op te nemen. Deze wijziging is van invloed op alle methoden waarbij LoadVector*NonFaulting voorkomt in hun naam in de klasse System.Runtime.Intrinsics.Arm.Sve.

Geïntroduceerde versie

.NET 10

Vorig gedrag

Voorheen namen niet-faulting load-API's alleen een adresparameter en laadden een volledige vector.

Vector<short> result = Sve.LoadVectorByteNonFaultingZeroExtendToInt16(address);

Als u een niet-uitvallende lading wilt uitvoeren met gemaskeerde elementen, dient u het volgende te gebruiken ConditionalSelect:

Vector<short> maskedResult = Sve.ConditionalSelect(
    mask,
    Sve.LoadVectorByteNonFaultingZeroExtendToInt16(address),
    zero);

Nieuw gedrag

Vanaf .NET 10 vereisen API's die geen fouten veroorzaken een maskerparameter als het eerste argument.

Voor een niet-foutieve laadsessie van alle elementen, maakt u een geldig mask aan en geeft dit door: Sve.LoadVector*NonFaulting*(Sve.CreateTrueMask*(), addr);

Type van brekende verandering

Deze wijziging kan van invloed zijn op binaire compatibiliteit en broncompatibiliteit.

Reden voor wijziging

Deze wijziging was nodig omdat een niet-foutbelasting het eerste foutregister (FFR) bijwerkt, afhankelijk van welke vector lanes worden geladen. De standaardconversie van ConditionalSelect(mask, LoadVectorNonFaulting(addr), zero) naar een gemaskeerde belasting kan niet worden gebruikt omdat deze de status van het FFR-register niet goed verwerkt. Daarom is de enige geldige manier om een gemaskeerde niet-foutbelastende laadbewerking te implementeren door deze beschikbaar te maken als een specifieke API.

  • Voor bestaande toepassingen van Sve.ConditionalSelect(mask, Sve.LoadVector*NonFaulting*(addr), zero), vervang ze door Sve.LoadVector*NonFaulting*(mask, addr).
  • Werk andere toepassingen van niet-standaardbelastingen bij om een echt masker op te nemen: Sve.LoadVector*NonFaulting*(Sve.CreateTrueMask*(), addr).

Betreffende API's