diff --git a/api/gen_runtime.cpp b/api/gen_runtime.cpp
index f7ee3c3..589556f 100644
--- a/api/gen_runtime.cpp
+++ b/api/gen_runtime.cpp
@@ -40,18 +40,16 @@
  * - ParameterDefinition: A definition of a parameter of a concrete function.
  */
 
-// TODO Rename runtime.spec to rs_core_math.spec.
-// TODO Handle NaN, +Inf, -Inf correctly.
-// TODO Add range(,) as an option for test values.
-
+#include <math.h>
+#include <stdio.h>
 #include <cctype>
 #include <cstdlib>
-#include <stdio.h>
+#include <fstream>
 #include <functional>
+#include <iomanip>
 #include <list>
 #include <map>
 #include <set>
-#include <fstream>
 #include <sstream>
 #include <string>
 #include <vector>
@@ -83,6 +81,7 @@
 class Function;
 class Specification;
 class Permutation;
+struct Type;
 
 /* Information about a parameter to a function.  The values of all the fields should only be set by
  * parseParameterDefinition.
@@ -115,7 +114,11 @@
      */
     string smallerParameter;
 
-    bool isOutParameter;  // True if this parameter returns data from the script.
+    bool isOutParameter;       // True if this parameter returns data from the script.
+    bool undefinedIfOutIsNan;  // If true, we don't validate if 'out' is NaN.
+
+    int typeIndex;            // Index in the TYPES array.
+    int compatibleTypeIndex;  // Index in TYPES for which the test data must also fit.
 
     /* Parse the parameter definition found in the spec file.  It will generate a name if none
      * are present in the file.  One of the two counts will be incremented, and potentially
@@ -206,7 +209,8 @@
      * convert.
      */
     string mCleanName;
-    string mTest;  // How to test.  One of "scalar", "vector", "noverify", and "none".
+    string mTest;  // How to test.  One of "scalar", "vector", "noverify", "limited", and "none".
+    string mPrecisionLimit;  // Maximum precision required when checking output of this function.
 
     vector<vector<string> > mReplaceables;
 
@@ -249,6 +253,7 @@
         return expandStringVector(mParam, i1, i2, i3, i4, params);
     }
     string getTest() const { return mTest; }
+    string getPrecisionLimit() const { return mPrecisionLimit; }
     string getCleanName() const { return mCleanName; }
 
     void writeFiles(ofstream& headerFile, ofstream& rsFile, ofstream& javaFile, Function* function,
@@ -270,7 +275,8 @@
     // These are the expanded version of those found on Specification
     string mName;
     string mCleanName;
-    string mTest;  // How to test.  One of "scalar", "vector", "noverify", and "none".
+    string mTest;  // How to test.  One of "scalar", "vector", "noverify", "limited", and "none".
+    string mPrecisionLimit;  // Maximum precision required when checking output of this function.
     vector<string> mInline;
     vector<string> mComment;
 
@@ -305,20 +311,30 @@
                                             const ParameterDefinition& param) const;
     void writeJavaOutputAllocationDefinition(ofstream& file, const string& indent,
                                              const ParameterDefinition& param) const;
+    // Write code to create a random allocation for which the data must be compatible for two types.
+    void writeJavaRandomCompatibleFloatAllocation(ofstream& file, const string& dataType,
+                                                  const string& seed, char vectorSize,
+                                                  const Type& compatibleType,
+                                                  const Type& generatedType) const;
+    void writeJavaRandomCompatibleIntegerAllocation(ofstream& file, const string& dataType,
+                                                    const string& seed, char vectorSize,
+                                                    const Type& compatibleType,
+                                                    const Type& generatedType) const;
     void writeJavaCallToRs(ofstream& file, bool relaxed, bool generateCallToVerify) const;
 
-    void writeJavaTestOneValue(ofstream& file, int indent, const string& rsBaseType,
-                               const string& expected, const string& actual) const;
-    void writeJavaAppendOutputToMessage(ofstream& file, int indent, const string& rsBaseType,
-                                        const string& name, const string& expected,
-                                        const string& actual) const;
+    void writeJavaTestAndSetValid(ofstream& file, int indent, const ParameterDefinition& p,
+                                  const string& argsIndex, const string& actualIndex) const;
+    void writeJavaTestOneValue(ofstream& file, int indent, const ParameterDefinition& p,
+                               const string& argsIndex, const string& actualIndex) const;
+    void writeJavaAppendOutputToMessage(ofstream& file, int indent, const ParameterDefinition& p,
+                                        const string& argsIndex, const string& actualIndex) const;
     void writeJavaAppendInputToMessage(ofstream& file, int indent, const string& rsBaseType,
                                        const string& name, const string& actual) const;
-    void writeJavaComputeNeededUlf(ofstream& file, int indent, const string& expected,
-                                   const string& actual) const;
     void writeJavaAppendNewLineToMessage(ofstream& file, int indent) const;
     void writeJavaAppendVariableToMessage(ofstream& file, int indent, const string& rsBaseType,
-                                          const string& legend, const string& value) const;
+                                          const string& value) const;
+    void writeJavaAppendFloatyVariableToMessage(ofstream& file, int indent,
+                                                const string& value) const;
     void writeJavaVectorComparison(ofstream& file, int indent, const ParameterDefinition& p) const;
     void writeJavaAppendVectorInputToMessage(ofstream& file, int indent,
                                              const ParameterDefinition& p) const;
@@ -336,27 +352,45 @@
 
 // Table of type equivalences
 // TODO: We should just be pulling this from a shared header. Slang does exactly the same thing.
+
+enum NumberKind { SIGNED_INTEGER, UNSIGNED_INTEGER, FLOATING_POINT };
+
 struct Type {
     const char* specType;  // Name found in the .spec file
     string rsDataType;     // RS data type
     string cType;          // Type in a C file
     const char* javaType;  // Type in a Java file
+    NumberKind kind;
+    /* For integers, number of bits of the number, excluding the sign bit.
+     * For floats, number of bits of the exponent.
+     */
+    int significantBits;
 };
 
-const Type TYPES[] = {{"f16", "FLOAT_16", "half", "half"},
-                      {"f32", "FLOAT_32", "float", "float"},
-                      {"f64", "FLOAT_64", "double", "double"},
-                      {"i8", "SIGNED_8", "char", "byte"},
-                      {"u8", "UNSIGNED_8", "uchar", "byte"},
-                      {"i16", "SIGNED_16", "short", "short"},
-                      {"u16", "UNSIGNED_16", "ushort", "short"},
-                      {"i32", "SIGNED_32", "int", "int"},
-                      {"u32", "UNSIGNED_32", "uint", "int"},
-                      {"i64", "SIGNED_64", "long", "long"},
-                      {"u64", "UNSIGNED_64", "ulong", "long"}};
+const Type TYPES[] = {{"f16", "FLOAT_16", "half", "half", FLOATING_POINT, 5},
+                      {"f32", "FLOAT_32", "float", "float", FLOATING_POINT, 8},
+                      {"f64", "FLOAT_64", "double", "double", FLOATING_POINT, 11},
+                      {"i8", "SIGNED_8", "char", "byte", SIGNED_INTEGER, 7},
+                      {"u8", "UNSIGNED_8", "uchar", "byte", UNSIGNED_INTEGER, 8},
+                      {"i16", "SIGNED_16", "short", "short", SIGNED_INTEGER, 15},
+                      {"u16", "UNSIGNED_16", "ushort", "short", UNSIGNED_INTEGER, 16},
+                      {"i32", "SIGNED_32", "int", "int", SIGNED_INTEGER, 31},
+                      {"u32", "UNSIGNED_32", "uint", "int", UNSIGNED_INTEGER, 32},
+                      {"i64", "SIGNED_64", "long", "long", SIGNED_INTEGER, 63},
+                      {"u64", "UNSIGNED_64", "ulong", "long", UNSIGNED_INTEGER, 64}};
 
 const int NUM_TYPES = sizeof(TYPES) / sizeof(TYPES[0]);
 
