fabs
SVE Floating-Point Absolute Value
FABS <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
Calculates absolute value of floats.
Details
SVE floating-point absolute value: computes the absolute value of each active element in Zdn and stores the result back in Zdn, clearing the sign bit. Elements where the predicate is false are left unchanged. No condition flags or floating-point exceptions are affected. This is an SVE-only instruction.
Pseudocode Operation
for i = 0 to VL-1
if Pg[i] == '1' then
Zdn[i] ← FPAbs(Zdn[i])
// else Zdn[i] unchanged
Example
FABS z0.s.T, p0/m/M, z0.s.T
Encoding
Binary Layout
00000100
size
011
10
0
101
Pg
Zn
Zd
Operands
-
Zdn
Combined destination/source scalable vector register (SVE) -
Pg
Mask
Reference (Arm A64 ISA)
Instruction Forms
| Encoding | Instruction | ISA | Bit pattern | ||
|---|---|---|---|---|---|
| 0x0EF8F800 | FABS <Vd>.<T>, <Vn>.<T> | A64 | 0 | Q | 0 | 01110 | 1 | 111100 | 01111 | 10 | Rn | Rd | ||
| 0x0EA0F800 | FABS <Vd>.<T>, <Vn>.<T> | A64 | 0 | Q | 0 | 011101 | sz | 10000 | 01111 | 10 | Rn | Rd | ||
| 0x1EE0C000 | FABS <Hd>, <Hn> | A64 | 0 | 0 | 0 | 11110 | 11 | 10000 | 01 | 10000 | Rn | Rd | ||
| 0x1E20C000 | FABS <Sd>, <Sn> | A64 | 0 | 0 | 0 | 11110 | 00 | 10000 | 01 | 10000 | Rn | Rd | ||
| 0x1E60C000 | FABS <Dd>, <Dn> | A64 | 0 | 0 | 0 | 11110 | 01 | 10000 | 01 | 10000 | Rn | Rd | ||
| 0x041CA000 | FABS <Zd>.<T>, <Pg>/M, <Zn>.<T> | A64 | 00000100 | size | 011 | 10 | 0 | 101 | Pg | Zn | Zd |
Description
Take the absolute value of each active floating-point element of the source vector, and place the results in the corresponding elements of the destination vector. This clears the sign bit and cannot signal a floating-point exception. Inactive elements in the destination vector register remain unmodified.
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) operand = if AnyActiveElement(mask, esize) then Z[n, VL] else Zeros(VL);
bits(VL) result = Z[d, VL];
for e = 0 to elements-1
if ActivePredicateElement(mask, e, esize) then
bits(esize) element = Elem[operand, e, esize];
Elem[result, e, esize] = FPAbs(element, FPCR);
Z[d, VL] = result;