aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index f199974c8..4c8ccb6dd 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -4539,13 +4539,29 @@ irValue *ir_build_builtin_proc(irProcedure *proc, Ast *expr, TypeAndValue tv, Bu
case BuiltinProc_min: {
ir_emit_comment(proc, str_lit("min"));
Type *t = type_of_expr(expr);
- return ir_emit_min(proc, t, ir_build_expr(proc, ce->args[0]), ir_build_expr(proc, ce->args[1]));
+ if (ce->args.count == 2) {
+ return ir_emit_min(proc, t, ir_build_expr(proc, ce->args[0]), ir_build_expr(proc, ce->args[1]));
+ } else {
+ irValue *x = ir_build_expr(proc, ce->args[0]);
+ for (isize i = 1; i < ce->args.count; i++) {
+ x = ir_emit_min(proc, t, x, ir_build_expr(proc, ce->args[i]));
+ }
+ return x;
+ }
}
case BuiltinProc_max: {
ir_emit_comment(proc, str_lit("max"));
Type *t = type_of_expr(expr);
- return ir_emit_max(proc, t, ir_build_expr(proc, ce->args[0]), ir_build_expr(proc, ce->args[1]));
+ if (ce->args.count == 2) {
+ return ir_emit_max(proc, t, ir_build_expr(proc, ce->args[0]), ir_build_expr(proc, ce->args[1]));
+ } else {
+ irValue *x = ir_build_expr(proc, ce->args[0]);
+ for (isize i = 1; i < ce->args.count; i++) {
+ x = ir_emit_max(proc, t, x, ir_build_expr(proc, ce->args[i]));
+ }
+ return x;
+ }
}
case BuiltinProc_abs: {