| Index: src/assembler.h
|
| diff --git a/src/assembler.h b/src/assembler.h
|
| index a4c19e6b027bbfdddc97bdec2dd5ab02addce19d..244766bbdf95644d207e4053a3f65068525c7576 100644
|
| --- a/src/assembler.h
|
| +++ b/src/assembler.h
|
| @@ -51,6 +51,59 @@ namespace internal {
|
| // Forward declarations.
|
| class StatsCounter;
|
|
|
| +
|
| +// CpuFeatures keeps track of which features are supported by the target CPU.
|
| +// Supported features must be enabled by a CpuFeatureScope before use.
|
| +// Example:
|
| +// if (assembler->IsSupported(SSE3)) {
|
| +// CpuFeatureScope fscope(assembler, SSE3);
|
| +// // Generate code containing SSE3 instructions.
|
| +// } else {
|
| +// // Generate alternative code.
|
| +// }
|
| +class CpuFeatures : public AllStatic {
|
| + public:
|
| + static void Probe(bool cross_compile) {
|
| + STATIC_ASSERT(NUMBER_OF_CPU_FEATURES <= kBitsPerInt);
|
| + if (initialized_) return;
|
| + initialized_ = true;
|
| + ProbeImpl(cross_compile);
|
| + }
|
| +
|
| + static unsigned SupportedFeatures() {
|
| + Probe(false);
|
| + return supported_;
|
| + }
|
| +
|
| + static bool IsSupported(CpuFeature f) {
|
| + return (supported_ & (1u << f)) != 0;
|
| + }
|
| +
|
| + static inline bool SupportsCrankshaft();
|
| +
|
| + static inline unsigned cache_line_size() {
|
| + DCHECK(cache_line_size_ != 0);
|
| + return cache_line_size_;
|
| + }
|
| +
|
| + static void PrintTarget();
|
| + static void PrintFeatures();
|
| +
|
| + // Flush instruction cache.
|
| + static void FlushICache(void* start, size_t size);
|
| +
|
| + private:
|
| + // Platform-dependent implementation.
|
| + static void ProbeImpl(bool cross_compile);
|
| +
|
| + static unsigned supported_;
|
| + static unsigned cache_line_size_;
|
| + static bool initialized_;
|
| + friend class ExternalReference;
|
| + DISALLOW_COPY_AND_ASSIGN(CpuFeatures);
|
| +};
|
| +
|
| +
|
| // -----------------------------------------------------------------------------
|
| // Platform independent assembler base class.
|
|
|
| @@ -102,6 +155,11 @@ class AssemblerBase: public Malloced {
|
| static const int kMinimalBufferSize = 4*KB;
|
|
|
| protected:
|
| + static void FlushICache(Isolate* isolate, void* start, size_t size);
|
| +
|
| + // TODO(all): Help get rid of this one.
|
| + static void FlushICacheWithoutIsolate(void* start, size_t size);
|
| +
|
| // The buffer into which code and relocation info are generated. It could
|
| // either be owned by the assembler or be provided externally.
|
| byte* buffer_;
|
| @@ -187,58 +245,6 @@ class CpuFeatureScope BASE_EMBEDDED {
|
| };
|
|
|
|
|
| -// CpuFeatures keeps track of which features are supported by the target CPU.
|
| -// Supported features must be enabled by a CpuFeatureScope before use.
|
| -// Example:
|
| -// if (assembler->IsSupported(SSE3)) {
|
| -// CpuFeatureScope fscope(assembler, SSE3);
|
| -// // Generate code containing SSE3 instructions.
|
| -// } else {
|
| -// // Generate alternative code.
|
| -// }
|
| -class CpuFeatures : public AllStatic {
|
| - public:
|
| - static void Probe(bool cross_compile) {
|
| - STATIC_ASSERT(NUMBER_OF_CPU_FEATURES <= kBitsPerInt);
|
| - if (initialized_) return;
|
| - initialized_ = true;
|
| - ProbeImpl(cross_compile);
|
| - }
|
| -
|
| - static unsigned SupportedFeatures() {
|
| - Probe(false);
|
| - return supported_;
|
| - }
|
| -
|
| - static bool IsSupported(CpuFeature f) {
|
| - return (supported_ & (1u << f)) != 0;
|
| - }
|
| -
|
| - static inline bool SupportsCrankshaft();
|
| -
|
| - static inline unsigned cache_line_size() {
|
| - DCHECK(cache_line_size_ != 0);
|
| - return cache_line_size_;
|
| - }
|
| -
|
| - static void PrintTarget();
|
| - static void PrintFeatures();
|
| -
|
| - // Flush instruction cache.
|
| - static void FlushICache(void* start, size_t size);
|
| -
|
| - private:
|
| - // Platform-dependent implementation.
|
| - static void ProbeImpl(bool cross_compile);
|
| -
|
| - static unsigned supported_;
|
| - static unsigned cache_line_size_;
|
| - static bool initialized_;
|
| - friend class ExternalReference;
|
| - DISALLOW_COPY_AND_ASSIGN(CpuFeatures);
|
| -};
|
| -
|
| -
|
| // -----------------------------------------------------------------------------
|
| // Labels represent pc locations; they are typically jump or call targets.
|
| // After declaration, a label can be freely used to denote known or (yet)
|
|
|