Skip to content

Commit 793438c

Browse files
author
Github Executorch
committed
Summary: Minor cleanup post quantized_add op
Test Plan: examples/arm/run.sh --et_build_root=arm_test/test_run --target=ethos-u55-128 --model_name=qadd2 --no_delegate Reviewers: Subscribers: Tasks: Tags:
1 parent 2107afa commit 793438c

File tree

2 files changed

+30
-18
lines changed

2 files changed

+30
-18
lines changed

backends/cortex_m/ops/cortex_m_ops_common.h

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@
1717
#include <executorch/runtime/kernel/kernel_includes.h>
1818
#include <executorch/runtime/platform/assert.h>
1919

20-
// Include CMSIS-NN headers with C linkage
21-
extern "C" {
22-
#include "arm_nnfunctions.h"
23-
}
24-
2520
using Tensor = torch::executor::Tensor;
2621
using ScalarType = executorch::aten::ScalarType;
2722
using Scalar = torch::executor::Scalar;
@@ -139,3 +134,19 @@ inline Error resize_to_broadcast_target_size(
139134
return executorch::runtime::resize_tensor(
140135
output, {expected_output_size, expected_output_dim});
141136
}
137+
138+
/**
139+
* Convert Scalar to CMSIS-NN int32 format
140+
* For multipliers, zero_points, etc. from quantize_multiplier_aot
141+
*/
142+
inline int32_t extractScalarToInt32(const Scalar& scalar_value) {
143+
return static_cast<int32_t>(scalar_value.to<int64_t>());
144+
}
145+
146+
/**
147+
* Convert Scalar to CMSIS-NN int format
148+
* For shift values from quantize_multiplier_aot
149+
*/
150+
inline int extractScalarToInt(const Scalar& scalar_value) {
151+
return static_cast<int>(scalar_value.to<int64_t>());
152+
}

backends/cortex_m/ops/op_quantized_add.cpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88

99
#include "cortex_m_ops_common.h"
1010

11+
// Include CMSIS-NN headers with C linkage
12+
extern "C" {
13+
#include "arm_nnfunctions.h"
14+
}
15+
1116
namespace cortex_m {
1217
namespace native {
1318
using KernelRuntimeContext = torch::executor::KernelRuntimeContext;
@@ -54,19 +59,15 @@ Tensor& quantized_add_out(
5459
"quantized_add_out: input1_int8.sizes() = %zu",
5560
input1_int8.sizes().size());
5661

57-
// FIX: Use template types that ExecutorTorch definitely provides
58-
// Use to<int64_t>() and to<double>() which are commonly instantiated
59-
int32_t zp1 = static_cast<int32_t>(input1_zero_point.to<int64_t>());
60-
int32_t input1_mult = static_cast<int32_t>(input1_multiplier.to<int64_t>());
61-
int input1_shift_val = static_cast<int>(input1_shift.to<int64_t>());
62-
63-
int32_t zp2 = static_cast<int32_t>(input2_zero_point.to<int64_t>());
64-
int32_t input2_mult = static_cast<int32_t>(input2_multiplier.to<int64_t>());
65-
int input2_shift_val = static_cast<int>(input2_shift.to<int64_t>());
66-
67-
int32_t out_zp = static_cast<int32_t>(output_zero_point.to<int64_t>());
68-
int32_t output_mult = static_cast<int32_t>(output_multiplier.to<int64_t>());
69-
int output_shift_val = static_cast<int>(output_shift.to<int64_t>());
62+
int32_t zp1 = extractScalarToInt32(input1_zero_point);
63+
int32_t input1_mult = extractScalarToInt32(input1_multiplier);
64+
int input1_shift_val = extractScalarToInt(input1_shift);
65+
int32_t zp2 = extractScalarToInt32(input2_zero_point);
66+
int32_t input2_mult = extractScalarToInt32(input2_multiplier);
67+
int input2_shift_val = extractScalarToInt(input2_shift);
68+
int32_t out_zp = extractScalarToInt32(output_zero_point);
69+
int32_t output_mult = extractScalarToInt32(output_multiplier);
70+
int output_shift_val = extractScalarToInt(output_shift);
7071

7172
// Left shift to maximize precision (tune as needed)
7273
const int32_t left_shift = 20;

0 commit comments

Comments
 (0)