1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <android/hardware/neuralnetworks/1.2/types.h> 18 #include <nnapi/OperandTypes.h> 19 #include <nnapi/OperationTypes.h> 20 #include <nnapi/Types.h> 21 #include <type_traits> 22 23 namespace { 24 25 #define COMPARE_ENUMS_TYPES(type) \ 26 static_assert(std::is_same_v< \ 27 std::underlying_type_t<::android::hardware::neuralnetworks::V1_2::type>, \ 28 std::underlying_type_t<::android::nn::type>>, \ 29 "::android::hardware::neuralnetworks::V1_2::" #type \ 30 " does not have the same underlying type as ::android::nn::" #type) 31 32 COMPARE_ENUMS_TYPES(OperandType); 33 COMPARE_ENUMS_TYPES(OperationType); 34 COMPARE_ENUMS_TYPES(DeviceType); 35 COMPARE_ENUMS_TYPES(MeasureTiming); 36 37 #undef COMPARE_ENUMS_TYPES 38 39 #define COMPARE_ENUMS_FULL(symbol, type) \ 40 static_assert( \ 41 static_cast<std::underlying_type_t<::android::hardware::neuralnetworks::V1_2::type>>( \ 42 ::android::hardware::neuralnetworks::V1_2::type::symbol) == \ 43 static_cast<std::underlying_type_t<::android::nn::type>>( \ 44 ::android::nn::type::symbol), \ 45 "::android::hardware::neuralnetworks::V1_2::" #type "::" #symbol \ 46 " does not match ::android::nn::" #type "::" #symbol) 47 48 #define COMPARE_ENUMS(symbol) COMPARE_ENUMS_FULL(symbol, OperandType) 49 50 COMPARE_ENUMS(FLOAT32); 51 COMPARE_ENUMS(INT32); 52 COMPARE_ENUMS(UINT32); 53 COMPARE_ENUMS(TENSOR_FLOAT32); 54 COMPARE_ENUMS(TENSOR_INT32); 55 COMPARE_ENUMS(TENSOR_QUANT8_ASYMM); 56 COMPARE_ENUMS(BOOL); 57 COMPARE_ENUMS(TENSOR_QUANT16_SYMM); 58 COMPARE_ENUMS(TENSOR_FLOAT16); 59 COMPARE_ENUMS(TENSOR_BOOL8); 60 COMPARE_ENUMS(FLOAT16); 61 COMPARE_ENUMS(TENSOR_QUANT8_SYMM_PER_CHANNEL); 62 COMPARE_ENUMS(TENSOR_QUANT16_ASYMM); 63 COMPARE_ENUMS(TENSOR_QUANT8_SYMM); 64 COMPARE_ENUMS(OEM); 65 COMPARE_ENUMS(TENSOR_OEM_BYTE); 66 67 #undef COMPARE_ENUMS 68 69 #define COMPARE_ENUMS(symbol) COMPARE_ENUMS_FULL(symbol, OperationType) 70 71 COMPARE_ENUMS(ADD); 72 COMPARE_ENUMS(AVERAGE_POOL_2D); 73 COMPARE_ENUMS(CONCATENATION); 74 COMPARE_ENUMS(CONV_2D); 75 COMPARE_ENUMS(DEPTHWISE_CONV_2D); 76 COMPARE_ENUMS(DEPTH_TO_SPACE); 77 COMPARE_ENUMS(DEQUANTIZE); 78 COMPARE_ENUMS(EMBEDDING_LOOKUP); 79 COMPARE_ENUMS(FLOOR); 80 COMPARE_ENUMS(FULLY_CONNECTED); 81 COMPARE_ENUMS(HASHTABLE_LOOKUP); 82 COMPARE_ENUMS(L2_NORMALIZATION); 83 COMPARE_ENUMS(L2_POOL_2D); 84 COMPARE_ENUMS(LOCAL_RESPONSE_NORMALIZATION); 85 COMPARE_ENUMS(LOGISTIC); 86 COMPARE_ENUMS(LSH_PROJECTION); 87 COMPARE_ENUMS(LSTM); 88 COMPARE_ENUMS(MAX_POOL_2D); 89 COMPARE_ENUMS(MUL); 90 COMPARE_ENUMS(RELU); 91 COMPARE_ENUMS(RELU1); 92 COMPARE_ENUMS(RELU6); 93 COMPARE_ENUMS(RESHAPE); 94 COMPARE_ENUMS(RESIZE_BILINEAR); 95 COMPARE_ENUMS(RNN); 96 COMPARE_ENUMS(SOFTMAX); 97 COMPARE_ENUMS(SPACE_TO_DEPTH); 98 COMPARE_ENUMS(SVDF); 99 COMPARE_ENUMS(TANH); 100 COMPARE_ENUMS(BATCH_TO_SPACE_ND); 101 COMPARE_ENUMS(DIV); 102 COMPARE_ENUMS(MEAN); 103 COMPARE_ENUMS(PAD); 104 COMPARE_ENUMS(SPACE_TO_BATCH_ND); 105 COMPARE_ENUMS(SQUEEZE); 106 COMPARE_ENUMS(STRIDED_SLICE); 107 COMPARE_ENUMS(SUB); 108 COMPARE_ENUMS(TRANSPOSE); 109 COMPARE_ENUMS(ABS); 110 COMPARE_ENUMS(ARGMAX); 111 COMPARE_ENUMS(ARGMIN); 112 COMPARE_ENUMS(AXIS_ALIGNED_BBOX_TRANSFORM); 113 COMPARE_ENUMS(BIDIRECTIONAL_SEQUENCE_LSTM); 114 COMPARE_ENUMS(BIDIRECTIONAL_SEQUENCE_RNN); 115 COMPARE_ENUMS(BOX_WITH_NMS_LIMIT); 116 COMPARE_ENUMS(CAST); 117 COMPARE_ENUMS(CHANNEL_SHUFFLE); 118 COMPARE_ENUMS(DETECTION_POSTPROCESSING); 119 COMPARE_ENUMS(EQUAL); 120 COMPARE_ENUMS(EXP); 121 COMPARE_ENUMS(EXPAND_DIMS); 122 COMPARE_ENUMS(GATHER); 123 COMPARE_ENUMS(GENERATE_PROPOSALS); 124 COMPARE_ENUMS(GREATER); 125 COMPARE_ENUMS(GREATER_EQUAL); 126 COMPARE_ENUMS(GROUPED_CONV_2D); 127 COMPARE_ENUMS(HEATMAP_MAX_KEYPOINT); 128 COMPARE_ENUMS(INSTANCE_NORMALIZATION); 129 COMPARE_ENUMS(LESS); 130 COMPARE_ENUMS(LESS_EQUAL); 131 COMPARE_ENUMS(LOG); 132 COMPARE_ENUMS(LOGICAL_AND); 133 COMPARE_ENUMS(LOGICAL_NOT); 134 COMPARE_ENUMS(LOGICAL_OR); 135 COMPARE_ENUMS(LOG_SOFTMAX); 136 COMPARE_ENUMS(MAXIMUM); 137 COMPARE_ENUMS(MINIMUM); 138 COMPARE_ENUMS(NEG); 139 COMPARE_ENUMS(NOT_EQUAL); 140 COMPARE_ENUMS(PAD_V2); 141 COMPARE_ENUMS(POW); 142 COMPARE_ENUMS(PRELU); 143 COMPARE_ENUMS(QUANTIZE); 144 COMPARE_ENUMS(QUANTIZED_16BIT_LSTM); 145 COMPARE_ENUMS(RANDOM_MULTINOMIAL); 146 COMPARE_ENUMS(REDUCE_ALL); 147 COMPARE_ENUMS(REDUCE_ANY); 148 COMPARE_ENUMS(REDUCE_MAX); 149 COMPARE_ENUMS(REDUCE_MIN); 150 COMPARE_ENUMS(REDUCE_PROD); 151 COMPARE_ENUMS(REDUCE_SUM); 152 COMPARE_ENUMS(ROI_ALIGN); 153 COMPARE_ENUMS(ROI_POOLING); 154 COMPARE_ENUMS(RSQRT); 155 COMPARE_ENUMS(SELECT); 156 COMPARE_ENUMS(SIN); 157 COMPARE_ENUMS(SLICE); 158 COMPARE_ENUMS(SPLIT); 159 COMPARE_ENUMS(SQRT); 160 COMPARE_ENUMS(TILE); 161 COMPARE_ENUMS(TOPK_V2); 162 COMPARE_ENUMS(TRANSPOSE_CONV_2D); 163 COMPARE_ENUMS(UNIDIRECTIONAL_SEQUENCE_LSTM); 164 COMPARE_ENUMS(UNIDIRECTIONAL_SEQUENCE_RNN); 165 COMPARE_ENUMS(RESIZE_NEAREST_NEIGHBOR); 166 COMPARE_ENUMS(OEM_OPERATION); 167 168 #undef COMPARE_ENUMS 169 170 #define COMPARE_ENUMS(symbol) COMPARE_ENUMS_FULL(symbol, DeviceType) 171 172 COMPARE_ENUMS(OTHER); 173 COMPARE_ENUMS(CPU); 174 COMPARE_ENUMS(GPU); 175 COMPARE_ENUMS(ACCELERATOR); 176 177 #undef COMPARE_ENUMS 178 179 #define COMPARE_ENUMS(symbol) COMPARE_ENUMS_FULL(symbol, MeasureTiming) 180 181 COMPARE_ENUMS(NO); 182 COMPARE_ENUMS(YES); 183 184 #undef COMPARE_ENUMS 185 186 #undef COMPARE_ENUMS_FULL 187 188 } // anonymous namespace 189