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. */ \
174 // clang-format on
179 // A representation of the set of features known to be supported by the target
182 // - When the Assembler is asked to assemble an instruction, it asserts (in
183 // debug mode) that the necessary features are available.
185 // - TODO: The MacroAssembler relies on the Assembler's assertions, but in
186 // some cases it may be useful for macros to generate a fall-back sequence
187 // in case features are not available.
189 // - The Simulator assumes by default that all features are available, but it
190 // is possible to configure it to fail if the simulated code uses features
193 // The Simulator also offers pseudo-instructions to allow features to be
195 // that some features are constrained to certain areas of code.
197 // - The base Disassembler knows nothing about CPU features, but the
199 // about unavailable features. The Simulator uses this feature when
202 // - The Decoder-based components -- the Simulator and PrintDisassembler --
204 // features actually encountered so that a large block of code can be
206 // features analysed later.
218 // masm.SetCPUFeatures(CPUFeatures::All());
223 // // Individual features can be added (or removed).
227 // // Some helpers exist for extensions that provide several features.
228 // f.Remove(CPUFeatures::All());
235 // // Features can be queried. Where multiple features are given, they are
243 // // For debug and reporting purposes, features can be enumerated (or
249 // clang-format off
250 // Individual features.
257 kNone = -1,
263 // clang-format on
265 // By default, construct with no features enabled.
268 // Construct with some features already enabled.
274 // Construct with all features enabled. This can be used to disable feature
276 static CPUFeatures All();
282 // The presence of these features was assumed by version of VIXL before this
301 // Combine another CPUFeatures object into this one. Features that already
309 // Combine multiple features (or feature sets) into this set.
316 // Remove features in another CPUFeatures object from this one.
323 // Remove multiple features (or feature sets) from this set.
331 // or individual Features.
353 // Test whether all of the specified features exist in this set.
359 // Return the number of enabled features.
379 const vixl::CPUFeatures& features);
383 std::ostream& operator<<(std::ostream& os, const vixl::CPUFeatures& features);
411 // This is at least partially possible -- the std::vector<bool> specialisation
412 // does something similar -- but it doesn't seem worthwhile for a
413 // special-purpose debug helper, so they are omitted here.
422 return cpu_features_->Has(feature_); in IsValid()
426 // A convenience scope for temporarily modifying a CPU features object. This
427 // allows features to be enabled for short sequences.
438 // // At the end of the scope, the original CPU features are restored.
446 : cpu_features_(cpu_features_wrapper->GetCPUFeatures()), in CPUFeaturesScope()
450 // `CPUFeatures* GetCPUFeatures()`, with the specified features enabled.
452 CPUFeaturesScope(T* cpu_features_wrapper, U first, V... features) in CPUFeaturesScope() argument
453 : cpu_features_(cpu_features_wrapper->GetCPUFeatures()), in CPUFeaturesScope()
455 cpu_features_->Combine(first, features...); in CPUFeaturesScope()