SYSLIB0055: методы AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* с подписанными параметрами устарели
Следующие методы, принимаюющие целые числа со знаком, устарели, начиная с .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)
При вызове их в коде выдается предупреждение SYSLIB0055
во время компиляции.
Причина обсоления
Инструкция Arm Advanced SIMD UQRSHRN
выполняет неназначенные насыщенные узкие операции. Таким образом, его результат всегда без знака. Однако затронутые API приняли и вернули подписанные типы, что означает, что они не работают должным образом, если вы выполнили описание API, а не описание инструкции. Кроме того, базовая реализация не может быть исправлена для выполнения подписанных насыщенных узких операций и возврата подписанных результатов.
Обходное решение
Намеренно преобразуйте данные в подписанные типы и вызовите соответствующую перегрузку без знака, например AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<UInt32>, Vector128<UInt64>, Byte). Затем намеренно преобразуйте результат в подписанный тип.
Отключение предупреждений
Если необходимо использовать устаревшие API, вы можете отключить предупреждение в коде или в файле проекта.
Чтобы отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить предупреждение.
// Disable the warning.
#pragma warning disable SYSLIB0055
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0055
Чтобы отключить все SYSLIB0055
предупреждения в проекте, добавьте <NoWarn>
свойство в файл проекта.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0055</NoWarn>
</PropertyGroup>
</Project>
Дополнительные сведения см. в разделе Отключение предупреждений.