232 {
234
235 return gen->createFunction(
238 auto* x = args[0];
239
240 auto* exp_hi = gen->getConstant(88.3762626647949F);
241 auto* exp_lo = gen->getConstant(-88.3762626647949F);
242 auto* log2e = gen->getConstant(std::numbers::log2e_v<float>);
243 auto* exp_p0 = gen->getConstant(1.9875691500E-4F);
244 auto* exp_p1 = gen->getConstant(1.3981999507E-3F);
245 auto* exp_p2 = gen->getConstant(8.3334519073E-3F);
246 auto* exp_p3 = gen->getConstant(4.1665795894E-2F);
247 auto* exp_p4 = gen->getConstant(1.6666665459E-1F);
248 auto* exp_p5 = gen->getConstant(5.0000001201E-1F);
249 auto* half = gen->getConstant(0.5F);
250 auto* one = gen->getConstant(1.0F);
251 auto* neg_exp_c1 = gen->getConstant(-0.693359375F);
252 auto* neg_exp_c2 = gen->getConstant(2.12194440e-4F);
253 auto* const_0x7f = gen->getInt32Constant(0x7F);
254 auto* const_23 = gen->getInt32Constant(23);
255
256 x = gen->createIntrinsicCall(llvm::Intrinsic::minnum,
257 {x, exp_hi});
268 gen->builder.CreateBitCast(
one,
gen->getInt32Type());
277 auto*
z =
gen->builder.CreateFMul(
x,
x);
290 y =
gen->builder.CreateFAdd(
y,
one);
298 gen->builder.CreateBitCast(
emm0,
gen->getFloatType());
301 });
302 }
constexpr MathopInfo get_math_op_info(MathOp op)