Upstream SPV_INTEL_float_controls2 extension
authorDmitry Sidorov <dmitry.sidorov@intel.com>
Mon, 9 Nov 2020 10:03:22 +0000 (13:03 +0300)
committerDmitry Sidorov <dmitry.sidorov@intel.com>
Wed, 20 Jan 2021 10:14:31 +0000 (13:14 +0300)
Spec:
https://github.com/intel/llvm/blob/39fa9b0cbfbae88327118990a05c5b387b56d2ef/sycl/doc/extensions/SPIRV/SPV_INTEL_float_controls2.asciidoc

Signed-off-by: Dmitry Sidorov <dmitry.sidorov@intel.com>
include/spirv/unified1/spirv.core.grammar.json
tools/buildHeaders/jsonToSpirv.cpp
tools/buildHeaders/jsonToSpirv.h

index 2b538dd53203dd5404b79010576a81d04bcff973..9729d7aa0d8d00883e6e19fb3066126c357055c2 100644 (file)
           "extensions" : [ "SPV_INTEL_vector_compute" ],
           "version" : "None"
         },
+        {
+          "enumerant" : "RoundingModeRTPINTEL",
+          "value" : 5620,
+          "parameters" : [
+            { "kind" : "LiteralInteger", "name" : "'Target Width'" }
+          ],
+          "capabilities" : [ "RoundToInfinityINTEL" ],
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
+        {
+          "enumerant" : "RoundingModeRTNINTEL",
+          "value" : 5621,
+          "parameters" : [
+            { "kind" : "LiteralInteger", "name" : "'Target Width'" }
+          ],
+          "capabilities" : [ "RoundToInfinityINTEL" ],
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
+        {
+          "enumerant" : "FloatingPointModeALTINTEL",
+          "value" : 5622,
+          "parameters" : [
+            { "kind" : "LiteralInteger", "name" : "'Target Width'" }
+          ],
+          "capabilities" : [ "RoundToInfinityINTEL" ],
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
+        {
+          "enumerant" : "FloatingPointModeIEEEINTEL",
+          "value" : 5623,
+          "parameters" : [
+            { "kind" : "LiteralInteger", "name" : "'Target Width'" }
+          ],
+          "capabilities" : [ "RoundToInfinityINTEL" ],
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
         {
           "enumerant" : "MaxWorkgroupSizeINTEL",
           "value" : 5893,
         }
       ]
     },
+    {
+      "category" : "ValueEnum",
+      "kind" : "FPDenormMode",
+      "enumerants" : [
+        {
+          "enumerant" : "Preserve",
+          "value" : 0
+        },
+        {
+          "enumerant" : "FlushToZero",
+          "value" : 1
+        }
+      ]
+    },
+    {
+      "category" : "ValueEnum",
+      "kind" : "FPOperationMode",
+      "enumerants" : [
+        {
+          "enumerant" : "IEEE",
+          "value" : 0
+        },
+        {
+          "enumerant" : "ALT",
+          "value" : 1
+        }
+      ]
+    },
     {
       "category" : "ValueEnum",
       "kind" : "LinkageType",
           "extensions" : [ "SPV_GOOGLE_user_type" ],
           "version" : "None"
         },
+        {
+          "enumerant" : "FunctionRoundingModeINTEL",
+          "value" : 5822,
+          "parameters" : [
+            { "kind" : "LiteralInteger", "name" : "'Target Width'" },
+            { "kind" : "FPRoundingMode", "name" : "'FP Rounding Mode'" }
+          ],
+          "capabilities" : [ "FunctionFloatControlINTEL" ],
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
+        {
+          "enumerant" : "FunctionDenormModeINTEL",
+          "value" : 5823,
+          "parameters" : [
+            { "kind" : "LiteralInteger", "name" : "'Target Width'" },
+            { "kind" : "FPDenormMode", "name" : "'FP Denorm Mode'" }
+          ],
+          "capabilities" : [ "FunctionFloatControlINTEL" ],
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
         {
           "enumerant" : "RegisterINTEL",
           "value" : 5825,
           "extensions" : [ "SPV_INTEL_io_pipes" ],
           "version" : "None"
         },
+        {
+          "enumerant" : "FunctionFloatingPointModeINTEL",
+          "value" : 6080,
+          "parameters" : [
+            { "kind" : "LiteralInteger", "name" : "'Target Width'" },
+            { "kind" : "FPOperationMode", "name" : "'FP Operation Mode'" }
+          ],
+          "capabilities" : [ "FunctionFloatControlINTEL" ],
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
         {
           "enumerant" : "SingleElementVectorINTEL",
           "value" : 6085,
           "extensions" : [ "SPV_INTEL_media_block_io" ],
           "version" : "None"
         },
+        {
+          "enumerant" : "RoundToInfinityINTEL",
+          "value" : 5582,
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
+        {
+          "enumerant" : "FloatingPointModeINTEL",
+          "value" : 5583,
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
         {
           "enumerant" : "IntegerFunctions2INTEL",
           "value" : 5584,
           "extensions" : [ "SPV_INTEL_variable_length_array" ],
           "version" : "None"
         },
+        {
+          "enumerant" : "FunctionFloatControlINTEL",
+          "value" : 5821,
+          "extensions" : [ "SPV_INTEL_float_controls2" ],
+          "version" : "None"
+        },
         {
           "enumerant" : "FPGAMemoryAttributesINTEL",
           "value" : 5824,
index 2118678b0a2b477104847f3217dd3432540083b1..e5b1e3e590ac0c52fa21ea48c5b91d8f8a10e6cb 100644 (file)
@@ -61,6 +61,8 @@ EnumValues ImageChannelDataTypeParams;
 EnumValues ImageOperandsParams;
 EnumValues FPFastMathParams;
 EnumValues FPRoundingModeParams;
+EnumValues FPDenormModeParams;
+EnumValues FPOperationModeParams;
 EnumValues LinkageTypeParams;
 EnumValues DecorationParams;
 EnumValues BuiltInParams;
@@ -178,6 +180,10 @@ ClassOptionality ToOperandClassAndOptionality(const std::string& operandKind, co
             type = OperandImageChannelDataType;
         } else if (operandKind == "FPRoundingMode") {
             type = OperandFPRoundingMode;
+        } else if (operandKind == "FPDenormMode") {
+            type = OperandFPDenormMode;
+        } else if (operandKind == "FPOperationMode") {
+            type = OperandFPOperationMode;
         } else if (operandKind == "LinkageType") {
             type = OperandLinkageType;
         } else if (operandKind == "AccessQualifier") {
@@ -452,6 +458,10 @@ void jsonToSpirv(const std::string& jsonPath, bool buildingHeaders)
             establishOperandClass(enumName, OperandFPFastMath, &FPFastMathParams, operandEnum, category);
         } else if (enumName == "FPRoundingMode") {
             establishOperandClass(enumName, OperandFPRoundingMode, &FPRoundingModeParams, operandEnum, category);
+        } else if (enumName == "FPDenormMode") {
+            establishOperandClass(enumName, OperandFPDenormMode, &FPDenormModeParams, operandEnum, category);
+        } else if (enumName == "FPOperationMode") {
+            establishOperandClass(enumName, OperandFPOperationMode, &FPOperationModeParams, operandEnum, category);
         } else if (enumName == "LinkageType") {
             establishOperandClass(enumName, OperandLinkageType, &LinkageTypeParams, operandEnum, category);
         } else if (enumName == "FunctionParameterAttribute") {
index 72c7cded987a69a3c4a81d75723a29707df8eb02..572b8724ee1992dadce9084cefdc41b656aef9ac 100644 (file)
@@ -69,6 +69,8 @@ enum OperandClass {
     OperandImageOperands,
     OperandFPFastMath,
     OperandFPRoundingMode,
+    OperandFPDenormMode,
+    OperandFPOperationMode,
     OperandLinkageType,
     OperandAccessQualifier,
     OperandFuncParamAttr,