[*] Repeat old source check patch hack: remove SerializedCodeSanityCheckResult::kSourceMismatch
[+] Expose codegen cpu featureset as an API (Previous hack:95d8a9fdcc
) (Last real aurora commit:21824f3e
)
This commit is contained in:
parent
9fb9e65111
commit
6bf47ddb53
@ -17,6 +17,79 @@
|
|||||||
|
|
||||||
namespace v8 {
|
namespace v8 {
|
||||||
|
|
||||||
|
enum CpuFeature {
|
||||||
|
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64
|
||||||
|
SSE4_2,
|
||||||
|
SSE4_1,
|
||||||
|
SSSE3,
|
||||||
|
SSE3,
|
||||||
|
SAHF,
|
||||||
|
AVX,
|
||||||
|
AVX2,
|
||||||
|
FMA3,
|
||||||
|
BMI1,
|
||||||
|
BMI2,
|
||||||
|
LZCNT,
|
||||||
|
POPCNT,
|
||||||
|
INTEL_ATOM,
|
||||||
|
CETSS,
|
||||||
|
|
||||||
|
#elif V8_TARGET_ARCH_ARM
|
||||||
|
// - Standard configurations. The baseline is ARMv6+VFPv2.
|
||||||
|
ARMv7, // ARMv7-A + VFPv3-D32 + NEON
|
||||||
|
ARMv7_SUDIV, // ARMv7-A + VFPv4-D32 + NEON + SUDIV
|
||||||
|
ARMv8, // ARMv8-A (+ all of the above)
|
||||||
|
|
||||||
|
// ARM feature aliases (based on the standard configurations above).
|
||||||
|
VFPv3 = ARMv7,
|
||||||
|
NEON = ARMv7,
|
||||||
|
VFP32DREGS = ARMv7,
|
||||||
|
SUDIV = ARMv7_SUDIV,
|
||||||
|
|
||||||
|
#elif V8_TARGET_ARCH_ARM64
|
||||||
|
JSCVT,
|
||||||
|
|
||||||
|
#elif V8_TARGET_ARCH_MIPS64
|
||||||
|
FPU,
|
||||||
|
FP64FPU,
|
||||||
|
MIPSr1,
|
||||||
|
MIPSr2,
|
||||||
|
MIPSr6,
|
||||||
|
MIPS_SIMD, // MSA instructions
|
||||||
|
|
||||||
|
#elif V8_TARGET_ARCH_LOONG64
|
||||||
|
FPU,
|
||||||
|
|
||||||
|
#elif V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64
|
||||||
|
PPC_6_PLUS,
|
||||||
|
PPC_7_PLUS,
|
||||||
|
PPC_8_PLUS,
|
||||||
|
PPC_9_PLUS,
|
||||||
|
PPC_10_PLUS,
|
||||||
|
|
||||||
|
#elif V8_TARGET_ARCH_S390X
|
||||||
|
FPU,
|
||||||
|
DISTINCT_OPS,
|
||||||
|
GENERAL_INSTR_EXT,
|
||||||
|
FLOATING_POINT_EXT,
|
||||||
|
VECTOR_FACILITY,
|
||||||
|
VECTOR_ENHANCE_FACILITY_1,
|
||||||
|
VECTOR_ENHANCE_FACILITY_2,
|
||||||
|
MISC_INSTR_EXT2,
|
||||||
|
|
||||||
|
#elif V8_TARGET_ARCH_RISCV64
|
||||||
|
FPU,
|
||||||
|
FP64FPU,
|
||||||
|
RISCV_SIMD,
|
||||||
|
#elif V8_TARGET_ARCH_RISCV32
|
||||||
|
FPU,
|
||||||
|
FP64FPU,
|
||||||
|
RISCV_SIMD,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NUMBER_OF_CPU_FEATURES
|
||||||
|
};
|
||||||
|
|
||||||
class Array;
|
class Array;
|
||||||
class Context;
|
class Context;
|
||||||
class Data;
|
class Data;
|
||||||
|
@ -199,6 +199,10 @@ enum class MemoryPressureLevel { kNone, kModerate, kCritical };
|
|||||||
*/
|
*/
|
||||||
using StackState = cppgc::EmbedderStackState;
|
using StackState = cppgc::EmbedderStackState;
|
||||||
|
|
||||||
|
V8_EXPORT size_t GetCPUFeatureMask();
|
||||||
|
V8_EXPORT size_t GetCPUFeatureMaskRescan();
|
||||||
|
V8_EXPORT void SetCPUFeatureMask(size_t features);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Isolate represents an isolated instance of the V8 engine. V8 isolates have
|
* Isolate represents an isolated instance of the V8 engine. V8 isolates have
|
||||||
* completely separate states. Objects from one isolate must not be used in
|
* completely separate states. Objects from one isolate must not be used in
|
||||||
|
@ -1128,6 +1128,20 @@ bool Data::IsFunctionTemplate() const {
|
|||||||
|
|
||||||
bool Data::IsContext() const { return Utils::OpenHandle(this)->IsContext(); }
|
bool Data::IsContext() const { return Utils::OpenHandle(this)->IsContext(); }
|
||||||
|
|
||||||
|
size_t GetCPUFeatureMask() {
|
||||||
|
return internal::CpuFeatures::SupportedFeatures();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t GetCPUFeatureMaskRescan() {
|
||||||
|
internal::CpuFeatures::initialized_ = 0;
|
||||||
|
internal::CpuFeatures::supported_ = 0;
|
||||||
|
return internal::CpuFeatures::SupportedFeatures();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetCPUFeatureMask(size_t features) {
|
||||||
|
internal::CpuFeatures::supported_ = features;
|
||||||
|
}
|
||||||
|
|
||||||
void Context::Enter() {
|
void Context::Enter() {
|
||||||
i::DisallowGarbageCollection no_gc;
|
i::DisallowGarbageCollection no_gc;
|
||||||
i::Context env = *Utils::OpenHandle(this);
|
i::Context env = *Utils::OpenHandle(this);
|
||||||
@ -2998,7 +3012,7 @@ MaybeLocal<Module> ScriptCompiler::CompileModule(
|
|||||||
uint32_t ScriptCompiler::CachedDataVersionTag() {
|
uint32_t ScriptCompiler::CachedDataVersionTag() {
|
||||||
return static_cast<uint32_t>(base::hash_combine(
|
return static_cast<uint32_t>(base::hash_combine(
|
||||||
internal::Version::Hash(), internal::FlagList::Hash(),
|
internal::Version::Hash(), internal::FlagList::Hash(),
|
||||||
static_cast<uint32_t>(internal::CpuFeatures::SupportedFeatures())));
|
static_cast<uint32_t>(0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptCompiler::CachedData* ScriptCompiler::CreateCodeCache(
|
ScriptCompiler::CachedData* ScriptCompiler::CreateCodeCache(
|
||||||
|
@ -3457,6 +3457,8 @@ MaybeHandle<SharedFunctionInfo> GetSharedFunctionInfoForScriptImpl(
|
|||||||
MaybeHandle<SharedFunctionInfo> maybe_result;
|
MaybeHandle<SharedFunctionInfo> maybe_result;
|
||||||
MaybeHandle<Script> maybe_script;
|
MaybeHandle<Script> maybe_script;
|
||||||
IsCompiledScope is_compiled_scope;
|
IsCompiledScope is_compiled_scope;
|
||||||
|
i::Handle<i::String> sourceName = source;
|
||||||
|
|
||||||
if (use_compilation_cache) {
|
if (use_compilation_cache) {
|
||||||
bool can_consume_code_cache =
|
bool can_consume_code_cache =
|
||||||
compile_options == ScriptCompiler::kConsumeCodeCache;
|
compile_options == ScriptCompiler::kConsumeCodeCache;
|
||||||
@ -3512,7 +3514,8 @@ MaybeHandle<SharedFunctionInfo> GetSharedFunctionInfoForScriptImpl(
|
|||||||
Handle<SharedFunctionInfo> result;
|
Handle<SharedFunctionInfo> result;
|
||||||
if (maybe_result.ToHandle(&result)) {
|
if (maybe_result.ToHandle(&result)) {
|
||||||
is_compiled_scope = result->is_compiled_scope(isolate);
|
is_compiled_scope = result->is_compiled_scope(isolate);
|
||||||
if (is_compiled_scope.is_compiled()) {
|
|
||||||
|
if (is_compiled_scope.is_compiled() && (sourceName->length() != 0)) {
|
||||||
consuming_code_cache_succeeded = true;
|
consuming_code_cache_succeeded = true;
|
||||||
// Promote to per-isolate compilation cache.
|
// Promote to per-isolate compilation cache.
|
||||||
compilation_cache->PutScript(source, language_mode, result);
|
compilation_cache->PutScript(source, language_mode, result);
|
||||||
@ -3556,7 +3559,8 @@ MaybeHandle<SharedFunctionInfo> GetSharedFunctionInfoForScriptImpl(
|
|||||||
|
|
||||||
// Add the result to the isolate cache.
|
// Add the result to the isolate cache.
|
||||||
Handle<SharedFunctionInfo> result;
|
Handle<SharedFunctionInfo> result;
|
||||||
if (use_compilation_cache && maybe_result.ToHandle(&result)) {
|
if (use_compilation_cache && maybe_result.ToHandle(&result) &&
|
||||||
|
(sourceName->length() != 0)) {
|
||||||
DCHECK(is_compiled_scope.is_compiled());
|
DCHECK(is_compiled_scope.is_compiled());
|
||||||
compilation_cache->PutScript(source, language_mode, result);
|
compilation_cache->PutScript(source, language_mode, result);
|
||||||
} else if (maybe_result.is_null() && natives != EXTENSION_CODE) {
|
} else if (maybe_result.is_null() && natives != EXTENSION_CODE) {
|
||||||
|
@ -12,78 +12,6 @@ namespace v8 {
|
|||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
// CPU feature flags.
|
// CPU feature flags.
|
||||||
enum CpuFeature {
|
|
||||||
#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64
|
|
||||||
SSE4_2,
|
|
||||||
SSE4_1,
|
|
||||||
SSSE3,
|
|
||||||
SSE3,
|
|
||||||
SAHF,
|
|
||||||
AVX,
|
|
||||||
AVX2,
|
|
||||||
FMA3,
|
|
||||||
BMI1,
|
|
||||||
BMI2,
|
|
||||||
LZCNT,
|
|
||||||
POPCNT,
|
|
||||||
INTEL_ATOM,
|
|
||||||
CETSS,
|
|
||||||
|
|
||||||
#elif V8_TARGET_ARCH_ARM
|
|
||||||
// - Standard configurations. The baseline is ARMv6+VFPv2.
|
|
||||||
ARMv7, // ARMv7-A + VFPv3-D32 + NEON
|
|
||||||
ARMv7_SUDIV, // ARMv7-A + VFPv4-D32 + NEON + SUDIV
|
|
||||||
ARMv8, // ARMv8-A (+ all of the above)
|
|
||||||
|
|
||||||
// ARM feature aliases (based on the standard configurations above).
|
|
||||||
VFPv3 = ARMv7,
|
|
||||||
NEON = ARMv7,
|
|
||||||
VFP32DREGS = ARMv7,
|
|
||||||
SUDIV = ARMv7_SUDIV,
|
|
||||||
|
|
||||||
#elif V8_TARGET_ARCH_ARM64
|
|
||||||
JSCVT,
|
|
||||||
|
|
||||||
#elif V8_TARGET_ARCH_MIPS64
|
|
||||||
FPU,
|
|
||||||
FP64FPU,
|
|
||||||
MIPSr1,
|
|
||||||
MIPSr2,
|
|
||||||
MIPSr6,
|
|
||||||
MIPS_SIMD, // MSA instructions
|
|
||||||
|
|
||||||
#elif V8_TARGET_ARCH_LOONG64
|
|
||||||
FPU,
|
|
||||||
|
|
||||||
#elif V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64
|
|
||||||
PPC_6_PLUS,
|
|
||||||
PPC_7_PLUS,
|
|
||||||
PPC_8_PLUS,
|
|
||||||
PPC_9_PLUS,
|
|
||||||
PPC_10_PLUS,
|
|
||||||
|
|
||||||
#elif V8_TARGET_ARCH_S390X
|
|
||||||
FPU,
|
|
||||||
DISTINCT_OPS,
|
|
||||||
GENERAL_INSTR_EXT,
|
|
||||||
FLOATING_POINT_EXT,
|
|
||||||
VECTOR_FACILITY,
|
|
||||||
VECTOR_ENHANCE_FACILITY_1,
|
|
||||||
VECTOR_ENHANCE_FACILITY_2,
|
|
||||||
MISC_INSTR_EXT2,
|
|
||||||
|
|
||||||
#elif V8_TARGET_ARCH_RISCV64
|
|
||||||
FPU,
|
|
||||||
FP64FPU,
|
|
||||||
RISCV_SIMD,
|
|
||||||
#elif V8_TARGET_ARCH_RISCV32
|
|
||||||
FPU,
|
|
||||||
FP64FPU,
|
|
||||||
RISCV_SIMD,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NUMBER_OF_CPU_FEATURES
|
|
||||||
};
|
|
||||||
|
|
||||||
// CpuFeatures keeps track of which features are supported by the target CPU.
|
// CpuFeatures keeps track of which features are supported by the target CPU.
|
||||||
// Supported features must be enabled by a CpuFeatureScope before use.
|
// Supported features must be enabled by a CpuFeatureScope before use.
|
||||||
@ -94,7 +22,7 @@ enum CpuFeature {
|
|||||||
// } else {
|
// } else {
|
||||||
// // Generate alternative code.
|
// // Generate alternative code.
|
||||||
// }
|
// }
|
||||||
class V8_EXPORT_PRIVATE CpuFeatures : public AllStatic {
|
class V8_EXPORT CpuFeatures : public AllStatic {
|
||||||
public:
|
public:
|
||||||
CpuFeatures(const CpuFeatures&) = delete;
|
CpuFeatures(const CpuFeatures&) = delete;
|
||||||
CpuFeatures& operator=(const CpuFeatures&) = delete;
|
CpuFeatures& operator=(const CpuFeatures&) = delete;
|
||||||
@ -135,6 +63,9 @@ class V8_EXPORT_PRIVATE CpuFeatures : public AllStatic {
|
|||||||
static void PrintTarget();
|
static void PrintTarget();
|
||||||
static void PrintFeatures();
|
static void PrintFeatures();
|
||||||
|
|
||||||
|
// dont care lol
|
||||||
|
static unsigned supported_;
|
||||||
|
static bool initialized_;
|
||||||
private:
|
private:
|
||||||
friend void V8_EXPORT_PRIVATE FlushInstructionCache(void*, size_t);
|
friend void V8_EXPORT_PRIVATE FlushInstructionCache(void*, size_t);
|
||||||
friend class ExternalReference;
|
friend class ExternalReference;
|
||||||
@ -144,10 +75,8 @@ class V8_EXPORT_PRIVATE CpuFeatures : public AllStatic {
|
|||||||
// Platform-dependent implementation.
|
// Platform-dependent implementation.
|
||||||
static void ProbeImpl(bool cross_compile);
|
static void ProbeImpl(bool cross_compile);
|
||||||
|
|
||||||
static unsigned supported_;
|
|
||||||
static unsigned icache_line_size_;
|
static unsigned icache_line_size_;
|
||||||
static unsigned dcache_line_size_;
|
static unsigned dcache_line_size_;
|
||||||
static bool initialized_;
|
|
||||||
// This variable is only used for certain archs to query SupportWasmSimd128()
|
// This variable is only used for certain archs to query SupportWasmSimd128()
|
||||||
// at runtime in builtins using an extern ref. Other callers should use
|
// at runtime in builtins using an extern ref. Other callers should use
|
||||||
// CpuFeatures::SupportWasmSimd128().
|
// CpuFeatures::SupportWasmSimd128().
|
||||||
|
@ -1674,7 +1674,7 @@ DEFINE_INT(switch_table_min_cases, 6,
|
|||||||
DEFINE_BOOL(trace, false, "trace javascript function calls")
|
DEFINE_BOOL(trace, false, "trace javascript function calls")
|
||||||
|
|
||||||
// codegen.cc
|
// codegen.cc
|
||||||
DEFINE_BOOL(lazy, true, "use lazy compilation")
|
DEFINE_BOOL(lazy, false, "use lazy compilation")
|
||||||
DEFINE_BOOL(lazy_eval, true, "use lazy compilation during eval")
|
DEFINE_BOOL(lazy_eval, true, "use lazy compilation during eval")
|
||||||
DEFINE_BOOL(lazy_streaming, true,
|
DEFINE_BOOL(lazy_streaming, true,
|
||||||
"use lazy compilation during streaming compilation")
|
"use lazy compilation during streaming compilation")
|
||||||
@ -2341,7 +2341,7 @@ DEFINE_IMPLICATION(print_all_code, print_regexp_code)
|
|||||||
// Predictable mode related flags.
|
// Predictable mode related flags.
|
||||||
//
|
//
|
||||||
|
|
||||||
DEFINE_BOOL(predictable, false, "enable predictable mode")
|
DEFINE_BOOL(predictable, true, "enable predictable mode")
|
||||||
DEFINE_NEG_IMPLICATION(predictable, memory_reducer)
|
DEFINE_NEG_IMPLICATION(predictable, memory_reducer)
|
||||||
// TODO(v8:11848): These flags were recursively implied via --single-threaded
|
// TODO(v8:11848): These flags were recursively implied via --single-threaded
|
||||||
// before. Audit them, and remove any unneeded implications.
|
// before. Audit them, and remove any unneeded implications.
|
||||||
|
@ -1253,6 +1253,10 @@ Handle<String> JSFunction::ToString(Handle<JSFunction> function) {
|
|||||||
int end_position = class_positions.end();
|
int end_position = class_positions.end();
|
||||||
Handle<String> script_source(
|
Handle<String> script_source(
|
||||||
String::cast(Script::cast(shared_info->script()).source()), isolate);
|
String::cast(Script::cast(shared_info->script()).source()), isolate);
|
||||||
|
if (script_source->length() == 0) {
|
||||||
|
return isolate->factory()->NewStringFromUtf8(v8::base::VectorOf("Compiled JSFunction", 19))
|
||||||
|
.ToHandleChecked();
|
||||||
|
}
|
||||||
return isolate->factory()->NewSubString(script_source, start_position,
|
return isolate->factory()->NewSubString(script_source, start_position,
|
||||||
end_position);
|
end_position);
|
||||||
}
|
}
|
||||||
|
@ -662,7 +662,7 @@ SerializedCodeSanityCheckResult SerializedCodeData::SanityCheckJustSource(
|
|||||||
uint32_t expected_source_hash) const {
|
uint32_t expected_source_hash) const {
|
||||||
uint32_t source_hash = GetHeaderValue(kSourceHashOffset);
|
uint32_t source_hash = GetHeaderValue(kSourceHashOffset);
|
||||||
if (source_hash != expected_source_hash) {
|
if (source_hash != expected_source_hash) {
|
||||||
return SerializedCodeSanityCheckResult::kSourceMismatch;
|
//return SerializedCodeSanityCheckResult::kSourceMismatch;
|
||||||
}
|
}
|
||||||
return SerializedCodeSanityCheckResult::kSuccess;
|
return SerializedCodeSanityCheckResult::kSuccess;
|
||||||
}
|
}
|
||||||
@ -785,4 +785,4 @@ SerializedCodeData SerializedCodeData::FromPartiallySanityCheckedCachedData(
|
|||||||
}
|
}
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
} // namespace v8
|
} // namespace v8
|
||||||
|
Loading…
Reference in New Issue
Block a user