PTEST

Set condition flags for predicate

Sets the First (N), None (Z), !Last (C) condition flags based on the predicate source register, and the V flag to zero.

Encoding: SVE

Variants: FEAT_SVE || FEAT_SME (FEAT_SVE || FEAT_SME)

313029282726252423222120191817161514131211109876543210
001001010101000011000000
opSPgPnopc2

PTEST <Pg>, <Pn>.B

Decoding algorithm

if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then
    EndOfDecode(Decode_UNDEF);
constant integer esize = 8;
constant integer g = UInt(Pg);
constant integer n = UInt(Pn);

Operation

CheckSVEEnabled();
constant integer VL = CurrentVL;
constant integer PL = VL DIV 8;
constant bits(PL) mask = P[g, PL];
constant bits(PL) result = P[n, PL];

PSTATE. = PredTest(mask, result, esize);

Explanations

<Pg>: Is the name of the governing scalable predicate register, encoded in the "Pg" field.
<Pn>: Is the name of the source scalable predicate register, encoded in the "Pn" field.

Operational Notes

If PSTATE.DIT is 1:

If FEAT_SME is implemented and the PE is in Streaming SVE mode, then any subsequent instruction which is dependent on the predicate register written by this instruction might be significantly delayed.