← Home

FRINT<r>

Floating-point round to integral value (predicated)

This instruction rounds to an integral floating-point value with the specified rounding option from each active floating-point element of the source vector, and places the results in the corresponding elements of the destination vector. Inactive elements in the destination vector register remain unmodified or are set to zero, depending on whether merging or zeroing predication is selected.

<r> Rounding Option
N to nearest, with ties to even
A to nearest, with ties away from zero
M toward minus Infinity
P toward plus Infinity
Z toward zero
I current FPCR rounding mode
X current FPCR rounding mode, signalling inexact

It has encodings from 14 classes: Current mode signalling inexact, merging , Current mode signalling inexact, zeroing , Current mode, merging , Current mode, zeroing , Nearest with ties to away, merging , Nearest with ties to away, zeroing , Nearest with ties to even, merging , Nearest with ties to even, zeroing , Toward zero, merging , Toward zero, zeroing , Toward minus infinity, merging , Toward minus infinity, zeroing , Toward plus infinity, merging and Toward plus infinity, zeroing

Current mode signalling inexact, merging class

(FEAT_SVE || FEAT_SME)

313029282726252423222120191817161514131211109876543210
01100101size000110101PgZnZd
opc

Encoding

FRINTX <Zd>.<T>, <Pg>/M, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = TRUE; constant FPRounding rounding = FPRoundingMode(FPCR); constant boolean merging = TRUE;

Current mode signalling inexact, zeroing class

(FEAT_SVE2p2 || FEAT_SME2p2)

313029282726252423222120191817161514131211109876543210
01100100size011001110PgZnZd
opopc2

Encoding

FRINTX <Zd>.<T>, <Pg>/Z, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE2p2) && !IsFeatureImplemented(FEAT_SME2p2) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = TRUE; constant FPRounding rounding = FPRoundingMode(FPCR); constant boolean merging = FALSE;

Current mode, merging class

(FEAT_SVE || FEAT_SME)

313029282726252423222120191817161514131211109876543210
01100101size000111101PgZnZd
opc

Encoding

FRINTI <Zd>.<T>, <Pg>/M, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRoundingMode(FPCR); constant boolean merging = TRUE;

Current mode, zeroing class

(FEAT_SVE2p2 || FEAT_SME2p2)

313029282726252423222120191817161514131211109876543210
01100100size011001111PgZnZd
opopc2

Encoding

FRINTI <Zd>.<T>, <Pg>/Z, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE2p2) && !IsFeatureImplemented(FEAT_SME2p2) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRoundingMode(FPCR); constant boolean merging = FALSE;

Nearest with ties to away, merging class

(FEAT_SVE || FEAT_SME)

313029282726252423222120191817161514131211109876543210
01100101size000100101PgZnZd
opc

Encoding

FRINTA <Zd>.<T>, <Pg>/M, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_TIEAWAY; constant boolean merging = TRUE;

Nearest with ties to away, zeroing class

(FEAT_SVE2p2 || FEAT_SME2p2)

313029282726252423222120191817161514131211109876543210
01100100size011001100PgZnZd
opopc2

Encoding

FRINTA <Zd>.<T>, <Pg>/Z, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE2p2) && !IsFeatureImplemented(FEAT_SME2p2) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_TIEAWAY; constant boolean merging = FALSE;

Nearest with ties to even, merging class

(FEAT_SVE || FEAT_SME)

313029282726252423222120191817161514131211109876543210
01100101size000000101PgZnZd
opc

Encoding

FRINTN <Zd>.<T>, <Pg>/M, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_TIEEVEN; constant boolean merging = TRUE;

Nearest with ties to even, zeroing class

(FEAT_SVE2p2 || FEAT_SME2p2)

313029282726252423222120191817161514131211109876543210
01100100size011000100PgZnZd
opopc2

Encoding

FRINTN <Zd>.<T>, <Pg>/Z, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE2p2) && !IsFeatureImplemented(FEAT_SME2p2) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_TIEEVEN; constant boolean merging = FALSE;

Toward zero, merging class

