SQDECW (vector) Signed saturating decrement vector by multiple of 32-bit predicate constraint element count Determines the number of active 32-bit elements implied by the named predicate constraint, multiplies that by an immediate in the range 1 to 16 inclusive, and then uses the result to decrement all destination vector elements. The results are saturated to the 32-bit signed integer range. The named predicate constraint limits the number of active elements in a single predicate to: A fixed number (VL1 to VL256) The largest power of two (POW2) The largest multiple of three or four (MUL3 or MUL4) All available, implicitly a multiple of two (ALL). Unspecified or out of range constraint encodings generate an empty predicate or zero element count rather than Undefined Instruction exception. Green False True 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 0 1 0 SQDECW <Zdn>.S{, <pattern>{, MUL #<imm>}} if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then UNDEFINED; constant integer esize = 32; constant integer dn = UInt(Zdn); constant bits(5) pat = pattern; constant integer imm = UInt(imm4) + 1; constant boolean unsigned = FALSE; <Zdn> Is the name of the source and destination scalable vector register, encoded in the "Zdn" field. <pattern> Is the optional pattern specifier, defaulting to ALL, pattern <pattern> 00000 POW2 00001 VL1 00010 VL2 00011 VL3 00100 VL4 00101 VL5 00110 VL6 00111 VL7 01000 VL8 01001 VL16 01010 VL32 01011 VL64 01100 VL128 01101 VL256 0111x #uimm5 101x1 #uimm5 10110 #uimm5 1x0x1 #uimm5 1x010 #uimm5 1xx00 #uimm5 11101 MUL4 11110 MUL3 11111 ALL
<imm> Is the immediate multiplier, in the range 1 to 16, defaulting to 1, encoded in the "imm4" field.
CheckSVEEnabled(); constant integer VL = CurrentVL; constant integer elements = VL DIV esize; constant integer count = DecodePredCount(pat, esize); constant bits(VL) operand1 = Z[dn, VL]; bits(VL) result; for e = 0 to elements-1 constant integer element1 = Int(Elem[operand1, e, esize], unsigned); (Elem[result, e, esize], -) = SatQ(element1 - (count * imm), esize, unsigned); Z[dn, VL] = result;