1 !sum
2 # MulAdd — integer MLA and fused floating-point FMLA: Zda += Zn * Zm. Both are
3 # predicated-only and accumulating: the destination <Zda> is read as well as
4 # written but is not named among the assembly inputs, so the loader
5 # synthesizes the accumulator input (see the emitOne comment in sve/emit.go).
6 # operandOrder 231Type1 gives the NEON operand convention x.MulAdd(y, z) with
7 # the accumulator z last, while the machine op keeps it pinned first.
8 - go: MulAdd
9 asm: "ZMLA"
10 operandOrder: "231Type1"
11 documentation: !string |-
12 // NAME computes (x * y) + z.
13 in:
14 - &int
15 go: $t
16 base: int|uint
17 - *int
18 - *int
19 - class: mask # governing predicate
20 out:
21 - *int
22
23 - go: MulAdd
24 asm: "ZFMLA"
25 operandOrder: "231Type1"
26 documentation: !string |-
27 // NAME performs a fused (x * y) + z.
28 in:
29 - &fp
30 go: $t
31 base: float
32 - *fp
33 - *fp
34 - class: mask # governing predicate
35 out:
36 - *fp
37
View as plain text