зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1271565 - Add autoflush icache for aarch64 target. r=sstangl
This commit is contained in:
Родитель
8f07aa3df1
Коммит
aac6f76e6f
|
@ -296,6 +296,11 @@ class ExecutableAllocator
|
||||||
: "r" (code), "r" (reinterpret_cast<char*>(code) + size)
|
: "r" (code), "r" (reinterpret_cast<char*>(code) + size)
|
||||||
: "r0", "r1", "r2");
|
: "r0", "r1", "r2");
|
||||||
}
|
}
|
||||||
|
#elif defined(JS_CODEGEN_ARM64) && (defined(__linux__) || defined(ANDROID)) && defined(__GNUC__)
|
||||||
|
static void cacheFlush(void* code, size_t size)
|
||||||
|
{
|
||||||
|
__clear_cache(code, (void *)((size_t)code + size));
|
||||||
|
}
|
||||||
#elif JS_CPU_SPARC
|
#elif JS_CPU_SPARC
|
||||||
static void cacheFlush(void* code, size_t size)
|
static void cacheFlush(void* code, size_t size)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3333,7 +3333,7 @@ PerThreadData::setAutoFlushICache(AutoFlushICache* afc)
|
||||||
void
|
void
|
||||||
AutoFlushICache::setRange(uintptr_t start, size_t len)
|
AutoFlushICache::setRange(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_ARM64) || defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)
|
||||||
AutoFlushICache* afc = TlsPerThreadData.get()->PerThreadData::autoFlushICache();
|
AutoFlushICache* afc = TlsPerThreadData.get()->PerThreadData::autoFlushICache();
|
||||||
MOZ_ASSERT(afc);
|
MOZ_ASSERT(afc);
|
||||||
MOZ_ASSERT(!afc->start_);
|
MOZ_ASSERT(!afc->start_);
|
||||||
|
@ -3420,14 +3420,14 @@ AutoFlushICache::setInhibit()
|
||||||
// the respective AutoFlushICache dynamic context.
|
// the respective AutoFlushICache dynamic context.
|
||||||
//
|
//
|
||||||
AutoFlushICache::AutoFlushICache(const char* nonce, bool inhibit)
|
AutoFlushICache::AutoFlushICache(const char* nonce, bool inhibit)
|
||||||
#if defined(JS_CODEGEN_ARM) || 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)
|
||||||
: start_(0),
|
: start_(0),
|
||||||
stop_(0),
|
stop_(0),
|
||||||
name_(nonce),
|
name_(nonce),
|
||||||
inhibit_(inhibit)
|
inhibit_(inhibit)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#if defined(JS_CODEGEN_ARM) || 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)
|
||||||
PerThreadData* pt = TlsPerThreadData.get();
|
PerThreadData* pt = TlsPerThreadData.get();
|
||||||
AutoFlushICache* afc = pt->PerThreadData::autoFlushICache();
|
AutoFlushICache* afc = pt->PerThreadData::autoFlushICache();
|
||||||
if (afc)
|
if (afc)
|
||||||
|
@ -3442,7 +3442,7 @@ AutoFlushICache::AutoFlushICache(const char* nonce, bool inhibit)
|
||||||
|
|
||||||
AutoFlushICache::~AutoFlushICache()
|
AutoFlushICache::~AutoFlushICache()
|
||||||
{
|
{
|
||||||
#if defined(JS_CODEGEN_ARM) || 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)
|
||||||
PerThreadData* pt = TlsPerThreadData.get();
|
PerThreadData* pt = TlsPerThreadData.get();
|
||||||
MOZ_ASSERT(pt->PerThreadData::autoFlushICache() == this);
|
MOZ_ASSERT(pt->PerThreadData::autoFlushICache() == this);
|
||||||
|
|
||||||
|
|
|
@ -751,7 +751,7 @@ struct VMFunction;
|
||||||
struct AutoFlushICache
|
struct AutoFlushICache
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
#if defined(JS_CODEGEN_ARM) || 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)
|
||||||
uintptr_t start_;
|
uintptr_t start_;
|
||||||
uintptr_t stop_;
|
uintptr_t stop_;
|
||||||
const char* name_;
|
const char* name_;
|
||||||
|
|
|
@ -272,6 +272,7 @@ JitRuntime::generateEnterJIT(JSContext* cx, EnterJitType type)
|
||||||
masm.abiret();
|
masm.abiret();
|
||||||
|
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("EnterJIT");
|
||||||
JitCode* code = linker.newCode<NoGC>(cx, OTHER_CODE);
|
JitCode* code = linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
|
|
||||||
#ifdef JS_ION_PERF
|
#ifdef JS_ION_PERF
|
||||||
|
@ -313,6 +314,7 @@ JitRuntime::generateInvalidator(JSContext* cx)
|
||||||
masm.branch(bailoutTail);
|
masm.branch(bailoutTail);
|
||||||
|
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("Invalidator");
|
||||||
return linker.newCode<NoGC>(cx, OTHER_CODE);
|
return linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,6 +422,7 @@ JitRuntime::generateArgumentsRectifier(JSContext* cx, void** returnAddrOut)
|
||||||
masm.ret();
|
masm.ret();
|
||||||
|
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("ArgumentsRectifier");
|
||||||
JitCode* code = linker.newCode<NoGC>(cx, OTHER_CODE);
|
JitCode* code = linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
|
|
||||||
if (returnAddrOut)
|
if (returnAddrOut)
|
||||||
|
@ -527,6 +530,7 @@ JitRuntime::generateBailoutTable(JSContext* cx, uint32_t frameClass)
|
||||||
MacroAssembler masm;
|
MacroAssembler masm;
|
||||||
masm.breakpoint();
|
masm.breakpoint();
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("BailoutTable");
|
||||||
return linker.newCode<NoGC>(cx, OTHER_CODE);
|
return linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -541,6 +545,7 @@ JitRuntime::generateBailoutHandler(JSContext* cx)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("BailoutHandler");
|
||||||
return linker.newCode<NoGC>(cx, OTHER_CODE);
|
return linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -727,6 +732,7 @@ JitRuntime::generateVMWrapper(JSContext* cx, const VMFunction& f)
|
||||||
f.extraValuesToPop * sizeof(Value)));
|
f.extraValuesToPop * sizeof(Value)));
|
||||||
|
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("VMWrapper");
|
||||||
JitCode* wrapper = linker.newCode<NoGC>(cx, OTHER_CODE);
|
JitCode* wrapper = linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
if (!wrapper)
|
if (!wrapper)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -770,6 +776,7 @@ JitRuntime::generatePreBarrier(JSContext* cx, MIRType type)
|
||||||
masm.abiret();
|
masm.abiret();
|
||||||
|
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("PreBarrier");
|
||||||
return linker.newCode<NoGC>(cx, OTHER_CODE);
|
return linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -824,6 +831,7 @@ JitRuntime::generateDebugTrapHandler(JSContext* cx)
|
||||||
masm.abiret();
|
masm.abiret();
|
||||||
|
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("DebugTrapHandler");
|
||||||
JitCode* codeDbg = linker.newCode<NoGC>(cx, OTHER_CODE);
|
JitCode* codeDbg = linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
|
|
||||||
#ifdef JS_ION_PERF
|
#ifdef JS_ION_PERF
|
||||||
|
@ -841,6 +849,7 @@ JitRuntime::generateExceptionTailStub(JSContext* cx, void* handler)
|
||||||
masm.handleFailureWithHandlerTail(handler);
|
masm.handleFailureWithHandlerTail(handler);
|
||||||
|
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("ExceptionTailStub");
|
||||||
JitCode* code = linker.newCode<NoGC>(cx, OTHER_CODE);
|
JitCode* code = linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
|
|
||||||
#ifdef JS_ION_PERF
|
#ifdef JS_ION_PERF
|
||||||
|
@ -858,6 +867,7 @@ JitRuntime::generateBailoutTailStub(JSContext* cx)
|
||||||
masm.generateBailoutTail(r1, r2);
|
masm.generateBailoutTail(r1, r2);
|
||||||
|
|
||||||
Linker linker(masm);
|
Linker linker(masm);
|
||||||
|
AutoFlushICache afc("BailoutTailStub");
|
||||||
JitCode* code = linker.newCode<NoGC>(cx, OTHER_CODE);
|
JitCode* code = linker.newCode<NoGC>(cx, OTHER_CODE);
|
||||||
|
|
||||||
#ifdef JS_ION_PERF
|
#ifdef JS_ION_PERF
|
||||||
|
|
Загрузка…
Ссылка в новой задаче