def atan2_float_impl(context, builder, sig, args): assert len(args) == 2 mod = builder.module ty = sig.args[0] lty = context.get_value_type(ty) func_name = {types.float32: "atan2f", types.float64: "atan2"}[ty] fnty = Type.function(lty, (lty, lty)) fn = cgutils.insert_pure_function(builder.module, fnty, name=func_name) res = builder.call(fn, args) return impl_ret_untracked(context, builder, sig.return_type, res)
def ldexp_impl(context, builder, sig, args): val, exp = args fltty, intty = map(context.get_data_type, sig.args) fnty = Type.function(fltty, (fltty, intty)) fname = { "float": "numba_ldexpf", "double": "numba_ldexp", }[str(fltty)] fn = cgutils.insert_pure_function(builder.module, fnty, name=fname) res = builder.call(fn, (val, exp)) return impl_ret_untracked(context, builder, sig.return_type, res)
def float_impl(context, builder, sig, args): """ Implement *fn* for a types.Float input. """ [val] = args mod = builder.module input_type = sig.args[0] lty = context.get_value_type(input_type) func_name = { types.float32: f32extern, types.float64: f64extern, }[input_type] fnty = Type.function(lty, [lty]) fn = cgutils.insert_pure_function(builder.module, fnty, name=func_name) res = builder.call(fn, (val, )) res = context.cast(builder, res, input_type, sig.return_type) return impl_ret_untracked(context, builder, sig.return_type, res)