SYSLIB0055 : les méthodes AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* avec des paramètres signés sont obsolètes
Les méthodes suivantes qui acceptent les entiers signés sont obsolètes, à partir de .NET 9 :
- AdvSimd.Arm64.ShiftRightLogicalRoundedNarrowingSaturateScalar(Vector64<Int64>, Byte)
- AdvSimd.Arm64.ShiftRightLogicalRoundedNarrowingSaturateScalar(Vector64<Int16>, Byte)
- AdvSimd.Arm64.ShiftRightLogicalRoundedNarrowingSaturateScalar(Vector64<Int32>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateLower(Vector128<Int16>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateLower(Vector128<Int64>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateLower(Vector128<Int32>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<SByte>, Vector128<Int16>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<Int16>, Vector128<Int32>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<Int32>, Vector128<Int64>, Byte)
Les appeler dans du code génère un avertissement SYSLIB0055
à la compilation.
Motif de l’obsolescence
L’instruction Arm Advanced SIMD UQRSHRN
arm effectue une opération étroite saturée non signée. Par conséquent, son résultat est toujours non signé. Toutefois, les API affectées acceptaient et retournaient des types signés, ce qui signifie qu’elles ne fonctionnaient pas comme prévu si vous suiviez la description de l’API plutôt que la description de l’instruction. En outre, l’implémentation sous-jacente ne peut pas être corrigée pour effectuer des opérations étroites saturées signées et retourner des résultats signés.
Solution de contournement
Convertissez intentionnellement les données en types signés et appelez plutôt la surcharge non signée correspondante, par exemple AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<UInt32>, Vector128<UInt64>, Byte). Ensuite, convertissez intentionnellement le résultat en type signé.
Supprimer un avertissement
Si vous devez utiliser les API obsolètes, vous pouvez supprimer l’avertissement dans le code ou dans votre fichier projet.
Pour supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver, puis réactiver l’avertissement.
// Disable the warning.
#pragma warning disable SYSLIB0055
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0055
Pour supprimer tous les avertissements SYSLIB0055
dans votre projet, ajoutez une propriété <NoWarn>
à votre fichier projet.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0055</NoWarn>
</PropertyGroup>
</Project>
Pour plus d’informations, consultez Supprimer des avertissements.