From d8c48d68308f9b107d687517b1be99655f187439 Mon Sep 17 00:00:00 2001 From: ownedbywuigi Date: Sat, 25 Apr 2026 09:49:36 +0100 Subject: [PATCH] Issue #451 part 2a - Enable OpenMP parallelization for CopyValues in SelfHosting.cpp --- js/src/moz.build | 6 +++++- js/src/vm/SelfHosting.cpp | 19 ++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/js/src/moz.build b/js/src/moz.build index cf43ed2bbe..81825bae45 100644 --- a/js/src/moz.build +++ b/js/src/moz.build @@ -325,7 +325,6 @@ main_deunified_sources = [ 'vm/Runtime.cpp', 'vm/SavedStacks.cpp', 'vm/Scope.cpp', - 'vm/SelfHosting.cpp', 'vm/Shape.cpp', 'vm/SharedArrayObject.cpp', 'vm/SharedImmutableStringsCache.cpp', @@ -400,8 +399,13 @@ SOURCES += [ 'jsutil.cpp', 'vm/BigIntType.cpp', 'vm/Initialization.cpp', + 'vm/SelfHosting.cpp', ] +if CONFIG['CC_TYPE'] == 'gcc': + SOURCES['vm/SelfHosting.cpp'].flags += ['-fopenmp'] + OS_LIBS += ['gomp'] + if CONFIG['JS_POSIX_NSPR']: posix_nspr_deunified_sources = [ 'vm/PosixNSPR.cpp', diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp index c9f290463e..26fd6cc9e1 100644 --- a/js/src/vm/SelfHosting.cpp +++ b/js/src/vm/SelfHosting.cpp @@ -1492,9 +1492,22 @@ CopyValues(SharedMem dest, SharedMem src, uint32_t count) using namespace jit; - for (; count > 0; count--) { - AtomicOperations::storeSafeWhenRacy(dest++, - To(AtomicOperations::loadSafeWhenRacy(src++))); +#if defined(_OPENMP) + const int64_t openMpCount = int64_t(count); + if (openMpCount >= (1 << 14)) { +#pragma omp parallel for default(none) shared(dest, src, openMpCount) schedule(static) + for (int64_t i = 0; i < openMpCount; i++) { + uint32_t index = uint32_t(i); + AtomicOperations::storeSafeWhenRacy(dest + index, + To(AtomicOperations::loadSafeWhenRacy(src + index))); + } + return; + } +#endif + + for (uint32_t i = 0; i < count; i++) { + AtomicOperations::storeSafeWhenRacy(dest + i, + To(AtomicOperations::loadSafeWhenRacy(src + i))); } }