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>
詳細については、「警告を表示しない」を参照してください。
.NET