blob: 0e88091cfb49b4dd8c2f35cd148b396ff463f778 [file] [log] [blame]
Lev Proleev6b6dfcd2020-11-11 18:28:50 +00001/*
2 * Copyright (C) 2021 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 <aidl/android/hardware/neuralnetworks/DeviceType.h>
18#include <aidl/android/hardware/neuralnetworks/ErrorStatus.h>
19#include <aidl/android/hardware/neuralnetworks/ExecutionPreference.h>
20#include <aidl/android/hardware/neuralnetworks/FusedActivationFunc.h>
21#include <aidl/android/hardware/neuralnetworks/IDevice.h>
22#include <aidl/android/hardware/neuralnetworks/OperandLifeTime.h>
23#include <aidl/android/hardware/neuralnetworks/OperandType.h>
24#include <aidl/android/hardware/neuralnetworks/OperationType.h>
25#include <aidl/android/hardware/neuralnetworks/Priority.h>
26
27#include <ControlFlow.h>
28#include <nnapi/OperandTypes.h>
29#include <nnapi/OperationTypes.h>
30#include <nnapi/Types.h>
31#include <type_traits>
32
33namespace {
34
35#define COMPARE_ENUMS_TYPES(lhsType, rhsType) \
36 static_assert( \
37 std::is_same_v< \
38 std::underlying_type_t<::aidl::android::hardware::neuralnetworks::lhsType>, \
39 std::underlying_type_t<::android::nn::rhsType>>, \
40 "::aidl::android::hardware::neuralnetworks::" #lhsType \
41 " does not have the same underlying type as ::android::nn::" #rhsType)
42
43COMPARE_ENUMS_TYPES(OperandType, OperandType);
44COMPARE_ENUMS_TYPES(OperationType, OperationType);
45COMPARE_ENUMS_TYPES(Priority, Priority);
46COMPARE_ENUMS_TYPES(OperandLifeTime, Operand::LifeTime);
47COMPARE_ENUMS_TYPES(ErrorStatus, ErrorStatus);
48
49#undef COMPARE_ENUMS_TYPES
50
51#define COMPARE_ENUMS_FULL(lhsSymbol, rhsSymbol, lhsType, rhsType) \
52 static_assert( \
53 static_cast< \
54 std::underlying_type_t<::aidl::android::hardware::neuralnetworks::lhsType>>( \
55 ::aidl::android::hardware::neuralnetworks::lhsType::lhsSymbol) == \
56 static_cast<std::underlying_type_t<::android::nn::rhsType>>( \
57 ::android::nn::rhsType::rhsSymbol), \
58 "::aidl::android::hardware::neuralnetworks::" #lhsType "::" #lhsSymbol \
59 " does not match ::android::nn::" #rhsType "::" #rhsSymbol)
60
61#define COMPARE_ENUMS(symbol) COMPARE_ENUMS_FULL(symbol, symbol, OperandType, OperandType)
62
63COMPARE_ENUMS(FLOAT32);
64COMPARE_ENUMS(INT32);
65COMPARE_ENUMS(UINT32);
66COMPARE_ENUMS(TENSOR_FLOAT32);
67COMPARE_ENUMS(TENSOR_INT32);
68COMPARE_ENUMS(TENSOR_QUANT8_ASYMM);
69COMPARE_ENUMS(BOOL);
70COMPARE_ENUMS(TENSOR_QUANT16_SYMM);
71COMPARE_ENUMS(TENSOR_FLOAT16);
72COMPARE_ENUMS(TENSOR_BOOL8);
73COMPARE_ENUMS(FLOAT16);
74COMPARE_ENUMS(TENSOR_QUANT8_SYMM_PER_CHANNEL);
75COMPARE_ENUMS(TENSOR_QUANT16_ASYMM);
76COMPARE_ENUMS(TENSOR_QUANT8_SYMM);
77COMPARE_ENUMS(TENSOR_QUANT8_ASYMM_SIGNED);
78COMPARE_ENUMS(SUBGRAPH);
79
80#undef COMPARE_ENUMS
81
82#define COMPARE_ENUMS(symbol) COMPARE_ENUMS_FULL(symbol, symbol, OperationType, OperationType)
83
84COMPARE_ENUMS(ADD);
85COMPARE_ENUMS(AVERAGE_POOL_2D);
86COMPARE_ENUMS(CONCATENATION);
87COMPARE_ENUMS(CONV_2D);
88COMPARE_ENUMS(DEPTHWISE_CONV_2D);
89COMPARE_ENUMS(DEPTH_TO_SPACE);
90COMPARE_ENUMS(DEQUANTIZE);
91COMPARE_ENUMS(EMBEDDING_LOOKUP);
92COMPARE_ENUMS(FLOOR);
93COMPARE_ENUMS(FULLY_CONNECTED);
94COMPARE_ENUMS(HASHTABLE_LOOKUP);
95COMPARE_ENUMS(L2_NORMALIZATION);
96COMPARE_ENUMS(L2_POOL_2D);
97COMPARE_ENUMS(LOCAL_RESPONSE_NORMALIZATION);
98COMPARE_ENUMS(LOGISTIC);
99COMPARE_ENUMS(LSH_PROJECTION);
100COMPARE_ENUMS(LSTM);
101COMPARE_ENUMS(MAX_POOL_2D);
102COMPARE_ENUMS(MUL);
103COMPARE_ENUMS(RELU);
104COMPARE_ENUMS(RELU1);
105COMPARE_ENUMS(RELU6);
106COMPARE_ENUMS(RESHAPE);
107COMPARE_ENUMS(RESIZE_BILINEAR);
108COMPARE_ENUMS(RNN);
109COMPARE_ENUMS(SOFTMAX);
110COMPARE_ENUMS(SPACE_TO_DEPTH);
111COMPARE_ENUMS(SVDF);
112COMPARE_ENUMS(TANH);
113COMPARE_ENUMS(BATCH_TO_SPACE_ND);
114COMPARE_ENUMS(DIV);
115COMPARE_ENUMS(MEAN);
116COMPARE_ENUMS(PAD);
117COMPARE_ENUMS(SPACE_TO_BATCH_ND);
118COMPARE_ENUMS(SQUEEZE);
119COMPARE_ENUMS(STRIDED_SLICE);
120COMPARE_ENUMS(SUB);
121COMPARE_ENUMS(TRANSPOSE);
122COMPARE_ENUMS(ABS);
123COMPARE_ENUMS(ARGMAX);
124COMPARE_ENUMS(ARGMIN);
125COMPARE_ENUMS(AXIS_ALIGNED_BBOX_TRANSFORM);
126COMPARE_ENUMS(BIDIRECTIONAL_SEQUENCE_LSTM);
127COMPARE_ENUMS(BIDIRECTIONAL_SEQUENCE_RNN);
128COMPARE_ENUMS(BOX_WITH_NMS_LIMIT);
129COMPARE_ENUMS(CAST);
130COMPARE_ENUMS(CHANNEL_SHUFFLE);
131COMPARE_ENUMS(DETECTION_POSTPROCESSING);
132COMPARE_ENUMS(EQUAL);
133COMPARE_ENUMS(EXP);
134COMPARE_ENUMS(EXPAND_DIMS);
135COMPARE_ENUMS(GATHER);
136COMPARE_ENUMS(GENERATE_PROPOSALS);
137COMPARE_ENUMS(GREATER);
138COMPARE_ENUMS(GREATER_EQUAL);
139COMPARE_ENUMS(GROUPED_CONV_2D);
140COMPARE_ENUMS(HEATMAP_MAX_KEYPOINT);
141COMPARE_ENUMS(INSTANCE_NORMALIZATION);
142COMPARE_ENUMS(LESS);
143COMPARE_ENUMS(LESS_EQUAL);
144COMPARE_ENUMS(LOG);
145COMPARE_ENUMS(LOGICAL_AND);
146COMPARE_ENUMS(LOGICAL_NOT);
147COMPARE_ENUMS(LOGICAL_OR);
148COMPARE_ENUMS(LOG_SOFTMAX);
149COMPARE_ENUMS(MAXIMUM);
150COMPARE_ENUMS(MINIMUM);
151COMPARE_ENUMS(NEG);
152COMPARE_ENUMS(NOT_EQUAL);
153COMPARE_ENUMS(PAD_V2);
154COMPARE_ENUMS(POW);
155COMPARE_ENUMS(PRELU);
156COMPARE_ENUMS(QUANTIZE);
157COMPARE_ENUMS(QUANTIZED_16BIT_LSTM);
158COMPARE_ENUMS(RANDOM_MULTINOMIAL);
159COMPARE_ENUMS(REDUCE_ALL);
160COMPARE_ENUMS(REDUCE_ANY);
161COMPARE_ENUMS(REDUCE_MAX);
162COMPARE_ENUMS(REDUCE_MIN);
163COMPARE_ENUMS(REDUCE_PROD);
164COMPARE_ENUMS(REDUCE_SUM);
165COMPARE_ENUMS(ROI_ALIGN);
166COMPARE_ENUMS(ROI_POOLING);
167COMPARE_ENUMS(RSQRT);
168COMPARE_ENUMS(SELECT);
169COMPARE_ENUMS(SIN);
170COMPARE_ENUMS(SLICE);
171COMPARE_ENUMS(SPLIT);
172COMPARE_ENUMS(SQRT);
173COMPARE_ENUMS(TILE);
174COMPARE_ENUMS(TOPK_V2);
175COMPARE_ENUMS(TRANSPOSE_CONV_2D);
176COMPARE_ENUMS(UNIDIRECTIONAL_SEQUENCE_LSTM);
177COMPARE_ENUMS(UNIDIRECTIONAL_SEQUENCE_RNN);
178COMPARE_ENUMS(RESIZE_NEAREST_NEIGHBOR);
179COMPARE_ENUMS(QUANTIZED_LSTM);
180COMPARE_ENUMS(IF);
181COMPARE_ENUMS(WHILE);
182COMPARE_ENUMS(ELU);
183COMPARE_ENUMS(HARD_SWISH);
184COMPARE_ENUMS(FILL);
185COMPARE_ENUMS(RANK);
186
187#undef COMPARE_ENUMS
188
189#define COMPARE_ENUMS(symbol) COMPARE_ENUMS_FULL(symbol, symbol, Priority, Priority)
190
191COMPARE_ENUMS(LOW);
192COMPARE_ENUMS(MEDIUM);
193COMPARE_ENUMS(HIGH);
194
195#undef COMPARE_ENUMS
196
197#define COMPARE_ENUMS(lhsSymbol, rhsSymbol) \
198 COMPARE_ENUMS_FULL(lhsSymbol, rhsSymbol, OperandLifeTime, Operand::LifeTime)
199
200COMPARE_ENUMS(TEMPORARY_VARIABLE, TEMPORARY_VARIABLE);
201COMPARE_ENUMS(SUBGRAPH_INPUT, SUBGRAPH_INPUT);
202COMPARE_ENUMS(SUBGRAPH_OUTPUT, SUBGRAPH_OUTPUT);
203COMPARE_ENUMS(CONSTANT_COPY, CONSTANT_COPY);
204COMPARE_ENUMS(CONSTANT_POOL, CONSTANT_REFERENCE);
205COMPARE_ENUMS(NO_VALUE, NO_VALUE);
206COMPARE_ENUMS(SUBGRAPH, SUBGRAPH);
207
208#undef COMPARE_ENUMS
209
210#define COMPARE_ENUMS(symbol) COMPARE_ENUMS_FULL(symbol, symbol, ErrorStatus, ErrorStatus)
211
212COMPARE_ENUMS(NONE);
213COMPARE_ENUMS(DEVICE_UNAVAILABLE);
214COMPARE_ENUMS(GENERAL_FAILURE);
215COMPARE_ENUMS(OUTPUT_INSUFFICIENT_SIZE);
216COMPARE_ENUMS(INVALID_ARGUMENT);
217COMPARE_ENUMS(MISSED_DEADLINE_TRANSIENT);
218COMPARE_ENUMS(MISSED_DEADLINE_PERSISTENT);
219COMPARE_ENUMS(RESOURCE_EXHAUSTED_TRANSIENT);
220COMPARE_ENUMS(RESOURCE_EXHAUSTED_PERSISTENT);
221
222#undef COMPARE_ENUMS
223
224#define COMPARE_ENUMS(symbol) \
225 COMPARE_ENUMS_FULL(symbol, symbol, ExecutionPreference, ExecutionPreference)
226
227COMPARE_ENUMS(LOW_POWER);
228COMPARE_ENUMS(FAST_SINGLE_ANSWER);
229COMPARE_ENUMS(SUSTAINED_SPEED);
230
231#undef COMPARE_ENUMS
232
233#define COMPARE_ENUMS(symbol) COMPARE_ENUMS_FULL(symbol, symbol, DeviceType, DeviceType)
234
235COMPARE_ENUMS(OTHER);
236COMPARE_ENUMS(CPU);
237COMPARE_ENUMS(GPU);
238COMPARE_ENUMS(ACCELERATOR);
239
240#undef COMPARE_ENUMS
241
242#define COMPARE_ENUMS(symbol) \
243 COMPARE_ENUMS_FULL(symbol, symbol, FusedActivationFunc, FusedActivationFunc)
244
245COMPARE_ENUMS(NONE);
246COMPARE_ENUMS(RELU);
247COMPARE_ENUMS(RELU1);
248COMPARE_ENUMS(RELU6);
249
250#undef COMPARE_ENUMS
251
252#undef COMPARE_ENUMS_FULL
253
254#define COMPARE_CONSTANTS(halSymbol, canonicalSymbol) \
255 static_assert(::aidl::android::hardware::neuralnetworks::halSymbol == \
256 ::android::nn::canonicalSymbol);
257
258COMPARE_CONSTANTS(IDevice::BYTE_SIZE_OF_CACHE_TOKEN, kByteSizeOfCacheToken);
259COMPARE_CONSTANTS(IDevice::MAX_NUMBER_OF_CACHE_FILES, kMaxNumberOfCacheFiles);
260COMPARE_CONSTANTS(IDevice::EXTENSION_TYPE_HIGH_BITS_PREFIX, kExtensionPrefixBits - 1);
261COMPARE_CONSTANTS(IDevice::EXTENSION_TYPE_LOW_BITS_TYPE, kExtensionTypeBits);
262COMPARE_CONSTANTS(IPreparedModel::DEFAULT_LOOP_TIMEOUT_DURATION_NS,
263 operation_while::kTimeoutNsDefault);
264COMPARE_CONSTANTS(IPreparedModel::MAXIMUM_LOOP_TIMEOUT_DURATION_NS,
265 operation_while::kTimeoutNsMaximum);
266
267#undef COMPARE_CONSTANTS
268
269} // anonymous namespace