xref: /aosp_15_r20/external/android-nn-driver/1.3/HalPolicy.cpp (revision 3e777be0405cee09af5d5785ff37f7cfb5bee59a)
1 //
2 // Copyright © 2020-2023 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "HalPolicy.hpp"
7 
8 namespace armnn_driver
9 {
10 namespace hal_1_3
11 {
12 
13 using namespace armnn;
14 
15 namespace
16 {
17 
18 } // anonymouse namespace
19 
ConvertOperation(const Operation & operation,const Model & model,ConversionData & data)20 bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, ConversionData& data)
21 {
22     switch (operation.type)
23     {
24         case V1_3::OperationType::ABS:
25             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Abs);
26         case V1_3::OperationType::ADD:
27             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Add);
28         case V1_3::OperationType::ARGMAX:
29             return ConvertArgMinMax(operation, model, data, ArgMinMaxFunction::Max);
30         case V1_3::OperationType::ARGMIN:
31             return ConvertArgMinMax(operation, model, data, ArgMinMaxFunction::Min);
32         case V1_3::OperationType::AVERAGE_POOL_2D:
33             return ConvertAveragePool2d(operation, model, data);
34         case V1_3::OperationType::BATCH_TO_SPACE_ND:
35             return ConvertBatchToSpaceNd(operation, model, data);
36         case V1_3::OperationType::CAST:
37             return ConvertCast(operation, model, data);
38         case V1_3::OperationType::CHANNEL_SHUFFLE:
39             return ConvertChannelShuffle(operation, model, data);
40         case V1_3::OperationType::CONCATENATION:
41             return ConvertConcatenation(operation, model, data);
42         case V1_3::OperationType::CONV_2D:
43             return ConvertConv2d(operation, model, data);
44         case V1_3::OperationType::DEPTH_TO_SPACE:
45             return ConvertDepthToSpace(operation, model, data);
46         case V1_3::OperationType::DEPTHWISE_CONV_2D:
47             return ConvertDepthwiseConv2d(operation, model, data);
48         case V1_3::OperationType::DEQUANTIZE:
49             return ConvertDequantize(operation, model, data);
50         case V1_3::OperationType::DIV:
51             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Div);
52         case V1_3::OperationType::ELU:
53             return ConvertElu(operation, model, data);
54         case V1_3::OperationType::EQUAL:
55             return ConvertComparison(operation, model, data, ComparisonOperation::Equal);
56         case V1_3::OperationType::EXP:
57             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Exp);
58         case V1_3::OperationType::EXPAND_DIMS:
59             return ConvertExpandDims(operation, model, data);
60         case V1_3::OperationType::FILL:
61             return ConvertFill(operation, model, data);
62         case V1_3::OperationType::FLOOR:
63             return ConvertFloor(operation, model, data);
64         case V1_3::OperationType::FULLY_CONNECTED:
65             return ConvertFullyConnected(operation, model, data);
66         case V1_3::OperationType::GATHER:
67             return ConvertGather(operation, model, data);
68         case V1_3::OperationType::GREATER:
69             return ConvertComparison(operation, model, data, ComparisonOperation::Greater);
70         case V1_3::OperationType::GREATER_EQUAL:
71             return ConvertComparison(operation, model, data, ComparisonOperation::GreaterOrEqual);
72         case V1_3::OperationType::GROUPED_CONV_2D:
73             return ConvertGroupedConv2d(operation, model, data);
74         case V1_3::OperationType::HARD_SWISH:
75             return ConvertHardSwish(operation, model, data);
76         case V1_3::OperationType::INSTANCE_NORMALIZATION:
77             return ConvertInstanceNormalization(operation, model, data);
78         case V1_3::OperationType::L2_NORMALIZATION:
79             return ConvertL2Normalization(operation, model, data);
80         case V1_3::OperationType::L2_POOL_2D:
81             return ConvertL2Pool2d(operation, model, data);
82         case V1_3::OperationType::LESS:
83             return ConvertComparison(operation, model, data, ComparisonOperation::Less);
84         case V1_3::OperationType::LESS_EQUAL:
85             return ConvertComparison(operation, model, data, ComparisonOperation::LessOrEqual);
86         case V1_3::OperationType::LOCAL_RESPONSE_NORMALIZATION:
87             return ConvertLocalResponseNormalization(operation, model, data);
88         case V1_3::OperationType::LOG:
89             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Log);
90         case V1_3::OperationType::LOGICAL_AND:
91             return ConvertLogicalBinary(operation, model, data, LogicalBinaryOperation::LogicalAnd);
92         case V1_3::OperationType::LOGICAL_NOT:
93             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::LogicalNot);
94         case V1_3::OperationType::LOGICAL_OR:
95             return ConvertLogicalBinary(operation, model, data, LogicalBinaryOperation::LogicalOr);
96         case V1_3::OperationType::LOGISTIC:
97             return ConvertLogistic(operation, model, data);
98         case V1_3::OperationType::LOG_SOFTMAX:
99             return ConvertLogSoftmax(operation, model, data);
100         case V1_3::OperationType::LSTM:
101             return ConvertLstm(operation, model, data);
102         case V1_3::OperationType::MAX_POOL_2D:
103             return ConvertMaxPool2d(operation, model, data);
104         case V1_3::OperationType::MAXIMUM:
105             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Maximum);
106         case V1_3::OperationType::MEAN:
107             return ConvertMean(operation, model, data);
108         case V1_3::OperationType::MINIMUM:
109             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Minimum);
110         case V1_3::OperationType::MUL:
111             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Mul);
112         case V1_3::OperationType::NEG:
113             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Neg);
114         case V1_3::OperationType::NOT_EQUAL:
115             return ConvertComparison(operation, model, data, ComparisonOperation::NotEqual);
116         case V1_3::OperationType::PAD:
117             return ConvertPad(operation, model, data);
118         case V1_3::OperationType::PAD_V2:
119             return ConvertPadV2(operation, model, data);
120         case V1_3::OperationType::PRELU:
121             return ConvertPrelu(operation, model, data);
122         case V1_3::OperationType::QUANTIZE:
123             return ConvertQuantize(operation, model, data);
124         case V1_3::OperationType::QUANTIZED_LSTM:
125             return ConvertQuantizedLstm(operation, model, data);
126         case V1_3::OperationType::QUANTIZED_16BIT_LSTM:
127             return ConvertQuantized16BitLstm(operation, model, data);
128         case V1_3::OperationType::RANK:
129             return ConvertRank(operation, model, data);
130         case V1_3::OperationType::REDUCE_MAX:
131             return ConvertReduce(operation, model, data, ReduceOperation::Max);
132         case V1_3::OperationType::REDUCE_MIN:
133             return ConvertReduce(operation, model, data, ReduceOperation::Min);
134         case V1_3::OperationType::REDUCE_PROD:
135             return ConvertReduce(operation, model, data, ReduceOperation::Prod);
136         case V1_3::OperationType::REDUCE_SUM:
137             return ConvertReduce(operation, model, data, ReduceOperation::Sum);
138         case V1_3::OperationType::RELU:
139             return ConvertReLu(operation, model, data);
140         case V1_3::OperationType::RELU1:
141             return ConvertReLu1(operation, model, data);
142         case V1_3::OperationType::RELU6:
143             return ConvertReLu6(operation, model, data);
144         case V1_3::OperationType::RESHAPE:
145             return ConvertReshape(operation, model, data);
146         case V1_3::OperationType::RESIZE_BILINEAR:
147             return ConvertResize(operation, model, data, ResizeMethod::Bilinear);
148         case V1_3::OperationType::RESIZE_NEAREST_NEIGHBOR:
149             return ConvertResize(operation, model, data, ResizeMethod::NearestNeighbor);
150         case V1_3::OperationType::RSQRT:
151             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Rsqrt);
152         case V1_3::OperationType::SIN:
153             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Sin);
154         case V1_3::OperationType::SOFTMAX:
155             return ConvertSoftmax(operation, model, data);
156         case V1_3::OperationType::SPACE_TO_BATCH_ND  :
157             return ConvertSpaceToBatchNd(operation, model, data);
158         case V1_3::OperationType::SPACE_TO_DEPTH:
159             return ConvertSpaceToDepth(operation, model, data);
160         case V1_3::OperationType::SQRT:
161             return ConvertSqrt(operation, model, data);
162         case V1_3::OperationType::SQUEEZE:
163             return ConvertSqueeze(operation, model, data);
164         case V1_3::OperationType::STRIDED_SLICE:
165             return ConvertStridedSlice(operation, model, data);
166         case V1_3::OperationType::SUB:
167             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Sub);
168         case V1_3::OperationType::TRANSPOSE:
169             return ConvertTranspose(operation, model, data);
170         case V1_3::OperationType::TRANSPOSE_CONV_2D:
171             return ConvertTransposeConv2d(operation, model, data);
172         case V1_3::OperationType::TANH:
173             return ConvertTanH(operation, model, data);
174         case V1_3::OperationType::UNIDIRECTIONAL_SEQUENCE_LSTM:
175             return ConvertUnidirectionalSequenceLstm(operation, model, data);
176         default:
177             return Fail("%s: Operation type %s not supported in ArmnnDriver",
178                         __func__, toString(operation.type).c_str());
179     }
180 }
181 
ConvertArgMinMax(const V1_3::Operation & operation,const V1_3::Model & model,ConversionData & data,armnn::ArgMinMaxFunction argMinMaxFunction)182 bool HalPolicy::ConvertArgMinMax(const V1_3::Operation& operation,
183                                  const V1_3::Model& model,
184                                  ConversionData& data,
185                                  armnn::ArgMinMaxFunction argMinMaxFunction)
186 {
187     ALOGV("hal_1_3::HalPolicy::ConvertArgMinMax()");
188     return ::ConvertArgMinMax<hal_1_3::HalPolicy>(operation, model, data, argMinMaxFunction);
189 }
190 
ConvertAveragePool2d(const Operation & operation,const Model & model,ConversionData & data)191 bool HalPolicy::ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data)
192 {
193     ALOGV("hal_1_3::HalPolicy::ConvertAveragePool2d()");
194     return ConvertPooling2d<hal_1_3::HalPolicy>(operation, __func__, PoolingAlgorithm::Average, model, data);
195 }
196 
ConvertBatchToSpaceNd(const Operation & operation,const Model & model,ConversionData & data)197 bool HalPolicy::ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data)
198 {
199     ALOGV("hal_1_3::HalPolicy::ConvertBatchToSpaceNd()");
200     return ::ConvertBatchToSpaceNd<hal_1_3::HalPolicy>(operation, model, data);
201 }
202 
ConvertCast(const Operation & operation,const Model & model,ConversionData & data)203 bool HalPolicy::ConvertCast(const Operation& operation, const Model& model, ConversionData& data)
204 {
205     ALOGV("hal_1_3::HalPolicy::ConvertCast()");
206     return ::ConvertCast<hal_1_3::HalPolicy>(operation, model, data);
207 }
208 
ConvertChannelShuffle(const Operation & operation,const Model & model,ConversionData & data)209 bool HalPolicy::ConvertChannelShuffle(const Operation& operation, const Model& model, ConversionData& data)
210 {
211     ALOGV("hal_1_3::HalPolicy::ConvertChannelShuffle()");
212     return ::ConvertChannelShuffle<hal_1_3::HalPolicy>(operation, model, data);
213 }
214 
ConvertComparison(const Operation & operation,const Model & model,ConversionData & data,ComparisonOperation comparisonOperation)215 bool HalPolicy::ConvertComparison(const Operation& operation,
216                                   const Model& model,
217                                   ConversionData& data,
218                                   ComparisonOperation comparisonOperation)
219 {
220     ALOGV("hal_1_3::HalPolicy::ConvertComparison()");
221     return ::ConvertComparison_1_2<hal_1_3::HalPolicy>(operation, model, data, comparisonOperation);
222 }
223 
ConvertConcatenation(const Operation & operation,const Model & model,ConversionData & data)224 bool HalPolicy::ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data)
225 {
226     ALOGV("hal_1_3::HalPolicy::ConvertConcatenation()");
227     return ::ConvertConcatenation<hal_1_3::HalPolicy>(operation, model, data);
228 }
229 
ConvertConv2d(const Operation & operation,const Model & model,ConversionData & data)230 bool HalPolicy::ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data)
231 {
232     ALOGV("hal_1_3::HalPolicy::ConvertConv2d()");
233     return ::ConvertConv2d_1_2<hal_1_3::HalPolicy>(operation, model, data);
234 }
235 
ConvertDepthToSpace(const Operation & operation,const Model & model,ConversionData & data)236 bool HalPolicy::ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data)
237 {
238     ALOGV("hal_1_3::HalPolicy::ConvertDepthToSpace()");
239     return ::ConvertDepthToSpace<hal_1_3::HalPolicy>(operation, model, data);
240 }
241 
ConvertDepthwiseConv2d(const Operation & operation,const Model & model,ConversionData & data)242 bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data)
243 {
244     ALOGV("hal_1_3::HalPolicy::ConvertDepthwiseConv2d()");
245     return ::ConvertDepthwiseConv2d_1_2<hal_1_3::HalPolicy>(operation, model, data);
246 }
247 
ConvertDequantize(const Operation & operation,const Model & model,ConversionData & data)248 bool HalPolicy::ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data)
249 {
250     ALOGV("hal_1_3::HalPolicy::ConvertDequantize()");
251     return ::ConvertDequantize_1_2<hal_1_3::HalPolicy>(operation, model, data);
252 }
253 
ConvertElementwiseBinary(const Operation & operation,const Model & model,ConversionData & data,BinaryOperation binaryOperation)254 bool HalPolicy::ConvertElementwiseBinary(const Operation& operation,
255                                          const Model& model,
256                                          ConversionData& data,
257                                          BinaryOperation binaryOperation)
258 {
259     ALOGV("hal_1_3::HalPolicy::ConvertElementwiseBinary()");
260     return ::ConvertElementwiseBinary<hal_1_3::HalPolicy>(operation, model, data, binaryOperation);
261 }
262 
ConvertElementwiseUnary(const Operation & operation,const Model & model,ConversionData & data,UnaryOperation unaryOperation)263 bool HalPolicy::ConvertElementwiseUnary(const Operation& operation,
264                                         const Model& model,
265                                         ConversionData& data,
266                                         UnaryOperation unaryOperation)
267 {
268     ALOGV("hal_1_3::HalPolicy::ConvertElementwiseUnary()");
269     return ::ConvertElementwiseUnary<hal_1_3::HalPolicy>(operation, model, data, unaryOperation);
270 }
271 
ConvertElu(const Operation & operation,const Model & model,ConversionData & data)272 bool HalPolicy::ConvertElu(const Operation& operation, const Model& model, ConversionData& data)
273 {
274     ALOGV("hal_1_3::HalPolicy::ConvertElu()");
275     return ::ConvertElu<hal_1_3::HalPolicy>(operation, model, data);
276 }
277 
ConvertExpandDims(const Operation & operation,const Model & model,ConversionData & data)278 bool HalPolicy::ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data)
279 {
280     ALOGV("hal_1_3::HalPolicy::ConvertExpandDims()");
281     return ::ConvertExpandDims<hal_1_3::HalPolicy>(operation, model, data);
282 }
283 
ConvertFill(const Operation & operation,const Model & model,ConversionData & data)284 bool HalPolicy::ConvertFill(const Operation& operation, const Model& model, ConversionData& data)
285 {
286     ALOGV("hal_1_3::HalPolicy::ConvertFill()");
287     return ::ConvertFill<hal_1_3::HalPolicy>(operation, model, data);
288 }
289 
ConvertFloor(const Operation & operation,const Model & model,ConversionData & data)290 bool HalPolicy::ConvertFloor(const Operation& operation, const Model& model, ConversionData& data)
291 {
292     ALOGV("hal_1_3::HalPolicy::ConvertFloor()");
293     return ::ConvertFloor<hal_1_3::HalPolicy>(operation, model, data);
294 }
295 
ConvertFullyConnected(const Operation & operation,const Model & model,ConversionData & data)296 bool HalPolicy::ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data)
297 {
298     ALOGV("hal_1_3::HalPolicy::ConvertFullyConnected()");
299     return ::ConvertFullyConnected<hal_1_3::HalPolicy>(operation, model, data);
300 }
301 
ConvertGather(const Operation & operation,const Model & model,ConversionData & data)302 bool HalPolicy::ConvertGather(const Operation& operation, const Model& model, ConversionData& data)
303 {
304     ALOGV("hal_1_3::HalPolicy::ConvertGather()");
305     return ::ConvertGather<hal_1_3::HalPolicy>(operation, model, data);
306 }
307 
ConvertGroupedConv2d(const Operation & operation,const Model & model,ConversionData & data)308 bool HalPolicy::ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data)
309 {
310     ALOGV("hal_1_3::HalPolicy::ConvertGroupedConv2d()");
311     return ::ConvertGroupedConv2d<hal_1_3::HalPolicy>(operation, model, data);
312 }
313 
ConvertHardSwish(const Operation & operation,const Model & model,ConversionData & data)314 bool HalPolicy::ConvertHardSwish(const Operation& operation, const Model& model, ConversionData& data)
315 {
316     ALOGV("hal_1_3::HalPolicy::ConvertHardSwish()");
317     ActivationDescriptor desc;
318     desc.m_Function = ActivationFunction::HardSwish;
319 
320     return ::ConvertToActivation<hal_1_3::HalPolicy>(operation, __func__, desc, model, data);
321 }
322 
ConvertInstanceNormalization(const Operation & operation,const Model & model,ConversionData & data)323 bool HalPolicy::ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data)
324 {
325     ALOGV("hal_1_3::HalPolicy::ConvertInstanceNormalization()");
326     return ::ConvertInstanceNormalization<hal_1_3::HalPolicy>(operation, model, data);
327 }
328 
ConvertL2Normalization(const Operation & operation,const Model & model,ConversionData & data)329 bool HalPolicy::ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data)
330 {
331     ALOGV("hal_1_3::HalPolicy::ConvertL2Normalization()");
332     return ::ConvertL2Normalization<hal_1_3::HalPolicy>(operation, model, data);
333 }
334 
ConvertL2Pool2d(const Operation & operation,const Model & model,ConversionData & data)335 bool HalPolicy::ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data)
336 {
337     ALOGV("hal_1_3::HalPolicy::ConvertL2Pool2d()");
338     return ConvertPooling2d<hal_1_3::HalPolicy>(operation, __func__, PoolingAlgorithm::L2, model, data);
339 }
340 
ConvertLocalResponseNormalization(const Operation & operation,const Model & model,ConversionData & data)341 bool HalPolicy::ConvertLocalResponseNormalization(const Operation& operation,
342                                                   const Model& model,
343                                                   ConversionData& data)
344 {
345     ALOGV("hal_1_3::HalPolicy::ConvertLocalResponseNormalization()");
346     return ::ConvertLocalResponseNormalization<hal_1_3::HalPolicy>(operation, model, data);
347 }
348 
ConvertLogicalBinary(const Operation & operation,const Model & model,ConversionData & data,armnn::LogicalBinaryOperation logicalOperation)349 bool HalPolicy::ConvertLogicalBinary(const Operation& operation,
350                                      const Model& model,
351                                      ConversionData& data,
352                                      armnn::LogicalBinaryOperation logicalOperation)
353 {
354     ALOGV("hal_1_3::HalPolicy::ConvertLogicalBinary()");
355     return ::ConvertLogicalBinary<hal_1_3::HalPolicy>(operation, model, data, logicalOperation);
356 }
357 
ConvertLogistic(const Operation & operation,const Model & model,ConversionData & data)358 bool HalPolicy::ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data)
359 {
360     ALOGV("hal_1_3::HalPolicy::ConvertLogistic()");
361     return ::ConvertLogistic<hal_1_3::HalPolicy>(operation, model, data);
362 }
363 
ConvertLogSoftmax(const Operation & operation,const Model & model,ConversionData & data)364 bool HalPolicy::ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data)
365 {
366     ALOGV("hal_1_3::HalPolicy::ConvertLogSoftmax()");
367     return ::ConvertLogSoftmax<hal_1_3::HalPolicy>(operation, model, data);
368 }
369 
ConvertLstm(const Operation & operation,const Model & model,ConversionData & data)370 bool HalPolicy::ConvertLstm(const Operation& operation, const Model& model, ConversionData& data)
371 {
372     ALOGV("hal_1_3::HalPolicy::ConvertLstm()");
373     return ::ConvertLstm<hal_1_3::HalPolicy>(operation, model, data);
374 }
375 
ConvertMaxPool2d(const Operation & operation,const Model & model,ConversionData & data)376 bool HalPolicy::ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data)
377 {
378     ALOGV("hal_1_3::HalPolicy::ConvertMaxPool2d()");
379     return ConvertPooling2d<hal_1_3::HalPolicy>(operation, __func__, PoolingAlgorithm::Max, model, data);
380 }
381 
ConvertMean(const Operation & operation,const Model & model,ConversionData & data)382 bool HalPolicy::ConvertMean(const Operation& operation, const Model& model, ConversionData& data)
383 {
384     ALOGV("hal_1_3::HalPolicy::ConvertMean()");
385     return ::ConvertMean<hal_1_3::HalPolicy>(operation, model, data);
386 }
387 
ConvertPad(const Operation & operation,const Model & model,ConversionData & data)388 bool HalPolicy::ConvertPad(const Operation& operation, const Model& model, ConversionData& data)
389 {
390     ALOGV("hal_1_3::HalPolicy::ConvertPad()");
391     return ::ConvertPad<hal_1_3::HalPolicy>(operation, model, data);
392 }
393 
ConvertPadV2(const Operation & operation,const Model & model,ConversionData & data)394 bool HalPolicy::ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data)
395 {
396     ALOGV("hal_1_3::HalPolicy::ConvertPadV2()");
397     return ::ConvertPadV2<hal_1_3::HalPolicy>(operation, model, data);
398 }
399 
ConvertPrelu(const Operation & operation,const Model & model,ConversionData & data)400 bool HalPolicy::ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data)
401 {
402     ALOGV("hal_1_3::HalPolicy::ConvertPrelu()");
403     return ::ConvertPrelu<hal_1_3::HalPolicy>(operation, model, data);
404 }
405 
ConvertQuantize(const Operation & operation,const Model & model,ConversionData & data)406 bool HalPolicy::ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data)
407 {
408     ALOGV("hal_1_3::HalPolicy::ConvertQuantize()");
409     return ::ConvertQuantize<hal_1_3::HalPolicy>(operation, model, data);
410 }
411 
ConvertQuantizedLstm(const Operation & operation,const Model & model,ConversionData & data)412 bool HalPolicy::ConvertQuantizedLstm(const Operation& operation, const Model& model, ConversionData& data)
413 {
414     ALOGV("hal_1_3::HalPolicy::ConvertQuantizedLstm()");
415     return ::ConvertQuantizedLstm<hal_1_3::HalPolicy>(operation, model, data);
416 }
417 
ConvertQuantized16BitLstm(const Operation & operation,const Model & model,ConversionData & data)418 bool HalPolicy::ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data)
419 {
420     ALOGV("hal_1_3::HalPolicy::ConvertQuantized16BitLstm()");
421     return ::ConvertQuantized16BitLstm<hal_1_3::HalPolicy>(operation, model, data);
422 }
423 
ConvertRank(const Operation & operation,const Model & model,ConversionData & data)424 bool HalPolicy::ConvertRank(const Operation& operation, const Model& model, ConversionData& data)
425 {
426     ALOGV("hal_1_3::HalPolicy::ConvertRank()");
427     return ::ConvertRank<hal_1_3::HalPolicy>(operation, model, data);
428 }
429 
ConvertReduce(const Operation & operation,const Model & model,ConversionData & data,ReduceOperation reduceOperation)430 bool HalPolicy::ConvertReduce(const Operation& operation,
431                               const Model& model,
432                               ConversionData& data,
433                               ReduceOperation reduceOperation)
434 {
435     ALOGV("hal_1_3::HalPolicy::ConvertReduce()");
436     return ::ConvertReduce<hal_1_3::HalPolicy>(operation, model, data, reduceOperation);
437 }
438 
ConvertReLu(const Operation & operation,const Model & model,ConversionData & data)439 bool HalPolicy::ConvertReLu(const Operation& operation, const Model& model, ConversionData& data)
440 {
441     ALOGV("hal_1_3::HalPolicy::ConvertReLu()");
442     return ::ConvertReLu<hal_1_3::HalPolicy>(operation, model, data);
443 }
444 
ConvertReLu1(const Operation & operation,const Model & model,ConversionData & data)445 bool HalPolicy::ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data)
446 {
447     ALOGV("hal_1_3::HalPolicy::ConvertReLu1()");
448     return ::ConvertReLu1<hal_1_3::HalPolicy>(operation, model, data);
449 }
450 
ConvertReLu6(const Operation & operation,const Model & model,ConversionData & data)451 bool HalPolicy::ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data)
452 {
453     ALOGV("hal_1_3::HalPolicy::ConvertReLu6()");
454     return ::ConvertReLu6<hal_1_3::HalPolicy>(operation, model, data);
455 }
456 
ConvertReshape(const Operation & operation,const Model & model,ConversionData & data)457 bool HalPolicy::ConvertReshape(const Operation& operation, const Model& model, ConversionData& data)
458 {
459     ALOGV("hal_1_3::HalPolicy::ConvertReshape()");
460     return ::ConvertReshape<hal_1_3::HalPolicy>(operation, model, data);
461 }
462 
ConvertResize(const Operation & operation,const Model & model,ConversionData & data,ResizeMethod resizeMethod)463 bool HalPolicy::ConvertResize(const Operation& operation,
464                               const Model& model,
465                               ConversionData& data,
466                               ResizeMethod resizeMethod)
467 {
468     ALOGV("hal_1_3::HalPolicy::ConvertResize()");
469     return ::ConvertResize<hal_1_3::HalPolicy>(operation, model, data, resizeMethod);
470 }
471 
ConvertSpaceToBatchNd(const Operation & operation,const Model & model,ConversionData & data)472 bool HalPolicy::ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data)
473 {
474     ALOGV("hal_1_3::HalPolicy::ConvertSpaceToBatchNd()");
475     return ::ConvertSpaceToBatchNd<hal_1_3::HalPolicy>(operation, model, data);
476 }
477 
ConvertSpaceToDepth(const Operation & operation,const Model & model,ConversionData & data)478 bool HalPolicy::ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data)
479 {
480     ALOGV("hal_1_3::HalPolicy::ConvertSpaceToDepth()");
481     return ::ConvertSpaceToDepth<hal_1_3::HalPolicy>(operation, model, data);
482 }
483 
ConvertSoftmax(const Operation & operation,const Model & model,ConversionData & data)484 bool HalPolicy::ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data)
485 {
486     ALOGV("hal_1_3::HalPolicy::ConvertSoftmax()");
487     return ::ConvertSoftmax<hal_1_3::HalPolicy>(operation, model, data);
488 }
489 
ConvertTanH(const Operation & operation,const Model & model,ConversionData & data)490 bool HalPolicy::ConvertTanH(const Operation& operation, const Model& model, ConversionData& data)
491 {
492     ALOGV("hal_1_3::HalPolicy::ConvertTanH()");
493     return ::ConvertTanH<hal_1_3::HalPolicy>(operation, model, data);
494 }
495 
ConvertTransposeConv2d(const Operation & operation,const Model & model,ConversionData & data)496 bool HalPolicy::ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data)
497 {
498     ALOGV("hal_1_3::HalPolicy::ConvertTransposeConv2d()");
499     return ::ConvertTransposeConv2d<hal_1_3::HalPolicy>(operation, model, data);
500 }
501 
ConvertSqrt(const Operation & operation,const Model & model,ConversionData & data)502 bool HalPolicy::ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data)
503 {
504     ALOGV("hal_1_3::HalPolicy::ConvertSqrt()");
505     ActivationDescriptor desc;
506     desc.m_Function = ActivationFunction::Sqrt;
507 
508     return ::ConvertToActivation<hal_1_3::HalPolicy>(operation, __func__, desc, model, data);
509 }
510 
ConvertSqueeze(const Operation & operation,const Model & model,ConversionData & data)511 bool HalPolicy::ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data)
512 {
513     ALOGV("hal_1_3::HalPolicy::ConvertSqueeze()");
514     return ::ConvertSqueeze<hal_1_3::HalPolicy>(operation, model, data);
515 }
516 
ConvertStridedSlice(const Operation & operation,const Model & model,ConversionData & data)517 bool HalPolicy::ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data)
518 {
519     ALOGV("hal_1_3::HalPolicy::ConvertStridedSlice()");
520     return ::ConvertStridedSlice<hal_1_3::HalPolicy>(operation, model, data);
521 }
522 
ConvertTranspose(const Operation & operation,const Model & model,ConversionData & data)523 bool HalPolicy::ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data)
524 {
525     ALOGV("hal_1_3::HalPolicy::ConvertTranspose()");
526     return ::ConvertTranspose<hal_1_3::HalPolicy>(operation, model, data);
527 }
528 
ConvertUnidirectionalSequenceLstm(const Operation & operation,const Model & model,ConversionData & data)529 bool HalPolicy::ConvertUnidirectionalSequenceLstm(const Operation& operation, const Model& model, ConversionData& data)
530 {
531     ALOGV("hal_1_3::HalPolicy::ConvertUnidirectionalSequenceLstm()");
532     return ::ConvertUnidirectionalSequenceLstm<hal_1_3::HalPolicy>(operation, model, data);
533 }
534 
535 } // namespace hal_1_3
536 } // namespace armnn_driver
537