Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Rekommenderad åtgärd
- För befintliga användningsområden för
Sve.ConditionalSelect(mask, Sve.LoadVector*NonFaulting*(addr), zero)ersätter du dem medSve.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
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorNonFaulting
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToInt16(Byte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToInt32(Byte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToInt64(Byte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToUInt16(Byte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToUInt32(Byte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorByteNonFaultingZeroExtendToUInt64(Byte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt16NonFaultingSignExtendToInt32(Int16*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt16NonFaultingSignExtendToInt64(Int16*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt16NonFaultingSignExtendToUInt32(Int16*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt16NonFaultingSignExtendToUInt64(Int16*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt32NonFaultingSignExtendToInt64(Int32*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorInt32NonFaultingSignExtendToUInt64(Int32*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToInt16(SByte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToInt32(SByte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToInt64(SByte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToUInt16(SByte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToUInt32(SByte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorSByteNonFaultingSignExtendToUInt64(SByte*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt16NonFaultingZeroExtendToInt32(UInt16*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt16NonFaultingZeroExtendToInt64(UInt16*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt16NonFaultingZeroExtendToUInt32(UInt16*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt16NonFaultingZeroExtendToUInt64(UInt16*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt32NonFaultingZeroExtendToInt64(UInt32*)
- System.Runtime.Intrinsics.Arm.Sve.LoadVectorUInt32NonFaultingZeroExtendToUInt64(UInt32*)