Repository navigation
target-arm: AArch32 Neon integer data processing and loads and stores - #346
Merged
Merged
Conversation
Decode the Neon data-processing and load/store groups in A32 and T32, and implement the integer parts: three registers of the same length, two registers and a shift, three registers of different lengths, two registers and a scalar, the two-register miscellaneous group without the FP ops, VEXT, VTBL/VTBX, VDUP, the modified immediates, VLDn/VSTn in all forms with QEMU's alignment checks, and VMOV between a core register and a scalar. The ops run on the A64 vector helper through a new a32_neon helper that maps D registers onto the Q registers. The FP and crypto parts follow in the next slice, which also sets HWCAP_NEON for qemu-arm.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #8.
The first Neon slice for AArch32: the integer data-processing instructions, the loads and stores, and VMOV and VDUP between core registers and scalars. It covers A32 and T32.
neon-dp.decodeandneon-ls.decodeare generated as for QEMU. T32 encodings are rewritten to their A32 form before decoding, as intranslate.c.a32_neonhelper, which maps D registers onto the Q registers. FPSCR.QC is set on saturation. Pair ops write Dm and then Dd, as QEMU does, so VTRN, VUZP and VZIP with d == m match.finalize_memopin user mode, so a hint is checked and the default alignment is not.Not included: the FP ops (VADD.F32, the FP 2-reg-misc and the conversions), VRECPE/VRSQRTE, crypto, the neon-shared group, and the BF16 and dot product ops. They UNDEF for now. HWCAP_NEON stays clear until the next slice adds them, so glibc doesn't pick Neon routines.
Compared against QEMU 11.1 qemu-arm on server3:
The next slice addresses both, along with HWCAP_NEON.
All of the above ran on the merge commit e498d17 (this branch with main at 2a32ea6 merged in).
Checks, all on e498d17: