From 9601cbda5ff42dc4762e364d90093670931e1261 Mon Sep 17 00:00:00 2001 From: Eric Kunze Date: Thu, 17 Aug 2023 20:44:39 +0000 Subject: Add new signedness attributes to RESCALE Signed-off-by: Eric Kunze Change-Id: I96202b90bff833654735a2f2306eb782d202b6e6 --- include/attribute.def | 7 +++++-- include/attribute.h | 16 ++++++++++++++++ include/tosa_generated.h | 32 ++++++++++++++++++++++++++++---- python/tosa/RescaleAttribute.py | 28 +++++++++++++++++++++++++++- schema/tosa.fbs | 2 ++ src/tosa_serialization_handler.cpp | 10 ++++++++++ 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& 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(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& 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& 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(VT_INPUT_ZP, 0); @@ -1447,6 +1449,12 @@ struct RescaleAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { bool per_channel() const { return GetField(VT_PER_CHANNEL, 0) != 0; } + bool input_unsigned() const { + return GetField(VT_INPUT_UNSIGNED, 0) != 0; + } + bool output_unsigned() const { + return GetField(VT_OUTPUT_UNSIGNED, 0) != 0; + } bool Verify(::flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && VerifyField(verifier, VT_INPUT_ZP, 4) && @@ -1458,6 +1466,8 @@ struct RescaleAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { VerifyField(verifier, VT_SCALE32, 1) && VerifyField(verifier, VT_DOUBLE_ROUND, 1) && VerifyField(verifier, VT_PER_CHANNEL, 1) && + VerifyField(verifier, VT_INPUT_UNSIGNED, 1) && + VerifyField(verifier, VT_OUTPUT_UNSIGNED, 1) && verifier.EndTable(); } }; @@ -1487,6 +1497,12 @@ struct RescaleAttributeBuilder { void add_per_channel(bool per_channel) { fbb_.AddElement(RescaleAttribute::VT_PER_CHANNEL, static_cast(per_channel), 0); } + void add_input_unsigned(bool input_unsigned) { + fbb_.AddElement(RescaleAttribute::VT_INPUT_UNSIGNED, static_cast(input_unsigned), 0); + } + void add_output_unsigned(bool output_unsigned) { + fbb_.AddElement(RescaleAttribute::VT_OUTPUT_UNSIGNED, static_cast(output_unsigned), 0); + } explicit RescaleAttributeBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); @@ -1506,12 +1522,16 @@ inline ::flatbuffers::Offset CreateRescaleAttribute( ::flatbuffers::Offset<::flatbuffers::Vector> 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 CreateRescaleAttributeDirect( const std::vector *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(*multiplier) : 0; auto shift__ = shift ? _fbb.CreateVector(*shift) : 0; return tosa::CreateRescaleAttribute( @@ -1537,7 +1559,9 @@ inline ::flatbuffers::Offset 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(); \ -- cgit v1.2.1