author | Nicolas B. Pierron <nicolas.b.pierron@mozilla.com> |
Mon, 17 Aug 2015 11:32:19 +0200 | |
changeset 258030 | edd5e534c1fe41a81418f65009e2199e232e2cfe |
parent 258029 | 381b4c8dc15ea01f7bd407ef2f48edd7dacc0c36 |
child 258031 | f84b3c91aeceeeefd94cdf13cd5955d89342d13d |
push id | 29241 |
push user | kwierso@gmail.com |
push date | Tue, 18 Aug 2015 00:00:46 +0000 |
treeherder | mozilla-central@6ae3e9ff53b2 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bbouvier |
bugs | 1190295 |
milestone | 43.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/irregexp/NativeRegExpMacroAssembler.cpp +++ b/js/src/irregexp/NativeRegExpMacroAssembler.cpp @@ -397,17 +397,17 @@ NativeRegExpMacroAssembler::GenerateCode volatileRegs.add(Register::FromCode(Registers::lr)); #elif defined(JS_CODEGEN_MIPS32) volatileRegs.add(Register::FromCode(Registers::ra)); #endif volatileRegs.takeUnchecked(temp0); volatileRegs.takeUnchecked(temp1); masm.PushRegsInMask(volatileRegs); - masm.setupUnalignedABICall(1, temp0); + masm.setupUnalignedABICall(temp0); masm.passABIArg(temp1); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, GrowBacktrackStack)); masm.storeCallResult(temp0); masm.PopRegsInMask(volatileRegs); // If return false, we have failed to grow the stack, and // must exit with a stack-overflow exception. Do this in the caller @@ -809,17 +809,17 @@ NativeRegExpMacroAssembler::CheckNotBack // Found by adding negative string-end offset of current position // to end of string. masm.addPtr(input_end_pointer, current_position); // Parameters are // Address byte_offset1 - Address captured substring's start. // Address byte_offset2 - Address of current character position. // size_t byte_length - length of capture in bytes(!) - masm.setupUnalignedABICall(3, temp0); + masm.setupUnalignedABICall(temp0); masm.passABIArg(current_character); masm.passABIArg(current_position); masm.passABIArg(temp1); int (*fun)(const char16_t*, const char16_t*, size_t) = CaseInsensitiveCompareStrings; masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, fun)); masm.storeCallResult(temp0); masm.PopRegsInMask(volatileRegs);
--- a/js/src/jit/BaselineCompiler.cpp +++ b/js/src/jit/BaselineCompiler.cpp @@ -487,17 +487,17 @@ BaselineCompiler::emitOutOfLinePostBarri // On ARM, save the link register before calling. It contains the return // address. The |masm.ret()| later will pop this into |pc| to return. masm.push(lr); #elif defined(JS_CODEGEN_MIPS32) masm.push(ra); #endif masm.pushValue(R0); - masm.setupUnalignedABICall(2, scratch); + masm.setupUnalignedABICall(scratch); masm.movePtr(ImmPtr(cx->runtime()), scratch); masm.passABIArg(scratch); masm.passABIArg(objReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, PostWriteBarrier)); masm.popValue(R0); masm.ret(); return true; @@ -582,17 +582,17 @@ BaselineCompiler::emitStackCheck(bool ea return true; } void BaselineCompiler::emitIsDebuggeeCheck() { if (compileDebugInstrumentation_) { masm.Push(BaselineFrameReg); - masm.setupUnalignedABICall(1, R0.scratchReg()); + masm.setupUnalignedABICall(R0.scratchReg()); masm.loadBaselineFramePtr(BaselineFrameReg, R0.scratchReg()); masm.passABIArg(R0.scratchReg()); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, jit::FrameIsDebuggeeCheck)); masm.Pop(BaselineFrameReg); } } typedef bool (*DebugPrologueFn)(JSContext*, BaselineFrame*, jsbytecode*, bool*);
--- a/js/src/jit/BaselineDebugModeOSR.cpp +++ b/js/src/jit/BaselineDebugModeOSR.cpp @@ -1075,17 +1075,17 @@ EmitBaselineDebugModeOSRHandlerTail(Macr } else { masm.pushValue(Address(temp, offsetof(BaselineDebugModeOSRInfo, valueR0))); masm.pushValue(Address(temp, offsetof(BaselineDebugModeOSRInfo, valueR1))); } masm.push(BaselineFrameReg); masm.push(Address(temp, offsetof(BaselineDebugModeOSRInfo, resumeAddr))); // Call a stub to free the allocated info. - masm.setupUnalignedABICall(1, temp); + masm.setupUnalignedABICall(temp); masm.loadBaselineFramePtr(BaselineFrameReg, temp); masm.passABIArg(temp); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, FinishBaselineDebugModeOSR)); // Restore saved values. AllocatableGeneralRegisterSet jumpRegs(GeneralRegisterSet::All()); if (returnFromCallVM) { jumpRegs.take(ReturnReg); @@ -1127,17 +1127,17 @@ JitRuntime::generateBaselineDebugModeOSR CodeOffsetLabel noFrameRegPopOffset(masm.currentOffset()); // Record the stack pointer for syncing. masm.moveStackPtrTo(syncedStackStart); masm.push(ReturnReg); masm.push(BaselineFrameReg); // Call a stub to fully initialize the info. - masm.setupUnalignedABICall(3, temp); + masm.setupUnalignedABICall(temp); masm.loadBaselineFramePtr(BaselineFrameReg, temp); masm.passABIArg(temp); masm.passABIArg(syncedStackStart); masm.passABIArg(ReturnReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, SyncBaselineDebugModeOSRInfo)); // Discard stack values depending on how many were unsynced, as we always // have a fully synced stack in the recompile handler. We arrive here via
--- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -1807,17 +1807,17 @@ ICToBool_Object::Compiler::generateStubC masm.moveValue(BooleanValue(true), R0); EmitReturnFromIC(masm); masm.bind(&ifFalse); masm.moveValue(BooleanValue(false), R0); EmitReturnFromIC(masm); masm.bind(&slowPath); - masm.setupUnalignedABICall(1, scratch); + masm.setupUnalignedABICall(scratch); masm.passABIArg(objReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, js::EmulatesUndefined)); masm.convertBoolToInt32(ReturnReg, ReturnReg); masm.xor32(Imm32(1), ReturnReg); masm.tagValue(JSVAL_TYPE_BOOLEAN, ReturnReg, R0); EmitReturnFromIC(masm); // Failure case - jump to next stub @@ -2260,17 +2260,17 @@ ICBinaryArith_Double::Compiler::generate break; case JSOP_MUL: masm.mulDouble(FloatReg1, FloatReg0); break; case JSOP_DIV: masm.divDouble(FloatReg1, FloatReg0); break; case JSOP_MOD: - masm.setupUnalignedABICall(2, R0.scratchReg()); + masm.setupUnalignedABICall(R0.scratchReg()); masm.passABIArg(FloatReg0, MoveOp::DOUBLE); masm.passABIArg(FloatReg1, MoveOp::DOUBLE); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, NumberMod), MoveOp::DOUBLE); MOZ_ASSERT(ReturnDoubleReg == FloatReg0); break; default: MOZ_CRASH("Unexpected op"); } @@ -2388,17 +2388,17 @@ ICBinaryArith_DoubleWithInt32::Compiler: { Label doneTruncate; Label truncateABICall; masm.branchTruncateDouble(FloatReg0, scratchReg, &truncateABICall); masm.jump(&doneTruncate); masm.bind(&truncateABICall); masm.push(intReg); - masm.setupUnalignedABICall(1, scratchReg); + masm.setupUnalignedABICall(scratchReg); masm.passABIArg(FloatReg0, MoveOp::DOUBLE); masm.callWithABI(mozilla::BitwiseCast<void*, int32_t(*)(double)>(JS::ToInt32)); masm.storeCallResult(scratchReg); masm.pop(intReg); masm.bind(&doneTruncate); } @@ -2540,17 +2540,17 @@ ICUnaryArith_Double::Compiler::generateS Register scratchReg = R1.scratchReg(); Label doneTruncate; Label truncateABICall; masm.branchTruncateDouble(FloatReg0, scratchReg, &truncateABICall); masm.jump(&doneTruncate); masm.bind(&truncateABICall); - masm.setupUnalignedABICall(1, scratchReg); + masm.setupUnalignedABICall(scratchReg); masm.passABIArg(FloatReg0, MoveOp::DOUBLE); masm.callWithABI(BitwiseCast<void*, int32_t(*)(double)>(JS::ToInt32)); masm.storeCallResult(scratchReg); masm.bind(&doneTruncate); masm.not32(scratchReg); masm.tagValue(JSVAL_TYPE_INT32, scratchReg, R0); } @@ -11022,17 +11022,17 @@ ICCall_Native::Compiler::generateStubCod Register scratch = regs.takeAny(); EmitCreateStubFrameDescriptor(masm, scratch); masm.push(scratch); masm.push(ICTailCallReg); masm.enterFakeExitFrame(NativeExitFrameLayout::Token()); // Execute call. - masm.setupUnalignedABICall(3, scratch); + masm.setupUnalignedABICall(scratch); masm.loadJSContext(scratch); masm.passABIArg(scratch); masm.passABIArg(argcReg); masm.passABIArg(vpReg); #ifdef JS_SIMULATOR // The simulator requires VM calls to be redirected to a special swi // instruction to handle them, so we store the redirected pointer in the @@ -11120,17 +11120,17 @@ ICCall_ClassHook::Compiler::generateStub masm.push(argcReg); EmitCreateStubFrameDescriptor(masm, scratch); masm.push(scratch); masm.push(ICTailCallReg); masm.enterFakeExitFrame(NativeExitFrameLayout::Token()); // Execute call. - masm.setupUnalignedABICall(3, scratch); + masm.setupUnalignedABICall(scratch); masm.loadJSContext(scratch); masm.passABIArg(scratch); masm.passABIArg(argcReg); masm.passABIArg(vpReg); masm.callWithABI(Address(ICStubReg, ICCall_ClassHook::offsetOfNative())); // Test for failure. masm.branchIfFalseBool(ReturnReg, masm.exceptionLabel()); @@ -11523,17 +11523,17 @@ ICTableSwitch::Compiler::generateStubCod // N.B. -0 === 0, so convert -0 to a 0 int32. masm.convertDoubleToInt32(FloatReg0, key, &outOfRange, /* negativeZeroCheck = */ false); } else { // Pass pointer to double value. masm.pushValue(R0); masm.moveStackPtrTo(R0.scratchReg()); - masm.setupUnalignedABICall(1, scratch); + masm.setupUnalignedABICall(scratch); masm.passABIArg(R0.scratchReg()); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, DoubleValueToInt32ForSwitch)); // If the function returns |true|, the value has been converted to // int32. masm.movePtr(ReturnReg, scratch); masm.popValue(R0); masm.branchIfFalseBool(scratch, &outOfRange);
--- a/js/src/jit/CodeGenerator.cpp +++ b/js/src/jit/CodeGenerator.cpp @@ -378,17 +378,17 @@ CodeGenerator::visitFloat32ToInt32(LFloa void CodeGenerator::emitOOLTestObject(Register objreg, Label* ifEmulatesUndefined, Label* ifDoesntEmulateUndefined, Register scratch) { saveVolatile(scratch); - masm.setupUnalignedABICall(1, scratch); + masm.setupUnalignedABICall(scratch); masm.passABIArg(objreg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, js::EmulatesUndefined)); masm.storeCallResult(scratch); restoreVolatile(scratch); masm.branchIfTrueBool(scratch, ifEmulatesUndefined); masm.jump(ifDoesntEmulateUndefined); } @@ -1142,17 +1142,17 @@ PrepareAndExecuteRegExp(JSContext* cx, M if (input.volatile_()) volatileRegs.add(input); if (regexp.volatile_()) volatileRegs.add(regexp); // Execute the RegExp. masm.computeEffectiveAddress(Address(masm.getStackPointer(), inputOutputDataStartOffset), temp2); masm.PushRegsInMask(volatileRegs); - masm.setupUnalignedABICall(1, temp3); + masm.setupUnalignedABICall(temp3); masm.passABIArg(temp2); masm.callWithABI(codePointer); masm.PopRegsInMask(volatileRegs); Label success; masm.branch32(Assembler::Equal, matchResultAddress, Imm32(RegExpRunStatus_Success_NotFound), notFound); masm.branch32(Assembler::Equal, matchResultAddress, @@ -2716,17 +2716,17 @@ CodeGenerator::visitOutOfLineCallPostWri objreg = ToRegister(obj); regs.takeUnchecked(objreg); } Register runtimereg = regs.takeAny(); masm.mov(ImmPtr(GetJitContext()->runtime), runtimereg); void (*fun)(JSRuntime*, JSObject*) = isGlobal ? PostGlobalWriteBarrier : PostWriteBarrier; - masm.setupUnalignedABICall(2, regs.takeAny()); + masm.setupUnalignedABICall(regs.takeAny()); masm.passABIArg(runtimereg); masm.passABIArg(objreg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, fun)); restoreLiveVolatile(ool->lir()); masm.jump(ool->rejoin()); } @@ -2818,17 +2818,17 @@ CodeGenerator::visitCallNative(LCallNati // Construct native exit frame. uint32_t safepointOffset; masm.buildFakeExitFrame(tempReg, &safepointOffset); masm.enterFakeExitFrame(NativeExitFrameLayout::Token()); markSafepointAt(safepointOffset, call); // Construct and execute call. - masm.setupUnalignedABICall(3, tempReg); + masm.setupUnalignedABICall(tempReg); masm.passABIArg(argContextReg); masm.passABIArg(argUintNReg); masm.passABIArg(argVpReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, target->native())); // Test for failure. masm.branchIfFalseBool(ReturnReg, masm.failureLabel()); @@ -2937,17 +2937,17 @@ CodeGenerator::visitCallDOMNative(LCallD // Construct native exit frame. uint32_t safepointOffset; masm.buildFakeExitFrame(argJSContext, &safepointOffset); masm.enterFakeExitFrame(IonDOMMethodExitFrameLayout::Token()); markSafepointAt(safepointOffset, call); // Construct and execute call. - masm.setupUnalignedABICall(4, argJSContext); + masm.setupUnalignedABICall(argJSContext); masm.loadJSContext(argJSContext); masm.passABIArg(argJSContext); masm.passABIArg(argObj); masm.passABIArg(argPrivate); masm.passABIArg(argArgs); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, target->jitInfo()->method)); @@ -3478,17 +3478,17 @@ CodeGenerator::visitGetDynamicName(LGetD Register temp3 = ToRegister(lir->temp3()); masm.loadJSContext(temp3); /* Make space for the outparam. */ masm.adjustStack(-int32_t(sizeof(Value))); masm.moveStackPtrTo(temp2); - masm.setupUnalignedABICall(4, temp1); + masm.setupUnalignedABICall(temp1); masm.passABIArg(temp3); masm.passABIArg(scopeChain); masm.passABIArg(name); masm.passABIArg(temp2); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, GetDynamicName)); const ValueOperand out = ToOutValue(lir); @@ -3501,17 +3501,17 @@ CodeGenerator::visitGetDynamicName(LGetD } void CodeGenerator::emitFilterArgumentsOrEval(LInstruction* lir, Register string, Register temp1, Register temp2) { masm.loadJSContext(temp2); - masm.setupUnalignedABICall(2, temp1); + masm.setupUnalignedABICall(temp1); masm.passABIArg(temp2); masm.passABIArg(string); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, FilterArgumentsOrEval)); Label bail; masm.branchIfFalseBool(ReturnReg, &bail); bailoutFrom(&bail, lir->snapshot()); } @@ -3878,17 +3878,17 @@ CodeGenerator::emitAssertObjectOrStringR masm.assumeUnreachable("MIR instruction returned object with unexpected type"); masm.bind(&ok); } // Check that we have a valid GC pointer. saveVolatile(); - masm.setupUnalignedABICall(2, temp); + masm.setupUnalignedABICall(temp); masm.loadJSContext(temp); masm.passABIArg(temp); masm.passABIArg(input); void* callee; switch (type) { case MIRType_Object: callee = JS_FUNC_TO_DATA_PTR(void*, AssertValidObjectPtr); @@ -3951,17 +3951,17 @@ CodeGenerator::emitAssertResultV(const V } // Check that we have a valid GC pointer. saveVolatile(); masm.pushValue(input); masm.moveStackPtrTo(temp1); - masm.setupUnalignedABICall(2, temp2); + masm.setupUnalignedABICall(temp2); masm.loadJSContext(temp2); masm.passABIArg(temp2); masm.passABIArg(temp1); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, AssertValidValue)); masm.popValue(input); restoreVolatile(); masm.bind(&done); @@ -4213,30 +4213,30 @@ CodeGenerator::visitNewDerivedTypedObjec void CodeGenerator::visitAtan2D(LAtan2D* lir) { Register temp = ToRegister(lir->temp()); FloatRegister y = ToFloatRegister(lir->y()); FloatRegister x = ToFloatRegister(lir->x()); - masm.setupUnalignedABICall(2, temp); + masm.setupUnalignedABICall(temp); masm.passABIArg(y, MoveOp::DOUBLE); masm.passABIArg(x, MoveOp::DOUBLE); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, ecmaAtan2), MoveOp::DOUBLE); MOZ_ASSERT(ToFloatRegister(lir->output()) == ReturnDoubleReg); } void CodeGenerator::visitHypot(LHypot* lir) { Register temp = ToRegister(lir->temp()); uint32_t numArgs = lir->numArgs(); - masm.setupUnalignedABICall(numArgs, temp); + masm.setupUnalignedABICall(temp); for (uint32_t i = 0 ; i < numArgs; ++i) masm.passABIArg(ToFloatRegister(lir->getOperand(i)), MoveOp::DOUBLE); switch(numArgs) { case 2: masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, ecmaHypot), MoveOp::DOUBLE); break; @@ -5095,17 +5095,17 @@ void CodeGenerator::visitSetDisjointTypedElements(LSetDisjointTypedElements* lir) { Register target = ToRegister(lir->target()); Register targetOffset = ToRegister(lir->targetOffset()); Register source = ToRegister(lir->source()); Register temp = ToRegister(lir->temp()); - masm.setupUnalignedABICall(3, temp); + masm.setupUnalignedABICall(temp); masm.passABIArg(target); masm.passABIArg(targetOffset); masm.passABIArg(source); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, js::SetDisjointTypedElements)); } void CodeGenerator::visitTypedObjectDescr(LTypedObjectDescr* lir) @@ -5226,52 +5226,49 @@ void CodeGenerator::visitPowI(LPowI* ins) { FloatRegister value = ToFloatRegister(ins->value()); Register power = ToRegister(ins->power()); Register temp = ToRegister(ins->temp()); MOZ_ASSERT(power != temp); - // In all implementations, setupUnalignedABICall() relinquishes use of - // its scratch register. We can therefore save an input register by - // reusing the scratch register to pass constants to callWithABI. - masm.setupUnalignedABICall(2, temp); + masm.setupUnalignedABICall(temp); masm.passABIArg(value, MoveOp::DOUBLE); masm.passABIArg(power); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, js::powi), MoveOp::DOUBLE); MOZ_ASSERT(ToFloatRegister(ins->output()) == ReturnDoubleReg); } void CodeGenerator::visitPowD(LPowD* ins) { FloatRegister value = ToFloatRegister(ins->value()); FloatRegister power = ToFloatRegister(ins->power()); Register temp = ToRegister(ins->temp()); - masm.setupUnalignedABICall(2, temp); + masm.setupUnalignedABICall(temp); masm.passABIArg(value, MoveOp::DOUBLE); masm.passABIArg(power, MoveOp::DOUBLE); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, ecmaPow), MoveOp::DOUBLE); MOZ_ASSERT(ToFloatRegister(ins->output()) == ReturnDoubleReg); } void CodeGenerator::visitMathFunctionD(LMathFunctionD* ins) { Register temp = ToRegister(ins->temp()); FloatRegister input = ToFloatRegister(ins->input()); MOZ_ASSERT(ToFloatRegister(ins->output()) == ReturnDoubleReg); + masm.setupUnalignedABICall(temp); + const MathCache* mathCache = ins->mir()->cache(); - - masm.setupUnalignedABICall(mathCache ? 2 : 1, temp); if (mathCache) { masm.movePtr(ImmPtr(mathCache), temp); masm.passABIArg(temp); } masm.passABIArg(input, MoveOp::DOUBLE); # define MAYBE_CACHED(fcn) (mathCache ? (void*)fcn ## _impl : (void*)fcn ## _uncached) @@ -5360,17 +5357,17 @@ CodeGenerator::visitMathFunctionD(LMathF void CodeGenerator::visitMathFunctionF(LMathFunctionF* ins) { Register temp = ToRegister(ins->temp()); FloatRegister input = ToFloatRegister(ins->input()); MOZ_ASSERT(ToFloatRegister(ins->output()) == ReturnFloat32Reg); - masm.setupUnalignedABICall(1, temp); + masm.setupUnalignedABICall(temp); masm.passABIArg(input, MoveOp::FLOAT32); void* funptr = nullptr; switch (ins->mir()->function()) { case MMathFunction::Floor: funptr = JS_FUNC_TO_DATA_PTR(void*, floorf); break; case MMathFunction::Round: funptr = JS_FUNC_TO_DATA_PTR(void*, math_roundf_impl); break; case MMathFunction::Ceil: funptr = JS_FUNC_TO_DATA_PTR(void*, ceilf); break; default: @@ -5384,17 +5381,17 @@ void CodeGenerator::visitModD(LModD* ins) { FloatRegister lhs = ToFloatRegister(ins->lhs()); FloatRegister rhs = ToFloatRegister(ins->rhs()); Register temp = ToRegister(ins->temp()); MOZ_ASSERT(ToFloatRegister(ins->output()) == ReturnDoubleReg); - masm.setupUnalignedABICall(2, temp); + masm.setupUnalignedABICall(temp); masm.passABIArg(lhs, MoveOp::DOUBLE); masm.passABIArg(rhs, MoveOp::DOUBLE); if (gen->compilingAsmJS()) masm.callWithABI(AsmJSImm_ModD, MoveOp::DOUBLE); else masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, NumberMod), MoveOp::DOUBLE); } @@ -6212,17 +6209,17 @@ JitRuntime::generateMallocStub(JSContext regs.takeUnchecked(regNBytes); LiveRegisterSet save(regs.asLiveSet()); masm.PushRegsInMask(save); const Register regTemp = regs.takeAnyGeneral(); const Register regRuntime = regTemp; MOZ_ASSERT(regTemp != regNBytes); - masm.setupUnalignedABICall(2, regTemp); + masm.setupUnalignedABICall(regTemp); masm.movePtr(ImmPtr(cx->runtime()), regRuntime); masm.passABIArg(regRuntime); masm.passABIArg(regNBytes); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, MallocWrapper)); masm.storeCallResult(regReturn); masm.PopRegsInMask(save); masm.ret(); @@ -6250,17 +6247,17 @@ JitRuntime::generateFreeStub(JSContext* AllocatableRegisterSet regs(RegisterSet::Volatile()); regs.takeUnchecked(regSlots); LiveRegisterSet save(regs.asLiveSet()); masm.PushRegsInMask(save); const Register regTemp = regs.takeAnyGeneral(); MOZ_ASSERT(regTemp != regSlots); - masm.setupUnalignedABICall(1, regTemp); + masm.setupUnalignedABICall(regTemp); masm.passABIArg(regSlots); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, js_free)); masm.PopRegsInMask(save); masm.ret(); Linker linker(masm); @@ -6291,17 +6288,17 @@ JitRuntime::generateLazyLinkStub(JSConte // restore it once the lazy link is complete. Address descriptor(masm.getStackPointer(), CommonFrameLayout::offsetOfDescriptor()); size_t convertToExitFrame = JitFrameLayout::Size() - ExitFrameLayout::Size(); masm.addPtr(Imm32(convertToExitFrame << FRAMESIZE_SHIFT), descriptor); masm.enterFakeExitFrame(LazyLinkExitFrameLayout::Token()); masm.PushStubCode(); - masm.setupUnalignedABICall(1, temp0); + masm.setupUnalignedABICall(temp0); masm.loadJSContext(temp0); masm.passABIArg(temp0); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, LazyLinkTopActivation)); masm.leaveExitFrame(/* stub code */ sizeof(JitCode*)); masm.addPtr(Imm32(- (convertToExitFrame << FRAMESIZE_SHIFT)), descriptor); @@ -7089,17 +7086,17 @@ CodeGenerator::emitArrayPopShift(LInstru if (mir->mode() == MArrayPopShift::Shift) { // Don't save the temp registers. LiveRegisterSet temps; temps.add(elementsTemp); temps.add(lengthTemp); saveVolatile(temps); - masm.setupUnalignedABICall(1, lengthTemp); + masm.setupUnalignedABICall(lengthTemp); masm.passABIArg(obj); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, js::ArrayShiftMoveElements)); restoreVolatile(temps); } masm.bind(&done); masm.bind(ool->rejoin()); } @@ -8843,17 +8840,17 @@ CodeGenerator::visitOutOfLineTypeOfV(Out ValueOperand input = ToValue(ins, LTypeOfV::Input); Register temp = ToTempUnboxRegister(ins->tempToUnbox()); Register output = ToRegister(ins->output()); Register obj = masm.extractObject(input, temp); saveVolatile(output); - masm.setupUnalignedABICall(2, output); + masm.setupUnalignedABICall(output); masm.passABIArg(obj); masm.movePtr(ImmPtr(GetJitContext()->runtime), output); masm.passABIArg(output); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, js::TypeOfObjectOperation)); masm.storeCallResult(output); restoreVolatile(output); masm.jump(ool->rejoin()); @@ -9662,17 +9659,17 @@ CodeGenerator::visitGetDOMProperty(LGetD masm.moveStackPtrTo(ObjectReg); uint32_t safepointOffset; masm.buildFakeExitFrame(JSContextReg, &safepointOffset); masm.enterFakeExitFrame(IonDOMExitFrameLayout::GetterToken()); markSafepointAt(safepointOffset, ins); - masm.setupUnalignedABICall(4, JSContextReg); + masm.setupUnalignedABICall(JSContextReg); masm.loadJSContext(JSContextReg); masm.passABIArg(JSContextReg); masm.passABIArg(ObjectReg); masm.passABIArg(PrivateReg); masm.passABIArg(ValueReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, ins->mir()->fun())); @@ -9752,17 +9749,17 @@ CodeGenerator::visitSetDOMProperty(LSetD masm.moveStackPtrTo(ObjectReg); uint32_t safepointOffset; masm.buildFakeExitFrame(JSContextReg, &safepointOffset); masm.enterFakeExitFrame(IonDOMExitFrameLayout::SetterToken()); markSafepointAt(safepointOffset, ins); - masm.setupUnalignedABICall(4, JSContextReg); + masm.setupUnalignedABICall(JSContextReg); masm.loadJSContext(JSContextReg); masm.passABIArg(JSContextReg); masm.passABIArg(ObjectReg); masm.passABIArg(PrivateReg); masm.passABIArg(ValueReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, ins->mir()->fun())); @@ -9820,17 +9817,17 @@ CodeGenerator::visitIsCallable(LIsCallab void CodeGenerator::visitOutOfLineIsCallable(OutOfLineIsCallable* ool) { LIsCallable* ins = ool->ins(); Register object = ToRegister(ins->object()); Register output = ToRegister(ins->output()); saveVolatile(output); - masm.setupUnalignedABICall(1, output); + masm.setupUnalignedABICall(output); masm.passABIArg(object); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, ObjectIsCallable)); masm.storeCallResult(output); // C++ compilers like to only use the bottom byte for bools, but we need to maintain the entire // register. masm.and32(Imm32(0xFF), output); restoreVolatile(output); masm.jump(ool->rejoin()); @@ -10187,17 +10184,17 @@ CodeGenerator::visitThrowUninitializedLe void CodeGenerator::visitDebugger(LDebugger* ins) { Register cx = ToRegister(ins->getTemp(0)); Register temp = ToRegister(ins->getTemp(1)); masm.loadJSContext(cx); - masm.setupUnalignedABICall(1, temp); + masm.setupUnalignedABICall(temp); masm.passABIArg(cx); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, GlobalHasLiveOnDebuggerStatement)); Label bail; masm.branchIfTrueBool(ReturnReg, &bail); bailoutFrom(&bail, ins->snapshot()); }
--- a/js/src/jit/IonCaches.cpp +++ b/js/src/jit/IonCaches.cpp @@ -943,17 +943,17 @@ EmitGetterCall(JSContext* cx, MacroAssem masm.Push(argUintNReg); attacher.pushStubCodePointer(masm); if (!masm.icBuildOOLFakeExitFrame(returnAddr, aic)) return false; masm.enterFakeExitFrame(IonOOLNativeExitFrameLayout::Token()); // Construct and execute call. - masm.setupUnalignedABICall(3, scratchReg); + masm.setupUnalignedABICall(scratchReg); masm.passABIArg(argJSContextReg); masm.passABIArg(argUintNReg); masm.passABIArg(argVpReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, target->native())); // Test for failure. masm.branchIfFalseBool(ReturnReg, masm.exceptionLabel()); @@ -1001,17 +1001,17 @@ EmitGetterCall(JSContext* cx, MacroAssem masm.loadJSContext(argJSContextReg); if (!masm.icBuildOOLFakeExitFrame(returnAddr, aic)) return false; masm.enterFakeExitFrame(IonOOLPropertyOpExitFrameLayout::Token()); // Make the call. - masm.setupUnalignedABICall(4, scratchReg); + masm.setupUnalignedABICall(scratchReg); masm.passABIArg(argJSContextReg); masm.passABIArg(argObjReg); masm.passABIArg(argIdReg); masm.passABIArg(argVpReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, target)); // Test for failure. masm.branchIfFalseBool(ReturnReg, masm.exceptionLabel()); @@ -1581,17 +1581,17 @@ EmitCallProxyGet(JSContext* cx, MacroAss masm.loadJSContext(argJSContextReg); if (!masm.icBuildOOLFakeExitFrame(returnAddr, aic)) return false; masm.enterFakeExitFrame(IonOOLProxyExitFrameLayout::Token()); // Make the call. - masm.setupUnalignedABICall(5, scratch); + masm.setupUnalignedABICall(scratch); masm.passABIArg(argJSContextReg); masm.passABIArg(argProxyReg); masm.passABIArg(argProxyReg); masm.passABIArg(argIdReg); masm.passABIArg(argVpReg); masm.callWithABI(getFunction); // Test for failure. @@ -2217,17 +2217,17 @@ EmitObjectOpResultCheck(MacroAssembler& argObjReg); masm.computeEffectiveAddress( Address(masm.getStackPointer(), FrameLayout::offsetOfId()), argIdReg); masm.move32(Imm32(strict), argStrictReg); masm.computeEffectiveAddress( Address(masm.getStackPointer(), FrameLayout::offsetOfObjectOpResult()), argResultReg); - masm.setupUnalignedABICall(5, scratchReg); + masm.setupUnalignedABICall(scratchReg); masm.passABIArg(argJSContextReg); masm.passABIArg(argObjReg); masm.passABIArg(argIdReg); masm.passABIArg(argStrictReg); masm.passABIArg(argResultReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, ReportStrictErrorOrWarning)); masm.branchIfFalseBool(ReturnReg, failure); @@ -2292,17 +2292,17 @@ EmitCallProxySet(JSContext* cx, MacroAss masm.loadJSContext(argJSContextReg); if (!masm.icBuildOOLFakeExitFrame(returnAddr, aic)) return false; masm.enterFakeExitFrame(IonOOLProxyExitFrameLayout::Token()); // Make the call. - masm.setupUnalignedABICall(5, scratch); + masm.setupUnalignedABICall(scratch); masm.passABIArg(argJSContextReg); masm.passABIArg(argProxyReg); masm.passABIArg(argIdReg); masm.passABIArg(argValueReg); masm.passABIArg(argStrictReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, ProxySetProperty)); // Test for error. @@ -2501,17 +2501,17 @@ GenerateCallSetter(JSContext* cx, IonScr masm.Push(argUintNReg); attacher.pushStubCodePointer(masm); if (!masm.icBuildOOLFakeExitFrame(returnAddr, aic)) return false; masm.enterFakeExitFrame(IonOOLNativeExitFrameLayout::Token()); // Make the call - masm.setupUnalignedABICall(3, scratchReg); + masm.setupUnalignedABICall(scratchReg); masm.passABIArg(argJSContextReg); masm.passABIArg(argUintNReg); masm.passABIArg(argVpReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, target->native())); // Test for failure. masm.branchIfFalseBool(ReturnReg, masm.exceptionLabel()); @@ -2565,17 +2565,17 @@ GenerateCallSetter(JSContext* cx, IonScr masm.loadJSContext(argJSContextReg); if (!masm.icBuildOOLFakeExitFrame(returnAddr, aic)) return false; masm.enterFakeExitFrame(IonOOLSetterOpExitFrameLayout::Token()); // Make the call. - masm.setupUnalignedABICall(5, scratchReg); + masm.setupUnalignedABICall(scratchReg); masm.passABIArg(argJSContextReg); masm.passABIArg(argObjReg); masm.passABIArg(argIdReg); masm.passABIArg(argValueReg); masm.passABIArg(argResultReg); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, target)); // Test for error. @@ -2810,17 +2810,17 @@ GenerateAddSlot(JSContext* cx, MacroAsse Register temp2 = regs.takeAnyGeneral(); if (obj->is<UnboxedPlainObject>()) { // Pass the expando object to the stub. masm.Push(object); masm.loadPtr(Address(object, UnboxedPlainObject::offsetOfExpando()), object); } - masm.setupUnalignedABICall(3, temp1); + masm.setupUnalignedABICall(temp1); masm.loadJSContext(temp1); masm.passABIArg(temp1); masm.passABIArg(object); masm.move32(Imm32(newNumDynamicSlots), temp2); masm.passABIArg(temp2); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, NativeObject::growSlotsStatic)); // Branch on ReturnReg before restoring volatile registers, so @@ -3458,17 +3458,17 @@ GetElementIC::attachGetProp(JSContext* c masm.PushRegsInMask(volatileRegs); Register objReg = object(); MOZ_ASSERT(objReg != scratch); if (!volatileRegs.has(objReg)) masm.push(objReg); - masm.setupUnalignedABICall(2, scratch); + masm.setupUnalignedABICall(scratch); masm.movePtr(ImmGCPtr(name), objReg); masm.passABIArg(objReg); masm.unboxString(val, scratch); masm.passABIArg(scratch); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, EqualStringsHelper)); masm.mov(ReturnReg, scratch); if (!volatileRegs.has(objReg)) @@ -3815,17 +3815,17 @@ GenerateGetTypedOrUnboxedArrayElement(JS // Part 2: Call to translate the str into index AllocatableRegisterSet regs(RegisterSet::Volatile()); LiveRegisterSet save(regs.asLiveSet()); masm.PushRegsInMask(save); regs.takeUnchecked(str); Register temp = regs.takeAnyGeneral(); - masm.setupUnalignedABICall(1, temp); + masm.setupUnalignedABICall(temp); masm.passABIArg(str); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, GetIndexFromString)); masm.mov(ReturnReg, indexReg); LiveRegisterSet ignore; ignore.add(indexReg); masm.PopRegsInMaskIgnore(save, ignore);
--- a/js/src/jit/MacroAssembler.cpp +++ b/js/src/jit/MacroAssembler.cpp @@ -1481,17 +1481,17 @@ MacroAssembler::initGCThing(Register obj } #ifdef JS_GC_TRACE RegisterSet regs = RegisterSet::Volatile(); PushRegsInMask(regs); regs.takeUnchecked(obj); Register temp = regs.takeAnyGeneral(); - setupUnalignedABICall(2, temp); + setupUnalignedABICall(temp); passABIArg(obj); movePtr(ImmGCPtr(templateObj->type()), temp); passABIArg(temp); callWithABI(JS_FUNC_TO_DATA_PTR(void*, js::gc::TraceCreateObject)); PopRegsInMask(RegisterSet::Volatile()); #endif } @@ -1619,17 +1619,17 @@ MacroAssembler::generateBailoutTail(Regi JS_STATIC_ASSERT(BAILOUT_RETURN_OVERRECURSED == 2); branch32(Equal, ReturnReg, Imm32(BAILOUT_RETURN_OK), &baseline); branch32(Equal, ReturnReg, Imm32(BAILOUT_RETURN_FATAL_ERROR), exceptionLabel()); // Fall-through: overrecursed. { loadJSContext(ReturnReg); - setupUnalignedABICall(1, scratch); + setupUnalignedABICall(scratch); passABIArg(ReturnReg); callWithABI(JS_FUNC_TO_DATA_PTR(void*, BailoutReportOverRecursed)); jump(exceptionLabel()); } bind(&baseline); { // Prepare a register set for use in this case. @@ -1683,17 +1683,17 @@ MacroAssembler::generateBailoutTail(Regi { // Save needed values onto stack temporarily. pushValue(Address(bailoutInfo, offsetof(BaselineBailoutInfo, valueR0))); push(Address(bailoutInfo, offsetof(BaselineBailoutInfo, resumeFramePtr))); push(Address(bailoutInfo, offsetof(BaselineBailoutInfo, resumeAddr))); push(Address(bailoutInfo, offsetof(BaselineBailoutInfo, monitorStub))); // Call a stub to free allocated memory and create arguments objects. - setupUnalignedABICall(1, temp); + setupUnalignedABICall(temp); passABIArg(bailoutInfo); callWithABI(JS_FUNC_TO_DATA_PTR(void*, FinishBailoutToBaseline)); branchTest32(Zero, ReturnReg, ReturnReg, exceptionLabel()); // Restore values where they need to be and resume execution. AllocatableGeneralRegisterSet enterMonRegs(GeneralRegisterSet::All()); enterMonRegs.take(R0); enterMonRegs.take(ICStubReg); @@ -1721,17 +1721,17 @@ MacroAssembler::generateBailoutTail(Regi { // Save needed values onto stack temporarily. pushValue(Address(bailoutInfo, offsetof(BaselineBailoutInfo, valueR0))); pushValue(Address(bailoutInfo, offsetof(BaselineBailoutInfo, valueR1))); push(Address(bailoutInfo, offsetof(BaselineBailoutInfo, resumeFramePtr))); push(Address(bailoutInfo, offsetof(BaselineBailoutInfo, resumeAddr))); // Call a stub to free allocated memory and create arguments objects. - setupUnalignedABICall(1, temp); + setupUnalignedABICall(temp); passABIArg(bailoutInfo); callWithABI(JS_FUNC_TO_DATA_PTR(void*, FinishBailoutToBaseline)); branchTest32(Zero, ReturnReg, ReturnReg, exceptionLabel()); // Restore values where they need to be and resume execution. AllocatableGeneralRegisterSet enterRegs(GeneralRegisterSet::All()); enterRegs.take(R0); enterRegs.take(R1); @@ -1796,17 +1796,17 @@ MacroAssembler::assumeUnreachable(const { #ifdef DEBUG if (!IsCompilingAsmJS()) { AllocatableRegisterSet regs(RegisterSet::Volatile()); LiveRegisterSet save(regs.asLiveSet()); PushRegsInMask(save); Register temp = regs.takeAnyGeneral(); - setupUnalignedABICall(1, temp); + setupUnalignedABICall(temp); movePtr(ImmPtr(output), temp); passABIArg(temp); callWithABI(JS_FUNC_TO_DATA_PTR(void*, AssumeUnreachable_)); PopRegsInMask(save); } #endif @@ -1839,17 +1839,17 @@ void MacroAssembler::printf(const char* output) { AllocatableRegisterSet regs(RegisterSet::Volatile()); LiveRegisterSet save(regs.asLiveSet()); PushRegsInMask(save); Register temp = regs.takeAnyGeneral(); - setupUnalignedABICall(1, temp); + setupUnalignedABICall(temp); movePtr(ImmPtr(output), temp); passABIArg(temp); callWithABI(JS_FUNC_TO_DATA_PTR(void*, Printf0_)); PopRegsInMask(save); } static void @@ -1865,17 +1865,17 @@ MacroAssembler::printf(const char* outpu AllocatableRegisterSet regs(RegisterSet::Volatile()); LiveRegisterSet save(regs.asLiveSet()); PushRegsInMask(save); regs.takeUnchecked(value); Register temp = regs.takeAnyGeneral(); - setupUnalignedABICall(2, temp); + setupUnalignedABICall(temp); movePtr(ImmPtr(output), temp); passABIArg(temp); passABIArg(value); callWithABI(JS_FUNC_TO_DATA_PTR(void*, Printf1_)); PopRegsInMask(save); } @@ -1888,17 +1888,17 @@ MacroAssembler::tracelogStartId(Register AllocatableRegisterSet regs(RegisterSet::Volatile()); LiveRegisterSet save(regs.asLiveSet()); PushRegsInMask(save); regs.takeUnchecked(logger); Register temp = regs.takeAnyGeneral(); - setupUnalignedABICall(2, temp); + setupUnalignedABICall(temp); passABIArg(logger); move32(Imm32(textId), temp); passABIArg(temp); callWithABI(JS_FUNC_TO_DATA_PTR(void*, TraceLogStartEventPrivate)); PopRegsInMask(save); } @@ -1908,17 +1908,17 @@ MacroAssembler::tracelogStartId(Register AllocatableRegisterSet regs(RegisterSet::Volatile()); LiveRegisterSet save(regs.asLiveSet()); PushRegsInMask(save); regs.takeUnchecked(logger); regs.takeUnchecked(textId); Register temp = regs.takeAnyGeneral(); - setupUnalignedABICall(2, temp); + setupUnalignedABICall(temp); passABIArg(logger); passABIArg(textId); callWithABI(JS_FUNC_TO_DATA_PTR(void*, TraceLogStartEventPrivate)); PopRegsInMask(save); } void @@ -1929,17 +1929,17 @@ MacroAssembler::tracelogStartEvent(Regis AllocatableRegisterSet regs(RegisterSet::Volatile()); LiveRegisterSet save(regs.asLiveSet()); PushRegsInMask(save); regs.takeUnchecked(logger); regs.takeUnchecked(event); Register temp = regs.takeAnyGeneral(); - setupUnalignedABICall(2, temp); + setupUnalignedABICall(temp); passABIArg(logger); passABIArg(event); callWithABI(JS_FUNC_TO_DATA_PTR(void*, TraceLogFunc)); PopRegsInMask(save); } void @@ -1950,17 +1950,17 @@ MacroAssembler::tracelogStopId(Register AllocatableRegisterSet regs(RegisterSet::Volatile()); LiveRegisterSet save(regs.asLiveSet()); PushRegsInMask(save); regs.takeUnchecked(logger); Register temp = regs.takeAnyGeneral(); - setupUnalignedABICall(2, temp); + setupUnalignedABICall(temp); passABIArg(logger); move32(Imm32(textId), temp); passABIArg(temp); callWithABI(JS_FUNC_TO_DATA_PTR(void*, TraceLogStopEventPrivate)); PopRegsInMask(save); } @@ -1971,17 +1971,17 @@ MacroAssembler::tracelogStopId(Register AllocatableRegisterSet regs(RegisterSet::Volatile()); LiveRegisterSet save(regs.asLiveSet()); PushRegsInMask(save); regs.takeUnchecked(logger); regs.takeUnchecked(textId); Register temp = regs.takeAnyGeneral(); - setupUnalignedABICall(2, temp); + setupUnalignedABICall(temp); passABIArg(logger); passABIArg(textId); callWithABI(JS_FUNC_TO_DATA_PTR(void*, TraceLogStopEventPrivate)); PopRegsInMask(save); } #endif @@ -2802,17 +2802,17 @@ MacroAssembler::setupABICall() // arguments, after one or 2 integer-like arguments. Unfortunately, the // Lowering phase is not capable to express it at the moment. So we enforce // the system ABI here. abiArgs_.enforceO32ABI(); #endif } void -MacroAssembler::setupAlignedABICall(uint32_t args) +MacroAssembler::setupAlignedABICall() { setupABICall(); dynamicAlignment_ = false; assertStackAlignment(ABIStackAlignment); #if defined(JS_CODEGEN_ARM64) MOZ_CRASH("Not supported on arm64"); #endif
--- a/js/src/jit/MacroAssembler.h +++ b/js/src/jit/MacroAssembler.h @@ -481,21 +481,21 @@ class MacroAssembler : public MacroAssem public: // =============================================================== // ABI function calls. // Setup a call to C/C++ code, given the assumption that the framePushed // accruately define the state of the stack, and that the top of the stack // was properly aligned. Note that this only supports cdecl. - void setupAlignedABICall(uint32_t args); // CRASH_ON(arm64) + void setupAlignedABICall(); // CRASH_ON(arm64) // Setup an ABI call for when the alignment is not known. This may need a // scratch register. - void setupUnalignedABICall(uint32_t args, Register scratch) PER_ARCH; + void setupUnalignedABICall(Register scratch) PER_ARCH; // Arguments must be assigned to a C/C++ call in order. They are moved // in parallel immediately before performing the call. This process may // temporarily use more stack, in which case esp-relative addresses will be // automatically adjusted. It is extremely important that esp-relative // addresses are computed *after* setupABICall(). Furthermore, no // operations should be emitted while setting arguments. void passABIArg(const MoveOperand& from, MoveOp::Type type);
--- a/js/src/jit/SharedIC.cpp +++ b/js/src/jit/SharedIC.cpp @@ -804,17 +804,17 @@ ICStubCompiler::emitPostWriteBarrierSlot masm.branchValueIsNurseryObject(Assembler::NotEqual, val, scratch, &skipBarrier); // void PostWriteBarrier(JSRuntime* rt, JSObject* obj); #if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS32) saveRegs.add(ICTailCallReg); #endif saveRegs.set() = GeneralRegisterSet::Intersect(saveRegs.set(), GeneralRegisterSet::Volatile()); masm.PushRegsInMask(saveRegs); - masm.setupUnalignedABICall(2, scratch); + masm.setupUnalignedABICall(scratch); masm.movePtr(ImmPtr(cx->runtime()), scratch); masm.passABIArg(scratch); masm.passABIArg(obj); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, PostWriteBarrier)); masm.PopRegsInMask(saveRegs); masm.bind(&skipBarrier); return true;
--- a/js/src/jit/arm/BaselineIC-arm.cpp +++ b/js/src/jit/arm/BaselineIC-arm.cpp @@ -134,17 +134,17 @@ ICBinaryArith_Int32::Compiler::generateS masm.j(Assembler::Equal, &failure); // The call will preserve registers r4-r11. Save R0 and the link // register. MOZ_ASSERT(R1 == ValueOperand(r5, r4)); MOZ_ASSERT(R0 == ValueOperand(r3, r2)); masm.moveValue(R0, savedValue); - masm.setupAlignedABICall(2); + masm.setupAlignedABICall(); masm.passABIArg(R0.payloadReg()); masm.passABIArg(R1.payloadReg()); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, __aeabi_idivmod)); // idivmod returns the quotient in r0, and the remainder in r1. if (op_ == JSOP_DIV) { // Result is a double if the remainder != 0. masm.branch32(Assembler::NotEqual, r1, Imm32(0), &revertRegister);
--- a/js/src/jit/arm/CodeGenerator-arm.cpp +++ b/js/src/jit/arm/CodeGenerator-arm.cpp @@ -568,17 +568,17 @@ CodeGeneratorARM::visitSoftDivI(LSoftDiv Register lhs = ToRegister(ins->lhs()); Register rhs = ToRegister(ins->rhs()); Register output = ToRegister(ins->output()); MDiv* mir = ins->mir(); Label done; divICommon(mir, lhs, rhs, output, ins->snapshot(), done); - masm.setupAlignedABICall(2); + masm.setupAlignedABICall(); masm.passABIArg(lhs); masm.passABIArg(rhs); if (gen->compilingAsmJS()) masm.callWithABI(AsmJSImm_aeabi_idivmod); else masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, __aeabi_idivmod)); // idivmod returns the quotient in r0, and the remainder in r1. @@ -729,17 +729,17 @@ CodeGeneratorARM::visitSoftModI(LSoftMod } else { MOZ_ASSERT(mir->fallible()); bailoutIf(Assembler::Equal, ins->snapshot()); } } modICommon(mir, lhs, rhs, output, ins->snapshot(), done); - masm.setupAlignedABICall(2); + masm.setupAlignedABICall(); masm.passABIArg(lhs); masm.passABIArg(rhs); if (gen->compilingAsmJS()) masm.callWithABI(AsmJSImm_aeabi_idivmod); else masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, __aeabi_idivmod)); // If X%Y == 0 and X < 0, then we *actually* wanted to return -0.0 @@ -1911,17 +1911,17 @@ CodeGeneratorARM::visitAsmJSCompareExcha const MAsmJSCompareExchangeHeap* mir = ins->mir(); Scalar::Type viewType = mir->accessType(); Register ptr = ToRegister(ins->ptr()); Register oldval = ToRegister(ins->oldval()); Register newval = ToRegister(ins->newval()); MOZ_ASSERT(ToRegister(ins->output()) == ReturnReg); - masm.setupAlignedABICall(4); + masm.setupAlignedABICall(); masm.ma_mov(Imm32(viewType), ScratchRegister); masm.passABIArg(ScratchRegister); masm.passABIArg(ptr); masm.passABIArg(oldval); masm.passABIArg(newval); masm.callWithABI(AsmJSImm_AtomicCmpXchg); } @@ -1964,17 +1964,17 @@ CodeGeneratorARM::visitAsmJSAtomicExchan { const MAsmJSAtomicExchangeHeap* mir = ins->mir(); Scalar::Type viewType = mir->accessType(); Register ptr = ToRegister(ins->ptr()); Register value = ToRegister(ins->value()); MOZ_ASSERT(ToRegister(ins->output()) == ReturnReg); - masm.setupAlignedABICall(3); + masm.setupAlignedABICall(); masm.ma_mov(Imm32(viewType), ScratchRegister); masm.passABIArg(ScratchRegister); masm.passABIArg(ptr); masm.passABIArg(value); masm.callWithABI(AsmJSImm_AtomicXchg); } @@ -2061,17 +2061,17 @@ CodeGeneratorARM::visitAsmJSAtomicBinopH void CodeGeneratorARM::visitAsmJSAtomicBinopCallout(LAsmJSAtomicBinopCallout* ins) { const MAsmJSAtomicBinopHeap* mir = ins->mir(); Scalar::Type viewType = mir->accessType(); Register ptr = ToRegister(ins->ptr()); Register value = ToRegister(ins->value()); - masm.setupAlignedABICall(3); + masm.setupAlignedABICall(); masm.ma_mov(Imm32(viewType), ScratchRegister); masm.passABIArg(ScratchRegister); masm.passABIArg(ptr); masm.passABIArg(value); switch (mir->operation()) { case AtomicFetchAddOp: masm.callWithABI(AsmJSImm_AtomicFetchAdd); @@ -2188,17 +2188,17 @@ CodeGeneratorARM::visitSoftUDivOrMod(LSo Label done; MDiv* div = ins->mir()->isDiv() ? ins->mir()->toDiv() : nullptr; MMod* mod = !div ? ins->mir()->toMod() : nullptr; generateUDivModZeroCheck(rhs, output, &done, ins->snapshot(), div); generateUDivModZeroCheck(rhs, output, &done, ins->snapshot(), mod); - masm.setupAlignedABICall(2); + masm.setupAlignedABICall(); masm.passABIArg(lhs); masm.passABIArg(rhs); if (gen->compilingAsmJS()) masm.callWithABI(AsmJSImm_aeabi_uidivmod); else masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, __aeabi_uidivmod)); // uidivmod returns the quotient in r0, and the remainder in r1. @@ -2331,14 +2331,14 @@ CodeGeneratorARM::visitMemoryBarrier(LMe void CodeGeneratorARM::visitRandom(LRandom* ins) { Register temp = ToRegister(ins->temp()); Register temp2 = ToRegister(ins->temp2()); masm.loadJSContext(temp); - masm.setupUnalignedABICall(1, temp2); + masm.setupUnalignedABICall(temp2); masm.passABIArg(temp); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, math_random_no_outparam), MoveOp::DOUBLE); MOZ_ASSERT(ToFloatRegister(ins->output()) == ReturnDoubleReg); }
--- a/js/src/jit/arm/MacroAssembler-arm.cpp +++ b/js/src/jit/arm/MacroAssembler-arm.cpp @@ -3761,17 +3761,17 @@ MacroAssemblerARMCompat::handleFailureWi { // Reserve space for exception information. int size = (sizeof(ResumeFromException) + 7) & ~7; ma_sub(Imm32(size), sp); ma_mov(sp, r0); // Call the handler. - asMasm().setupUnalignedABICall(1, r1); + asMasm().setupUnalignedABICall(r1); asMasm().passABIArg(r0); asMasm().callWithABI(handler); Label entryFrame; Label catch_; Label finally; Label return_; Label bailout; @@ -4980,17 +4980,17 @@ MacroAssembler::call(JitCode* c) ma_callJitHalfPush(ScratchRegister); } // =============================================================== // ABI function calls. void -MacroAssembler::setupUnalignedABICall(uint32_t args, Register scratch) +MacroAssembler::setupUnalignedABICall(Register scratch) { setupABICall(); dynamicAlignment_ = true; ma_mov(sp, scratch); // Force sp to be aligned. ma_and(Imm32(~(ABIStackAlignment - 1)), sp, sp); ma_push(scratch);
--- a/js/src/jit/arm/Trampoline-arm.cpp +++ b/js/src/jit/arm/Trampoline-arm.cpp @@ -287,17 +287,17 @@ JitRuntime::generateEnterJIT(JSContext* masm.push(scratch); masm.push(Imm32(0)); // Fake return address. // No GC things to mark on the stack, push a bare token. masm.enterFakeExitFrame(ExitFrameLayout::BareToken()); masm.push(framePtr); // BaselineFrame masm.push(r0); // jitcode - masm.setupUnalignedABICall(3, scratch); + masm.setupUnalignedABICall(scratch); masm.passABIArg(r11); // BaselineFrame masm.passABIArg(OsrFrameReg); // InterpreterFrame masm.passABIArg(numStackValues); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, jit::InitBaselineFrameForOsr)); Register jitcode = regs.takeAny(); masm.pop(jitcode); masm.pop(framePtr); @@ -418,17 +418,17 @@ JitRuntime::generateInvalidator(JSContex masm.ma_mov(sp, r0); const int sizeOfRetval = sizeof(size_t)*2; masm.reserveStack(sizeOfRetval); masm.mov(sp, r1); const int sizeOfBailoutInfo = sizeof(void*)*2; masm.reserveStack(sizeOfBailoutInfo); masm.mov(sp, r2); - masm.setupAlignedABICall(3); + masm.setupAlignedABICall(); masm.passABIArg(r0); masm.passABIArg(r1); masm.passABIArg(r2); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, InvalidationBailout)); masm.ma_ldr(Address(sp, 0), r2); masm.ma_ldr(Address(sp, sizeOfBailoutInfo), r1); // Remove the return address, the IonScript, the register state @@ -641,17 +641,17 @@ GenerateBailoutThunk(JSContext* cx, Macr PushBailoutFrame(masm, frameClass, r0); // SP % 8 == 4 // STEP 1c: Call the bailout function, giving a pointer to the // structure we just blitted onto the stack. const int sizeOfBailoutInfo = sizeof(void*)*2; masm.reserveStack(sizeOfBailoutInfo); masm.mov(sp, r1); - masm.setupAlignedABICall(2); + masm.setupAlignedABICall(); // Decrement sp by another 4, so we keep alignment. Not Anymore! Pushing // both the snapshotoffset as well as the: masm.as_sub(sp, sp, Imm8(4)); // Set the old (4-byte aligned) value of the sp as the first argument. masm.passABIArg(r0); masm.passABIArg(r1); @@ -812,17 +812,17 @@ JitRuntime::generateVMWrapper(JSContext* masm.ma_mov(sp, outReg); break; default: MOZ_ASSERT(f.outParam == Type_Void); break; } - masm.setupUnalignedABICall(f.argc(), regs.getAny()); + masm.setupUnalignedABICall(regs.getAny()); masm.passABIArg(cxreg); size_t argDisp = 0; // Copy any arguments. for (uint32_t explicitArg = 0; explicitArg < f.explicitArgs; explicitArg++) { MoveOperand from; switch (f.argProperties(explicitArg)) { @@ -937,17 +937,17 @@ JitRuntime::generatePreBarrier(JSContext FloatRegisterSet()); } save.add(lr); masm.PushRegsInMask(save); MOZ_ASSERT(PreBarrierReg == r1); masm.movePtr(ImmPtr(cx->runtime()), r0); - masm.setupUnalignedABICall(2, r2); + masm.setupUnalignedABICall(r2); masm.passABIArg(r0); masm.passABIArg(r1); masm.callWithABI(IonMarkFunction(type)); save.take(AnyRegister(lr)); save.add(pc); masm.PopRegsInMask(save); Linker linker(masm);
--- a/js/src/jit/arm64/MacroAssembler-arm64.cpp +++ b/js/src/jit/arm64/MacroAssembler-arm64.cpp @@ -177,17 +177,17 @@ MacroAssemblerCompat::handleFailureWithH int64_t size = (sizeof(ResumeFromException) + 7) & ~7; Sub(GetStackPointer64(), GetStackPointer64(), Operand(size)); if (!GetStackPointer64().Is(sp)) Mov(sp, GetStackPointer64()); Mov(x0, GetStackPointer64()); // Call the handler. - asMasm().setupUnalignedABICall(1, r1); + asMasm().setupUnalignedABICall(r1); asMasm().passABIArg(r0); asMasm().callWithABI(handler); Label entryFrame; Label catch_; Label finally; Label return_; Label bailout; @@ -514,17 +514,17 @@ MacroAssembler::call(JitCode* c) addPendingJump(off, ImmPtr(c->raw()), Relocation::JITCODE); blr(scratch64); } // =============================================================== // ABI function calls. void -MacroAssembler::setupUnalignedABICall(uint32_t args, Register scratch) +MacroAssembler::setupUnalignedABICall(Register scratch) { setupABICall(); dynamicAlignment_ = true; int64_t alignment = ~(int64_t(ABIStackAlignment) - 1); ARMRegister scratch64(scratch, 64); // Always save LR -- Baseline ICs assume that LR isn't modified.
--- a/js/src/jit/arm64/Trampoline-arm64.cpp +++ b/js/src/jit/arm64/Trampoline-arm64.cpp @@ -189,17 +189,17 @@ JitRuntime::generateEnterJIT(JSContext* masm.makeFrameDescriptor(r19, JitFrame_BaselineJS); masm.asVIXL().Push(x19, xzr); // Push xzr for a fake return address. // No GC things to mark: push a bare token. masm.enterFakeExitFrame(ExitFrameLayout::BareToken()); masm.push(BaselineFrameReg, reg_code); // Initialize the frame, including filling in the slots. - masm.setupUnalignedABICall(3, r19); + masm.setupUnalignedABICall(r19); masm.passABIArg(BaselineFrameReg); // BaselineFrame. masm.passABIArg(reg_osrFrame); // InterpreterFrame. masm.passABIArg(reg_osrNStack); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, jit::InitBaselineFrameForOsr)); masm.pop(r19, BaselineFrameReg); MOZ_ASSERT(r19 != ReturnReg); @@ -290,17 +290,17 @@ JitRuntime::generateInvalidator(JSContex masm.PushRegsInMask(AllRegs); masm.moveStackPtrTo(r0); masm.Sub(x1, masm.GetStackPointer64(), Operand(sizeof(size_t))); masm.Sub(x2, masm.GetStackPointer64(), Operand(sizeof(size_t) + sizeof(void*))); masm.moveToStackPtr(r2); - masm.setupUnalignedABICall(3, r10); + masm.setupUnalignedABICall(r10); masm.passABIArg(r0); masm.passABIArg(r1); masm.passABIArg(r2); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, InvalidationBailout)); masm.pop(r2, r1); @@ -491,17 +491,17 @@ GenerateBailoutThunk(JSContext* cx, Macr // SP % 8 == 4 // STEP 1c: Call the bailout function, giving a pointer to the // structure we just blitted onto the stack. // Make space for the BaselineBailoutInfo* outparam. const int sizeOfBailoutInfo = sizeof(void*) * 2; masm.reserveStack(sizeOfBailoutInfo); masm.moveStackPtrTo(r1); - masm.setupUnalignedABICall(2, r2); + masm.setupUnalignedABICall(r2); masm.passABIArg(r0); masm.passABIArg(r1); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, Bailout)); masm.Ldr(x2, MemOperand(masm.GetStackPointer64(), 0)); masm.addToStackPtr(Imm32(sizeOfBailoutInfo)); static const uint32_t BailoutDataSize = sizeof(void*) * Registers::Total + @@ -631,17 +631,17 @@ JitRuntime::generateVMWrapper(JSContext* masm.moveStackPtrTo(outReg); break; default: MOZ_ASSERT(f.outParam == Type_Void); break; } - masm.setupUnalignedABICall(f.argc(), regs.getAny()); + masm.setupUnalignedABICall(regs.getAny()); masm.passABIArg(reg_cx); size_t argDisp = 0; // Copy arguments. for (uint32_t explicitArg = 0; explicitArg < f.explicitArgs; explicitArg++) { MoveOperand from; switch (f.argProperties(explicitArg)) { @@ -758,17 +758,17 @@ JitRuntime::generatePreBarrier(JSContext // Also preserve the return address. regs.add(lr); masm.PushRegsInMask(regs); MOZ_ASSERT(PreBarrierReg == r1); masm.movePtr(ImmPtr(cx->runtime()), r3); - masm.setupUnalignedABICall(2, r0); + masm.setupUnalignedABICall(r0); masm.passABIArg(r3); masm.passABIArg(PreBarrierReg); masm.callWithABI(IonMarkFunction(type)); // Pop the volatile regs and restore LR. masm.PopRegsInMask(regs); masm.abiret();
--- a/js/src/jit/mips32/CodeGenerator-mips32.cpp +++ b/js/src/jit/mips32/CodeGenerator-mips32.cpp @@ -2115,14 +2115,14 @@ CodeGeneratorMIPS::visitNegF(LNegF* ins) void CodeGeneratorMIPS::visitRandom(LRandom* ins) { Register temp = ToRegister(ins->temp()); Register temp2 = ToRegister(ins->temp2()); masm.loadJSContext(temp); - masm.setupUnalignedABICall(1, temp2); + masm.setupUnalignedABICall(temp2); masm.passABIArg(temp); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, math_random_no_outparam), MoveOp::DOUBLE); MOZ_ASSERT(ToFloatRegister(ins->output()) == ReturnDoubleReg); }
--- a/js/src/jit/mips32/MacroAssembler-mips32.cpp +++ b/js/src/jit/mips32/MacroAssembler-mips32.cpp @@ -3199,17 +3199,17 @@ void MacroAssemblerMIPSCompat::handleFailureWithHandlerTail(void* handler) { // Reserve space for exception information. int size = (sizeof(ResumeFromException) + ABIStackAlignment) & ~(ABIStackAlignment - 1); ma_subu(StackPointer, StackPointer, Imm32(size)); ma_move(a0, StackPointer); // Use a0 since it is a first function argument // Call the handler. - asMasm().setupUnalignedABICall(1, a1); + asMasm().setupUnalignedABICall(a1); asMasm().passABIArg(a0); asMasm().callWithABI(handler); Label entryFrame; Label catch_; Label finally; Label return_; Label bailout; @@ -3544,17 +3544,17 @@ MacroAssembler::call(JitCode* c) ma_liPatchable(ScratchRegister, Imm32((uint32_t)c->raw())); ma_callJitHalfPush(ScratchRegister); } // =============================================================== // ABI function calls. void -MacroAssembler::setupUnalignedABICall(uint32_t args, Register scratch) +MacroAssembler::setupUnalignedABICall(Register scratch) { setupABICall(); dynamicAlignment_ = true; ma_move(scratch, StackPointer); // Force sp to be aligned ma_subu(StackPointer, StackPointer, Imm32(sizeof(uint32_t)));
--- a/js/src/jit/mips32/Trampoline-mips32.cpp +++ b/js/src/jit/mips32/Trampoline-mips32.cpp @@ -242,17 +242,17 @@ JitRuntime::generateEnterJIT(JSContext* // No GC things to mark, push a bare token. masm.enterFakeExitFrame(ExitFrameLayout::BareToken()); masm.reserveStack(2 * sizeof(uintptr_t)); masm.storePtr(framePtr, Address(StackPointer, sizeof(uintptr_t))); // BaselineFrame masm.storePtr(reg_code, Address(StackPointer, 0)); // jitcode - masm.setupUnalignedABICall(3, scratch); + masm.setupUnalignedABICall(scratch); masm.passABIArg(BaselineFrameReg); // BaselineFrame masm.passABIArg(OsrFrameReg); // InterpreterFrame masm.passABIArg(numStackValues); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, jit::InitBaselineFrameForOsr)); regs.add(OsrFrameReg); regs.add(scratch); regs.add(numStackValues); @@ -369,17 +369,17 @@ JitRuntime::generateInvalidator(JSContex // Reserve place for return value and BailoutInfo pointer masm.subPtr(Imm32(2 * sizeof(uintptr_t)), StackPointer); // Pass pointer to return value. masm.ma_addu(a1, StackPointer, Imm32(sizeof(uintptr_t))); // Pass pointer to BailoutInfo masm.movePtr(StackPointer, a2); - masm.setupAlignedABICall(3); + masm.setupAlignedABICall(); masm.passABIArg(a0); masm.passABIArg(a1); masm.passABIArg(a2); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, InvalidationBailout)); masm.loadPtr(Address(StackPointer, 0), a2); masm.loadPtr(Address(StackPointer, sizeof(uintptr_t)), a1); // Remove the return address, the IonScript, the register state @@ -605,17 +605,17 @@ GenerateBailoutThunk(JSContext* cx, Macr { PushBailoutFrame(masm, frameClass, a0); // Put pointer to BailoutInfo masm.subPtr(Imm32(bailoutInfoOutParamSize), StackPointer); masm.storePtr(ImmPtr(nullptr), Address(StackPointer, 0)); masm.movePtr(StackPointer, a1); - masm.setupAlignedABICall(2); + masm.setupAlignedABICall(); masm.passABIArg(a0); masm.passABIArg(a1); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, Bailout)); // Get BailoutInfo pointer masm.loadPtr(Address(StackPointer, 0), a2); // Remove both the bailout frame and the topmost Ion frame's stack. @@ -761,17 +761,17 @@ JitRuntime::generateVMWrapper(JSContext* } // Reserve stack for double sized args that are copied to be aligned. outParamOffset += f.doubleByRefArgs() * sizeof(double); Register doubleArgs = t0; masm.reserveStack(outParamOffset); masm.movePtr(StackPointer, doubleArgs); - masm.setupAlignedABICall(f.argc()); + masm.setupAlignedABICall(); masm.passABIArg(cxreg); size_t argDisp = 0; size_t doubleArgDisp = 0; // Copy any arguments. for (uint32_t explicitArg = 0; explicitArg < f.explicitArgs; explicitArg++) { MoveOperand from; @@ -905,17 +905,17 @@ JitRuntime::generatePreBarrier(JSContext save.set() = RegisterSet(GeneralRegisterSet(Registers::VolatileMask), FloatRegisterSet()); } masm.PushRegsInMask(save); MOZ_ASSERT(PreBarrierReg == a1); masm.movePtr(ImmPtr(cx->runtime()), a0); - masm.setupUnalignedABICall(2, a2); + masm.setupUnalignedABICall(a2); masm.passABIArg(a0); masm.passABIArg(a1); masm.callWithABI(IonMarkFunction(type)); masm.PopRegsInMask(save); masm.ret(); Linker linker(masm);
--- a/js/src/jit/shared/CodeGenerator-shared.cpp +++ b/js/src/jit/shared/CodeGenerator-shared.cpp @@ -1446,17 +1446,17 @@ CodeGeneratorShared::visitOutOfLineTrunc if (ool->needFloat32Conversion()) { MOZ_ASSERT(src.isSingle()); masm.push(src); masm.convertFloat32ToDouble(src, src); src = src.asDouble(); } #endif - masm.setupUnalignedABICall(1, dest); + masm.setupUnalignedABICall(dest); masm.passABIArg(src, MoveOp::DOUBLE); if (gen->compilingAsmJS()) masm.callWithABI(AsmJSImm_ToInt32); else masm.callWithABI(BitwiseCast<void*, int32_t(*)(double)>(JS::ToInt32)); masm.storeCallResult(dest); #if !defined(JS_CODEGEN_ARM) && !defined(JS_CODEGEN_ARM64)
--- a/js/src/jit/x64/CodeGenerator-x64.cpp +++ b/js/src/jit/x64/CodeGenerator-x64.cpp @@ -976,16 +976,16 @@ CodeGeneratorX64::visitOutOfLineRandom(O regs.add(ReturnFloat32Reg); regs.add(ReturnDoubleReg); regs.add(ReturnInt32x4Reg); regs.add(ReturnFloat32x4Reg); saveVolatile(regs); masm.loadJSContext(temp); - masm.setupUnalignedABICall(1, temp2); + masm.setupUnalignedABICall(temp2); masm.passABIArg(temp); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, math_random_no_outparam), MoveOp::DOUBLE); restoreVolatile(regs); masm.jump(ool->rejoin()); }
--- a/js/src/jit/x64/MacroAssembler-x64.cpp +++ b/js/src/jit/x64/MacroAssembler-x64.cpp @@ -186,17 +186,17 @@ MacroAssemblerX64::finish() void MacroAssemblerX64::handleFailureWithHandlerTail(void* handler) { // Reserve space for exception information. subq(Imm32(sizeof(ResumeFromException)), rsp); movq(rsp, rax); // Call the handler. - asMasm().setupUnalignedABICall(1, rcx); + asMasm().setupUnalignedABICall(rcx); asMasm().passABIArg(rax); asMasm().callWithABI(handler); Label entryFrame; Label catch_; Label finally; Label return_; Label bailout; @@ -402,17 +402,17 @@ MacroAssembler::reserveStack(uint32_t am framePushed_ += amount; } // =============================================================== // ABI function calls. void -MacroAssembler::setupUnalignedABICall(uint32_t args, Register scratch) +MacroAssembler::setupUnalignedABICall(Register scratch) { setupABICall(); dynamicAlignment_ = true; movq(rsp, scratch); andq(Imm32(~(ABIStackAlignment - 1)), rsp); push(scratch); }
--- a/js/src/jit/x64/Trampoline-x64.cpp +++ b/js/src/jit/x64/Trampoline-x64.cpp @@ -228,17 +228,17 @@ JitRuntime::generateEnterJIT(JSContext* // No GC things to mark, push a bare token. masm.enterFakeExitFrame(ExitFrameLayout::BareToken()); regs.add(valuesSize); masm.push(framePtr); masm.push(reg_code); - masm.setupUnalignedABICall(3, scratch); + masm.setupUnalignedABICall(scratch); masm.passABIArg(framePtr); // BaselineFrame masm.passABIArg(OsrFrameReg); // InterpreterFrame masm.passABIArg(numStackValues); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, jit::InitBaselineFrameForOsr)); masm.pop(reg_code); masm.pop(framePtr); @@ -357,17 +357,17 @@ JitRuntime::generateInvalidator(JSContex // Make space for InvalidationBailout's frameSize outparam. masm.reserveStack(sizeof(size_t)); masm.movq(rsp, rbx); // Make space for InvalidationBailout's bailoutInfo outparam. masm.reserveStack(sizeof(void*)); masm.movq(rsp, r9); - masm.setupUnalignedABICall(3, rdx); + masm.setupUnalignedABICall(rdx); masm.passABIArg(rax); masm.passABIArg(rbx); masm.passABIArg(r9); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, InvalidationBailout)); masm.pop(r9); // Get the bailoutInfo outparam. masm.pop(rbx); // Get the frameSize outparam. @@ -583,17 +583,17 @@ GenerateBailoutThunk(JSContext* cx, Macr { PushBailoutFrame(masm, r8); // Make space for Bailout's bailoutInfo outparam. masm.reserveStack(sizeof(void*)); masm.movq(rsp, r9); // Call the bailout function. - masm.setupUnalignedABICall(2, rax); + masm.setupUnalignedABICall(rax); masm.passABIArg(r8); masm.passABIArg(r9); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, Bailout)); masm.pop(r9); // Get the bailoutInfo outparam. // Stack is: // [frame] @@ -709,17 +709,17 @@ JitRuntime::generateVMWrapper(JSContext* masm.movq(esp, outReg); break; default: MOZ_ASSERT(f.outParam == Type_Void); break; } - masm.setupUnalignedABICall(f.argc(), regs.getAny()); + masm.setupUnalignedABICall(regs.getAny()); masm.passABIArg(cxreg); size_t argDisp = 0; // Copy arguments. for (uint32_t explicitArg = 0; explicitArg < f.explicitArgs; explicitArg++) { MoveOperand from; switch (f.argProperties(explicitArg)) { @@ -826,17 +826,17 @@ JitRuntime::generatePreBarrier(JSContext LiveRegisterSet regs = LiveRegisterSet(GeneralRegisterSet(Registers::VolatileMask), FloatRegisterSet(FloatRegisters::VolatileMask)); masm.PushRegsInMask(regs); MOZ_ASSERT(PreBarrierReg == rdx); masm.mov(ImmPtr(cx->runtime()), rcx); - masm.setupUnalignedABICall(2, rax); + masm.setupUnalignedABICall(rax); masm.passABIArg(rcx); masm.passABIArg(rdx); masm.callWithABI(IonMarkFunction(type)); masm.PopRegsInMask(regs); masm.ret(); Linker linker(masm);
--- a/js/src/jit/x86/CodeGenerator-x86.cpp +++ b/js/src/jit/x86/CodeGenerator-x86.cpp @@ -1027,17 +1027,17 @@ CodeGeneratorX86::visitOutOfLineTruncate masm.j(Assembler::Parity, &fail); masm.j(Assembler::Equal, ool->rejoin()); } masm.bind(&fail); { saveVolatile(output); - masm.setupUnalignedABICall(1, output); + masm.setupUnalignedABICall(output); masm.passABIArg(input, MoveOp::DOUBLE); if (gen->compilingAsmJS()) masm.callWithABI(AsmJSImm_ToInt32); else masm.callWithABI(BitwiseCast<void*, int32_t(*)(double)>(JS::ToInt32)); masm.storeCallResult(output); restoreVolatile(output); @@ -1117,17 +1117,17 @@ CodeGeneratorX86::visitOutOfLineTruncate masm.j(Assembler::Equal, ool->rejoin()); } masm.bind(&fail); { saveVolatile(output); masm.push(input); - masm.setupUnalignedABICall(1, output); + masm.setupUnalignedABICall(output); masm.vcvtss2sd(input, input, input); masm.passABIArg(input.asDouble(), MoveOp::DOUBLE); if (gen->compilingAsmJS()) masm.callWithABI(AsmJSImm_ToInt32); else masm.callWithABI(BitwiseCast<void*, int32_t(*)(double)>(JS::ToInt32)); @@ -1143,14 +1143,14 @@ CodeGeneratorX86::visitOutOfLineTruncate void CodeGeneratorX86::visitRandom(LRandom* ins) { Register temp = ToRegister(ins->temp()); Register temp2 = ToRegister(ins->temp2()); masm.loadJSContext(temp); - masm.setupUnalignedABICall(1, temp2); + masm.setupUnalignedABICall(temp2); masm.passABIArg(temp); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, math_random_no_outparam), MoveOp::DOUBLE); MOZ_ASSERT(ToFloatRegister(ins->output()) == ReturnDoubleReg); }
--- a/js/src/jit/x86/MacroAssembler-x86.cpp +++ b/js/src/jit/x86/MacroAssembler-x86.cpp @@ -207,17 +207,17 @@ MacroAssemblerX86::finish() void MacroAssemblerX86::handleFailureWithHandlerTail(void* handler) { // Reserve space for exception information. subl(Imm32(sizeof(ResumeFromException)), esp); movl(esp, eax); // Call the handler. - asMasm().setupUnalignedABICall(1, ecx); + asMasm().setupUnalignedABICall(ecx); asMasm().passABIArg(eax); asMasm().callWithABI(handler); Label entryFrame; Label catch_; Label finally; Label return_; Label bailout; @@ -433,17 +433,17 @@ MacroAssembler::reserveStack(uint32_t am } framePushed_ += amount; } // =============================================================== // ABI function calls. void -MacroAssembler::setupUnalignedABICall(uint32_t args, Register scratch) +MacroAssembler::setupUnalignedABICall(Register scratch) { setupABICall(); dynamicAlignment_ = true; movl(esp, scratch); andl(Imm32(~(ABIStackAlignment - 1)), esp); push(scratch); }
--- a/js/src/jit/x86/Trampoline-x86.cpp +++ b/js/src/jit/x86/Trampoline-x86.cpp @@ -219,17 +219,17 @@ JitRuntime::generateEnterJIT(JSContext* masm.push(scratch); // Fake return address. masm.push(Imm32(0)); // No GC things to mark on the stack, push a bare token. masm.enterFakeExitFrame(ExitFrameLayout::BareToken()); masm.push(framePtr); masm.push(jitcode); - masm.setupUnalignedABICall(3, scratch); + masm.setupUnalignedABICall(scratch); masm.passABIArg(framePtr); // BaselineFrame masm.passABIArg(OsrFrameReg); // InterpreterFrame masm.passABIArg(numStackValues); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, jit::InitBaselineFrameForOsr)); masm.pop(jitcode); masm.pop(framePtr); @@ -350,17 +350,17 @@ JitRuntime::generateInvalidator(JSContex // Make space for InvalidationBailout's frameSize outparam. masm.reserveStack(sizeof(size_t)); masm.movl(esp, ebx); // Make space for InvalidationBailout's bailoutInfo outparam. masm.reserveStack(sizeof(void*)); masm.movl(esp, ecx); - masm.setupUnalignedABICall(3, edx); + masm.setupUnalignedABICall(edx); masm.passABIArg(eax); masm.passABIArg(ebx); masm.passABIArg(ecx); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, InvalidationBailout)); masm.pop(ecx); // Get bailoutInfo outparam. masm.pop(ebx); // Get the frameSize outparam. @@ -582,17 +582,17 @@ GenerateBailoutThunk(JSContext* cx, Macr { PushBailoutFrame(masm, frameClass, eax); // Make space for Bailout's baioutInfo outparam. masm.reserveStack(sizeof(void*)); masm.movl(esp, ebx); // Call the bailout function. This will correct the size of the bailout. - masm.setupUnalignedABICall(2, ecx); + masm.setupUnalignedABICall(ecx); masm.passABIArg(eax); masm.passABIArg(ebx); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, Bailout)); masm.pop(ecx); // Get bailoutInfo outparam. // Common size of stuff we've pushed. static const uint32_t BailoutDataSize = 0 @@ -730,17 +730,17 @@ JitRuntime::generateVMWrapper(JSContext* masm.movl(esp, outReg); break; default: MOZ_ASSERT(f.outParam == Type_Void); break; } - masm.setupUnalignedABICall(f.argc(), regs.getAny()); + masm.setupUnalignedABICall(regs.getAny()); masm.passABIArg(cxreg); size_t argDisp = 0; // Copy arguments. for (uint32_t explicitArg = 0; explicitArg < f.explicitArgs; explicitArg++) { MoveOperand from; switch (f.argProperties(explicitArg)) { @@ -854,17 +854,17 @@ JitRuntime::generatePreBarrier(JSContext save.set() = RegisterSet(GeneralRegisterSet(Registers::VolatileMask), FloatRegisterSet()); } masm.PushRegsInMask(save); MOZ_ASSERT(PreBarrierReg == edx); masm.movl(ImmPtr(cx->runtime()), ecx); - masm.setupUnalignedABICall(2, eax); + masm.setupUnalignedABICall(eax); masm.passABIArg(ecx); masm.passABIArg(edx); masm.callWithABI(IonMarkFunction(type)); masm.PopRegsInMask(save); masm.ret(); Linker linker(masm);
--- a/js/src/vm/UnboxedObject.cpp +++ b/js/src/vm/UnboxedObject.cpp @@ -156,17 +156,17 @@ UnboxedLayout::makeConstructorCode(JSCon LiveGeneralRegisterSet liveVolatileRegisters; liveVolatileRegisters.add(propertiesReg); if (object.volatile_()) liveVolatileRegisters.add(object); masm.PushRegsInMask(liveVolatileRegisters); masm.mov(ImmPtr(cx->runtime()), scratch1); - masm.setupUnalignedABICall(2, scratch2); + masm.setupUnalignedABICall(scratch2); masm.passABIArg(scratch1); masm.passABIArg(object); masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, PostWriteBarrier)); masm.PopRegsInMask(liveVolatileRegisters); masm.bind(&allocated);