インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

5.13. 整数のプロモーション規則

intX_tのデータ型を使用する際に適用される整数のプロモーション規則は、C/C++の標準規則とは異なります。以下の異なる規則を考慮し、カーネルをデザインしてください。
  • 両方のオペランドが標準の整数型 (charshortなど) の場合、整数はC/C++標準に従ってプロモートされます。つまり演算は、32ビット以上の最大オペランドのデータ型とサイズで実行されます。この式は、より大きい方のデータ型で結果を返します。
  • オペランドがどちらもintX_tデータ型の場合、データ型が32ビットより小さい場合でも、最大のintX_tデータ型で演算は実行されます。この式は、そのデータ型で結果を返します。
  • 式に標準データ型1つとintX_tデータ型1つが含まれる場合、intX_tデータ型のプロモーション規則が適用されます。この式の型は常にintX_tデータ型になります。例えば最大のデータ型が標準整数型のshortの場合、結果で返されるデータ型はint16_tです。
  • リテラルはC/C++のデフォルトにおいてintデータ型のため、キャストなしでリテラルを使用すると、式の型は常に少なくとも32ビットになります。例えば次のようなコードの場合、比較は32ビットで行われます。
    int5_t ap;
    ...
    if (ap < 4) {
    ...
  • オペランドの符号が異なり、符号なしの型が少なくとももう一方の型と同じサイズである場合、演算は符号なしで実行されます。それ以外の場合は、符号なしオペランドは符号付きの値に変換されます。

例えば次のようなコードの場合、-1は32ビットの負の値 (0xffffffff) に拡張され、uint3_tは32ビットの正の値7 (0x00000007) となり、等しくなりません。

uint3_t x = 7;
if (x != -1) { // FAIL
}