frac32buffer in
frac32 range
frac32 direction
frac32 mix
frac32buffer out
frac32.s.map range
frac32.s.map direction
frac32.u.map mix
int32_t mix = (param_mix + inlet_mix);
mix = mix > 0 ? mix : -mix;
mix = mix > (1 << 27) ? (2 << 27) - mix : mix;
int32_t miix = mix << 3;
mix = ((1 << 27) - mix) << 3;
int32_t param = param_range + inlet_range;
int32_t direction = param_direction + inlet_direction;
param = param == 0 ? param + 1 : param;
int32_t range = inlet_in / param;
int32_t left = inlet_in - range * param;
outlet_out = ___SMMUL((range * param +
___SMMUL(left << 3, ((1 << 27) + (direction << 1)) << 2))
<< 3,
miix) +
___SMMUL(mix, inlet_in << 2);