diff options
Diffstat (limited to 'js/src/jit/JitOptions.h')
-rw-r--r-- | js/src/jit/JitOptions.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/js/src/jit/JitOptions.h b/js/src/jit/JitOptions.h new file mode 100644 index 000000000..076980b4e --- /dev/null +++ b/js/src/jit/JitOptions.h @@ -0,0 +1,110 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef jit_JitOptions_h +#define jit_JitOptions_h + +#include "mozilla/Maybe.h" + +#include "jit/IonTypes.h" +#include "js/TypeDecls.h" + +namespace js { +namespace jit { + +// Longer scripts can only be compiled off thread, as these compilations +// can be expensive and stall the main thread for too long. +static const uint32_t MAX_MAIN_THREAD_SCRIPT_SIZE = 2 * 1000; +static const uint32_t MAX_MAIN_THREAD_LOCALS_AND_ARGS = 256; + +// Possible register allocators which may be used. +enum IonRegisterAllocator { + RegisterAllocator_Backtracking, + RegisterAllocator_Testbed, + RegisterAllocator_Stupid +}; + +static inline mozilla::Maybe<IonRegisterAllocator> +LookupRegisterAllocator(const char* name) +{ + if (!strcmp(name, "backtracking")) + return mozilla::Some(RegisterAllocator_Backtracking); + if (!strcmp(name, "testbed")) + return mozilla::Some(RegisterAllocator_Testbed); + if (!strcmp(name, "stupid")) + return mozilla::Some(RegisterAllocator_Stupid); + return mozilla::Nothing(); +} + +struct DefaultJitOptions +{ + bool checkGraphConsistency; +#ifdef CHECK_OSIPOINT_REGISTERS + bool checkOsiPointRegisters; +#endif + bool checkRangeAnalysis; + bool runExtraChecks; + bool disableInlineBacktracking; + bool disableAma; + bool disableEaa; + bool disableEagerSimdUnbox; + bool disableEdgeCaseAnalysis; + bool disableFlowAA; + bool disableGvn; + bool disableInlining; + bool disableLicm; + bool disableLoopUnrolling; + bool disablePgo; + bool disableInstructionReordering; + bool disableRangeAnalysis; + bool disableRecoverIns; + bool disableScalarReplacement; + bool disableCacheIR; + bool disableSharedStubs; + bool disableSincos; + bool disableSink; + bool eagerCompilation; + bool forceInlineCaches; + bool limitScriptSize; + bool osr; + bool asmJSAtomicsEnable; + bool wasmTestMode; + bool wasmAlwaysCheckBounds; + bool wasmFoldOffsets; + bool ionInterruptWithoutSignals; + uint32_t baselineWarmUpThreshold; + uint32_t exceptionBailoutThreshold; + uint32_t frequentBailoutThreshold; + uint32_t maxStackArgs; + uint32_t osrPcMismatchesBeforeRecompile; + uint32_t smallFunctionMaxBytecodeLength_; + uint32_t jumpThreshold; + uint32_t branchPruningHitCountFactor; + uint32_t branchPruningInstFactor; + uint32_t branchPruningBlockSpanFactor; + uint32_t branchPruningEffectfulInstFactor; + uint32_t branchPruningThreshold; + mozilla::Maybe<uint32_t> forcedDefaultIonWarmUpThreshold; + mozilla::Maybe<uint32_t> forcedDefaultIonSmallFunctionWarmUpThreshold; + mozilla::Maybe<IonRegisterAllocator> forcedRegisterAllocator; + + // The options below affect the rest of the VM, and not just the JIT. + bool disableUnboxedObjects; + + DefaultJitOptions(); + bool isSmallFunction(JSScript* script) const; + void setEagerCompilation(); + void setCompilerWarmUpThreshold(uint32_t warmUpThreshold); + void resetCompilerWarmUpThreshold(); + void enableGvn(bool val); +}; + +extern DefaultJitOptions JitOptions; + +} // namespace jit +} // namespace js + +#endif /* jit_JitOptions_h */ |