frac32 exp
frac32.positive in
frac32.positive out
frac32.s.map exp
int32 stack
int i;
int32_t expo[32];
int dir;
int32_t inexpo = __SSAT(param_exp + inlet_exp, 28);
dir = inexpo > 0 ? 1 : -1;
inexpo = inexpo > 0 ? inexpo : -inexpo;
int32_t inv = (1 << 27) - inexpo;
int dar;
dar = inlet_in > 0 ? 1 : -1;
int32_t pos = inlet_in > 0 ? inlet_in : -inlet_in;
if (dir > 0) {
expo[0] = ___SMMUL(pos << 3, (inv + ___SMMUL(inexpo << 3, pos << 2)) << 2);
}
if (dir < 0) {
expo[0] =
___SMMUL(((1 << 27) - pos) << 3,
(inv + ___SMMUL(inexpo << 3, ((1 << 27) - pos) << 2)) << 2);
}
for (i = 1; i <= param_stack; i++)
expo[i] = ___SMMUL(expo[i - 1] << 3,
(inv + ___SMMUL(inexpo << 3, expo[i - 1] << 2)) << 2);
if (dir > 0) {
outlet_out = expo[param_stack] * dar;
}
if (dir < 0) {
outlet_out = ((1 << 27) - expo[param_stack]) * dar;
}