author | Jan de Mooij <jdemooij@mozilla.com> |
Wed, 28 Aug 2019 06:35:24 +0000 | |
changeset 554081 | feec09fd96eb7c212844f4dce66e78864ca36606 |
parent 554080 | dae1e9839adce6f2129c3593b2c2991dd34a0f35 |
child 554082 | e727703188261fba6f18e2bddc7e6a25729bfd00 |
push id | 2165 |
push user | ffxbld-merge |
push date | Mon, 14 Oct 2019 16:30:58 +0000 |
treeherder | mozilla-release@0eae18af659f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | lth |
bugs | 1576567 |
milestone | 70.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/jit/MacroAssembler.cpp +++ b/js/src/jit/MacroAssembler.cpp @@ -3213,16 +3213,21 @@ CodeOffset MacroAssembler::wasmCallIndir loadWasmPinnedRegsFromTls(); switchToWasmTlsRealm(index, WasmTableCallScratchReg1); loadPtr(Address(scratch, offsetof(wasm::FunctionTableElem, code)), scratch); return call(desc, scratch); } +void MacroAssembler::nopPatchableToCall(const wasm::CallSiteDesc& desc) { + CodeOffset offset = nopPatchableToCall(); + append(desc, offset); +} + void MacroAssembler::emitPreBarrierFastPath(JSRuntime* rt, MIRType type, Register temp1, Register temp2, Register temp3, Label* noBarrier) { MOZ_ASSERT(temp1 != PreBarrierReg); MOZ_ASSERT(temp2 != PreBarrierReg); MOZ_ASSERT(temp3 != PreBarrierReg); // Load the GC thing in temp1.
--- a/js/src/jit/MacroAssembler.h +++ b/js/src/jit/MacroAssembler.h @@ -468,17 +468,18 @@ class MacroAssembler : public MacroAssem // "Far jumps" provide the ability to jump to any uint32_t offset from any // other uint32_t offset without using a constant pool (thus returning a // simple CodeOffset instead of a CodeOffsetJump). CodeOffset farJumpWithPatch() PER_SHARED_ARCH; void patchFarJump(CodeOffset farJump, uint32_t targetOffset) PER_SHARED_ARCH; // Emit a nop that can be patched to and from a nop and a call with int32 // relative displacement. - CodeOffset nopPatchableToCall(const wasm::CallSiteDesc& desc) PER_SHARED_ARCH; + CodeOffset nopPatchableToCall() PER_SHARED_ARCH; + void nopPatchableToCall(const wasm::CallSiteDesc& desc); static void patchNopToCall(uint8_t* callsite, uint8_t* target) PER_SHARED_ARCH; static void patchCallToNop(uint8_t* callsite) PER_SHARED_ARCH; // These methods are like movWithPatch/PatchDataWithValueCheck but allow // using pc-relative addressing on certain platforms (RIP-relative LEA on x64, // ADR instruction on arm64). //
--- a/js/src/jit/arm/MacroAssembler-arm.cpp +++ b/js/src/jit/arm/MacroAssembler-arm.cpp @@ -4296,23 +4296,21 @@ void MacroAssembler::patchFarJump(CodeOf uint32_t addOffset = farJump.offset() - 4; MOZ_ASSERT(editSrc(BufferOffset(addOffset))->is<InstALU>()); // When pc is read as the operand of the add, its value is the address of // the add instruction + 8. *u32 = (targetOffset - addOffset) - 8; } -CodeOffset MacroAssembler::nopPatchableToCall(const wasm::CallSiteDesc& desc) { +CodeOffset MacroAssembler::nopPatchableToCall() { AutoForbidPoolsAndNops afp(this, /* max number of instructions in scope = */ 1); - CodeOffset offset(currentOffset()); ma_nop(); - append(desc, CodeOffset(currentOffset())); - return offset; + return CodeOffset(currentOffset()); } void MacroAssembler::patchNopToCall(uint8_t* call, uint8_t* target) { uint8_t* inst = call - 4; MOZ_ASSERT(reinterpret_cast<Instruction*>(inst)->is<InstBLImm>() || reinterpret_cast<Instruction*>(inst)->is<InstNOP>()); new (inst) InstBLImm(BOffImm(target - inst), Assembler::Always);
--- a/js/src/jit/arm64/MacroAssembler-arm64.cpp +++ b/js/src/jit/arm64/MacroAssembler-arm64.cpp @@ -722,23 +722,21 @@ void MacroAssembler::patchFarJump(CodeOf MOZ_ASSERT(inst1->InstructionBits() == UINT32_MAX); MOZ_ASSERT(inst2->InstructionBits() == UINT32_MAX); inst1->SetInstructionBits((uint32_t)distance); inst2->SetInstructionBits((uint32_t)(distance >> 32)); } -CodeOffset MacroAssembler::nopPatchableToCall(const wasm::CallSiteDesc& desc) { +CodeOffset MacroAssembler::nopPatchableToCall() { AutoForbidPoolsAndNops afp(this, /* max number of instructions in scope = */ 1); - CodeOffset offset(currentOffset()); Nop(); - append(desc, CodeOffset(currentOffset())); - return offset; + return CodeOffset(currentOffset()); } void MacroAssembler::patchNopToCall(uint8_t* call, uint8_t* target) { uint8_t* inst = call - 4; Instruction* instr = reinterpret_cast<Instruction*>(inst); MOZ_ASSERT(instr->IsBL() || instr->IsNOP()); bl(instr, (target - inst) >> 2); AutoFlushICache::flush(uintptr_t(inst), 4);
--- a/js/src/jit/mips-shared/MacroAssembler-mips-shared.cpp +++ b/js/src/jit/mips-shared/MacroAssembler-mips-shared.cpp @@ -1477,29 +1477,27 @@ void MacroAssembler::call(ImmPtr target) void MacroAssembler::call(JitCode* c) { BufferOffset bo = m_buffer.nextOffset(); addPendingJump(bo, ImmPtr(c->raw()), RelocationKind::JITCODE); ma_liPatchable(ScratchRegister, ImmPtr(c->raw())); callJitNoProfiler(ScratchRegister); } -CodeOffset MacroAssembler::nopPatchableToCall(const wasm::CallSiteDesc& desc) { - CodeOffset offset(currentOffset()); +CodeOffset MacroAssembler::nopPatchableToCall() { // MIPS32 //MIPS64 as_nop(); // lui // lui as_nop(); // ori // ori as_nop(); // jalr // drotr32 as_nop(); // ori #ifdef JS_CODEGEN_MIPS64 as_nop(); // jalr as_nop(); #endif - append(desc, CodeOffset(currentOffset())); - return offset; + return CodeOffset(currentOffset()); } void MacroAssembler::patchNopToCall(uint8_t* call, uint8_t* target) { #ifdef JS_CODEGEN_MIPS64 Instruction* inst = (Instruction*)call - 6 /* six nops */; Assembler::WriteLoad64Instructions(inst, ScratchRegister, (uint64_t)target); inst[4] = InstReg(op_special, ScratchRegister, zero, ra, ff_jalr); #else
--- a/js/src/jit/x86-shared/MacroAssembler-x86-shared.cpp +++ b/js/src/jit/x86-shared/MacroAssembler-x86-shared.cpp @@ -590,22 +590,19 @@ void MacroAssembler::callAndPushReturnAd CodeOffset MacroAssembler::farJumpWithPatch() { return Assembler::farJumpWithPatch(); } void MacroAssembler::patchFarJump(CodeOffset farJump, uint32_t targetOffset) { Assembler::patchFarJump(farJump, targetOffset); } -CodeOffset MacroAssembler::nopPatchableToCall(const wasm::CallSiteDesc& desc) { - CodeOffset offset(currentOffset()); +CodeOffset MacroAssembler::nopPatchableToCall() { masm.nop_five(); - append(desc, CodeOffset(currentOffset())); - MOZ_ASSERT_IF(!oom(), size() - offset.offset() == ToggledCallSize(nullptr)); - return offset; + return CodeOffset(currentOffset()); } void MacroAssembler::patchNopToCall(uint8_t* callsite, uint8_t* target) { Assembler::patchFiveByteNopToCall(callsite, target); } void MacroAssembler::patchCallToNop(uint8_t* callsite) { Assembler::patchCallToFiveByteNop(callsite);