aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_proc.cpp
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-08-08 11:10:01 +0100
committergingerBill <gingerBill@users.noreply.github.com>2025-08-08 11:10:01 +0100
commit8c1eda3e3a112ac1475674f306ac876cebdd762a (patch)
treea8c727b4e39f66edcd0aa2c359c8171036e36527 /src/llvm_backend_proc.cpp
parent7b5cee9f1e6f6048d8689dbdf959409bd4073b3b (diff)
Handle `fixed_point_div` and `fixed_point_div_sat`
Diffstat (limited to 'src/llvm_backend_proc.cpp')
-rw-r--r--src/llvm_backend_proc.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp
index 04dcc6662..f2e6662c8 100644
--- a/src/llvm_backend_proc.cpp
+++ b/src/llvm_backend_proc.cpp
@@ -3302,16 +3302,22 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
}
GB_ASSERT(name != nullptr);
- LLVMTypeRef types[1] = {lb_type(p->module, platform_type)};
lbValue res = {};
+ res.type = platform_type;
+
+ if (id == BuiltinProc_fixed_point_div ||
+ id == BuiltinProc_fixed_point_div_sat) {
+ res.value = lb_integer_division_intrinsics(p, x.value, y.value, scale.value, platform_type, name);
+ } else {
+ LLVMTypeRef types[1] = {lb_type(p->module, platform_type)};
- LLVMValueRef args[3] = {
+ LLVMValueRef args[3] = {
x.value,
y.value,
scale.value };
- res.value = lb_call_intrinsic(p, name, args, gb_count_of(args), types, gb_count_of(types));
- res.type = platform_type;
+ res.value = lb_call_intrinsic(p, name, args, gb_count_of(args), types, gb_count_of(types));
+ }
return lb_emit_conv(p, res, tv.type);
}