diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index e78f19c52f..45573ebb5b 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -379,8 +379,6 @@ foreach(FILE ${PULSES_SRC}) set(SRC ${SRC} pulses/${FILE}) endforeach() -add_definitions(-DCORRECT_NEGATIVE_SHIFTS) - if(NOT MSVC) set(WARNING_FLAGS "${WARNING_FLAGS} -Wall -Wno-address-of-packed-member -Wno-strict-aliasing -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits") if(WARNINGS_AS_ERRORS) diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index 01be3bc15a..0a72704062 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -261,16 +261,8 @@ int16_t applyLimits(uint8_t channel, int32_t value) value = (int32_t) value * tmp; // div by 1024*256 -> output = -1024..1024 #endif -#ifdef CORRECT_NEGATIVE_SHIFTS - int8_t sign = (value<0?1:0); - value -= sign; - tmp = value>>16; // that's quite tricky: the shiftright 16 operation is assmbled just with addressmove; just forget the two least significant bytes; - tmp >>= 2; // now one simple shift right for two bytes does the rest - tmp += sign; -#else - tmp = value>>16; // that's quite tricky: the shiftright 16 operation is assmbled just with addressmove; just forget the two least significant bytes; - tmp >>= 2; // now one simple shift right for two bytes does the rest -#endif + // Round away from 0 + tmp = (value + (value < 0 ? (1<<17)-1 : (1<<17))) >> 18; ofs += tmp; // ofs can to added directly because already recalculated, }