VSELEQ, VSELGE, VSELGT, VSELVS
Floating-point conditional select allows the destination register to take the value in either one or the other source register according to the condition codes in the APSR.
It has encodings from the following instruction sets:
A32 (
A1
)
and
T32 (
T1
)
.
A1
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 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | D | cc | Vn | Vd | 1 | 0 | != 00 | N | 0 | M | 0 | Vm |
| | | | | | size | | | | | |
Encoding for the Equal, half-precision scalar variant
(FEAT_FP16)
Applies when
(cc == 00 && size == 01)VSELEQ.F16 <Sd>, <Sn>, <Sm>
//
(Cannot be conditional)
Encoding for the Equal, single-precision scalar variant
Applies when
(cc == 00 && size == 10)VSELEQ.F32 <Sd>, <Sn>, <Sm>
//
(Cannot be conditional)
Encoding for the Equal, double-precision scalar variant
Applies when
(cc == 00 && size == 11)VSELEQ.F64 <Dd>, <Dn>, <Dm>
//
(Cannot be conditional)
Encoding for the Greater than or Equal, half-precision scalar variant
(FEAT_FP16)
Applies when
(cc == 10 && size == 01)VSELGE.F16 <Sd>, <Sn>, <Sm>
//
(Cannot be conditional)
Encoding for the Greater than or Equal, single-precision scalar variant
Applies when
(cc == 10 && size == 10)VSELGE.F32 <Sd>, <Sn>, <Sm>
//
(Cannot be conditional)
Encoding for the Greater than or Equal, double-precision scalar variant
Applies when
(cc == 10 && size == 11)VSELGE.F64 <Dd>, <Dn>, <Dm>
//
(Cannot be conditional)
Encoding for the Greater than, half-precision scalar variant
(FEAT_FP16)
Applies when
(cc == 11 && size == 01)VSELGT.F16 <Sd>, <Sn>, <Sm>
//
(Cannot be conditional)
Encoding for the Greater than, single-precision scalar variant
Applies when
(cc == 11 && size == 10)VSELGT.F32 <Sd>, <Sn>, <Sm>
//
(Cannot be conditional)
Encoding for the Greater than, double-precision scalar variant
Applies when
(cc == 11 && size == 11)VSELGT.F64 <Dd>, <Dn>, <Dm>
//
(Cannot be conditional)
Encoding for the Unordered, half-precision scalar variant
(FEAT_FP16)
Applies when
(cc == 01 && size == 01)VSELVS.F16 <Sd>, <Sn>, <Sm>
//
(Cannot be conditional)
Encoding for the Unordered, single-precision scalar variant
Applies when
(cc == 01 && size == 10)VSELVS.F32 <Sd>, <Sn>, <Sm>
//
(Cannot be conditional)
Encoding for the Unordered, double-precision scalar variant
Applies when
(cc == 01 && size == 11)VSELVS.F64 <Dd>, <Dn>, <Dm>
//
(Cannot be conditional)
Decode for all variants of this encoding
if size == '00' || (size == '01' && !IsFeatureImplemented(FEAT_FP16)) then UNDEFINED;
constant integer esize = 8 << UInt(size);
constant integer d = if size == '11' then UInt(D:Vd) else UInt(Vd:D);
constant integer n = if size == '11' then UInt(N:Vn) else UInt(Vn:N);
constant integer m = if size == '11' then UInt(M:Vm) else UInt(Vm:M);
constant bits(4) condition = cc:(cc<1> EOR cc<0>):'0';
T1
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | D | cc | Vn | Vd | 1 | 0 | != 00 | N | 0 | M | 0 | Vm |
| | | | | | size | | | | | |
Encoding for the Equal, half-precision scalar variant
(FEAT_FP16)
Applies when
(cc == 00 && size == 01)VSELEQ.F16 <Sd>, <Sn>, <Sm>
//
(Not permitted in IT block)
Encoding for the Equal, single-precision scalar variant
Applies when
(cc == 00 && size == 10)VSELEQ.F32 <Sd>, <Sn>, <Sm>
//
(Not permitted in IT block)
Encoding for the Equal, double-precision scalar variant
Applies when
(cc == 00 && size == 11)VSELEQ.F64 <Dd>, <Dn>, <Dm>
//
(Not permitted in IT block)
Encoding for the Greater than or Equal, half-precision scalar variant
(FEAT_FP16)
Applies when
(cc == 10 && size == 01)VSELGE.F16 <Sd>, <Sn>, <Sm>
//
(Not permitted in IT block)
Encoding for the Greater than or Equal, single-precision scalar variant
Applies when
(cc == 10 && size == 10)VSELGE.F32 <Sd>, <Sn>, <Sm>
//
(Not permitted in IT block)
Encoding for the Greater than or Equal, double-precision scalar variant
Applies when
(cc == 10 && size == 11)VSELGE.F64 <Dd>, <Dn>, <Dm>
//
(Not permitted in IT block)
Encoding for the Greater than, half-precision scalar variant
(FEAT_FP16)
Applies when
(cc == 11 && size == 01)VSELGT.F16 <Sd>, <Sn>, <Sm>
//
(Not permitted in IT block)
Encoding for the Greater than, single-precision scalar variant
Applies when
(cc == 11 && size == 10)VSELGT.F32 <Sd>, <Sn>, <Sm>
//
(Not permitted in IT block)
Encoding for the Greater than, double-precision scalar variant
Applies when
(cc == 11 && size == 11)VSELGT.F64 <Dd>, <Dn>, <Dm>
//
(Not permitted in IT block)
Encoding for the Unordered, half-precision scalar variant
(FEAT_FP16)
Applies when
(cc == 01 && size == 01)VSELVS.F16 <Sd>, <Sn>, <Sm>
//
(Not permitted in IT block)
Encoding for the Unordered, single-precision scalar variant
Applies when
(cc == 01 && size == 10)VSELVS.F32 <Sd>, <Sn>, <Sm>
//
(Not permitted in IT block)
Encoding for the Unordered, double-precision scalar variant
Applies when
(cc == 01 && size == 11)VSELVS.F64 <Dd>, <Dn>, <Dm>
//
(Not permitted in IT block)
Decode for all variants of this encoding
if InITBlock() then UNPREDICTABLE;
if size == '00' || (size == '01' && !IsFeatureImplemented(FEAT_FP16)) then UNDEFINED;
constant integer esize = 8 << UInt(size);
constant integer d = if size == '11' then UInt(D:Vd) else UInt(Vd:D);
constant integer n = if size == '11' then UInt(N:Vn) else UInt(Vn:N);
constant integer m = if size == '11' then UInt(M:Vm) else UInt(Vm:M);
constant bits(4) condition = cc:(cc<1> EOR cc<0>):'0';
CONSTRAINED UNPREDICTABLE behavior
If InITBlock(), then one of the following behaviors must occur:
- The instruction is undefined.
- The instruction executes as if it passes the Condition code check.
- The instruction executes as NOP. This means it behaves as if it fails the Condition code check.
Assembler Symbols
<Dd> |
Is the 64-bit name of the SIMD&FP destination register, encoded in the "D:Vd" field.
|
<Dn> |
Is the 64-bit name of the first SIMD&FP source register, encoded in the "N:Vn" field.
|
<Dm> |
Is the 64-bit name of the second SIMD&FP source register, encoded in the "M:Vm" field.
|
<Sd> |
Is the 32-bit name of the SIMD&FP destination register, encoded in the "Vd:D" field.
|
<Sn> |
Is the 32-bit name of the first SIMD&FP source register, encoded in the "Vn:N" field.
|
<Sm> |
Is the 32-bit name of the second SIMD&FP source register, encoded in the "Vm:M" field.
|
Internal version only: isa v01_32, pseudocode v2024-12_rel
; Build timestamp: 2024-12-16T10:54
Copyright © 2010-2024 Arm Limited or its affiliates. All rights reserved.
This document is Non-Confidential.