commit ee19503d4dd36ea615c78458c97f0132dd21686c (tree)
parent 2707757d9cc41b6c68ab07672da2d279b4b7fd64
Author: Motiejus Jakštys <motiejus@jakstys.lt>
Date: Mon, 16 Feb 2026 13:05:14 +0000
astgen.c: implement @mulAdd builtin handler
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat:
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/stage0/astgen.c b/stage0/astgen.c
@@ -5443,6 +5443,24 @@ static uint32_t builtinCallMultiArg(GenZir* gz, Scope* scope, ResultLoc rl,
}
// clang-format on
+ // @mulAdd — AstGen.zig:9592-9603.
+ // clang-format off
+ if (name_len == 6 && memcmp(source + name_start, "mulAdd", 6) == 0
+ && param_count == 4) {
+ uint32_t float_type = typeExpr(gz, scope, params[0]);
+ ResultLoc coerced_rl = { .tag = RL_COERCED_TY,
+ .data = float_type, .src_node = 0, .ctx = RI_CTX_NONE };
+ uint32_t mulend1 = exprRl(gz, scope, coerced_rl, params[1]);
+ uint32_t mulend2 = exprRl(gz, scope, coerced_rl, params[2]);
+ ResultLoc ty_rl = { .tag = RL_TY,
+ .data = float_type, .src_node = 0, .ctx = RI_CTX_NONE };
+ uint32_t addend = exprRl(gz, scope, ty_rl, params[3]);
+ uint32_t result = addPlNodeTriple(
+ gz, ZIR_INST_MUL_ADD, node, mulend1, mulend2, addend);
+ return rvalue(gz, rl, result, node);
+ }
+ // clang-format on
+
// @cmpxchgStrong / @cmpxchgWeak — AstGen.zig:9496-9497, 9884-9905.
// clang-format off
if (param_count == 6
diff --git a/stage0/astgen_test.zig b/stage0/astgen_test.zig
@@ -1263,7 +1263,7 @@ const corpus_files = .{
"../test/behavior/memmove.zig",
"../test/behavior/memset.zig",
"../test/behavior/merge_error_sets.zig",
- //"../test/behavior/muladd.zig",
+ "../test/behavior/muladd.zig",
//"../test/behavior/multiple_externs_with_conflicting_types.zig",
"../test/behavior/namespace_depends_on_compile_var.zig",
"../test/behavior/nan.zig",