+// Returns the index in TYPES for the provided cType
+int FindCType(const string& cType) {
+    for (int i = 0; i < NUM_TYPES; i++) {
+        if (cType == TYPES[i].cType) {
+            return i;
+        }
+    }
+    return -1;
+}
+
 // Capitalizes and removes underscores.  E.g. converts "native_log" to NativeLog.
 string capitalize(const string& source) {
     int length = source.length();
@@ -377,12 +411,15 @@
 
 string tab(int n) { return string(n * 4, ' '); }
 
-long hashString(const string& s) {
+// Returns a string that's an hexadecimal constant fo the hash of the string.
+string hashString(const string& s) {
     long hash = 0;
     for (size_t i = 0; i < s.length(); i++) {
         hash = hash * 43 + s[i];
     }
-    return hash;
+    stringstream stream;
+    stream << "0x" << std::hex << hash << "l";
+    return stream.str();
 }
 
 // Removes the character from present. Returns true if the string contained the character.
@@ -566,6 +603,8 @@
     javaArrayName = "array" + capitalize(javaAllocName);
 
     // Process the option.
+    undefinedIfOutIsNan = false;
+    compatibleTypeIndex = -1;
     if (!option.empty()) {
         if (option.compare(0, 6, "range(") == 0) {
             size_t pComma = option.find(',');
@@ -583,16 +622,26 @@
             } else {
                 smallerParameter = option.substr(6, pParen - 6);
             }
+        } else if (option.compare(0, 11, "compatible(") == 0) {
+            size_t pParen = option.find(')');
+            if (pParen == string::npos) {
+                printf("Incorrect option %s\n", option.c_str());
+            } else {
+                compatibleTypeIndex = FindCType(option.substr(11, pParen - 11));
+            }
+        } else if (option.compare(0, 11, "conditional") == 0) {
+            undefinedIfOutIsNan = true;
         } else {
             printf("Unrecognized option %s\n", option.c_str());
         }
     }
 
-    for (int i = 0; i < NUM_TYPES; i++) {
-        if (rsBaseType == TYPES[i].cType) {
-            javaBaseType = TYPES[i].javaType;
-            break;
-        }
+    typeIndex = FindCType(rsBaseType);
+    if (typeIndex < 0) {
+        // TODO set a global flag when we encounter an error & abort
+        printf("Error, could not find %s\n", rsBaseType.c_str());
+    } else {
+        javaBaseType = TYPES[typeIndex].javaType;
     }
 }
 
@@ -880,8 +929,18 @@
             trim(&s, 5);
             if (s == "scalar" || s == "vector" || s == "noverify" || s == "none") {
                 spec->mTest = s;
+            } else if (s.compare(0, 7, "limited") == 0) {
+                spec->mTest = "limited";
+                if (s.compare(7, 1, "(") == 0) {
+                    size_t pParen = s.find(')');
+                    if (pParen == string::npos) {
+                        printf("Incorrect test %s\n", s.c_str());
+                    } else {
+                        spec->mPrecisionLimit = s.substr(8, pParen - 8);
+                    }
+                }
             } else {
-                printf("Unrecognized test option: %s\n", s.c_str());
+                printf("Error: Unrecognized test option: %s\n", s.c_str());
                 success = false;
             }
             continue;
@@ -1021,6 +1080,7 @@
     mName = spec->getName(i1, i2, i3, i4);
     mCleanName = spec->getCleanName();
     mTest = spec->getTest();
+    mPrecisionLimit = spec->getPrecisionLimit();
     spec->getInlines(i1, i2, i3, i4, &mInline);
     spec->getComments(i1, i2, i3, i4, &mComment);
 
@@ -1303,7 +1363,7 @@
 
 void Permutation::writeJavaSection(ofstream& file) const {
     // By default, we test the results using item by item comparison.
-    if (mTest == "scalar") {
+    if (mTest == "scalar" || mTest == "limited") {
         writeJavaArgumentClass(file, true);
         writeJavaCheckMethod(file, true);
         writeJavaVerifyScalarMethod(file);
@@ -1330,15 +1390,17 @@
     s += tab(1) + "public class " + name + " {\n";
     for (size_t i = 0; i < mParams.size(); i++) {
         const ParameterDefinition& p = *mParams[i];
-        s += tab(2) + "public " + p.javaBaseType;
+        s += tab(2) + "public ";
+        if (p.isOutParameter && p.javaBaseType == "float") {
+            s += "Floaty";
+        } else {
+            s += p.javaBaseType;
+        }
         if (!scalar && p.mVectorSize != "1") {
             s += "[]";
         }
         s += " " + p.variableName + ";\n";
     }
-    s += "\n";
-    s += tab(2) + "public int ulf;\n";
-    s += tab(2) + "public int ulfRelaxed;\n";
     s += tab(1) + "}\n\n";
 
     mFunction->writeJavaArgumentClassDefinition(name, s);
@@ -1372,16 +1434,81 @@
     string dataType;
     char vectorSize;
     convertToRsType(param.rsType, &dataType, &vectorSize);
-    long seed = hashString(mJavaCheckMethodName + param.javaAllocName);
-    file << indent << "Allocation " << param.javaAllocName
-         << " = createRandomAllocation(mRS, Element.DataType." << dataType << ", " << vectorSize
-         << ", 0x" << std::hex << seed << "l";
-    if (!param.minValue.empty()) {
-        file << ", " << param.minValue << ", " << param.maxValue;
+
+    string seed = hashString(mJavaCheckMethodName + param.javaAllocName);
+    file << indent << "Allocation " << param.javaAllocName << " = ";
+    if (param.compatibleTypeIndex >= 0) {
+        if (TYPES[param.typeIndex].kind == FLOATING_POINT) {
+            writeJavaRandomCompatibleFloatAllocation(file, dataType, seed, vectorSize,
+                                                     TYPES[param.compatibleTypeIndex],
+                                                     TYPES[param.typeIndex]);
+        } else {
+            writeJavaRandomCompatibleIntegerAllocation(file, dataType, seed, vectorSize,
+                                                       TYPES[param.compatibleTypeIndex],
+                                                       TYPES[param.typeIndex]);
+        }
+    } else if (!param.minValue.empty()) {
+        if (TYPES[param.typeIndex].kind != FLOATING_POINT) {
+            printf("range(,) is only supported for floating point\n");
+        } else {
+            file << "createRandomFloatAllocation(mRS, Element.DataType." << dataType << ", "
+                 << vectorSize << ", " << seed << ", " << param.minValue << ", " << param.maxValue
+                 << ")";
+        }
     } else {
-        file << ", false";  // TODO set to false only for native
+        file << "createRandomAllocation(mRS, Element.DataType." << dataType << ", " << vectorSize
+             << ", " << seed << ", false)";  // TODO set to false only for native
     }
-    file << ");\n";
+    file << ";\n";
+}
+
+void Permutation::writeJavaRandomCompatibleFloatAllocation(ofstream& file, const string& dataType,
+                                                           const string& seed, char vectorSize,
+                                                           const Type& compatibleType,
+                                                           const Type& generatedType) const {
+    file << "createRandomFloatAllocation"
+         << "(mRS, Element.DataType." << dataType << ", " << vectorSize << ", " << seed << ", ";
+    file << scientific << std::setprecision(10);
+    switch (compatibleType.kind) {
+        case FLOATING_POINT: {
+            // We're generating floating point values.  We just have to worry about the
+            // exponent.  Subtract 1 for the sign.
+            int bits = min(compatibleType.significantBits, generatedType.significantBits) - 1;
+            double maxValue = ldexp(0.95, (1 << bits) - 1);
+            file << -maxValue << ", " << maxValue;
+            break;
+        }
+        case UNSIGNED_INTEGER:
+            file << "0, " << ldexp(1, compatibleType.significantBits);
+            break;
+        case SIGNED_INTEGER: {
+            double max = ldexp(1, compatibleType.significantBits);
+            file << -max << ", " << (max - 1);
+            break;
+        }
+    }
+    file.unsetf(ios_base::floatfield);
+    file << ")";
+}
+
+void Permutation::writeJavaRandomCompatibleIntegerAllocation(ofstream& file, const string& dataType,
+                                                             const string& seed, char vectorSize,
+                                                             const Type& compatibleType,
+                                                             const Type& generatedType) const {
+    file << "createRandomIntegerAllocation"
+         << "(mRS, Element.DataType." << dataType << ", " << vectorSize << ", " << seed << ", ";
+
+    if (compatibleType.kind == FLOATING_POINT) {
+        // Currently, all floating points can take any number we generate.
+        bool isSigned = generatedType.kind == SIGNED_INTEGER;
+        file << (isSigned ? "true" : "false") << ", " << generatedType.significantBits;
+    } else {
+        bool isSigned =
+                    compatibleType.kind == SIGNED_INTEGER && generatedType.kind == SIGNED_INTEGER;
+        file << (isSigned ? "true" : "false") << ", "
+             << min(compatibleType.significantBits, generatedType.significantBits);
+    }
+    file << ")";
 }
 
 void Permutation::writeJavaOutputAllocationDefinition(ofstream& file, const string& indent,
@@ -1447,17 +1574,15 @@
     }
 
     file << tab(4) << "// Figure out what the outputs should have been.\n";
+    file << tab(4) << "Floaty.setRelaxed(relaxed);\n";
     file << tab(4) << "CoreMathVerifier." << mJavaVerifierComputeMethodName << "(args);\n";
-    file << tab(4) << "int ulf = relaxed ? args.ulfRelaxed : args.ulf;\n";
 
     file << tab(4) << "// Figure out what the outputs should have been.\n";
     file << tab(4) << "boolean valid = true;\n";
-    file << tab(4) << "int neededUlf = 0;\n";
     for (size_t i = 0; i < mParams.size(); i++) {
         const ParameterDefinition& p = *mParams[i];
         if (p.isOutParameter) {
-            writeJavaTestOneValue(file, 4, p.rsBaseType, "args." + p.variableName,
-                                  p.javaArrayName + "[i * " + p.vectorWidth + " + j]");
+            writeJavaTestAndSetValid(file, 4, p, "", "[i * " + p.vectorWidth + " + j]");
         }
     }
 
@@ -1466,9 +1591,7 @@
     for (size_t i = 0; i < mParams.size(); i++) {
         const ParameterDefinition& p = *mParams[i];
         if (p.isOutParameter) {
-            writeJavaAppendOutputToMessage(file, 5, p.rsBaseType, p.variableName,
-                                           "args." + p.variableName,
-                                           p.javaArrayName + "[i * " + p.vectorWidth + " + j]");
+            writeJavaAppendOutputToMessage(file, 5, p, "", "[i * " + p.vectorWidth + " + j]");
         } else {
             writeJavaAppendInputToMessage(file, 5, p.rsBaseType, p.variableName,
                                           "args." + p.variableName);
@@ -1492,86 +1615,94 @@
     file << "boolean relaxed) {\n";
 }
 
-void Permutation::writeJavaTestOneValue(ofstream& file, int indent, const string& rsBaseType,
-                                        const string& expected, const string& actual) const {
-    if (rsBaseType[0] == 'f') {
-        writeJavaComputeNeededUlf(file, indent, expected, actual);
-        file << tab(indent) << "if (neededUlf > ulf) {\n";
-        file << tab(indent + 1) << "valid = false;\n";
-        file << tab(indent) << "}\n";
+void Permutation::writeJavaTestAndSetValid(ofstream& file, int indent, const ParameterDefinition& p,
+                                           const string& argsIndex,
+                                           const string& actualIndex) const {
+    writeJavaTestOneValue(file, indent, p, argsIndex, actualIndex);
+    file << tab(indent + 1) << "valid = false;\n";
+    file << tab(indent) << "}\n";
+}
+
+void Permutation::writeJavaTestOneValue(ofstream& file, int indent, const ParameterDefinition& p,
+                                        const string& argsIndex, const string& actualIndex) const {
+    file << tab(indent) << "if (";
+    if (p.rsBaseType[0] == 'f') {
+        file << "!args." << p.variableName << argsIndex << ".couldBe(" << p.javaArrayName
+             << actualIndex;
+        if (!mPrecisionLimit.empty()) {
+            file << ", " << mPrecisionLimit;
+        }
+        file << ")";
     } else {
-        file << tab(indent) << "if (" + expected + " != " + actual + ") {\n";
-        file << tab(indent + 1) << "valid = false;\n";
-        file << tab(indent) << "}\n";
+        file << "args." << p.variableName << argsIndex << " != " << p.javaArrayName << actualIndex;
     }
+    if (p.undefinedIfOutIsNan && mReturnIndex >= 0) {
+        file << " && args." << mParams[mReturnIndex]->variableName << argsIndex << ".isNaN()";
+    }
+    file << ") {\n";
 }
 
 void Permutation::writeJavaAppendOutputToMessage(ofstream& file, int indent,
-                                                 const string& rsBaseType, const string& name,
-                                                 const string& expected,
-                                                 const string& actual) const {
-    writeJavaAppendVariableToMessage(file, indent, rsBaseType, "Expected output " + name, expected);
-    writeJavaAppendNewLineToMessage(file, indent);
-    writeJavaAppendVariableToMessage(file, indent, rsBaseType, "Actual   output " + name, actual);
-    if (rsBaseType[0] == 'f') {
-        writeJavaComputeNeededUlf(file, indent, expected, actual);
-        file << tab(indent) << "if (neededUlf > ulf) {\n";
-        file << tab(indent + 1) << "message.append(String.format(\" FAILED, ulf needed %d, "
-                                   "specified %d\", neededUlf, ulf));\n";
-        file << tab(indent) << "}\n";
+                                                 const ParameterDefinition& p,
+                                                 const string& argsIndex,
+                                                 const string& actualIndex) const {
+    const string expected = "args." + p.variableName + argsIndex;
+    const string actual = p.javaArrayName + actualIndex;
+    file << tab(indent) << "message.append(\"Expected output " + p.variableName + ": \");\n";
+    if (p.rsBaseType[0] == 'f') {
+        writeJavaAppendFloatyVariableToMessage(file, indent, expected);
     } else {
-        file << tab(indent) << "if (" + expected + " != " + actual + ") {\n";
-        file << tab(indent + 1) << "message.append(\" FAIL\");\n";
-        file << tab(indent) << "}\n";
+        writeJavaAppendVariableToMessage(file, indent, p.rsBaseType, expected);
     }
     writeJavaAppendNewLineToMessage(file, indent);
+    file << tab(indent) << "message.append(\"Actual   output " + p.variableName + ": \");\n";
+    writeJavaAppendVariableToMessage(file, indent, p.rsBaseType, actual);
+
+    writeJavaTestOneValue(file, indent, p, argsIndex, actualIndex);
+    file << tab(indent + 1) << "message.append(\" FAIL\");\n";
+    file << tab(indent) << "}\n";
+    writeJavaAppendNewLineToMessage(file, indent);
 }
 
 void Permutation::writeJavaAppendInputToMessage(ofstream& file, int indent,
                                                 const string& rsBaseType, const string& name,
                                                 const string& actual) const {
-    writeJavaAppendVariableToMessage(file, indent, rsBaseType, "Input " + name, actual);
+    file << tab(indent) << "message.append(\"Input " + name + ": \");\n";
+    writeJavaAppendVariableToMessage(file, indent, rsBaseType, actual);
     writeJavaAppendNewLineToMessage(file, indent);
 }
 
-void Permutation::writeJavaComputeNeededUlf(ofstream& file, int indent, const string& expected,
-                                            const string& actual) const {
-    file << tab(indent) << "neededUlf = (int) (Math.abs(" << expected << " - " << actual
-         << ") / Math.ulp(" << expected << ") + 0.5);\n";
-}
-
 void Permutation::writeJavaAppendNewLineToMessage(ofstream& file, int indent) const {
     file << tab(indent) << "message.append(\"\\n\");\n";
 }
 
 void Permutation::writeJavaAppendVariableToMessage(ofstream& file, int indent,
-                                                   const string& rsBaseType, const string& legend,
+                                                   const string& rsBaseType,
                                                    const string& value) const {
-    file << tab(indent) << "message.append(String.format(\"" + legend + ": ";
     if (rsBaseType[0] == 'f') {
-        file << "%14.8g %8x %15a\",\n";
+        file << tab(indent) << "message.append(String.format(\"%14.8g %8x %15a\",\n";
         file << tab(indent + 2) << value << ", "
-             << "Float.floatToRawIntBits(" << value << "), " << value;
+             << "Float.floatToRawIntBits(" << value << "), " << value << "));\n";
     } else if (rsBaseType[0] == 'u') {
-        file << "0x%x\",\n";
-        file << tab(indent + 2) << value;
+        file << tab(indent) << "message.append(String.format(\"0x%x\", " << value << "));\n";
     } else {
-        file << "%d\",\n";
-        file << tab(indent + 2) << value;
+        file << tab(indent) << "message.append(String.format(\"%d\", " << value << "));\n";
     }
-    file << "));\n";
+}
+
+void Permutation::writeJavaAppendFloatyVariableToMessage(ofstream& file, int indent,
+                                                         const string& value) const {
+    file << tab(indent) << "message.append(" << value << ".toString());\n";
 }
 
 void Permutation::writeJavaVectorComparison(ofstream& file, int indent,
                                             const ParameterDefinition& p) const {
     if (p.mVectorSize == "1") {
-        writeJavaTestOneValue(file, indent, p.javaBaseType, "args." + p.variableName,
-                              p.javaArrayName + "[i]");
+        writeJavaTestAndSetValid(file, indent, p, "", "[i]");
 
     } else {
         file << tab(indent) << "for (int j = 0; j < " << p.mVectorSize << " ; j++) {\n";
-        writeJavaTestOneValue(file, indent + 1, p.rsBaseType, "args." + p.variableName + "[j]",
-                              p.javaArrayName + "[i * " + p.vectorWidth + " + j]");
+        writeJavaTestAndSetValid(file, indent + 1, p, "[j]", "[i * " + p.vectorWidth + " + j]");
         file << tab(indent) << "}\n";
     }
 }
@@ -1592,14 +1723,12 @@
 void Permutation::writeJavaAppendVectorOutputToMessage(ofstream& file, int indent,
                                                        const ParameterDefinition& p) const {
     if (p.mVectorSize == "1") {
-        writeJavaAppendOutputToMessage(file, indent, p.rsBaseType, p.variableName,
-                                       "args." + p.variableName, p.javaArrayName + "[i]");
+        writeJavaAppendOutputToMessage(file, indent, p, "", "[i]");
 
     } else {
         file << tab(indent) << "for (int j = 0; j < " << p.mVectorSize << " ; j++) {\n";
-        writeJavaAppendOutputToMessage(file, indent + 1, p.rsBaseType, p.variableName,
-                                       "args." + p.variableName + "[j]",
-                                       p.javaArrayName + "[i * " + p.vectorWidth + " + j]");
+        writeJavaAppendOutputToMessage(file, indent + 1, p, "[j]",
+                                       "[i * " + p.vectorWidth + " + j]");
         file << tab(indent) << "}\n";
     }
 }
@@ -1618,8 +1747,12 @@
     for (size_t i = 0; i < mParams.size(); i++) {
         const ParameterDefinition& p = *mParams[i];
         if (p.mVectorSize != "1") {
-            file << tab(3) << "args." << p.variableName << " = new " << p.javaBaseType << "["
-                 << p.mVectorSize << "];\n";
+            string type = p.javaBaseType;
+            if (p.isOutParameter && type == "float") {
+                type = "Floaty";
+            }
+            file << tab(3) << "args." << p.variableName << " = new " << type << "[" << p.mVectorSize
+                 << "];\n";
         }
     }
 
@@ -1639,12 +1772,11 @@
             }
         }
     }
+    file << tab(3) << "Floaty.setRelaxed(relaxed);\n";
     file << tab(3) << "CoreMathVerifier." << mJavaVerifierComputeMethodName << "(args);\n\n";
-    file << tab(3) << "int ulf = relaxed ? args.ulfRelaxed : args.ulf;\n";
 
     file << tab(3) << "// Compare the expected outputs to the actual values returned by RS.\n";
     file << tab(3) << "boolean valid = true;\n";
-    file << tab(3) << "int neededUlf;\n";
     for (size_t i = 0; i < mParams.size(); i++) {
         const ParameterDefinition& p = *mParams[i];
         if (p.isOutParameter) {
diff --git a/api/generate.sh b/api/generate.sh
new file mode 100644
index 0000000..4aa933c
--- /dev/null
+++ b/api/generate.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+#
+# Copyright (C) 2014 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set -e
+g++ gen_runtime.cpp -Wall -o gen_runtime
+./gen_runtime -v 19 rs_core_math.spec
+mv Test*.java ../../../cts/tests/tests/renderscript/src/android/renderscript/cts/
+mv Test*.rs ../../../cts/tests/src/android/renderscript/cts/
+mv rs_core_math.rsh ../scriptc/
+rm ./gen_runtime
diff --git a/api/rs_core_math.spec b/api/rs_core_math.spec
index 251cd4c..d83b0d9 100644
--- a/api/rs_core_math.spec
+++ b/api/rs_core_math.spec
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2013 The Android Open Source Project
+# Copyright (C) 2014 The Android Open Source Project
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -19,12 +19,11 @@
 t: u8, u16, u32, u64, i8, i16, i32, i64, f32, f64
 t: u8, u16, u32, u64, i8, i16, i32, i64, f32, f64
 name: convert_#3#1
-arg: #2#1
+arg: #2#1 v compatible(#3)
 ret: #3#1
 comment:
  Component wise conversion from #2#1 to #3#1
 version: 9
-test: noverify
 end:
 
 start:
@@ -32,7 +31,7 @@
 t: f32
 name: acos
 ret: #2#1
-arg: #2#1
+arg: #2#1 v range(-1,1)
 comment:
  acos
 version: 9
@@ -54,7 +53,7 @@
 t: f32
 name: acospi
 ret: #2#1
-arg: #2#1
+arg: #2#1 v range(-1,1)
 comment:
  acospi
 version: 9
@@ -65,7 +64,7 @@
 t: f32
 name: asin
 ret: #2#1
-arg: #2#1
+arg: #2#1 v range(-1,1)
 comment:
  asin
 version: 9
@@ -87,7 +86,7 @@
 t: f32
 name: asinpi
 ret: #2#1
-arg: #2#1
+arg: #2#1 v range(-1,1)
 comment:
  Return the inverse sine divided by PI.
 version: 9
@@ -98,7 +97,7 @@
 t: f32
 name: atan
 ret: #2#1
-arg: #2#1
+arg: #2#1 v range(-1,1)
 comment:
  Return the inverse tangent.
 version: 9
@@ -132,7 +131,7 @@
 t: f32
 name: atanpi
 ret: #2#1
-arg: #2#1
+arg: #2#1 v range(-1,1)
 comment:
  Return the inverse tangent divided by PI.
 version: 9
@@ -226,8 +225,6 @@
 comment:
  Return the complementary error function.
 version: 9
-# TODO Test to be implemented
-test: noverify
 end:
 
 start:
@@ -239,8 +236,6 @@
 comment:
  Return the error function.
 version: 9
-# TODO Test to be implemented
-test: noverify
 end:
 
 start:
@@ -274,8 +269,6 @@
 comment:
  Return 10 ^ value.
 version: 9
-#TODO
-test: noverify
 end:
 
 start:
@@ -339,6 +332,7 @@
 start:
 w: 1, 2, 3, 4
 t: f32
+# TODO What is the difference between this and max?  Same for min.
 name: fmax
 ret: #2#1
 arg: #2#1 x
@@ -436,8 +430,6 @@
 
  @param v Supports float, float2, float3, float4.
 version: 9
-# TODO Test to be implemented
-test: noverify
 end:
 
 start:
@@ -461,8 +453,6 @@
 comment:
  Return the integer exponent of a value
 version: 9
-#TODO
-test: noverify
 end:
 
 start:
@@ -502,8 +492,6 @@
 comment:
  Return the log gamma and sign
 version: 9
-# TODO Test to be implemented
-test: noverify
 end:
 
 start:
@@ -516,8 +504,6 @@
 comment:
  Return the log gamma and sign
 version: 9
-# TODO Test to be implemented
-test: noverify
 end:
 
 start:
@@ -573,8 +559,6 @@
 comment:
  Compute the exponent of the value.
 version: 9
-#TODO
-test: noverify
 end:
 
 start:
@@ -615,7 +599,6 @@
 comment:
  generate a nan
 version: 9
-test: noverify
 end:
 
 start:
@@ -652,8 +635,6 @@
 comment:
  Return x ^ y.
 version: 9
-#TODO
-test: noverify
 end:
 
 start:
@@ -661,7 +642,7 @@
 t: f32
 name: powr
 ret: #2#1
-arg: #2#1 x range(0,200)
+arg: #2#1 x range(0,3000)
 arg: #2#1 y
 comment:
  Return x ^ y.
@@ -688,12 +669,10 @@
 ret: #2#1
 arg: #2#1 b
 arg: #2#1 c
-arg: int#1 *d
+arg: int#1 *d conditional
 comment:
  Return the quotient and the remainder of b/c
 version: 9
-#TODO
-test: noverify
 end:
 
 start:
@@ -717,6 +696,8 @@
 comment:
  Compute the Nth root of a value.
 version: 9
+# TODO re-enable once how to handle zero is decided
+test: noverify
 end:
 
 start:
@@ -843,8 +824,6 @@
 comment:
  Compute the gamma function of a value.
 version: 9
-# TODO Test to be implemented
-test: noverify
 end:
 
 start:
@@ -1252,8 +1231,7 @@
 comment:
  Compute the cross product of two vectors.
 version: 9
-# TODO test: vector
-test: noverify
+test: vector
 end:
 
 start:
@@ -1266,8 +1244,7 @@
 comment:
  Compute the dot product of two vectors.
 version: 9
-# TODO test: vector
-test: noverify
+test: vector
 end:
 
 start:
@@ -1279,8 +1256,7 @@
 comment:
  Compute the length of a vector.
 version: 9
-# TODO test: vector
-test: noverify
+test: vector
 end:
 
 start:
@@ -1293,8 +1269,7 @@
 comment:
  Compute the distance between two points.
 version: 9
-# TODO test: vector
-test: noverify
+test: vector
 end:
 
 start:
@@ -1306,8 +1281,7 @@
 comment:
  Normalize a vector.
 version: 9
-# TODO test: vector
-test: noverify
+test: vector
 end:
 
 start:
@@ -1319,7 +1293,7 @@
 comment:
  Return the approximate reciprocal of a value.
 version: 17
-# TODO fix & implement
+# TODO enable once precision is improved
 test: noverify
 end:
 
@@ -1354,8 +1328,7 @@
 comment:
  Compute the approximate length of a vector.
 version: 17
-# TODO test: vector
-test: noverify
+test: vector
 end:
 
 start:
@@ -1368,8 +1341,7 @@
 comment:
  Compute the approximate distance between two points.
 version: 17
-# TODO test: vector
-test: noverify
+test: vector
 end:
 
 start:
@@ -1381,8 +1353,7 @@
 comment:
  Approximately normalize a vector.
 version: 17
-# TODO test: vector
-test: noverify
+test: vector
 end:
 
 start:
@@ -1396,8 +1367,7 @@
  valid for inputs -86.f to 86.f
  Max 8192 ulps of error
 version: 18
-# TODO Fix precision issue & verify
-test: noverify
+test: limited
 end:
 
 start:
@@ -1411,8 +1381,7 @@
  valid for inputs -125.f to 125.f
  Max 8192 ulps of error
 version: 18
-# TODO Fix precision issue & verify
-test: noverify
+test: limited
 end:
 
 start:
@@ -1426,8 +1395,7 @@
  valid for inputs -37.f to 37.f
  Max 8192 ulps of error
 version: 18
-# TODO Fix precision issue & verify
-test: noverify
+test: limited
 end:
 
 start:
@@ -1435,12 +1403,12 @@
 t: f32
 name: native_log
 ret: #2#1
-arg: #2#1 v
+arg: #2#1 v range(10e-10,10e10)
 comment:
  Fast approximate log
 version: 18
-# TODO Fix precision issue & verify
-test: noverify
+# TODO Is this the precision we want?
+test: limited(0.0002)
 end:
 
 start:
@@ -1448,12 +1416,12 @@
 t: f32
 name: native_log2
 ret: #2#1
-arg: #2#1 v
+arg: #2#1 v range(10e-10,10e10)
 comment:
  Fast approximate log2
 version: 18
-# TODO Fix precision issue & verify
-test: noverify
+# TODO Is this the precision we want?
+test: limited(0.0002)
 end:
 
 start:
@@ -1461,12 +1429,12 @@
 t: f32
 name: native_log10
 ret: #2#1
-arg: #2#1 v
+arg: #2#1 v range(10e-10,10e10)
 comment:
  Fast approximate log10
 version: 18
-# TODO Fix precision issue & verify
-test: noverify
+# TODO Is this the precision we want?
+test: limited(0.00005)
 end:
 
 start:
@@ -1474,12 +1442,14 @@
 t: f32
 name: native_powr
 ret: #2#1
-arg: #2#1 v
-arg: #2#1 y
+arg: #2#1 v range(0,256)
+arg: #2#1 y range(-15,15)
 comment:
  Fast approximate v ^ y
+ v must be between 0.f and 256.f
+ y must be between -15.f and 15.f
 version: 18
-# TODO Fix precision issue & verify
+# TODO enable once 0 ^ x is handled better
+# test: limited
 test: noverify
 end:
-
diff --git a/driver/runtime/rs_cl.c b/driver/runtime/rs_cl.c
index 3a9252a..d054bcf 100644
--- a/driver/runtime/rs_cl.c
+++ b/driver/runtime/rs_cl.c
@@ -515,9 +515,10 @@
 extern float __attribute__((overloadable)) pown(float v, int p) {
     /* The mantissa of a float has fewer bits than an int (24 effective vs. 31).
      * For very large ints, we'll lose whether the exponent is even or odd, making
-     * the selection of a correct sign incorrect.  We correct this.
+     * the selection of a correct sign incorrect.  We correct this.  Use copysign
+     * to handle the negative zero case.
      */
-    float sign = (v < 0.0f && (p & 0x1)) ? -1.0 : 1.0;
+    float sign = (p & 0x1) ? copysign(1.f, v) : 1.f;
     float f = pow(v, (float)p);
     return copysign(f, sign);
 }
diff --git a/scriptc/rs_core_math.rsh b/scriptc/rs_core_math.rsh
index 8724fcf..80a8798 100644
--- a/scriptc/rs_core_math.rsh
+++ b/scriptc/rs_core_math.rsh
@@ -132,7 +132,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))acos(float);
+extern float __attribute__((const, overloadable))acos(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -141,7 +141,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))acos(float2);
+extern float2 __attribute__((const, overloadable))acos(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -150,7 +150,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))acos(float3);
+extern float3 __attribute__((const, overloadable))acos(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -159,7 +159,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))acos(float4);
+extern float4 __attribute__((const, overloadable))acos(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -204,7 +204,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))acospi(float);
+extern float __attribute__((const, overloadable))acospi(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -213,7 +213,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))acospi(float2);
+extern float2 __attribute__((const, overloadable))acospi(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -222,7 +222,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))acospi(float3);
+extern float3 __attribute__((const, overloadable))acospi(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -231,7 +231,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))acospi(float4);
+extern float4 __attribute__((const, overloadable))acospi(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -240,7 +240,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))asin(float);
+extern float __attribute__((const, overloadable))asin(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -249,7 +249,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))asin(float2);
+extern float2 __attribute__((const, overloadable))asin(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -258,7 +258,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))asin(float3);
+extern float3 __attribute__((const, overloadable))asin(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -267,7 +267,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))asin(float4);
+extern float4 __attribute__((const, overloadable))asin(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -312,7 +312,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))asinpi(float);
+extern float __attribute__((const, overloadable))asinpi(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -321,7 +321,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))asinpi(float2);
+extern float2 __attribute__((const, overloadable))asinpi(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -330,7 +330,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))asinpi(float3);
+extern float3 __attribute__((const, overloadable))asinpi(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -339,7 +339,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))asinpi(float4);
+extern float4 __attribute__((const, overloadable))asinpi(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -348,7 +348,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))atan(float);
+extern float __attribute__((const, overloadable))atan(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -357,7 +357,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))atan(float2);
+extern float2 __attribute__((const, overloadable))atan(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -366,7 +366,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))atan(float3);
+extern float3 __attribute__((const, overloadable))atan(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -375,7 +375,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))atan(float4);
+extern float4 __attribute__((const, overloadable))atan(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -492,7 +492,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float __attribute__((const, overloadable))atanpi(float);
+extern float __attribute__((const, overloadable))atanpi(float v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -501,7 +501,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))atanpi(float2);
+extern float2 __attribute__((const, overloadable))atanpi(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -510,7 +510,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))atanpi(float3);
+extern float3 __attribute__((const, overloadable))atanpi(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -519,7 +519,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))atanpi(float4);
+extern float4 __attribute__((const, overloadable))atanpi(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1635,7 +1635,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(float2);
+extern float2 __attribute__((const, overloadable))convert_float2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1644,7 +1644,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(float3);
+extern float3 __attribute__((const, overloadable))convert_float3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1653,7 +1653,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(float4);
+extern float4 __attribute__((const, overloadable))convert_float4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1662,7 +1662,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(double2);
+extern float2 __attribute__((const, overloadable))convert_float2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1671,7 +1671,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(double3);
+extern float3 __attribute__((const, overloadable))convert_float3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1680,7 +1680,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(double4);
+extern float4 __attribute__((const, overloadable))convert_float4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1689,7 +1689,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(char2);
+extern float2 __attribute__((const, overloadable))convert_float2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1698,7 +1698,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(char3);
+extern float3 __attribute__((const, overloadable))convert_float3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1707,7 +1707,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(char4);
+extern float4 __attribute__((const, overloadable))convert_float4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1716,7 +1716,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(uchar2);
+extern float2 __attribute__((const, overloadable))convert_float2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1725,7 +1725,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(uchar3);
+extern float3 __attribute__((const, overloadable))convert_float3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1734,7 +1734,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(uchar4);
+extern float4 __attribute__((const, overloadable))convert_float4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1743,7 +1743,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(short2);
+extern float2 __attribute__((const, overloadable))convert_float2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1752,7 +1752,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(short3);
+extern float3 __attribute__((const, overloadable))convert_float3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1761,7 +1761,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(short4);
+extern float4 __attribute__((const, overloadable))convert_float4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1770,7 +1770,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(ushort2);
+extern float2 __attribute__((const, overloadable))convert_float2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1779,7 +1779,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(ushort3);
+extern float3 __attribute__((const, overloadable))convert_float3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1788,7 +1788,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(ushort4);
+extern float4 __attribute__((const, overloadable))convert_float4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1797,7 +1797,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(int2);
+extern float2 __attribute__((const, overloadable))convert_float2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1806,7 +1806,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(int3);
+extern float3 __attribute__((const, overloadable))convert_float3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1815,7 +1815,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(int4);
+extern float4 __attribute__((const, overloadable))convert_float4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1824,7 +1824,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(uint2);
+extern float2 __attribute__((const, overloadable))convert_float2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1833,7 +1833,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(uint3);
+extern float3 __attribute__((const, overloadable))convert_float3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1842,7 +1842,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(uint4);
+extern float4 __attribute__((const, overloadable))convert_float4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1851,7 +1851,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(long2);
+extern float2 __attribute__((const, overloadable))convert_float2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1860,7 +1860,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(long3);
+extern float3 __attribute__((const, overloadable))convert_float3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1869,7 +1869,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(long4);
+extern float4 __attribute__((const, overloadable))convert_float4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1878,7 +1878,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float2 __attribute__((const, overloadable))convert_float2(ulong2);
+extern float2 __attribute__((const, overloadable))convert_float2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1887,7 +1887,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float3 __attribute__((const, overloadable))convert_float3(ulong3);
+extern float3 __attribute__((const, overloadable))convert_float3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1896,7 +1896,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern float4 __attribute__((const, overloadable))convert_float4(ulong4);
+extern float4 __attribute__((const, overloadable))convert_float4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1905,7 +1905,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(float2);
+extern double2 __attribute__((const, overloadable))convert_double2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1914,7 +1914,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(float3);
+extern double3 __attribute__((const, overloadable))convert_double3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1923,7 +1923,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(float4);
+extern double4 __attribute__((const, overloadable))convert_double4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1932,7 +1932,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(double2);
+extern double2 __attribute__((const, overloadable))convert_double2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1941,7 +1941,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(double3);
+extern double3 __attribute__((const, overloadable))convert_double3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1950,7 +1950,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(double4);
+extern double4 __attribute__((const, overloadable))convert_double4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1959,7 +1959,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(char2);
+extern double2 __attribute__((const, overloadable))convert_double2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1968,7 +1968,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(char3);
+extern double3 __attribute__((const, overloadable))convert_double3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1977,7 +1977,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(char4);
+extern double4 __attribute__((const, overloadable))convert_double4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1986,7 +1986,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(uchar2);
+extern double2 __attribute__((const, overloadable))convert_double2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -1995,7 +1995,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(uchar3);
+extern double3 __attribute__((const, overloadable))convert_double3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2004,7 +2004,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(uchar4);
+extern double4 __attribute__((const, overloadable))convert_double4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2013,7 +2013,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(short2);
+extern double2 __attribute__((const, overloadable))convert_double2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2022,7 +2022,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(short3);
+extern double3 __attribute__((const, overloadable))convert_double3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2031,7 +2031,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(short4);
+extern double4 __attribute__((const, overloadable))convert_double4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2040,7 +2040,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(ushort2);
+extern double2 __attribute__((const, overloadable))convert_double2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2049,7 +2049,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(ushort3);
+extern double3 __attribute__((const, overloadable))convert_double3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2058,7 +2058,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(ushort4);
+extern double4 __attribute__((const, overloadable))convert_double4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2067,7 +2067,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(int2);
+extern double2 __attribute__((const, overloadable))convert_double2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2076,7 +2076,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(int3);
+extern double3 __attribute__((const, overloadable))convert_double3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2085,7 +2085,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(int4);
+extern double4 __attribute__((const, overloadable))convert_double4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2094,7 +2094,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(uint2);
+extern double2 __attribute__((const, overloadable))convert_double2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2103,7 +2103,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(uint3);
+extern double3 __attribute__((const, overloadable))convert_double3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2112,7 +2112,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(uint4);
+extern double4 __attribute__((const, overloadable))convert_double4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2121,7 +2121,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(long2);
+extern double2 __attribute__((const, overloadable))convert_double2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2130,7 +2130,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(long3);
+extern double3 __attribute__((const, overloadable))convert_double3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2139,7 +2139,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(long4);
+extern double4 __attribute__((const, overloadable))convert_double4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2148,7 +2148,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double2 __attribute__((const, overloadable))convert_double2(ulong2);
+extern double2 __attribute__((const, overloadable))convert_double2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2157,7 +2157,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double3 __attribute__((const, overloadable))convert_double3(ulong3);
+extern double3 __attribute__((const, overloadable))convert_double3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2166,7 +2166,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern double4 __attribute__((const, overloadable))convert_double4(ulong4);
+extern double4 __attribute__((const, overloadable))convert_double4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2175,7 +2175,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(float2);
+extern char2 __attribute__((const, overloadable))convert_char2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2184,7 +2184,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(float3);
+extern char3 __attribute__((const, overloadable))convert_char3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2193,7 +2193,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(float4);
+extern char4 __attribute__((const, overloadable))convert_char4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2202,7 +2202,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(double2);
+extern char2 __attribute__((const, overloadable))convert_char2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2211,7 +2211,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(double3);
+extern char3 __attribute__((const, overloadable))convert_char3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2220,7 +2220,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(double4);
+extern char4 __attribute__((const, overloadable))convert_char4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2229,7 +2229,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(char2);
+extern char2 __attribute__((const, overloadable))convert_char2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2238,7 +2238,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(char3);
+extern char3 __attribute__((const, overloadable))convert_char3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2247,7 +2247,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(char4);
+extern char4 __attribute__((const, overloadable))convert_char4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2256,7 +2256,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(uchar2);
+extern char2 __attribute__((const, overloadable))convert_char2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2265,7 +2265,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(uchar3);
+extern char3 __attribute__((const, overloadable))convert_char3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2274,7 +2274,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(uchar4);
+extern char4 __attribute__((const, overloadable))convert_char4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2283,7 +2283,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(short2);
+extern char2 __attribute__((const, overloadable))convert_char2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2292,7 +2292,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(short3);
+extern char3 __attribute__((const, overloadable))convert_char3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2301,7 +2301,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(short4);
+extern char4 __attribute__((const, overloadable))convert_char4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2310,7 +2310,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(ushort2);
+extern char2 __attribute__((const, overloadable))convert_char2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2319,7 +2319,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(ushort3);
+extern char3 __attribute__((const, overloadable))convert_char3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2328,7 +2328,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(ushort4);
+extern char4 __attribute__((const, overloadable))convert_char4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2337,7 +2337,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(int2);
+extern char2 __attribute__((const, overloadable))convert_char2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2346,7 +2346,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(int3);
+extern char3 __attribute__((const, overloadable))convert_char3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2355,7 +2355,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(int4);
+extern char4 __attribute__((const, overloadable))convert_char4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2364,7 +2364,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(uint2);
+extern char2 __attribute__((const, overloadable))convert_char2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2373,7 +2373,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(uint3);
+extern char3 __attribute__((const, overloadable))convert_char3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2382,7 +2382,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(uint4);
+extern char4 __attribute__((const, overloadable))convert_char4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2391,7 +2391,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(long2);
+extern char2 __attribute__((const, overloadable))convert_char2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2400,7 +2400,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(long3);
+extern char3 __attribute__((const, overloadable))convert_char3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2409,7 +2409,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(long4);
+extern char4 __attribute__((const, overloadable))convert_char4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2418,7 +2418,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char2 __attribute__((const, overloadable))convert_char2(ulong2);
+extern char2 __attribute__((const, overloadable))convert_char2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2427,7 +2427,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char3 __attribute__((const, overloadable))convert_char3(ulong3);
+extern char3 __attribute__((const, overloadable))convert_char3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2436,7 +2436,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern char4 __attribute__((const, overloadable))convert_char4(ulong4);
+extern char4 __attribute__((const, overloadable))convert_char4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2445,7 +2445,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(float2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2454,7 +2454,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(float3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2463,7 +2463,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(float4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2472,7 +2472,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(double2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2481,7 +2481,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(double3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2490,7 +2490,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(double4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2499,7 +2499,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(char2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2508,7 +2508,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(char3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2517,7 +2517,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(char4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2526,7 +2526,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(uchar2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2535,7 +2535,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(uchar3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2544,7 +2544,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(uchar4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2553,7 +2553,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(short2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2562,7 +2562,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(short3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2571,7 +2571,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(short4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2580,7 +2580,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(ushort2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2589,7 +2589,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(ushort3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2598,7 +2598,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(ushort4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2607,7 +2607,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(int2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2616,7 +2616,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(int3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2625,7 +2625,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(int4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2634,7 +2634,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(uint2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2643,7 +2643,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(uint3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2652,7 +2652,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(uint4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2661,7 +2661,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(long2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2670,7 +2670,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(long3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2679,7 +2679,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(long4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2688,7 +2688,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar2 __attribute__((const, overloadable))convert_uchar2(ulong2);
+extern uchar2 __attribute__((const, overloadable))convert_uchar2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2697,7 +2697,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar3 __attribute__((const, overloadable))convert_uchar3(ulong3);
+extern uchar3 __attribute__((const, overloadable))convert_uchar3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2706,7 +2706,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uchar4 __attribute__((const, overloadable))convert_uchar4(ulong4);
+extern uchar4 __attribute__((const, overloadable))convert_uchar4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2715,7 +2715,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(float2);
+extern short2 __attribute__((const, overloadable))convert_short2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2724,7 +2724,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(float3);
+extern short3 __attribute__((const, overloadable))convert_short3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2733,7 +2733,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(float4);
+extern short4 __attribute__((const, overloadable))convert_short4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2742,7 +2742,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(double2);
+extern short2 __attribute__((const, overloadable))convert_short2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2751,7 +2751,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(double3);
+extern short3 __attribute__((const, overloadable))convert_short3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2760,7 +2760,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(double4);
+extern short4 __attribute__((const, overloadable))convert_short4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2769,7 +2769,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(char2);
+extern short2 __attribute__((const, overloadable))convert_short2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2778,7 +2778,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(char3);
+extern short3 __attribute__((const, overloadable))convert_short3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2787,7 +2787,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(char4);
+extern short4 __attribute__((const, overloadable))convert_short4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2796,7 +2796,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(uchar2);
+extern short2 __attribute__((const, overloadable))convert_short2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2805,7 +2805,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(uchar3);
+extern short3 __attribute__((const, overloadable))convert_short3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2814,7 +2814,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(uchar4);
+extern short4 __attribute__((const, overloadable))convert_short4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2823,7 +2823,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(short2);
+extern short2 __attribute__((const, overloadable))convert_short2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2832,7 +2832,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(short3);
+extern short3 __attribute__((const, overloadable))convert_short3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2841,7 +2841,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(short4);
+extern short4 __attribute__((const, overloadable))convert_short4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2850,7 +2850,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(ushort2);
+extern short2 __attribute__((const, overloadable))convert_short2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2859,7 +2859,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(ushort3);
+extern short3 __attribute__((const, overloadable))convert_short3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2868,7 +2868,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(ushort4);
+extern short4 __attribute__((const, overloadable))convert_short4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2877,7 +2877,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(int2);
+extern short2 __attribute__((const, overloadable))convert_short2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2886,7 +2886,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(int3);
+extern short3 __attribute__((const, overloadable))convert_short3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2895,7 +2895,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(int4);
+extern short4 __attribute__((const, overloadable))convert_short4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2904,7 +2904,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(uint2);
+extern short2 __attribute__((const, overloadable))convert_short2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2913,7 +2913,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(uint3);
+extern short3 __attribute__((const, overloadable))convert_short3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2922,7 +2922,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(uint4);
+extern short4 __attribute__((const, overloadable))convert_short4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2931,7 +2931,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(long2);
+extern short2 __attribute__((const, overloadable))convert_short2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2940,7 +2940,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(long3);
+extern short3 __attribute__((const, overloadable))convert_short3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2949,7 +2949,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(long4);
+extern short4 __attribute__((const, overloadable))convert_short4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2958,7 +2958,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short2 __attribute__((const, overloadable))convert_short2(ulong2);
+extern short2 __attribute__((const, overloadable))convert_short2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2967,7 +2967,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short3 __attribute__((const, overloadable))convert_short3(ulong3);
+extern short3 __attribute__((const, overloadable))convert_short3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2976,7 +2976,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern short4 __attribute__((const, overloadable))convert_short4(ulong4);
+extern short4 __attribute__((const, overloadable))convert_short4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2985,7 +2985,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(float2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -2994,7 +2994,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(float3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3003,7 +3003,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(float4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3012,7 +3012,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(double2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3021,7 +3021,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(double3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3030,7 +3030,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(double4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3039,7 +3039,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(char2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3048,7 +3048,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(char3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3057,7 +3057,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(char4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3066,7 +3066,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(uchar2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3075,7 +3075,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(uchar3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3084,7 +3084,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(uchar4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3093,7 +3093,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(short2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3102,7 +3102,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(short3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3111,7 +3111,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(short4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3120,7 +3120,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(ushort2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3129,7 +3129,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(ushort3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3138,7 +3138,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(ushort4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3147,7 +3147,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(int2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3156,7 +3156,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(int3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3165,7 +3165,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(int4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3174,7 +3174,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(uint2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3183,7 +3183,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(uint3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3192,7 +3192,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(uint4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3201,7 +3201,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(long2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3210,7 +3210,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(long3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3219,7 +3219,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(long4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3228,7 +3228,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort2 __attribute__((const, overloadable))convert_ushort2(ulong2);
+extern ushort2 __attribute__((const, overloadable))convert_ushort2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3237,7 +3237,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort3 __attribute__((const, overloadable))convert_ushort3(ulong3);
+extern ushort3 __attribute__((const, overloadable))convert_ushort3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3246,7 +3246,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ushort4 __attribute__((const, overloadable))convert_ushort4(ulong4);
+extern ushort4 __attribute__((const, overloadable))convert_ushort4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3255,7 +3255,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(float2);
+extern int2 __attribute__((const, overloadable))convert_int2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3264,7 +3264,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(float3);
+extern int3 __attribute__((const, overloadable))convert_int3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3273,7 +3273,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(float4);
+extern int4 __attribute__((const, overloadable))convert_int4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3282,7 +3282,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(double2);
+extern int2 __attribute__((const, overloadable))convert_int2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3291,7 +3291,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(double3);
+extern int3 __attribute__((const, overloadable))convert_int3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3300,7 +3300,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(double4);
+extern int4 __attribute__((const, overloadable))convert_int4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3309,7 +3309,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(char2);
+extern int2 __attribute__((const, overloadable))convert_int2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3318,7 +3318,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(char3);
+extern int3 __attribute__((const, overloadable))convert_int3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3327,7 +3327,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(char4);
+extern int4 __attribute__((const, overloadable))convert_int4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3336,7 +3336,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(uchar2);
+extern int2 __attribute__((const, overloadable))convert_int2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3345,7 +3345,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(uchar3);
+extern int3 __attribute__((const, overloadable))convert_int3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3354,7 +3354,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(uchar4);
+extern int4 __attribute__((const, overloadable))convert_int4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3363,7 +3363,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(short2);
+extern int2 __attribute__((const, overloadable))convert_int2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3372,7 +3372,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(short3);
+extern int3 __attribute__((const, overloadable))convert_int3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3381,7 +3381,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(short4);
+extern int4 __attribute__((const, overloadable))convert_int4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3390,7 +3390,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(ushort2);
+extern int2 __attribute__((const, overloadable))convert_int2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3399,7 +3399,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(ushort3);
+extern int3 __attribute__((const, overloadable))convert_int3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3408,7 +3408,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(ushort4);
+extern int4 __attribute__((const, overloadable))convert_int4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3417,7 +3417,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(int2);
+extern int2 __attribute__((const, overloadable))convert_int2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3426,7 +3426,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(int3);
+extern int3 __attribute__((const, overloadable))convert_int3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3435,7 +3435,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(int4);
+extern int4 __attribute__((const, overloadable))convert_int4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3444,7 +3444,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(uint2);
+extern int2 __attribute__((const, overloadable))convert_int2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3453,7 +3453,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(uint3);
+extern int3 __attribute__((const, overloadable))convert_int3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3462,7 +3462,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(uint4);
+extern int4 __attribute__((const, overloadable))convert_int4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3471,7 +3471,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(long2);
+extern int2 __attribute__((const, overloadable))convert_int2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3480,7 +3480,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(long3);
+extern int3 __attribute__((const, overloadable))convert_int3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3489,7 +3489,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(long4);
+extern int4 __attribute__((const, overloadable))convert_int4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3498,7 +3498,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int2 __attribute__((const, overloadable))convert_int2(ulong2);
+extern int2 __attribute__((const, overloadable))convert_int2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3507,7 +3507,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int3 __attribute__((const, overloadable))convert_int3(ulong3);
+extern int3 __attribute__((const, overloadable))convert_int3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3516,7 +3516,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern int4 __attribute__((const, overloadable))convert_int4(ulong4);
+extern int4 __attribute__((const, overloadable))convert_int4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3525,7 +3525,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(float2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3534,7 +3534,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(float3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3543,7 +3543,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(float4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3552,7 +3552,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(double2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3561,7 +3561,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(double3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3570,7 +3570,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(double4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3579,7 +3579,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(char2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3588,7 +3588,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(char3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3597,7 +3597,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(char4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3606,7 +3606,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(uchar2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3615,7 +3615,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(uchar3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3624,7 +3624,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(uchar4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3633,7 +3633,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(short2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3642,7 +3642,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(short3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3651,7 +3651,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(short4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3660,7 +3660,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(ushort2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3669,7 +3669,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(ushort3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3678,7 +3678,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(ushort4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3687,7 +3687,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(int2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3696,7 +3696,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(int3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3705,7 +3705,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(int4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3714,7 +3714,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(uint2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3723,7 +3723,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(uint3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3732,7 +3732,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(uint4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3741,7 +3741,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(long2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3750,7 +3750,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(long3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3759,7 +3759,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(long4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3768,7 +3768,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint2 __attribute__((const, overloadable))convert_uint2(ulong2);
+extern uint2 __attribute__((const, overloadable))convert_uint2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3777,7 +3777,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint3 __attribute__((const, overloadable))convert_uint3(ulong3);
+extern uint3 __attribute__((const, overloadable))convert_uint3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3786,7 +3786,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern uint4 __attribute__((const, overloadable))convert_uint4(ulong4);
+extern uint4 __attribute__((const, overloadable))convert_uint4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3795,7 +3795,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(float2);
+extern long2 __attribute__((const, overloadable))convert_long2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3804,7 +3804,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(float3);
+extern long3 __attribute__((const, overloadable))convert_long3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3813,7 +3813,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(float4);
+extern long4 __attribute__((const, overloadable))convert_long4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3822,7 +3822,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(double2);
+extern long2 __attribute__((const, overloadable))convert_long2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3831,7 +3831,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(double3);
+extern long3 __attribute__((const, overloadable))convert_long3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3840,7 +3840,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(double4);
+extern long4 __attribute__((const, overloadable))convert_long4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3849,7 +3849,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(char2);
+extern long2 __attribute__((const, overloadable))convert_long2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3858,7 +3858,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(char3);
+extern long3 __attribute__((const, overloadable))convert_long3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3867,7 +3867,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(char4);
+extern long4 __attribute__((const, overloadable))convert_long4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3876,7 +3876,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(uchar2);
+extern long2 __attribute__((const, overloadable))convert_long2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3885,7 +3885,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(uchar3);
+extern long3 __attribute__((const, overloadable))convert_long3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3894,7 +3894,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(uchar4);
+extern long4 __attribute__((const, overloadable))convert_long4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3903,7 +3903,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(short2);
+extern long2 __attribute__((const, overloadable))convert_long2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3912,7 +3912,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(short3);
+extern long3 __attribute__((const, overloadable))convert_long3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3921,7 +3921,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(short4);
+extern long4 __attribute__((const, overloadable))convert_long4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3930,7 +3930,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(ushort2);
+extern long2 __attribute__((const, overloadable))convert_long2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3939,7 +3939,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(ushort3);
+extern long3 __attribute__((const, overloadable))convert_long3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3948,7 +3948,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(ushort4);
+extern long4 __attribute__((const, overloadable))convert_long4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3957,7 +3957,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(int2);
+extern long2 __attribute__((const, overloadable))convert_long2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3966,7 +3966,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(int3);
+extern long3 __attribute__((const, overloadable))convert_long3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3975,7 +3975,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(int4);
+extern long4 __attribute__((const, overloadable))convert_long4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3984,7 +3984,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(uint2);
+extern long2 __attribute__((const, overloadable))convert_long2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -3993,7 +3993,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(uint3);
+extern long3 __attribute__((const, overloadable))convert_long3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4002,7 +4002,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(uint4);
+extern long4 __attribute__((const, overloadable))convert_long4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4011,7 +4011,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(long2);
+extern long2 __attribute__((const, overloadable))convert_long2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4020,7 +4020,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(long3);
+extern long3 __attribute__((const, overloadable))convert_long3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4029,7 +4029,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(long4);
+extern long4 __attribute__((const, overloadable))convert_long4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4038,7 +4038,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long2 __attribute__((const, overloadable))convert_long2(ulong2);
+extern long2 __attribute__((const, overloadable))convert_long2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4047,7 +4047,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long3 __attribute__((const, overloadable))convert_long3(ulong3);
+extern long3 __attribute__((const, overloadable))convert_long3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4056,7 +4056,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern long4 __attribute__((const, overloadable))convert_long4(ulong4);
+extern long4 __attribute__((const, overloadable))convert_long4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4065,7 +4065,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(float2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(float2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4074,7 +4074,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(float3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(float3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4083,7 +4083,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(float4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(float4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4092,7 +4092,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(double2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(double2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4101,7 +4101,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(double3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(double3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4110,7 +4110,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(double4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(double4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4119,7 +4119,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(char2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(char2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4128,7 +4128,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(char3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(char3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4137,7 +4137,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(char4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(char4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4146,7 +4146,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(uchar2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(uchar2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4155,7 +4155,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(uchar3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(uchar3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4164,7 +4164,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(uchar4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(uchar4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4173,7 +4173,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(short2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(short2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4182,7 +4182,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(short3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(short3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4191,7 +4191,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(short4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(short4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4200,7 +4200,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(ushort2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(ushort2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4209,7 +4209,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(ushort3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(ushort3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4218,7 +4218,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(ushort4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(ushort4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4227,7 +4227,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(int2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(int2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4236,7 +4236,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(int3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(int3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4245,7 +4245,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(int4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(int4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4254,7 +4254,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(uint2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(uint2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4263,7 +4263,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(uint3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(uint3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4272,7 +4272,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(uint4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(uint4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4281,7 +4281,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(long2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(long2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4290,7 +4290,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(long3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(long3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4299,7 +4299,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(long4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(long4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4308,7 +4308,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong2 __attribute__((const, overloadable))convert_ulong2(ulong2);
+extern ulong2 __attribute__((const, overloadable))convert_ulong2(ulong2 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4317,7 +4317,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong3 __attribute__((const, overloadable))convert_ulong3(ulong3);
+extern ulong3 __attribute__((const, overloadable))convert_ulong3(ulong3 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -4326,7 +4326,7 @@
  *
  * Supported by API versions 9 and newer.
  */
-extern ulong4 __attribute__((const, overloadable))convert_ulong4(ulong4);
+extern ulong4 __attribute__((const, overloadable))convert_ulong4(ulong4 v);
 #endif
 
 #if (defined(RS_VERSION) && (RS_VERSION >= 9))
@@ -7640,6 +7640,8 @@
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
 /*
  * Fast approximate v ^ y
+ * v must be between 0.f and 256.f
+ * y must be between -15.f and 15.f
  *
  * Supported by API versions 18 and newer.
  */
@@ -7649,6 +7651,8 @@
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
 /*
  * Fast approximate v ^ y
+ * v must be between 0.f and 256.f
+ * y must be between -15.f and 15.f
  *
  * Supported by API versions 18 and newer.
  */
@@ -7658,6 +7662,8 @@
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
 /*
  * Fast approximate v ^ y
+ * v must be between 0.f and 256.f
+ * y must be between -15.f and 15.f
  *
  * Supported by API versions 18 and newer.
  */
@@ -7667,6 +7673,8 @@
 #if (defined(RS_VERSION) && (RS_VERSION >= 18))
 /*
  * Fast approximate v ^ y
+ * v must be between 0.f and 256.f
+ * y must be between -15.f and 15.f
  *
  * Supported by API versions 18 and newer.
  */
