From d06f176c98e569e2d7c836517bf9d86e78d4fe4b Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Mon, 24 Jun 2024 15:08:20 -0400 Subject: [PATCH] xo-jit: add sub/div intrinsics --- src/jit/MachPipeline.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/jit/MachPipeline.cpp b/src/jit/MachPipeline.cpp index f19d92b1..1352387a 100644 --- a/src/jit/MachPipeline.cpp +++ b/src/jit/MachPipeline.cpp @@ -419,15 +419,29 @@ namespace xo { ++i; } + /* if we have an intrinsic hint, + * then instead of invoking a function, + * we use some native machine instruction instead. + */ switch(intrinsic) { + case llvmintrinsic::i_neg: + return ir_builder.CreateNeg(args[0]); case llvmintrinsic::i_add: return ir_builder.CreateAdd(args[0], args[1]); + case llvmintrinsic::i_sub: + return ir_builder.CreateSub(args[0], args[1]); case llvmintrinsic::i_mul: return ir_builder.CreateMul(args[0], args[1]); + case llvmintrinsic::i_sdiv: + return ir_builder.CreateSDiv(args[0], args[1]); + case llvmintrinsic::i_udiv: + return ir_builder.CreateUDiv(args[0], args[1]); case llvmintrinsic::fp_add: return ir_builder.CreateFAdd(args[0], args[1]); case llvmintrinsic::fp_mul: return ir_builder.CreateFMul(args[0], args[1]); + case llvmintrinsic::fp_div: + return ir_builder.CreateFDiv(args[0], args[1]); case llvmintrinsic::invalid: case llvmintrinsic::fp_sqrt: case llvmintrinsic::fp_pow: