diff --git a/stage0/astgen.c b/stage0/astgen.c index 80abb16522..019792336b 100644 --- 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 index 06bb5e7526..03e5be9211 100644 --- 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",