Add TENSOR_QUANT16_ASYMM to operand types

Add new operand type TENSOR_QUANT16_ASYMM.
Add validation for the new type.
Modify test generator to support the new data type.

Bug: 113561892
Test: NeuralNetworksTest_static
Change-Id: Ib0af7d8ae7b67f1deb7e766d0433ecf776fc356c
Merged-In: Ib0af7d8ae7b67f1deb7e766d0433ecf776fc356c
(cherry picked from commit 4ed3fa5d279254a8d46a2112e8fdaf8441cdcd5a)
diff --git a/common/ValidateHal.cpp b/common/ValidateHal.cpp
index 30165de..be74050 100644
--- a/common/ValidateHal.cpp
+++ b/common/ValidateHal.cpp
@@ -88,6 +88,7 @@
             case OperandType::TENSOR_FLOAT32:
             case OperandType::TENSOR_INT32:
             case OperandType::TENSOR_QUANT8_ASYMM:
+            case OperandType::TENSOR_QUANT16_ASYMM:
             case OperandType::TENSOR_OEM_BYTE: {
                 if (operand.dimensions.size() == 0) {
                     LOG(ERROR) << "Operand " << index << ": Tensor has dimensions of rank 0";
@@ -135,6 +136,13 @@
                     return false;
                 }
                 break;
+            case OperandType::TENSOR_QUANT16_ASYMM:
+                if (operand.scale <= 0.f) {
+                    LOG(ERROR) << "Operand " << index << ": Operand of type "
+                               << getOperandTypeName(operand.type) << " with a non-positive scale";
+                    return false;
+                }
+                break;
             default:
                 // No validation for the OEM types.
                 // TODO We should have had a separate type for TENSOR_INT32 that a scale
@@ -165,6 +173,14 @@
                     return false;
                 }
                 break;
+            case OperandType::TENSOR_QUANT16_ASYMM:
+                if (operand.zeroPoint < -32768 || operand.zeroPoint > 32767) {
+                    LOG(ERROR) << "Operand " << index << ": Operand of type "
+                               << getOperandTypeName(operand.type) << " with an invalid zeroPoint "
+                               << operand.zeroPoint << ", must be in range [-32768, 32767]";
+                    return false;
+                }
+                break;
             default:
                 // No validation for the OEM types.
                 break;
@@ -669,6 +685,7 @@
         case V1_2::OperandType::TENSOR_FLOAT32:
         case V1_2::OperandType::TENSOR_INT32:
         case V1_2::OperandType::TENSOR_QUANT8_ASYMM:
+        case V1_2::OperandType::TENSOR_QUANT16_ASYMM:
         case V1_2::OperandType::OEM:
         case V1_2::OperandType::TENSOR_OEM_BYTE:
             return true;