(FEAT_SVE || FEAT_SME)

313029282726252423222120191817161514131211109876543210
01100101size000011101PgZnZd
opc

Encoding

FRINTZ <Zd>.<T>, <Pg>/M, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_ZERO; constant boolean merging = TRUE;

Toward zero, zeroing class

(FEAT_SVE2p2 || FEAT_SME2p2)

313029282726252423222120191817161514131211109876543210
01100100size011000111PgZnZd
opopc2

Encoding

FRINTZ <Zd>.<T>, <Pg>/Z, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE2p2) && !IsFeatureImplemented(FEAT_SME2p2) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_ZERO; constant boolean merging = FALSE;

Toward minus infinity, merging class

(FEAT_SVE || FEAT_SME)

313029282726252423222120191817161514131211109876543210
01100101size000010101PgZnZd
opc

Encoding

FRINTM <Zd>.<T>, <Pg>/M, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_NEGINF; constant boolean merging = TRUE;

Toward minus infinity, zeroing class

(FEAT_SVE2p2 || FEAT_SME2p2)

313029282726252423222120191817161514131211109876543210
01100100size011000110PgZnZd
opopc2

Encoding

FRINTM <Zd>.<T>, <Pg>/Z, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE2p2) && !IsFeatureImplemented(FEAT_SME2p2) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_NEGINF; constant boolean merging = FALSE;

Toward plus infinity, merging class

(FEAT_SVE || FEAT_SME)

313029282726252423222120191817161514131211109876543210
01100101size000001101PgZnZd
opc

Encoding

FRINTP <Zd>.<T>, <Pg>/M, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_POSINF; constant boolean merging = TRUE;

Toward plus infinity, zeroing class

(FEAT_SVE2p2 || FEAT_SME2p2)

313029282726252423222120191817161514131211109876543210
01100100size011000101PgZnZd
opopc2

Encoding

FRINTP <Zd>.<T>, <Pg>/Z, <Zn>.<T>

Decode

if !IsFeatureImplemented(FEAT_SVE2p2) && !IsFeatureImplemented(FEAT_SME2p2) then EndOfDecode(Decode_UNDEF); if size == '00' then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Zn); constant integer d = UInt(Zd); constant boolean exact = FALSE; constant FPRounding rounding = FPRounding_POSINF; constant boolean merging = FALSE;

Assembler Symbols

<Zd>

Is the name of the destination scalable vector register, encoded in the "Zd" field.

<T>

Is the size specifier, encoded in size:

size <T>
00 RESERVED
01 H
10 S
11 D
<Pg>

Is the name of the governing scalable predicate register P0-P7, encoded in the "Pg" field.

<Zn>

Is the name of the source scalable vector register, encoded in the "Zn" field.

Operation

CheckSVEEnabled(); constant integer VL = CurrentVL; constant integer PL = VL DIV 8; constant integer elements = VL DIV esize; constant bits(PL) mask = P[g, PL]; constant bits(VL) operand = if AnyActiveElement(mask, esize) then Z[n, VL] else Zeros(VL); bits(VL) result = if merging then Z[d, VL] else Zeros(VL); for e = 0 to elements-1 if ActivePredicateElement(mask, e, esize) then constant bits(esize) element = Elem[operand, e, esize]; Elem[result, e, esize] = FPRoundInt(element, FPCR, rounding, exact); Z[d, VL] = result;

Operational information

For the "Current mode signalling inexact, merging" , "Current mode, merging" , "Nearest with ties to away, merging" , "Nearest with ties to even, merging" , "Toward zero, merging" , "Toward minus infinity, merging" , "Toward plus infinity, merging" variants:

The merging variant of this instruction might be immediately preceded in program order by a MOVPRFX instruction. The MOVPRFX must conform to all of the following requirements, otherwise the behavior of the MOVPRFX and the merging variant of this instruction is CONSTRAINED UNPREDICTABLE:


Version 2025.09 — Copyright © 2010-2025 Arm Limited or its affiliates.

This site is provided as a community resource and is NOT affiliated with nor endorsed by Arm Limited.