aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Kunze <eric.kunze@arm.com>2023-08-17 20:44:39 +0000
committerEric Kunze <eric.kunze@arm.com>2023-09-07 00:16:49 +0000
commit9601cbda5ff42dc4762e364d90093670931e1261 (patch)
treeca64fc446f49e6dedb53cc3ceb879eb88f74aa2f
parentc4733b015781b044041955997f79c4667eb841a0 (diff)
downloadserialization_lib-9601cbda5ff42dc4762e364d90093670931e1261.tar.gz
Add new signedness attributes to RESCALE
Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I96202b90bff833654735a2f2306eb782d202b6e6
-rw-r--r--include/attribute.def7
-rw-r--r--include/attribute.h16
-rw-r--r--include/tosa_generated.h32
-rw-r--r--python/tosa/RescaleAttribute.py28
-rw-r--r--schema/tosa.fbs2
-rw-r--r--src/tosa_serialization_handler.cpp10
6 files changed, 88 insertions, 7 deletions
diff --git a/include/attribute.def b/include/attribute.def
index 9e4c461..b72f65a 100644
--- a/include/attribute.def
+++ b/include/attribute.def
@@ -78,14 +78,16 @@ DEF_ATTRIBUTE(Clamp, 4,
float, S, min_fp,
float, S, max_fp)
-DEF_ATTRIBUTE(Rescale, 7,
+DEF_ATTRIBUTE(Rescale, 9,
int32_t, S, input_zp,
int32_t, S, output_zp,
int32_t, V, multiplier,
int32_t, V, shift,
bool, S, scale32,
bool, S, double_round,
- bool, S, per_channel)
+ bool, S, per_channel,
+ bool, S, input_unsigned,
+ bool, S, output_unsigned)
DEF_ATTRIBUTE(Mul, 1,
int32_t, S, shift)
@@ -126,3 +128,4 @@ DEF_ATTRIBUTE(Custom, 3,
DEF_ATTRIBUTE(FFT, 1,
bool, S, inverse)
+
diff --git a/include/attribute.h b/include/attribute.h
index 1a19f62..d6c96a4 100644
--- a/include/attribute.h
+++ b/include/attribute.h
@@ -130,6 +130,18 @@ inline int convertFlatbuffersU8toF32(const flatbuffers::Vector<uint8_t>& in, uin
DEF_ARGS_##VER(FALSE, T3, F3, V3) DEF_ARGS_##VER(FALSE, T4, F4, V4) DEF_ARGS_##VER(FALSE, T5, F5, V5) \
DEF_ARGS_##VER(FALSE, T6, F6, V6)
+#define DEF_ARGS_8(VER, T0, F0, V0, T1, F1, V1, T2, F2, V2, T3, F3, V3, T4, F4, V4, T5, F5, V5, T6, F6, V6, T7, F7, \
+ V7) \
+ DEF_ARGS_##VER(TRUE, T0, F0, V0) DEF_ARGS_##VER(FALSE, T1, F1, V1) DEF_ARGS_##VER(FALSE, T2, F2, V2) \
+ DEF_ARGS_##VER(FALSE, T3, F3, V3) DEF_ARGS_##VER(FALSE, T4, F4, V4) DEF_ARGS_##VER(FALSE, T5, F5, V5) \
+ DEF_ARGS_##VER(FALSE, T6, F6, V6) DEF_ARGS_##VER(FALSE, T7, F7, V7)
+
+#define DEF_ARGS_9(VER, T0, F0, V0, T1, F1, V1, T2, F2, V2, T3, F3, V3, T4, F4, V4, T5, F5, V5, T6, F6, V6, T7, F7, \
+ V7, T8, F8, V8) \
+ DEF_ARGS_##VER(TRUE, T0, F0, V0) DEF_ARGS_##VER(FALSE, T1, F1, V1) DEF_ARGS_##VER(FALSE, T2, F2, V2) \
+ DEF_ARGS_##VER(FALSE, T3, F3, V3) DEF_ARGS_##VER(FALSE, T4, F4, V4) DEF_ARGS_##VER(FALSE, T5, F5, V5) \
+ DEF_ARGS_##VER(FALSE, T6, F6, V6) DEF_ARGS_##VER(FALSE, T7, F7, V7) DEF_ARGS_##VER(FALSE, T8, F8, V8)
+
#define DEF_VER0_VAR_DECL_PTR(NAME) const NAME* p = static_cast<const NAME*>(options);
#define DEF_VER0_VAR_0(NAME)
#define DEF_VER0_VAR_1(NAME) DEF_VER0_VAR_DECL_PTR(NAME)
@@ -139,6 +151,8 @@ inline int convertFlatbuffersU8toF32(const flatbuffers::Vector<uint8_t>& in, uin
#define DEF_VER0_VAR_5(NAME) DEF_VER0_VAR_DECL_PTR(NAME)
#define DEF_VER0_VAR_6(NAME) DEF_VER0_VAR_DECL_PTR(NAME)
#define DEF_VER0_VAR_7(NAME) DEF_VER0_VAR_DECL_PTR(NAME)
+#define DEF_VER0_VAR_8(NAME) DEF_VER0_VAR_DECL_PTR(NAME)
+#define DEF_VER0_VAR_9(NAME) DEF_VER0_VAR_DECL_PTR(NAME)
#define DEF_ATTRIBUTE(NAME, NUM_ARGS, ...) \
class Tosa##NAME##Attribute : public TosaAttributeBase \
@@ -174,6 +188,8 @@ inline int convertFlatbuffersU8toF32(const flatbuffers::Vector<uint8_t>& in, uin
#undef DEF_ARGS_5
#undef DEF_ARGS_6
#undef DEF_ARGS_7
+#undef DEF_ARGS_8
+#undef DEF_ARGS_9
#undef DEF_ARGS_VER0
#undef DEF_ARGS_VER1
#undef DEF_ARGS_VER2
diff --git a/include/tosa_generated.h b/include/tosa_generated.h
index 2995c3a..b07fa8f 100644
--- a/include/tosa_generated.h
+++ b/include/tosa_generated.h
@@ -1424,7 +1424,9 @@ struct RescaleAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
VT_SHIFT = 10,
VT_SCALE32 = 12,
VT_DOUBLE_ROUND = 14,
- VT_PER_CHANNEL = 16
+ VT_PER_CHANNEL = 16,
+ VT_INPUT_UNSIGNED = 18,
+ VT_OUTPUT_UNSIGNED = 20
};
int32_t input_zp() const {
return GetField<int32_t>(VT_INPUT_ZP, 0);
@@ -1447,6 +1449,12 @@ struct RescaleAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
bool per_channel() const {
return GetField<uint8_t>(VT_PER_CHANNEL, 0) != 0;
}
+ bool input_unsigned() const {
+ return GetField<uint8_t>(VT_INPUT_UNSIGNED, 0) != 0;
+ }
+ bool output_unsigned() const {
+ return GetField<uint8_t>(VT_OUTPUT_UNSIGNED, 0) != 0;
+ }
bool Verify(::flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int32_t>(verifier, VT_INPUT_ZP, 4) &&
@@ -1458,6 +1466,8 @@ struct RescaleAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
VerifyField<uint8_t>(verifier, VT_SCALE32, 1) &&
VerifyField<uint8_t>(verifier, VT_DOUBLE_ROUND, 1) &&
VerifyField<uint8_t>(verifier, VT_PER_CHANNEL, 1) &&
+ VerifyField<uint8_t>(verifier, VT_INPUT_UNSIGNED, 1) &&
+ VerifyField<uint8_t>(verifier, VT_OUTPUT_UNSIGNED, 1) &&
verifier.EndTable();
}
};
@@ -1487,6 +1497,12 @@ struct RescaleAttributeBuilder {
void add_per_channel(bool per_channel) {
fbb_.AddElement<uint8_t>(RescaleAttribute::VT_PER_CHANNEL, static_cast<uint8_t>(per_channel), 0);
}
+ void add_input_unsigned(bool input_unsigned) {
+ fbb_.AddElement<uint8_t>(RescaleAttribute::VT_INPUT_UNSIGNED, static_cast<uint8_t>(input_unsigned), 0);
+ }
+ void add_output_unsigned(bool output_unsigned) {
+ fbb_.AddElement<uint8_t>(RescaleAttribute::VT_OUTPUT_UNSIGNED, static_cast<uint8_t>(output_unsigned), 0);
+ }
explicit RescaleAttributeBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
@@ -1506,12 +1522,16 @@ inline ::flatbuffers::Offset<RescaleAttribute> CreateRescaleAttribute(
::flatbuffers::Offset<::flatbuffers::Vector<int32_t>> shift = 0,
bool scale32 = false,
bool double_round = false,
- bool per_channel = false) {
+ bool per_channel = false,
+ bool input_unsigned = false,
+ bool output_unsigned = false) {
RescaleAttributeBuilder builder_(_fbb);
builder_.add_shift(shift);
builder_.add_multiplier(multiplier);
builder_.add_output_zp(output_zp);
builder_.add_input_zp(input_zp);
+ builder_.add_output_unsigned(output_unsigned);
+ builder_.add_input_unsigned(input_unsigned);
builder_.add_per_channel(per_channel);
builder_.add_double_round(double_round);
builder_.add_scale32(scale32);
@@ -1526,7 +1546,9 @@ inline ::flatbuffers::Offset<RescaleAttribute> CreateRescaleAttributeDirect(
const std::vector<int32_t> *shift = nullptr,
bool scale32 = false,
bool double_round = false,
- bool per_channel = false) {
+ bool per_channel = false,
+ bool input_unsigned = false,
+ bool output_unsigned = false) {
auto multiplier__ = multiplier ? _fbb.CreateVector<int32_t>(*multiplier) : 0;
auto shift__ = shift ? _fbb.CreateVector<int32_t>(*shift) : 0;
return tosa::CreateRescaleAttribute(
@@ -1537,7 +1559,9 @@ inline ::flatbuffers::Offset<RescaleAttribute> CreateRescaleAttributeDirect(
shift__,
scale32,
double_round,
- per_channel);
+ per_channel,
+ input_unsigned,
+ output_unsigned);
}
struct MulAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
diff --git a/python/tosa/RescaleAttribute.py b/python/tosa/RescaleAttribute.py
index beec2e7..320c119 100644
--- a/python/tosa/RescaleAttribute.py
+++ b/python/tosa/RescaleAttribute.py
@@ -117,8 +117,22 @@ class RescaleAttribute(object):
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
+ # RescaleAttribute
+ def InputUnsigned(self):
+ o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
+ if o != 0:
+ return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
+ return False
+
+ # RescaleAttribute
+ def OutputUnsigned(self):
+ o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
+ if o != 0:
+ return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
+ return False
+
def RescaleAttributeStart(builder):
- builder.StartObject(7)
+ builder.StartObject(9)
def Start(builder):
RescaleAttributeStart(builder)
@@ -177,6 +191,18 @@ def RescaleAttributeAddPerChannel(builder, perChannel):
def AddPerChannel(builder, perChannel):
RescaleAttributeAddPerChannel(builder, perChannel)
+def RescaleAttributeAddInputUnsigned(builder, inputUnsigned):
+ builder.PrependBoolSlot(7, inputUnsigned, 0)
+
+def AddInputUnsigned(builder, inputUnsigned):
+ RescaleAttributeAddInputUnsigned(builder, inputUnsigned)
+
+def RescaleAttributeAddOutputUnsigned(builder, outputUnsigned):
+ builder.PrependBoolSlot(8, outputUnsigned, 0)
+
+def AddOutputUnsigned(builder, outputUnsigned):
+ RescaleAttributeAddOutputUnsigned(builder, outputUnsigned)
+
def RescaleAttributeEnd(builder):
return builder.EndObject()
diff --git a/schema/tosa.fbs b/schema/tosa.fbs
index 9033351..c2f834f 100644
--- a/schema/tosa.fbs
+++ b/schema/tosa.fbs
@@ -216,6 +216,8 @@ table RescaleAttribute {
scale32: bool;
double_round: bool;
per_channel: bool;
+ input_unsigned: bool;
+ output_unsigned: bool;
}
table MulAttribute {
diff --git a/src/tosa_serialization_handler.cpp b/src/tosa_serialization_handler.cpp
index ef4547a..7e96313 100644
--- a/src/tosa_serialization_handler.cpp
+++ b/src/tosa_serialization_handler.cpp
@@ -652,6 +652,16 @@ tosa_err_t TosaSerializationHandler::Serialize()
#define DEF_ARGS_7(NAME, T0, F0, V0, T1, F1, V1, T2, F2, V2, T3, F3, V3, T4, F4, V4, T5, F5, V5, T6, F6, V6) \
DEF_ARGS_##F0(NAME, T0, V0) DEF_ARGS_##F1(NAME, T1, V1) DEF_ARGS_##F2(NAME, T2, V2) DEF_ARGS_##F3(NAME, T3, V3) \
DEF_ARGS_##F4(NAME, T4, V4) DEF_ARGS_##F5(NAME, T5, V5) DEF_ARGS_##F6(NAME, T6, V6)
+#define DEF_ARGS_8(NAME, T0, F0, V0, T1, F1, V1, T2, F2, V2, T3, F3, V3, T4, F4, V4, T5, F5, V5, T6, F6, V6, T7, F7, \
+ V7) \
+ DEF_ARGS_##F0(NAME, T0, V0) DEF_ARGS_##F1(NAME, T1, V1) DEF_ARGS_##F2(NAME, T2, V2) DEF_ARGS_##F3(NAME, T3, V3) \
+ DEF_ARGS_##F4(NAME, T4, V4) DEF_ARGS_##F5(NAME, T5, V5) DEF_ARGS_##F6(NAME, T6, V6) \
+ DEF_ARGS_##F7(NAME, T7, V7)
+#define DEF_ARGS_9(NAME, T0, F0, V0, T1, F1, V1, T2, F2, V2, T3, F3, V3, T4, F4, V4, T5, F5, V5, T6, F6, V6, T7, F7, \
+ V7, T8, F8, V8) \
+ DEF_ARGS_##F0(NAME, T0, V0) DEF_ARGS_##F1(NAME, T1, V1) DEF_ARGS_##F2(NAME, T2, V2) DEF_ARGS_##F3(NAME, T3, V3) \
+ DEF_ARGS_##F4(NAME, T4, V4) DEF_ARGS_##F5(NAME, T5, V5) DEF_ARGS_##F6(NAME, T6, V6) \
+ DEF_ARGS_##F7(NAME, T7, V7) DEF_ARGS_##F8(NAME, T8, V8)
#define DEF_ATTRIBUTE(NAME, NUM_ARGS, ...) \
case Attribute_##NAME##Attribute: \
fb_attribute = Create##NAME##Attribute(_builder DEF_ARGS_##NUM_ARGS(NAME##Attribute, __VA_ARGS__)).Union(); \