xref: /qemu/target/arm/tcg/vfp.decode (revision d4893b01d23060845ee3855bc96626e16aad9ab5)
178e138bcSPeter Maydell# AArch32 VFP instruction descriptions (conditional insns)
278e138bcSPeter Maydell#
378e138bcSPeter Maydell#  Copyright (c) 2019 Linaro, Ltd
478e138bcSPeter Maydell#
578e138bcSPeter Maydell# This library is free software; you can redistribute it and/or
678e138bcSPeter Maydell# modify it under the terms of the GNU Lesser General Public
778e138bcSPeter Maydell# License as published by the Free Software Foundation; either
878e138bcSPeter Maydell# version 2 of the License, or (at your option) any later version.
978e138bcSPeter Maydell#
1078e138bcSPeter Maydell# This library is distributed in the hope that it will be useful,
1178e138bcSPeter Maydell# but WITHOUT ANY WARRANTY; without even the implied warranty of
1278e138bcSPeter Maydell# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1378e138bcSPeter Maydell# Lesser General Public License for more details.
1478e138bcSPeter Maydell#
1578e138bcSPeter Maydell# You should have received a copy of the GNU Lesser General Public
1678e138bcSPeter Maydell# License along with this library; if not, see <http://www.gnu.org/licenses/>.
1778e138bcSPeter Maydell
1878e138bcSPeter Maydell#
1978e138bcSPeter Maydell# This file is processed by scripts/decodetree.py
2078e138bcSPeter Maydell#
2178e138bcSPeter Maydell# Encodings for the conditional VFP instructions are here:
2278e138bcSPeter Maydell# generally anything matching A32
2378e138bcSPeter Maydell#  cccc 11.. .... .... .... 101. .... ....
2478e138bcSPeter Maydell# and T32
2578e138bcSPeter Maydell#  1110 110. .... .... .... 101. .... ....
2678e138bcSPeter Maydell#  1110 1110 .... .... .... 101. .... ....
2778e138bcSPeter Maydell# (but those patterns might also cover some Neon instructions,
2878e138bcSPeter Maydell# which do not live in this file.)
299851ed92SPeter Maydell
309851ed92SPeter Maydell# VFP registers have an odd encoding with a four-bit field
319851ed92SPeter Maydell# and a one-bit field which are assembled in different orders
329851ed92SPeter Maydell# depending on whether the register is double or single precision.
339851ed92SPeter Maydell# Each individual instruction function must do the checks for
349851ed92SPeter Maydell# "double register selected but CPU does not have double support"
359851ed92SPeter Maydell# and "double register number has bit 4 set but CPU does not
369851ed92SPeter Maydell# support D16-D31" (which should UNDEF).
379851ed92SPeter Maydell%vm_dp  5:1 0:4
389851ed92SPeter Maydell%vm_sp  0:4 5:1
399851ed92SPeter Maydell%vn_dp  7:1 16:4
409851ed92SPeter Maydell%vn_sp  16:4 7:1
419851ed92SPeter Maydell%vd_dp  22:1 12:4
429851ed92SPeter Maydell%vd_sp  12:4 22:1
439851ed92SPeter Maydell
449851ed92SPeter Maydell%vmov_idx_b     21:1 5:2
459851ed92SPeter Maydell%vmov_idx_h     21:1 6:1
469851ed92SPeter Maydell
479851ed92SPeter Maydell# VMOV scalar to general-purpose register; note that this does
489851ed92SPeter Maydell# include some Neon cases.
499851ed92SPeter MaydellVMOV_to_gp   ---- 1110 u:1 1.        1 .... rt:4 1011 ... 1 0000 \
509851ed92SPeter Maydell             vn=%vn_dp size=0 index=%vmov_idx_b
519851ed92SPeter MaydellVMOV_to_gp   ---- 1110 u:1 0.        1 .... rt:4 1011 ..1 1 0000 \
529851ed92SPeter Maydell             vn=%vn_dp size=1 index=%vmov_idx_h
539851ed92SPeter MaydellVMOV_to_gp   ---- 1110 0   0 index:1 1 .... rt:4 1011 .00 1 0000 \
549851ed92SPeter Maydell             vn=%vn_dp size=2 u=0
559851ed92SPeter Maydell
569851ed92SPeter MaydellVMOV_from_gp ---- 1110 0 1.        0 .... rt:4 1011 ... 1 0000 \
579851ed92SPeter Maydell             vn=%vn_dp size=0 index=%vmov_idx_b
589851ed92SPeter MaydellVMOV_from_gp ---- 1110 0 0.        0 .... rt:4 1011 ..1 1 0000 \
599851ed92SPeter Maydell             vn=%vn_dp size=1 index=%vmov_idx_h
609851ed92SPeter MaydellVMOV_from_gp ---- 1110 0 0 index:1 0 .... rt:4 1011 .00 1 0000 \
619851ed92SPeter Maydell             vn=%vn_dp size=2
629851ed92SPeter Maydell
639851ed92SPeter MaydellVDUP         ---- 1110 1 b:1 q:1 0 .... rt:4 1011 . 0 e:1 1 0000 \
649851ed92SPeter Maydell             vn=%vn_dp
65a9ab5001SPeter Maydell
66a9ab5001SPeter MaydellVMSR_VMRS    ---- 1110 111 l:1 reg:4 rt:4 1010 0001 0000
67a9ab5001SPeter MaydellVMOV_single  ---- 1110 000 l:1 .... rt:4 1010 . 001 0000 \
68a9ab5001SPeter Maydell             vn=%vn_sp
6981f68110SPeter Maydell
7081f68110SPeter MaydellVMOV_64_sp   ---- 1100 010 op:1 rt2:4 rt:4 1010 00.1 .... \
7181f68110SPeter Maydell             vm=%vm_sp
7281f68110SPeter MaydellVMOV_64_dp   ---- 1100 010 op:1 rt2:4 rt:4 1011 00.1 .... \
7381f68110SPeter Maydell             vm=%vm_dp
7479b02a3bSPeter Maydell
7579b02a3bSPeter Maydell# Note that the half-precision variants of VLDR and VSTR are
7679b02a3bSPeter Maydell# not part of this decodetree at all because they have bits [9:8] == 0b01
7779b02a3bSPeter MaydellVLDR_VSTR_sp ---- 1101 u:1 .0 l:1 rn:4 .... 1010 imm:8 \
7879b02a3bSPeter Maydell             vd=%vd_sp
7979b02a3bSPeter MaydellVLDR_VSTR_dp ---- 1101 u:1 .0 l:1 rn:4 .... 1011 imm:8 \
8079b02a3bSPeter Maydell             vd=%vd_dp
81fa288de2SPeter Maydell
82fa288de2SPeter Maydell# We split the load/store multiple up into two patterns to avoid
83fa288de2SPeter Maydell# overlap with other insns in the "Advanced SIMD load/store and 64-bit move"
84fa288de2SPeter Maydell# grouping:
85fa288de2SPeter Maydell#   P=0 U=0 W=0 is 64-bit VMOV
86fa288de2SPeter Maydell#   P=1 W=0 is VLDR/VSTR
87fa288de2SPeter Maydell#   P=U W=1 is UNDEF
88fa288de2SPeter Maydell# leaving P=0 U=1 W=x and P=1 U=0 W=1 for load/store multiple.
89fa288de2SPeter Maydell# These include FSTM/FLDM.
90fa288de2SPeter MaydellVLDM_VSTM_sp ---- 1100 1 . w:1 l:1 rn:4 .... 1010 imm:8 \
91fa288de2SPeter Maydell             vd=%vd_sp p=0 u=1
92fa288de2SPeter MaydellVLDM_VSTM_dp ---- 1100 1 . w:1 l:1 rn:4 .... 1011 imm:8 \
93fa288de2SPeter Maydell             vd=%vd_dp p=0 u=1
94fa288de2SPeter Maydell
95fa288de2SPeter MaydellVLDM_VSTM_sp ---- 1101 0.1 l:1 rn:4 .... 1010 imm:8 \
96fa288de2SPeter Maydell             vd=%vd_sp p=1 u=0 w=1
97fa288de2SPeter MaydellVLDM_VSTM_dp ---- 1101 0.1 l:1 rn:4 .... 1011 imm:8 \
98fa288de2SPeter Maydell             vd=%vd_dp p=1 u=0 w=1
99266bd25cSPeter Maydell
100266bd25cSPeter Maydell# 3-register VFP data-processing; bits [23,21:20,6] identify the operation.
101266bd25cSPeter MaydellVMLA_sp      ---- 1110 0.00 .... .... 1010 .0.0 .... \
102266bd25cSPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp
103266bd25cSPeter MaydellVMLA_dp      ---- 1110 0.00 .... .... 1011 .0.0 .... \
104266bd25cSPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp
105e7258280SPeter Maydell
106e7258280SPeter MaydellVMLS_sp      ---- 1110 0.00 .... .... 1010 .1.0 .... \
107e7258280SPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp
108e7258280SPeter MaydellVMLS_dp      ---- 1110 0.00 .... .... 1011 .1.0 .... \
109e7258280SPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp
110c54a416cSPeter Maydell
111c54a416cSPeter MaydellVNMLS_sp     ---- 1110 0.01 .... .... 1010 .0.0 .... \
112c54a416cSPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp
113c54a416cSPeter MaydellVNMLS_dp     ---- 1110 0.01 .... .... 1011 .0.0 .... \
114c54a416cSPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp
1158a483533SPeter Maydell
1168a483533SPeter MaydellVNMLA_sp     ---- 1110 0.01 .... .... 1010 .1.0 .... \
1178a483533SPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp
1188a483533SPeter MaydellVNMLA_dp     ---- 1110 0.01 .... .... 1011 .1.0 .... \
1198a483533SPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp
12088c5188cSPeter Maydell
12188c5188cSPeter MaydellVMUL_sp      ---- 1110 0.10 .... .... 1010 .0.0 .... \
12288c5188cSPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp
12388c5188cSPeter MaydellVMUL_dp      ---- 1110 0.10 .... .... 1011 .0.0 .... \
12488c5188cSPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp
12543c4be12SPeter Maydell
12643c4be12SPeter MaydellVNMUL_sp     ---- 1110 0.10 .... .... 1010 .1.0 .... \
12743c4be12SPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp
12843c4be12SPeter MaydellVNMUL_dp     ---- 1110 0.10 .... .... 1011 .1.0 .... \
12943c4be12SPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp
130ce28b303SPeter Maydell
131ce28b303SPeter MaydellVADD_sp      ---- 1110 0.11 .... .... 1010 .0.0 .... \
132ce28b303SPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp
133ce28b303SPeter MaydellVADD_dp      ---- 1110 0.11 .... .... 1011 .0.0 .... \
134ce28b303SPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp
1358fec9a11SPeter Maydell
1368fec9a11SPeter MaydellVSUB_sp      ---- 1110 0.11 .... .... 1010 .1.0 .... \
1378fec9a11SPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp
1388fec9a11SPeter MaydellVSUB_dp      ---- 1110 0.11 .... .... 1011 .1.0 .... \
1398fec9a11SPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp
140519ee7aeSPeter Maydell
141519ee7aeSPeter MaydellVDIV_sp      ---- 1110 1.00 .... .... 1010 .0.0 .... \
142519ee7aeSPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp
143519ee7aeSPeter MaydellVDIV_dp      ---- 1110 1.00 .... .... 1011 .0.0 .... \
144519ee7aeSPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp
145*d4893b01SPeter Maydell
146*d4893b01SPeter MaydellVFM_sp       ---- 1110 1.01 .... .... 1010 . o2:1 . 0 .... \
147*d4893b01SPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp o1=1
148*d4893b01SPeter MaydellVFM_dp       ---- 1110 1.01 .... .... 1011 . o2:1 . 0 .... \
149*d4893b01SPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp o1=1
150*d4893b01SPeter MaydellVFM_sp       ---- 1110 1.10 .... .... 1010 . o2:1 . 0 .... \
151*d4893b01SPeter Maydell             vm=%vm_sp vn=%vn_sp vd=%vd_sp o1=2
152*d4893b01SPeter MaydellVFM_dp       ---- 1110 1.10 .... .... 1011 . o2:1 . 0 .... \
153*d4893b01SPeter Maydell             vm=%vm_dp vn=%vn_dp vd=%vd_dp o1=2
154