Interleave elements from two half predicates.
Interleave alternating elements from the lowest or highest halves of the first and second source predicates and place in elements of the destination predicate. This instruction is unpredicated.
It has encodings from 2 classes: High halves and Low halves
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | size | 1 | 0 | Pm | 0 | 1 | 0 | 0 | 0 | 1 | 0 | Pn | 0 | Pd |
integer esize = 8 << UInt(size); integer n = UInt(Pn); integer m = UInt(Pm); integer d = UInt(Pd); integer part = 1;
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | size | 1 | 0 | Pm | 0 | 1 | 0 | 0 | 0 | 0 | 0 | Pn | 0 | Pd |
integer esize = 8 << UInt(size); integer n = UInt(Pn); integer m = UInt(Pm); integer d = UInt(Pd); integer part = 0;
<Pd> |
Is the name of the destination scalable predicate register, encoded in the "Pd" field. |
<T> |
Is the size specifier,
encoded in
size:
|
<Pn> |
Is the name of the first source scalable predicate register, encoded in the "Pn" field. |
<Pm> |
Is the name of the second source scalable predicate register, encoded in the "Pm" field. |
CheckSVEEnabled(); integer pairs = VL DIV (esize * 2); bits(PL) operand1 = P[n]; bits(PL) operand2 = P[m]; bits(PL) result; integer base = part * pairs; for p = 0 to pairs-1 Elem[result, 2*p+0, esize DIV 8] = Elem[operand1, base+p, esize DIV 8]; Elem[result, 2*p+1, esize DIV 8] = Elem[operand2, base+p, esize DIV 8]; P[d] = result;
Release: 00rel4.1-manual
Copyright © 2010-2017 ARM Limited or its affiliates. All rights reserved. This document is Non-Confidential.