diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp index 1a949fae62..8e28a93c0e 100644 --- a/js/src/jit/Ion.cpp +++ b/js/src/jit/Ion.cpp @@ -3341,7 +3341,9 @@ PerThreadData::setAutoFlushICache(AutoFlushICache* afc) void AutoFlushICache::setRange(uintptr_t start, size_t len) { -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \ + defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \ + defined(JS_CODEGEN_LOONGARCH64) AutoFlushICache* afc = TlsPerThreadData.get()->PerThreadData::autoFlushICache(); MOZ_ASSERT(afc); MOZ_ASSERT(!afc->start_); @@ -3374,7 +3376,8 @@ AutoFlushICache::setRange(uintptr_t start, size_t len) void AutoFlushICache::flush(uintptr_t start, size_t len) { -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS32) || \ + defined(JS_CODEGEN_MIPS64) || defined(JS_CODEGEN_LOONGARCH64) PerThreadData* pt = TlsPerThreadData.get(); AutoFlushICache* afc = pt ? pt->PerThreadData::autoFlushICache() : nullptr; if (!afc) { @@ -3401,7 +3404,8 @@ AutoFlushICache::flush(uintptr_t start, size_t len) void AutoFlushICache::setInhibit() { -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS32) || \ + defined(JS_CODEGEN_MIPS64) || defined(JS_CODEGEN_LOONGARCH64) AutoFlushICache* afc = TlsPerThreadData.get()->PerThreadData::autoFlushICache(); MOZ_ASSERT(afc); MOZ_ASSERT(afc->start_); @@ -3428,14 +3432,18 @@ AutoFlushICache::setInhibit() // the respective AutoFlushICache dynamic context. // AutoFlushICache::AutoFlushICache(const char* nonce, bool inhibit) -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \ + defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \ + defined(JS_CODEGEN_LOONGARCH64) : start_(0), stop_(0), name_(nonce), inhibit_(inhibit) #endif { -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \ + defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \ + defined(JS_CODEGEN_LOONGARCH64) PerThreadData* pt = TlsPerThreadData.get(); AutoFlushICache* afc = pt->PerThreadData::autoFlushICache(); if (afc) @@ -3450,7 +3458,9 @@ AutoFlushICache::AutoFlushICache(const char* nonce, bool inhibit) AutoFlushICache::~AutoFlushICache() { -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \ + defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \ + defined(JS_CODEGEN_LOONGARCH64) PerThreadData* pt = TlsPerThreadData.get(); MOZ_ASSERT(pt->PerThreadData::autoFlushICache() == this); diff --git a/js/src/jit/IonCode.h b/js/src/jit/IonCode.h index 2d9469dead..e749738c82 100644 --- a/js/src/jit/IonCode.h +++ b/js/src/jit/IonCode.h @@ -747,7 +747,9 @@ struct VMFunction; struct AutoFlushICache { private: -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \ + defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \ + defined(JS_CODEGEN_LOONGARCH64) uintptr_t start_; uintptr_t stop_; const char* name_; diff --git a/js/src/jit/RegisterAllocator.h b/js/src/jit/RegisterAllocator.h index 97333fbdca..8b5d0736a6 100644 --- a/js/src/jit/RegisterAllocator.h +++ b/js/src/jit/RegisterAllocator.h @@ -282,7 +282,8 @@ class RegisterAllocator if (mir->compilingWasm()) { #if defined(JS_CODEGEN_X64) allRegisters_.take(AnyRegister(HeapReg)); -#elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS32) || \ + defined(JS_CODEGEN_MIPS64) || defined(JS_CODEGEN_LOONGARCH64) allRegisters_.take(AnyRegister(HeapReg)); allRegisters_.take(AnyRegister(GlobalReg)); #elif defined(JS_CODEGEN_ARM64) diff --git a/js/src/wasm/WasmBaselineCompile.cpp b/js/src/wasm/WasmBaselineCompile.cpp index dfb85d0f77..41eb0e76d6 100644 --- a/js/src/wasm/WasmBaselineCompile.cpp +++ b/js/src/wasm/WasmBaselineCompile.cpp @@ -7740,7 +7740,8 @@ BaseCompiler::BaseCompiler(const ModuleGeneratorData& mg, availGPR_.take(GlobalReg); #elif defined(JS_CODEGEN_X86) availGPR_.take(ScratchRegX86); -#elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#elif defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \ + defined(JS_CODEGEN_LOONGARCH64) availGPR_.take(HeapReg); availGPR_.take(GlobalReg); #endif diff --git a/js/src/wasm/WasmFrameIterator.cpp b/js/src/wasm/WasmFrameIterator.cpp index bf0de18e7b..4ba7a73b45 100644 --- a/js/src/wasm/WasmFrameIterator.cpp +++ b/js/src/wasm/WasmFrameIterator.cpp @@ -649,10 +649,11 @@ ProfilingFrameIterator::ProfilingFrameIterator(const WasmActivation& activation, MOZ_ASSERT(offsetInModule < codeRange->end()); uint32_t offsetInCodeRange = offsetInModule - codeRange->begin(); void** sp = (void**)state.sp; -#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS32) || \ + defined(JS_CODEGEN_MIPS64) || defined(JS_CODEGEN_LOONGARCH64) if (offsetInCodeRange < PushedRetAddr || InThunk(*codeRange, offsetInModule)) { - // First instruction of the ARM/MIPS function; the return address is - // still in lr and fp still holds the caller's fp. + // First instruction of the ARM/MIPS/loongarch64 function; the + // return address is still in lr and fp still holds the caller's fp. callerPC_ = state.lr; callerFP_ = fp; AssertMatchesCallSite(*activation_, callerPC_, callerFP_, sp - 2); diff --git a/js/src/wasm/WasmModule.cpp b/js/src/wasm/WasmModule.cpp index 69a0bdbcaa..09cd1c486b 100644 --- a/js/src/wasm/WasmModule.cpp +++ b/js/src/wasm/WasmModule.cpp @@ -38,8 +38,10 @@ using mozilla::IsNaN; const char wasm::InstanceExportField[] = "exports"; -#if defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) -// On MIPS, CodeLabels are instruction immediates so InternalLinks only +#if defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \ + defined(JS_CODEGEN_LOONGARCH64) +// On MIPS and loongarch64, CodeLabels are instruction immediates so +// InternalLinks only // patch instruction immediates. LinkData::InternalLink::InternalLink(Kind kind) { diff --git a/js/src/wasm/WasmStubs.cpp b/js/src/wasm/WasmStubs.cpp index 0fa62e608c..e959227f25 100644 --- a/js/src/wasm/WasmStubs.cpp +++ b/js/src/wasm/WasmStubs.cpp @@ -566,11 +566,13 @@ wasm::GenerateImportInterpExit(MacroAssembler& masm, const FuncImport& fi, uint3 MOZ_ASSERT(NonVolatileRegs.has(WasmTlsReg)); #if defined(JS_CODEGEN_X64) || \ defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \ - defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) + defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \ + defined(JS_CODEGEN_LOONGARCH64) MOZ_ASSERT(NonVolatileRegs.has(HeapReg)); #endif #if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \ - defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) + defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \ + defined(JS_CODEGEN_LOONGARCH64) MOZ_ASSERT(NonVolatileRegs.has(GlobalReg)); #endif