• Home
  • Raw
  • Download

Lines Matching +full:- +full:- +full:all +full:- +full:features

2 // All rights reserved.
33 #include "globals-vixl.h"
38 // VIXL aims to handle and detect all architectural features that are likely to
39 // influence code-generation decisions at EL0 (user-space).
41 // - There may be multiple VIXL feature flags for a given architectural
50 // - Conversely, some extensions have configuration options that do not affect
57 // - VIXL offers separate flags for separate features even if they're
62 // separate features.
64 // - VIXL can detect every feature for which it can generate code.
66 // - VIXL can detect some features for which it cannot generate code.
69 // frequently extended. New features may be added to the list at any point, and
76 // clang-format off
89 /* Speculation control features. */ \
101 /* A form of PMULL{2} with a 128-bit (1Q) result. */ \
119 /* Half-precision (FP16) support for FP and NEON, respectively. */ \
143 /* JavaScript-style FP -> integer conversion instruction: FJCVTZS. */ \
147 /* RCpc-based model (for weaker release consistency): LDAPR and variants. */ \
152 /* Unaligned single-copy atomicity. */ \
154 /* FP16 fused multiply-add or -subtract long: FMLAL{2}, FMLSL{2}. */ \
156 /* Data-independent timing (for selected instructions). */ \
164 /* Floating-point round to {32,64}-bit integer. */ \
181 /* Alternate floating-point behavior */ \
187 // clang-format on
192 // A representation of the set of features known to be supported by the target
195 // - When the Assembler is asked to assemble an instruction, it asserts (in
196 // debug mode) that the necessary features are available.
198 // - TODO: The MacroAssembler relies on the Assembler's assertions, but in
199 // some cases it may be useful for macros to generate a fall-back sequence
200 // in case features are not available.
202 // - The Simulator assumes by default that all features are available, but it
203 // is possible to configure it to fail if the simulated code uses features
206 // The Simulator also offers pseudo-instructions to allow features to be
208 // that some features are constrained to certain areas of code.
210 // - The base Disassembler knows nothing about CPU features, but the
212 // about unavailable features. The Simulator uses this feature when
215 // - The Decoder-based components -- the Simulator and PrintDisassembler --
217 // features actually encountered so that a large block of code can be
219 // features analysed later.
231 // masm.SetCPUFeatures(CPUFeatures::All());
236 // // Individual features can be added (or removed).
240 // // Some helpers exist for extensions that provide several features.
241 // f.Remove(CPUFeatures::All());
248 // // Features can be queried. Where multiple features are given, they are
256 // // For debug and reporting purposes, features can be enumerated (or
262 // clang-format off
263 // Individual features.
270 kNone = -1,
276 // clang-format on
278 // By default, construct with no features enabled.
281 // Construct with some features already enabled.
287 // Construct with all features enabled. This can be used to disable feature
289 static CPUFeatures All();
295 // The presence of these features was assumed by version of VIXL before this
314 // Combine another CPUFeatures object into this one. Features that already
322 // Combine multiple features (or feature sets) into this set.
329 // Remove features in another CPUFeatures object from this one.
336 // Remove multiple features (or feature sets) from this set.
344 // or individual Features.
366 // Test whether all of the specified features exist in this set.
372 // Return the number of enabled features.
392 const vixl::CPUFeatures& features);
396 std::ostream& operator<<(std::ostream& os, const vixl::CPUFeatures& features);
424 // This is at least partially possible -- the std::vector<bool> specialisation
425 // does something similar -- but it doesn't seem worthwhile for a
426 // special-purpose debug helper, so they are omitted here.
435 return cpu_features_->Has(feature_); in IsValid()
439 // A convenience scope for temporarily modifying a CPU features object. This
440 // allows features to be enabled for short sequences.
451 // // At the end of the scope, the original CPU features are restored.
459 : cpu_features_(cpu_features_wrapper->GetCPUFeatures()), in CPUFeaturesScope()
463 // `CPUFeatures* GetCPUFeatures()`, with the specified features enabled.
465 CPUFeaturesScope(T* cpu_features_wrapper, U first, V... features) in CPUFeaturesScope() argument
466 : cpu_features_(cpu_features_wrapper->GetCPUFeatures()), in CPUFeaturesScope()
468 cpu_features_->Combine(first, features...); in CPUFeaturesScope()