fminnmp

FMINNMP <Zdn>.<T>, <Pg>/M, <Zdn>.<T>, <Zm>.<T>

Floating-point Min Num Pairwise.

Pseudocode Operation

No pseudocode available.

Encoding

Binary Layout
01100100
31:24
size
23:22
010
21:19
10
18:17
1
16
100
15:13
Pg
12:10
Zm
9:5
Zdn
4:0
 
Format SVE2
Opcode 0x64158000
Extension SVE2

Related

More in SVE2

Reference

Instruction Forms

Encoding Instruction ISA Bit pattern
0x5EB0C800 FMINNMP H<d>, <Vn>.2H A64 01 | 0 | 11110 | 1 | 0 | 11000 | 01100 | 10 | Rn | Rd
0x7EB0C800 FMINNMP <V><d>, <Vn>.<T> A64 01 | 1 | 11110 | 1 | sz | 11000 | 01100 | 10 | Rn | Rd
0x2EC00400 FMINNMP <Vd>.<T>, <Vn>.<T>, <Vm>.<T> A64 0 | Q | 1 | 01110 | 1 | 10 | Rm | 00 | 000 | 1 | Rn | Rd
0x2EA0C400 FMINNMP <Vd>.<T>, <Vn>.<T>, <Vm>.<T> A64 0 | Q | 1 | 01110 | 1 | sz | 1 | Rm | 11000 | 1 | Rn | Rd
0x64158000 FMINNMP <Zdn>.<T>, <Pg>/M, <Zdn>.<T>, <Zm>.<T> A64 01100100 | size | 010 | 10 | 1 | 100 | Pg | Zm | Zdn

Description

Compute the minimum value of each pair of adjacent floating-point elements within each source vector, and interleave the results from corresponding lanes. The interleaved result values are destructively placed in the first source vector. Regardless of the value of FPCR.AH, the behavior is as follows for each pairwise operation:

Operation

CheckSVEEnabled();
constant integer VL = CurrentVL;
constant integer PL = VL DIV 8;
constant integer elements = VL DIV esize;
bits(PL) mask = P[g, PL];
bits(VL) operand1 = Z[dn, VL];
bits(VL) operand2 = if AnyActiveElement(mask, esize) then Z[m, VL] else Zeros(VL);
bits(VL) result = Z[dn, VL];
bits(esize) element1;
bits(esize) element2;

for e = 0 to elements-1
    if ActivePredicateElement(mask, e, esize) then
        if IsEven(e) then
            element1 = Elem[operand1, e + 0, esize];
            element2 = Elem[operand1, e + 1, esize];
        else
            element1 = Elem[operand2, e - 1, esize];
            element2 = Elem[operand2, e + 0, esize];
        Elem[result, e, esize] = FPMinNum(element1, element2, FPCR);

Z[dn, VL] = result;