# stage2: rework \`@mulAdd\` · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/71b8760d3b145c92dc6e331aefff7dac5cabebeb)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: 71b8760d3b145c92dc6e331aefff7dac5cabebeb

Requested commit: 71b8760d3b145c92dc6e331aefff7dac5cabebeb

Commit: 71b8760d3b145c92dc6e331aefff7dac5cabebeb

Tree: 66b92748616634b689eb5c984f143042132d5e6c

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
stage2: rework `@mulAdd`

 * mul_add AIR instruction: use `pl_op` instead of `ty_pl`. The type is
   always the same as the operand; no need to waste bytes redundantly
   storing the type.
 * AstGen: use coerced_ty for all the operands except for one which we
   use to communicate the type.
 * Sema: use the correct source location for requireRuntimeBlock in
   handling of `@mulAdd`.
 * native backends: handle liveness even for the functions that are
   TODO.
 * C backend: implement `@mulAdd`. It lowers to libc calls.
 * LLVM backend: make `@mulAdd` handle all float types.
   - improved fptrunc and fpext to handle f80 with compiler-rt calls.
 * Value.mulAdd: handle all float types and use the `@mulAdd` builtin.
 * behavior tests: revert the changes to testing `@mulAdd`. These
   changes broke the test coverage, making it only tested at
   compile-time.

Improved f80 support:
 * std.math.fma handles f80
 * move fma functions from freestanding libc to compiler-rt
   - add __fmax and fmal
   - make __fmax and fmaq only exported when they don't alias fmal.
   - make their linkage weak just like the rest of compiler-rt symbols.
 * removed `longDoubleIsF128` and replaced it with `longDoubleIs` which
   takes a type as a parameter. The implementation is now more accurate
   and handles more targets. Similarly, in stage2 the function
   CTypes.sizeInBits is more accurate for long double for more targets.

```

## Parents

- [6637335981f7179b449fced78cfd4052b1618051](https://git.cafe/gitcafe/zig/commit/6637335981f7179b449fced78cfd4052b1618051?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/71b8760d3b145c92dc6e331aefff7dac5cabebeb?format=markdown)
