mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-30 13:45:27 +00:00
Bug 1288222 - Baldr: factor out common global access code (r=bbouvier)
MozReview-Commit-ID: 5NOGyihk8s --HG-- extra : rebase_source : 622fa7961d494a252ef2a7c5c04959904965ce96
This commit is contained in:
parent
f58ed6912f
commit
fc7d4e3d39
@ -2057,25 +2057,11 @@ class BaseCompiler
|
|||||||
masm.move32(Imm32(sigIndex), WasmTableCallSigReg);
|
masm.move32(Imm32(sigIndex), WasmTableCallSigReg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(JS_CODEGEN_X64)
|
|
||||||
// CodeGeneratorX64::visitAsmJSLoadFuncPtr()
|
|
||||||
{
|
{
|
||||||
ScratchI32 scratch(*this);
|
ScratchI32 scratch(*this);
|
||||||
CodeOffset label = masm.loadRipRelativeInt64(scratch);
|
masm.loadWasmGlobalPtr(globalDataOffset, scratch);
|
||||||
masm.append(GlobalAccess(label, globalDataOffset));
|
masm.loadPtr(BaseIndex(scratch, ptrReg, ScalePointer, 0), ptrReg);
|
||||||
masm.loadPtr(Operand(scratch, ptrReg, ScalePointer, 0), ptrReg);
|
|
||||||
}
|
}
|
||||||
#elif defined(JS_CODEGEN_X86)
|
|
||||||
// CodeGeneratorX86::visitAsmJSLoadFuncPtr()
|
|
||||||
{
|
|
||||||
ScratchI32 scratch(*this);
|
|
||||||
CodeOffset label = masm.movlWithPatch(PatchedAbsoluteAddress(), scratch);
|
|
||||||
masm.append(GlobalAccess(label, globalDataOffset));
|
|
||||||
masm.loadPtr(Operand(scratch, ptrReg, ScalePointer), ptrReg);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
MOZ_CRASH("BaseCompiler platform hook: funcPtrCall");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
callDynamic(ptrReg, call);
|
callDynamic(ptrReg, call);
|
||||||
}
|
}
|
||||||
@ -2085,18 +2071,7 @@ class BaseCompiler
|
|||||||
void ffiCall(unsigned globalDataOffset, const FunctionCall& call)
|
void ffiCall(unsigned globalDataOffset, const FunctionCall& call)
|
||||||
{
|
{
|
||||||
Register ptrReg = WasmTableCallPtrReg;
|
Register ptrReg = WasmTableCallPtrReg;
|
||||||
|
masm.loadWasmGlobalPtr(globalDataOffset, ptrReg);
|
||||||
#if defined(JS_CODEGEN_X64)
|
|
||||||
// CodeGeneratorX64::visitAsmJSLoadFFIFunc()
|
|
||||||
CodeOffset label = masm.loadRipRelativeInt64(ptrReg);
|
|
||||||
masm.append(GlobalAccess(label, globalDataOffset));
|
|
||||||
#elif defined(JS_CODEGEN_X86)
|
|
||||||
// CodeGeneratorX86::visitAsmJSLoadFFIFunc()
|
|
||||||
CodeOffset label = masm.movlWithPatch(PatchedAbsoluteAddress(), ptrReg);
|
|
||||||
masm.append(GlobalAccess(label, globalDataOffset));
|
|
||||||
#else
|
|
||||||
MOZ_CRASH("BaseCompiler platform hook: ffiCall");
|
|
||||||
#endif
|
|
||||||
callDynamic(ptrReg, call);
|
callDynamic(ptrReg, call);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11228,6 +11228,29 @@ CodeGenerator::visitAsmJSVoidReturn(LAsmJSVoidReturn* lir)
|
|||||||
masm.jump(&returnLabel_);
|
masm.jump(&returnLabel_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeGenerator::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins)
|
||||||
|
{
|
||||||
|
const MAsmJSLoadFuncPtr* mir = ins->mir();
|
||||||
|
|
||||||
|
Register index = ToRegister(ins->index());
|
||||||
|
Register out = ToRegister(ins->output());
|
||||||
|
|
||||||
|
if (mir->hasLimit()) {
|
||||||
|
masm.branch32(Assembler::Condition::AboveOrEqual, index, Imm32(mir->limit()),
|
||||||
|
wasm::JumpTarget::OutOfBounds);
|
||||||
|
}
|
||||||
|
|
||||||
|
masm.loadWasmGlobalPtr(mir->globalDataOffset(), out);
|
||||||
|
masm.loadPtr(BaseIndex(out, index, ScalePointer), out);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeGenerator::visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins)
|
||||||
|
{
|
||||||
|
masm.loadWasmGlobalPtr(ins->mir()->globalDataOffset(), ToRegister(ins->output()));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CodeGenerator::emitAssertRangeI(const Range* r, Register input)
|
CodeGenerator::emitAssertRangeI(const Range* r, Register input)
|
||||||
{
|
{
|
||||||
|
@ -363,6 +363,8 @@ class CodeGenerator final : public CodeGeneratorSpecific
|
|||||||
void visitAsmJSParameter(LAsmJSParameter* lir);
|
void visitAsmJSParameter(LAsmJSParameter* lir);
|
||||||
void visitAsmJSReturn(LAsmJSReturn* ret);
|
void visitAsmJSReturn(LAsmJSReturn* ret);
|
||||||
void visitAsmJSVoidReturn(LAsmJSVoidReturn* ret);
|
void visitAsmJSVoidReturn(LAsmJSVoidReturn* ret);
|
||||||
|
void visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins);
|
||||||
|
void visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins);
|
||||||
void visitLexicalCheck(LLexicalCheck* ins);
|
void visitLexicalCheck(LLexicalCheck* ins);
|
||||||
void visitThrowRuntimeLexicalError(LThrowRuntimeLexicalError* ins);
|
void visitThrowRuntimeLexicalError(LThrowRuntimeLexicalError* ins);
|
||||||
void visitGlobalNameConflictsCheck(LGlobalNameConflictsCheck* ins);
|
void visitGlobalNameConflictsCheck(LGlobalNameConflictsCheck* ins);
|
||||||
|
@ -1266,6 +1266,9 @@ class MacroAssembler : public MacroAssemblerSpecific
|
|||||||
void loadJitActivation(Register dest) {
|
void loadJitActivation(Register dest) {
|
||||||
loadPtr(AbsoluteAddress(GetJitContext()->runtime->addressOfActivation()), dest);
|
loadPtr(AbsoluteAddress(GetJitContext()->runtime->addressOfActivation()), dest);
|
||||||
}
|
}
|
||||||
|
void loadWasmActivation(Register dest) {
|
||||||
|
loadWasmGlobalPtr(wasm::ActivationGlobalDataOffset, dest);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void loadTypedOrValue(const T& src, TypedOrValueRegister dest) {
|
void loadTypedOrValue(const T& src, TypedOrValueRegister dest) {
|
||||||
|
@ -2752,32 +2752,6 @@ CodeGeneratorARM::visitWasmStoreGlobalVar(LWasmStoreGlobalVar* ins)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorARM::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins)
|
|
||||||
{
|
|
||||||
const MAsmJSLoadFuncPtr* mir = ins->mir();
|
|
||||||
|
|
||||||
Register index = ToRegister(ins->index());
|
|
||||||
Register out = ToRegister(ins->output());
|
|
||||||
|
|
||||||
if (mir->hasLimit()) {
|
|
||||||
masm.branch32(Assembler::Condition::AboveOrEqual, index, Imm32(mir->limit()),
|
|
||||||
wasm::JumpTarget::OutOfBounds);
|
|
||||||
}
|
|
||||||
|
|
||||||
masm.ma_ldr(Address(GlobalReg, mir->globalDataOffset() - AsmJSGlobalRegBias), out);
|
|
||||||
masm.ma_ldr(DTRAddr(out, DtrRegImmShift(index, LSL, 2)), out);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorARM::visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins)
|
|
||||||
{
|
|
||||||
const MAsmJSLoadFFIFunc* mir = ins->mir();
|
|
||||||
|
|
||||||
masm.ma_ldr(Address(GlobalReg, mir->globalDataOffset() - AsmJSGlobalRegBias),
|
|
||||||
ToRegister(ins->output()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CodeGeneratorARM::visitNegI(LNegI* ins)
|
CodeGeneratorARM::visitNegI(LNegI* ins)
|
||||||
{
|
{
|
||||||
|
@ -217,8 +217,6 @@ class CodeGeneratorARM : public CodeGeneratorShared
|
|||||||
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
||||||
void visitAsmJSAtomicBinopHeapForEffect(LAsmJSAtomicBinopHeapForEffect* ins);
|
void visitAsmJSAtomicBinopHeapForEffect(LAsmJSAtomicBinopHeapForEffect* ins);
|
||||||
void visitAsmJSAtomicBinopCallout(LAsmJSAtomicBinopCallout* ins);
|
void visitAsmJSAtomicBinopCallout(LAsmJSAtomicBinopCallout* ins);
|
||||||
void visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins);
|
|
||||||
void visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins);
|
|
||||||
void visitAsmJSPassStackArg(LAsmJSPassStackArg* ins);
|
void visitAsmJSPassStackArg(LAsmJSPassStackArg* ins);
|
||||||
void visitWasmTruncateToInt32(LWasmTruncateToInt32* ins);
|
void visitWasmTruncateToInt32(LWasmTruncateToInt32* ins);
|
||||||
void visitOutOfLineWasmTruncateCheck(OutOfLineWasmTruncateCheck* ool);
|
void visitOutOfLineWasmTruncateCheck(OutOfLineWasmTruncateCheck* ool);
|
||||||
|
@ -1438,12 +1438,13 @@ class MacroAssemblerARMCompat : public MacroAssemblerARM
|
|||||||
as_vmov(VFPRegister(dest).singleOverlay(), VFPRegister(src).singleOverlay(), cc);
|
as_vmov(VFPRegister(dest).singleOverlay(), VFPRegister(src).singleOverlay(), cc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadWasmActivation(Register dest) {
|
void loadWasmGlobalPtr(uint32_t globalDataOffset, Register dest) {
|
||||||
loadPtr(Address(GlobalReg, wasm::ActivationGlobalDataOffset - AsmJSGlobalRegBias), dest);
|
loadPtr(Address(GlobalReg, globalDataOffset - AsmJSGlobalRegBias), dest);
|
||||||
}
|
}
|
||||||
void loadAsmJSHeapRegisterFromGlobalData() {
|
void loadAsmJSHeapRegisterFromGlobalData() {
|
||||||
loadPtr(Address(GlobalReg, wasm::HeapGlobalDataOffset - AsmJSGlobalRegBias), HeapReg);
|
loadWasmGlobalPtr(wasm::HeapGlobalDataOffset, HeapReg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Instrumentation for entering and leaving the profiler.
|
// Instrumentation for entering and leaving the profiler.
|
||||||
void profilerEnterFrame(Register framePtr, Register scratch);
|
void profilerEnterFrame(Register framePtr, Register scratch);
|
||||||
void profilerExitFrame();
|
void profilerExitFrame();
|
||||||
|
@ -703,18 +703,6 @@ CodeGeneratorARM64::visitWasmStoreGlobalVar(LWasmStoreGlobalVar* ins)
|
|||||||
MOZ_CRASH("visitWasmStoreGlobalVar");
|
MOZ_CRASH("visitWasmStoreGlobalVar");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorARM64::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins)
|
|
||||||
{
|
|
||||||
MOZ_CRASH("visitAsmJSLoadFuncPtr");
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorARM64::visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins)
|
|
||||||
{
|
|
||||||
MOZ_CRASH("visitAsmJSLoadFFIFunc");
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CodeGeneratorARM64::visitNegI(LNegI* ins)
|
CodeGeneratorARM64::visitNegI(LNegI* ins)
|
||||||
{
|
{
|
||||||
|
@ -203,8 +203,6 @@ class CodeGeneratorARM64 : public CodeGeneratorShared
|
|||||||
void visitAsmJSStoreHeap(LAsmJSStoreHeap* ins);
|
void visitAsmJSStoreHeap(LAsmJSStoreHeap* ins);
|
||||||
void visitAsmJSCompareExchangeHeap(LAsmJSCompareExchangeHeap* ins);
|
void visitAsmJSCompareExchangeHeap(LAsmJSCompareExchangeHeap* ins);
|
||||||
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
||||||
void visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins);
|
|
||||||
void visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins);
|
|
||||||
void visitAsmJSPassStackArg(LAsmJSPassStackArg* ins);
|
void visitAsmJSPassStackArg(LAsmJSPassStackArg* ins);
|
||||||
|
|
||||||
void visitWasmLoadGlobalVar(LWasmLoadGlobalVar* ins);
|
void visitWasmLoadGlobalVar(LWasmLoadGlobalVar* ins);
|
||||||
|
@ -2305,12 +2305,12 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadWasmActivation(Register dest) {
|
void loadWasmGlobalPtr(uint32_t globalDataOffset, Register dest) {
|
||||||
loadPtr(Address(GlobalReg, wasm::ActivationGlobalDataOffset - AsmJSGlobalRegBias), dest);
|
loadPtr(Address(GlobalReg, globalDataOffset - AsmJSGlobalRegBias), dest);
|
||||||
}
|
}
|
||||||
void loadAsmJSHeapRegisterFromGlobalData() {
|
void loadAsmJSHeapRegisterFromGlobalData() {
|
||||||
loadPtr(Address(GlobalReg, wasm::HeapGlobalDataOffset - AsmJSGlobalRegBias), HeapReg);
|
loadWasmGlobalPtr(wasm::HeapGlobalDataOffset, HeapReg);
|
||||||
loadPtr(Address(GlobalReg, wasm::HeapGlobalDataOffset - AsmJSGlobalRegBias + 8), HeapLenReg);
|
loadWasmGlobalPtr(wasm::HeapGlobalDataOffset + 8, HeapLenReg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overwrites the payload bits of a dest register containing a Value.
|
// Overwrites the payload bits of a dest register containing a Value.
|
||||||
|
@ -2262,32 +2262,6 @@ CodeGeneratorMIPSShared::visitWasmStoreGlobalVar(LWasmStoreGlobalVar* ins)
|
|||||||
masm.storeDouble(ToFloatRegister(ins->value()), Address(GlobalReg, addr));
|
masm.storeDouble(ToFloatRegister(ins->value()), Address(GlobalReg, addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorMIPSShared::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins)
|
|
||||||
{
|
|
||||||
const MAsmJSLoadFuncPtr* mir = ins->mir();
|
|
||||||
|
|
||||||
Register index = ToRegister(ins->index());
|
|
||||||
Register out = ToRegister(ins->output());
|
|
||||||
unsigned addr = mir->globalDataOffset() - AsmJSGlobalRegBias;
|
|
||||||
|
|
||||||
if (mir->hasLimit()) {
|
|
||||||
masm.branch32(Assembler::Condition::AboveOrEqual, index, Imm32(mir->limit()),
|
|
||||||
wasm::JumpTarget::OutOfBounds);
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseIndex source(GlobalReg, index, ScalePointer, addr);
|
|
||||||
masm.loadPtr(source, out);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorMIPSShared::visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins)
|
|
||||||
{
|
|
||||||
const MAsmJSLoadFFIFunc* mir = ins->mir();
|
|
||||||
masm.loadPtr(Address(GlobalReg, mir->globalDataOffset() - AsmJSGlobalRegBias),
|
|
||||||
ToRegister(ins->output()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CodeGeneratorMIPSShared::visitNegI(LNegI* ins)
|
CodeGeneratorMIPSShared::visitNegI(LNegI* ins)
|
||||||
{
|
{
|
||||||
|
@ -204,8 +204,6 @@ class CodeGeneratorMIPSShared : public CodeGeneratorShared
|
|||||||
void visitAsmJSAtomicExchangeHeap(LAsmJSAtomicExchangeHeap* ins);
|
void visitAsmJSAtomicExchangeHeap(LAsmJSAtomicExchangeHeap* ins);
|
||||||
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
||||||
void visitAsmJSAtomicBinopHeapForEffect(LAsmJSAtomicBinopHeapForEffect* ins);
|
void visitAsmJSAtomicBinopHeapForEffect(LAsmJSAtomicBinopHeapForEffect* ins);
|
||||||
void visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins);
|
|
||||||
void visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins);
|
|
||||||
|
|
||||||
void visitAsmJSPassStackArg(LAsmJSPassStackArg* ins);
|
void visitAsmJSPassStackArg(LAsmJSPassStackArg* ins);
|
||||||
void visitAsmSelect(LAsmSelect* ins);
|
void visitAsmSelect(LAsmSelect* ins);
|
||||||
|
@ -998,12 +998,12 @@ class MacroAssemblerMIPSCompat : public MacroAssemblerMIPS
|
|||||||
as_movs(dest, src);
|
as_movs(dest, src);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadWasmActivation(Register dest) {
|
void loadWasmGlobalPtr(uint32_t globalDataOffset, Register dest) {
|
||||||
loadPtr(Address(GlobalReg, wasm::ActivationGlobalDataOffset - AsmJSGlobalRegBias), dest);
|
loadPtr(Address(GlobalReg, globalDataOffset - AsmJSGlobalRegBias), dest);
|
||||||
}
|
}
|
||||||
void loadAsmJSHeapRegisterFromGlobalData() {
|
void loadAsmJSHeapRegisterFromGlobalData() {
|
||||||
MOZ_ASSERT(Imm16::IsInSignedRange(wasm::HeapGlobalDataOffset - AsmJSGlobalRegBias));
|
MOZ_ASSERT(Imm16::IsInSignedRange(wasm::HeapGlobalDataOffset - AsmJSGlobalRegBias));
|
||||||
loadPtr(Address(GlobalReg, wasm::HeapGlobalDataOffset - AsmJSGlobalRegBias), HeapReg);
|
loadWasmGlobalPtr(wasm::HeapGlobalDataOffset, HeapReg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Instrumentation for entering and leaving the profiler.
|
// Instrumentation for entering and leaving the profiler.
|
||||||
|
@ -1000,12 +1000,12 @@ class MacroAssemblerMIPS64Compat : public MacroAssemblerMIPS64
|
|||||||
as_movs(dest, src);
|
as_movs(dest, src);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadWasmActivation(Register dest) {
|
void loadWasmGlobalPtr(uint32_t globalDataOffset, Register dest) {
|
||||||
loadPtr(Address(GlobalReg, wasm::ActivationGlobalDataOffset - AsmJSGlobalRegBias), dest);
|
loadPtr(Address(GlobalReg, globalDataOffset - AsmJSGlobalRegBias), dest);
|
||||||
}
|
}
|
||||||
void loadAsmJSHeapRegisterFromGlobalData() {
|
void loadAsmJSHeapRegisterFromGlobalData() {
|
||||||
MOZ_ASSERT(Imm16::IsInSignedRange(wasm::HeapGlobalDataOffset - AsmJSGlobalRegBias));
|
MOZ_ASSERT(Imm16::IsInSignedRange(wasm::HeapGlobalDataOffset - AsmJSGlobalRegBias));
|
||||||
loadPtr(Address(GlobalReg, wasm::HeapGlobalDataOffset - AsmJSGlobalRegBias), HeapReg);
|
loadWasmGlobalPtr(wasm::HeapGlobalDataOffset, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Instrumentation for entering and leaving the profiler.
|
// Instrumentation for entering and leaving the profiler.
|
||||||
|
@ -405,6 +405,7 @@ class MacroAssemblerNone : public Assembler
|
|||||||
|
|
||||||
void buildFakeExitFrame(Register, uint32_t*) { MOZ_CRASH(); }
|
void buildFakeExitFrame(Register, uint32_t*) { MOZ_CRASH(); }
|
||||||
bool buildOOLFakeExitFrame(void*) { MOZ_CRASH(); }
|
bool buildOOLFakeExitFrame(void*) { MOZ_CRASH(); }
|
||||||
|
void loadWasmGlobalPtr(uint32_t, Register) { MOZ_CRASH(); }
|
||||||
void loadWasmActivation(Register) { MOZ_CRASH(); }
|
void loadWasmActivation(Register) { MOZ_CRASH(); }
|
||||||
void loadAsmJSHeapRegisterFromGlobalData() { MOZ_CRASH(); }
|
void loadAsmJSHeapRegisterFromGlobalData() { MOZ_CRASH(); }
|
||||||
|
|
||||||
|
@ -825,13 +825,12 @@ class Assembler : public AssemblerX86Shared
|
|||||||
return CodeOffset(masm.leaq_rip(dest.encoding()).offset());
|
return CodeOffset(masm.leaq_rip(dest.encoding()).offset());
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadWasmActivation(Register dest) {
|
void loadWasmGlobalPtr(uint32_t globalDataOffset, Register dest) {
|
||||||
CodeOffset label = loadRipRelativeInt64(dest);
|
CodeOffset label = loadRipRelativeInt64(dest);
|
||||||
append(wasm::GlobalAccess(label, wasm::ActivationGlobalDataOffset));
|
append(wasm::GlobalAccess(label, globalDataOffset));
|
||||||
}
|
}
|
||||||
void loadAsmJSHeapRegisterFromGlobalData() {
|
void loadAsmJSHeapRegisterFromGlobalData() {
|
||||||
CodeOffset label = loadRipRelativeInt64(HeapReg);
|
loadWasmGlobalPtr(wasm::HeapGlobalDataOffset, HeapReg);
|
||||||
append(wasm::GlobalAccess(label, wasm::HeapGlobalDataOffset));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmpq(Register rhs, Register lhs) {
|
void cmpq(Register rhs, Register lhs) {
|
||||||
|
@ -1246,34 +1246,6 @@ CodeGeneratorX64::visitWasmStoreGlobalVar(LWasmStoreGlobalVar* ins)
|
|||||||
masm.append(wasm::GlobalAccess(label, mir->globalDataOffset()));
|
masm.append(wasm::GlobalAccess(label, mir->globalDataOffset()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorX64::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins)
|
|
||||||
{
|
|
||||||
const MAsmJSLoadFuncPtr* mir = ins->mir();
|
|
||||||
|
|
||||||
Register index = ToRegister(ins->index());
|
|
||||||
Register out = ToRegister(ins->output());
|
|
||||||
|
|
||||||
if (mir->hasLimit()) {
|
|
||||||
masm.branch32(Assembler::Condition::AboveOrEqual, index, Imm32(mir->limit()),
|
|
||||||
wasm::JumpTarget::OutOfBounds);
|
|
||||||
}
|
|
||||||
|
|
||||||
CodeOffset label = masm.loadRipRelativeInt64(out);
|
|
||||||
masm.append(wasm::GlobalAccess(label, mir->globalDataOffset()));
|
|
||||||
|
|
||||||
masm.loadPtr(Operand(out, index, ScalePointer, 0), out);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorX64::visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins)
|
|
||||||
{
|
|
||||||
MAsmJSLoadFFIFunc* mir = ins->mir();
|
|
||||||
|
|
||||||
CodeOffset label = masm.loadRipRelativeInt64(ToRegister(ins->output()));
|
|
||||||
masm.append(wasm::GlobalAccess(label, mir->globalDataOffset()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CodeGeneratorX64::visitTruncateDToInt32(LTruncateDToInt32* ins)
|
CodeGeneratorX64::visitTruncateDToInt32(LTruncateDToInt32* ins)
|
||||||
{
|
{
|
||||||
|
@ -85,8 +85,6 @@ class CodeGeneratorX64 : public CodeGeneratorX86Shared
|
|||||||
void visitAsmJSAtomicExchangeHeap(LAsmJSAtomicExchangeHeap* ins);
|
void visitAsmJSAtomicExchangeHeap(LAsmJSAtomicExchangeHeap* ins);
|
||||||
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
||||||
void visitAsmJSAtomicBinopHeapForEffect(LAsmJSAtomicBinopHeapForEffect* ins);
|
void visitAsmJSAtomicBinopHeapForEffect(LAsmJSAtomicBinopHeapForEffect* ins);
|
||||||
void visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins);
|
|
||||||
void visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins);
|
|
||||||
void visitAsmJSUInt32ToDouble(LAsmJSUInt32ToDouble* lir);
|
void visitAsmJSUInt32ToDouble(LAsmJSUInt32ToDouble* lir);
|
||||||
void visitAsmJSUInt32ToFloat32(LAsmJSUInt32ToFloat32* lir);
|
void visitAsmJSUInt32ToFloat32(LAsmJSUInt32ToFloat32* lir);
|
||||||
void visitAsmReinterpretFromI64(LAsmReinterpretFromI64* lir);
|
void visitAsmReinterpretFromI64(LAsmReinterpretFromI64* lir);
|
||||||
|
@ -920,9 +920,9 @@ class Assembler : public AssemblerX86Shared
|
|||||||
return CodeOffset(masm.currentOffset());
|
return CodeOffset(masm.currentOffset());
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadWasmActivation(Register dest) {
|
void loadWasmGlobalPtr(uint32_t globalDataOffset, Register dest) {
|
||||||
CodeOffset label = movlWithPatch(PatchedAbsoluteAddress(), dest);
|
CodeOffset label = movlWithPatch(PatchedAbsoluteAddress(), dest);
|
||||||
append(wasm::GlobalAccess(label, wasm::ActivationGlobalDataOffset));
|
append(wasm::GlobalAccess(label, globalDataOffset));
|
||||||
}
|
}
|
||||||
void loadAsmJSHeapRegisterFromGlobalData() {
|
void loadAsmJSHeapRegisterFromGlobalData() {
|
||||||
// x86 doesn't have a pinned heap register.
|
// x86 doesn't have a pinned heap register.
|
||||||
|
@ -901,35 +901,6 @@ CodeGeneratorX86::visitWasmStoreGlobalVar(LWasmStoreGlobalVar* ins)
|
|||||||
masm.append(wasm::GlobalAccess(label, mir->globalDataOffset()));
|
masm.append(wasm::GlobalAccess(label, mir->globalDataOffset()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorX86::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins)
|
|
||||||
{
|
|
||||||
const MAsmJSLoadFuncPtr* mir = ins->mir();
|
|
||||||
|
|
||||||
Register index = ToRegister(ins->index());
|
|
||||||
Register out = ToRegister(ins->output());
|
|
||||||
|
|
||||||
if (mir->hasLimit()) {
|
|
||||||
masm.branch32(Assembler::Condition::AboveOrEqual, index, Imm32(mir->limit()),
|
|
||||||
wasm::JumpTarget::OutOfBounds);
|
|
||||||
}
|
|
||||||
|
|
||||||
CodeOffset label = masm.movlWithPatch(PatchedAbsoluteAddress(), out);
|
|
||||||
masm.append(wasm::GlobalAccess(label, mir->globalDataOffset()));
|
|
||||||
|
|
||||||
masm.loadPtr(Operand(out, index, ScalePointer), out);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
CodeGeneratorX86::visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins)
|
|
||||||
{
|
|
||||||
MAsmJSLoadFFIFunc* mir = ins->mir();
|
|
||||||
|
|
||||||
Register out = ToRegister(ins->output());
|
|
||||||
CodeOffset label = masm.movlWithPatch(PatchedAbsoluteAddress(), out);
|
|
||||||
masm.append(wasm::GlobalAccess(label, mir->globalDataOffset()));
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace js {
|
namespace js {
|
||||||
namespace jit {
|
namespace jit {
|
||||||
|
|
||||||
|
@ -68,8 +68,6 @@ class CodeGeneratorX86 : public CodeGeneratorX86Shared
|
|||||||
void visitAsmJSAtomicExchangeHeap(LAsmJSAtomicExchangeHeap* ins);
|
void visitAsmJSAtomicExchangeHeap(LAsmJSAtomicExchangeHeap* ins);
|
||||||
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
void visitAsmJSAtomicBinopHeap(LAsmJSAtomicBinopHeap* ins);
|
||||||
void visitAsmJSAtomicBinopHeapForEffect(LAsmJSAtomicBinopHeapForEffect* ins);
|
void visitAsmJSAtomicBinopHeapForEffect(LAsmJSAtomicBinopHeapForEffect* ins);
|
||||||
void visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins);
|
|
||||||
void visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc* ins);
|
|
||||||
void visitWasmTruncateToInt32(LWasmTruncateToInt32* ins);
|
void visitWasmTruncateToInt32(LWasmTruncateToInt32* ins);
|
||||||
|
|
||||||
void visitOutOfLineTruncate(OutOfLineTruncate* ool);
|
void visitOutOfLineTruncate(OutOfLineTruncate* ool);
|
||||||
|
Loading…
Reference in New Issue
Block a user