Contents:
VIXL contains three components.
The VIXL git repository can be found on GitHub.
This software is covered by the licence described in the LICENCE file.
Contributions, as pull requests or via other means, are accepted under the terms of the same LICENCE.
To build VIXL the following software is required:
A 64-bit host machine is required, implementing an LP64 data model. VIXL has been tested using GCC on AArch64 Debian, GCC and Clang on amd64 Ubuntu systems.
To run the linter and code formatting stages of the tests, the following software is also required:
cpplint.py
Refer to the ‘Usage’ section for details.
Note that in Ubuntu 18.04, clang-tidy-4.0 will only work if the clang-4.0 package is also installed.
Feature | VIXL CPUFeatures Flag | Notes |
---|---|---|
BTI | kBTI | Per-page enabling not supported |
DotProd | kDotProduct | |
FCMA | kFcma | |
FHM | kFHM | |
FP16 | kFPHalf, kNEONHalf | |
FRINTTS | kFrintToFixedSizedInt | |
FlagM | kFlagM | |
FlagM2 | kAXFlag | |
I8MM | kI8MM | |
JSCVT | kJSCVT | |
LOR | kLORegions | |
LRCPC | kRCpc | |
LRCPC2 | kRCpcImm | |
LSE | kAtomics | |
PAuth | kPAuth, kPAuthGeneric | Not ERETAA, ERETAB |
RAS | kRAS | |
RDM | kRDM | |
SVE | kSVE | |
SVE2 | kSVE2 | |
SVEBitPerm | kSVEBitPerm | |
SVEF32MM | kSVEF32MM | |
SVEF64MM | kSVEF64MM | |
SVEI8MM | kSVEI8MM |
Enable generating code for an architecture feature by combining a flag with the MacroAssembler's defaults. For example, to generate code for SVE, use masm.GetCPUFeatures()->Combine(CPUFeatures::kSVE);
.
See the cpu features header file for more information.
VIXL was developed for JavaScript engines so a number of features from A64 were deemed unnecessary:
The VIXL simulator supports only those instructions that the VIXL assembler can generate. The doc
directory contains a list of supported A64 instructions.
The VIXL simulator was developed to run on 64-bit amd64 platforms. Whilst it builds and mostly works for 32-bit x86 platforms, there are a number of floating-point operations which do not work correctly, and a number of tests fail as a result.
Your project's build system must define VIXL_DEBUG
(eg. -DVIXL_DEBUG
) when using a VIXL library that has been built with debug enabled.
Some classes defined in VIXL header files contain fields that are only present in debug builds, so if VIXL_DEBUG
is defined when the library is built, but not defined for the header files included in your project, you will see runtime failures.
All exclusive-access instructions are supported, but the simulator cannot accurately simulate their behaviour as described in the ARMv8 Architecture Reference Manual.
__sync_synchronize()
is used for this purpose.The simulator tries to be strict, and implements the following restrictions that the ARMv8 ARM allows:
Instructions affected by these limitations: stxrb
, stxrh
, stxr
, ldxrb
, ldxrh
, ldxr
, stxp
, ldxp
, stlxrb
, stlxrh
, stlxr
, ldaxrb
, ldaxrh
, ldaxr
, stlxp
, ldaxp
, stlrb
, stlrh
, stlr
, ldarb
, ldarh
, ldar
, clrex
.
VIXL allows callers to generate any code they want. The generated code is arbitrary, and can therefore call back into any other component in the process. As with any self-modifying code, vulnerabilities in the client or in VIXL itself could lead to arbitrary code generation.
For performance reasons, VIXL‘s Assembler only performs debug-mode checking of instruction operands (such as immediate field encodability). This can minimise code-generation overheads for advanced compilers that already model instructions accurately, and might consider the Assembler’s checks to be redundant. The Assembler should only be used directly where encodability is independently checked, and where fine control over all generated code is required.
The MacroAssembler synthesises multiple-instruction sequences to support some unencodable operand combinations. The MacroAssembler can provide a useful safety check in cases where the Assembler's precision is not required; an unexpected unencodable operand should result in a macro with the correct behaviour, rather than an invalid instruction.
In general, the MacroAssembler handles operands which are likely to vary with user-supplied data, but does not usually handle inputs which are likely to be easily covered by tests. For example, move-immediate arguments are likely to be data-dependent, but register types (e.g. x
vs w
) are not.
We recommend that all users use the MacroAssembler, using ExactAssemblyScope
to invoke the Assembler when specific instruction sequences are required. This approach is recommended even in cases where a compiler can model the instructions precisely, because, subject to the limitations described above, it offers an additional layer of protection against logic bugs in instruction selection.
Bug reports may be made in the Issues section of GitHub, or sent to vixl@arm.com. Please provide any steps required to recreate a bug, along with build environment and host system information.
The helper script tools/test.py
will build and run every test that is provided with VIXL, in both release and debug mode. It is a useful script for verifying that all of VIXL's dependencies are in place and that VIXL is working as it should.
By default, the tools/test.py
script runs a linter to check that the source code conforms with the code style guide, and to detect several common errors that the compiler may not warn about. This is most useful for VIXL developers. The linter has the following dependencies:
git clone
.cpplint.py
, as provided by Google, must be available (and executable) on the PATH
.It is possible to tell tools/test.py
to skip the linter stage by passing --nolint
. This removes the dependency on cpplint.py
and Git. The --nolint
option is implied if the VIXL project is a snapshot (with no .git
directory).
Additionally, tools/test.py
tests code formatting using clang-format-4.0
, and performs static analysis using clang-tidy-4.0
. If you don't have these tools, disable the test using --noclang-format
or --noclang-tidy
, respectively.
Also note that the tests for the tracing features depend upon external diff
and sed
tools. If these tools are not available in PATH
, these tests will fail.
We have separate guides for introducing VIXL, depending on what architecture you are targeting. A guide for working with AArch32 can be found here, while the AArch64 guide is here. Example source code is provided in the examples directory. You can build examples with either scons aarch32_examples
or scons aarch64_examples
from the root directory, or use scons --help
to get a detailed list of available build targets.
忽必烈和成吉思汗是什么关系 | 供奉财神爷有什么讲究 | 牙疼吃什么止疼药见效快 | 为什么尿液一直是黄的 | 小巴西龟吃什么食物 |
人得布病什么症状 | 附睾炎是什么原因引起的 | 生长痛是什么 | 崩漏带下是什么症状 | 65年属什么 |
什么叫便秘 | 肩膀的肌肉叫什么 | 菩提根是什么材质 | 热络是什么意思 | 堆肥是什么意思 |
芡实是什么 | 梅核气吃什么药最好 | 肌酐高吃什么食物好 | rh是什么意思 | 牛油果不能和什么一起吃 |
什么的色彩hcv8jop2ns6r.cn | 小暑是什么季节hcv9jop1ns7r.cn | 红色连衣裙配什么鞋子好看hcv8jop5ns2r.cn | 梦见酒是什么意思hcv7jop5ns0r.cn | 奈何桥是什么意思xjhesheng.com |
什么食物含维生素abfb118.com | 咸鸭蛋不能和什么一起吃hcv9jop8ns2r.cn | 喜五行属什么hcv8jop2ns7r.cn | 去湿气吃什么食物好hcv8jop0ns4r.cn | 阴道口有点痒用什么药hcv9jop3ns2r.cn |
肝胆胰腺属于什么科hcv8jop4ns6r.cn | 血压高是什么症状fenrenren.com | 物欲横流什么意思hcv9jop7ns1r.cn | 小孩做ct对身体有什么影响hcv9jop1ns7r.cn | 1月25号是什么星座hcv8jop1ns9r.cn |
经期适合喝什么汤hcv9jop7ns3r.cn | halloween是什么意思hcv7jop4ns7r.cn | 做梦拉粑粑是什么意思hcv9jop1ns6r.cn | 盆腔炎吃什么药效果最好hcv8jop9ns3r.cn | 孕期血糖高可以吃什么水果hcv9jop4ns5r.cn |