From 2a171ff52ad1c76fc15b5e0f5a824d47e8fc5a63 Mon Sep 17 00:00:00 2001 From: Basilisk-Dev Date: Fri, 24 Apr 2026 21:40:37 -0400 Subject: [PATCH] Issue #3049 - Re-enable loongarch64 asm.js and native regexp --- dom/workers/RuntimeService.cpp | 9 --------- js/src/irregexp/NativeRegExpMacroAssembler.cpp | 4 ++-- js/src/irregexp/RegExpEngine.cpp | 2 +- js/xpconnect/src/XPCJSContext.cpp | 6 ------ modules/libpref/init/all.js | 14 -------------- 5 files changed, 3 insertions(+), 32 deletions(-) diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp index 3eb769a150..14ec577748 100644 --- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp @@ -293,16 +293,7 @@ LoadContextOptions(const char* aPrefName, void* /* aClosure */) bool useAsmJS = GetWorkerPref(NS_LITERAL_CSTRING("asmjs")); bool useWasm = GetWorkerPref(NS_LITERAL_CSTRING("wasm")); bool useIon = GetWorkerPref(NS_LITERAL_CSTRING("ion")); - -#if defined(JS_CODEGEN_LOONGARCH64) - // asm.js is still disabled on loongarch64 workers. - useAsmJS = false; -#endif - bool useNativeRegExp = GetWorkerPref(NS_LITERAL_CSTRING("native_regexp")); -#if defined(JS_CODEGEN_LOONGARCH64) - useNativeRegExp = false; -#endif JS::ContextOptions contextOptions; contextOptions.setAsmJS(useAsmJS) diff --git a/js/src/irregexp/NativeRegExpMacroAssembler.cpp b/js/src/irregexp/NativeRegExpMacroAssembler.cpp index 7787fb07ee..a022210f6f 100644 --- a/js/src/irregexp/NativeRegExpMacroAssembler.cpp +++ b/js/src/irregexp/NativeRegExpMacroAssembler.cpp @@ -424,7 +424,7 @@ NativeRegExpMacroAssembler::GenerateCode(JSContext* cx, bool match_only) LiveGeneralRegisterSet volatileRegs(GeneralRegisterSet::Volatile()); #if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) volatileRegs.add(Register::FromCode(Registers::lr)); -#elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || defined(JS_CODEGEN_LOONGARCH64) volatileRegs.add(Register::FromCode(Registers::ra)); #endif volatileRegs.takeUnchecked(temp0); @@ -1365,7 +1365,7 @@ NativeRegExpMacroAssembler::CanReadUnaligned() { #if defined(JS_CODEGEN_ARM) return !jit::HasAlignmentFault(); -#elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || defined(JS_CODEGEN_LOONGARCH64) return false; #else return true; diff --git a/js/src/irregexp/RegExpEngine.cpp b/js/src/irregexp/RegExpEngine.cpp index 058f3ba354..6df32b0a7c 100644 --- a/js/src/irregexp/RegExpEngine.cpp +++ b/js/src/irregexp/RegExpEngine.cpp @@ -1251,7 +1251,7 @@ SampleChars(FrequencyCollator* collator, const CharT* chars, size_t length) static bool IsNativeRegExpEnabled(JSContext* cx) { -#if defined(JS_CODEGEN_NONE) || defined(JS_CODEGEN_LOONGARCH64) +#if defined(JS_CODEGEN_NONE) return false; #else return cx->options().nativeRegExp(); diff --git a/js/xpconnect/src/XPCJSContext.cpp b/js/xpconnect/src/XPCJSContext.cpp index cda4893717..3ca3da6b8b 100644 --- a/js/xpconnect/src/XPCJSContext.cpp +++ b/js/xpconnect/src/XPCJSContext.cpp @@ -1420,12 +1420,6 @@ ReloadPrefsCallback(const char* pref, void* data) "throw_on_asmjs_validation_failure"); bool useNativeRegExp = Preferences::GetBool(JS_OPTIONS_DOT_STR "native_regexp") && !safeMode; -#if defined(JS_CODEGEN_LOONGARCH64) - // asm.js and native regexp JIT are still disabled on loongarch64. - useAsmJS = false; - useNativeRegExp = false; -#endif - bool parallelParsing = Preferences::GetBool(JS_OPTIONS_DOT_STR "parallel_parsing"); bool offthreadIonCompilation = Preferences::GetBool(JS_OPTIONS_DOT_STR "ion.offthread_compilation"); diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index 6621a5b7f6..20c16af7fe 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -1263,11 +1263,6 @@ pref("javascript.options.strict.debug", false); #endif pref("javascript.options.unboxed_objects", false); pref("javascript.options.baselinejit", true); -#if defined(JS_CODEGEN_LOONGARCH64) -pref("javascript.options.ion", true); -pref("javascript.options.asmjs", false); -pref("javascript.options.wasm", true); -#else pref("javascript.options.ion", true); // JIT warm-up thresholds (-1 keeps engine defaults). // Lower values can improve sustained throughput on large script bundles @@ -1276,24 +1271,15 @@ pref("javascript.options.baselinejit.threshold", 6); pref("javascript.options.ion.threshold", 50); pref("javascript.options.asmjs", true); pref("javascript.options.wasm", true); -#endif pref("javascript.options.ion.inlining", true); // wasm jit crashes in 32bit builds because of 64bit casts so // only enable it by default for 64bit builds #ifdef HAVE_64BIT_BUILD -# if defined(JS_CODEGEN_LOONGARCH64) pref("javascript.options.wasm_baselinejit", true); -# else -pref("javascript.options.wasm_baselinejit", true); -# endif #else pref("javascript.options.wasm_baselinejit", false); #endif -#ifdef JS_CODEGEN_LOONGARCH64 -pref("javascript.options.native_regexp", false); -#else pref("javascript.options.native_regexp", true); -#endif pref("javascript.options.parallel_parsing", true); // asyncstack is used for debugging promises in devtools. pref("javascript.options.asyncstack", false);