SYSLIB0055: AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* métodos com parâmetros assinados são obsoletos
Os seguintes métodos que aceitam números inteiros assinados estão obsoletos, começando no .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)
Chamá-los no código gera aviso SYSLIB0055
em tempo de compilação.
Motivo da obsolescência
A instrução Arm Advanced SIMD UQRSHRN
executa uma operação estreita saturada sem sinal. Como tal, o seu resultado é sempre sem sinal. No entanto, as APIs afetadas aceitaram e retornaram tipos assinados, o que significa que não funcionaram conforme o esperado se você seguisse a descrição da API em vez da descrição da instrução. Além disso, a implementação subjacente não pode ser corrigida para executar operações estreitas saturadas assinadas e retornar resultados assinados.
Solução alternativa
Converta intencionalmente os dados em tipos assinados e chame a sobrecarga não assinada correspondente, por exemplo, AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<UInt32>, Vector128<UInt64>, Byte). Em seguida, converta intencionalmente o resultado em um tipo assinado.
Suprimir um aviso
Se for necessário usar as APIs obsoletas, você poderá suprimir o aviso no código ou no arquivo de projeto.
Para suprimir apenas uma violação única, adicione as diretivas de pré-processador ao arquivo de origem para desabilitar e, em seguida, reabilite o aviso.
// Disable the warning.
#pragma warning disable SYSLIB0055
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0055
Para suprimir todos os avisos SYSLIB0055
no projeto, adicione uma propriedade <NoWarn>
ao arquivo de projeto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0055</NoWarn>
</PropertyGroup>
</Project>
Para obter mais informações, confira Suprimir avisos.