| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef TENSORFLOW_LITE_MICRO_KERNELS_ADD_H_ |
| #define TENSORFLOW_LITE_MICRO_KERNELS_ADD_H_ |
|
|
| #include <cstdint> |
|
|
| #include "edge-impulse-sdk/tensorflow/lite/c/builtin_op_data.h" |
| #include "edge-impulse-sdk/tensorflow/lite/c/common.h" |
|
|
| namespace tflite { |
|
|
| extern const int kAddInputTensor1; |
| extern const int kAddInputTensor2; |
| extern const int kAddOutputTensor; |
|
|
| struct OpDataAdd { |
| bool requires_broadcast; |
|
|
| |
| |
| int input1_shift; |
| int input2_shift; |
| int32_t output_activation_min; |
| int32_t output_activation_max; |
|
|
| |
| int32_t input1_multiplier; |
| int32_t input2_multiplier; |
| int32_t output_multiplier; |
| int output_shift; |
| int left_shift; |
| int32_t input1_offset; |
| int32_t input2_offset; |
| int32_t output_offset; |
|
|
| |
| float output_activation_min_f32; |
| float output_activation_max_f32; |
| }; |
|
|
| TfLiteStatus CalculateOpDataAdd(TfLiteContext* context, TfLiteAddParams* params, |
| const TfLiteTensor* input1, |
| const TfLiteTensor* input2, |
| TfLiteTensor* output, OpDataAdd* data); |
|
|
| TfLiteStatus AddPrepare(TfLiteContext* context, TfLiteNode* node); |
|
|
| |
| TfLiteRegistration Register_ADD(); |
|
|
| #if defined(CMSIS_NN) |
| TfLiteRegistration Register_ADD_INT8(); |
|
|
| TfLiteRegistration Register_ADD_INT16(); |
| #else |
| |
| inline TfLiteRegistration Register_ADD_INT8() { return Register_ADD(); } |
|
|
| inline TfLiteRegistration Register_ADD_INT16() { return Register_ADD(); } |
| #endif |
| } |
|
|
| #endif |
|
|