Arm64 SVE-inläsningar utan fel kräver maskparameter

Alla Arm64 SVE-API:er för inläsning som inte genererar fel har uppdaterats för att inkludera en mask-parameter i den första positionen. Den här ändringen påverkar alla metoder med LoadVector*NonFaulting i deras namn i System.Runtime.Intrinsics.Arm.Sve klassen.

Version lanserad

.NET 10

Tidigare beteende

Tidigare tog icke-felande inläsnings-API:er endast en adressparameter och läste in en fullständig vektor:

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

Om du vill utföra inläsning utan fel med maskerade element var du tvungen att använda ConditionalSelect:

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

Nytt beteende

Från och med .NET 10 kräver icke-felande inläsnings-API:er en maskparameter som det första argumentet.

Skapa och skicka en sann mask för att göra en felfri lastning av alla element: Sve.LoadVector*NonFaulting*(Sve.CreateTrueMask*(), addr);

Typ av brytande ändring

Den här ändringen kan påverka binär kompatibilitet och källkompatibilitet.

Orsak till ändring

Den här ändringen var nödvändig eftersom en icke-felaktig belastning uppdaterar det första felregistret (FFR) beroende på vilka vektorfiler som läses in. Standardkonverteringen av ConditionalSelect(mask, LoadVectorNonFaulting(addr), zero) till en maskerad belastning kan inte användas eftersom den inte hanterar FFR-registertillståndet korrekt. Därför är det enda giltiga sättet att implementera en maskerad inläsning utan fel genom att exponera den som ett dedikerat API.

  • För befintliga användningsområden för Sve.ConditionalSelect(mask, Sve.LoadVector*NonFaulting*(addr), zero)ersätter du dem med Sve.LoadVector*NonFaulting*(mask, addr).
  • Uppdatera andra användningsområden för icke-felande belastningar för att inkludera en sann mask: Sve.LoadVector*NonFaulting*(Sve.CreateTrueMask*(), addr).

Berörda API:er