mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1178770 - Move MacroAssemblerSpecific::call to the MacroAssembler. r=h4writer
This commit is contained in:
parent
5af5a80eb6
commit
5b4a36245b
@ -59,7 +59,7 @@ MacroAssembler::PushWithPatch(ImmPtr imm)
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
// Call functions.
|
||||
// Simple call functions.
|
||||
|
||||
void
|
||||
MacroAssembler::call(const CallSiteDesc& desc, const Register reg)
|
||||
|
@ -350,9 +350,17 @@ class MacroAssembler : public MacroAssemblerSpecific
|
||||
|
||||
public:
|
||||
// ===============================================================
|
||||
// Call functions.
|
||||
// Simple call functions.
|
||||
|
||||
using MacroAssemblerSpecific::call; // legacy
|
||||
void call(Register reg) PER_ARCH;
|
||||
void call(const Address& addr) PER_ARCH ONLY_X86_X64;
|
||||
void call(Label* label) PER_ARCH;
|
||||
void call(ImmWord imm) PER_ARCH;
|
||||
// Call a target native function, which is neither traceable nor movable.
|
||||
void call(ImmPtr imm) PER_ARCH;
|
||||
void call(AsmJSImmPtr imm) PER_ARCH;
|
||||
// Call a target JitCode, which must be traceable, and may be movable.
|
||||
void call(JitCode* c) PER_ARCH;
|
||||
|
||||
inline void call(const CallSiteDesc& desc, const Register reg);
|
||||
inline void call(const CallSiteDesc& desc, Label* label);
|
||||
|
@ -1638,9 +1638,6 @@ class Assembler : public AssemblerShared
|
||||
return actualOffset(offset);
|
||||
}
|
||||
|
||||
void call(Label* label);
|
||||
void call(void* target);
|
||||
|
||||
void as_bkpt();
|
||||
|
||||
public:
|
||||
|
@ -4122,7 +4122,7 @@ MacroAssemblerARMCompat::callWithABI(AsmJSImmPtr imm, MoveOp::Type result)
|
||||
{
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust, /* callFromAsmJS = */ true);
|
||||
call(imm);
|
||||
asMasm().call(imm);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -4135,7 +4135,7 @@ MacroAssemblerARMCompat::callWithABI(const Address& fun, MoveOp::Type result)
|
||||
ma_ldr(fun, r12);
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(r12);
|
||||
asMasm().call(r12);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -4146,7 +4146,7 @@ MacroAssemblerARMCompat::callWithABI(Register fun, MoveOp::Type result)
|
||||
ma_mov(fun, r12);
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(r12);
|
||||
asMasm().call(r12);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -5090,6 +5090,14 @@ MacroAssemblerARMCompat::profilerExitFrame()
|
||||
branch(GetJitContext()->runtime->jitRuntime()->getProfilerExitFrameTail());
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerARMCompat::callAndPushReturnAddress(Label* label)
|
||||
{
|
||||
AutoForbidPools afp(this, 2);
|
||||
ma_push(pc);
|
||||
asMasm().call(label);
|
||||
}
|
||||
|
||||
MacroAssembler&
|
||||
MacroAssemblerARMCompat::asMasm()
|
||||
{
|
||||
@ -5240,3 +5248,55 @@ MacroAssembler::reserveStack(uint32_t amount)
|
||||
ma_sub(Imm32(amount), sp);
|
||||
adjustFrame(amount);
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
// Simple call functions.
|
||||
|
||||
void
|
||||
MacroAssembler::call(Register reg)
|
||||
{
|
||||
as_blx(reg);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(Label* label)
|
||||
{
|
||||
// For now, assume that it'll be nearby?
|
||||
as_bl(label, Always);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(ImmWord imm)
|
||||
{
|
||||
call(ImmPtr((void*)imm.value));
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(ImmPtr imm)
|
||||
{
|
||||
BufferOffset bo = m_buffer.nextOffset();
|
||||
addPendingJump(bo, imm, Relocation::HARDCODED);
|
||||
ma_call(imm);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(AsmJSImmPtr imm)
|
||||
{
|
||||
movePtr(imm, CallReg);
|
||||
call(CallReg);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(JitCode* c)
|
||||
{
|
||||
BufferOffset bo = m_buffer.nextOffset();
|
||||
addPendingJump(bo, ImmPtr(c->raw()), Relocation::JITCODE);
|
||||
RelocStyle rs;
|
||||
if (HasMOVWT())
|
||||
rs = L_MOVWT;
|
||||
else
|
||||
rs = L_LDR;
|
||||
|
||||
ma_movPatchable(ImmPtr(c->raw()), ScratchRegister, Always, rs);
|
||||
ma_callJitHalfPush(ScratchRegister);
|
||||
}
|
||||
|
@ -538,7 +538,6 @@ class MacroAssemblerARMCompat : public MacroAssemblerARM
|
||||
{ }
|
||||
|
||||
public:
|
||||
using MacroAssemblerARM::call;
|
||||
|
||||
// Jumps + other functions that should be called from non-arm specific
|
||||
// code. Basically, an x86 front end on top of the ARM code.
|
||||
@ -567,42 +566,7 @@ class MacroAssemblerARMCompat : public MacroAssemblerARM
|
||||
MOZ_CRASH("NYI-IC");
|
||||
}
|
||||
|
||||
void call(const Register reg) {
|
||||
as_blx(reg);
|
||||
}
|
||||
void call(Label* label) {
|
||||
// For now, assume that it'll be nearby?
|
||||
as_bl(label, Always);
|
||||
}
|
||||
void call(ImmWord imm) {
|
||||
call(ImmPtr((void*)imm.value));
|
||||
}
|
||||
void call(ImmPtr imm) {
|
||||
BufferOffset bo = m_buffer.nextOffset();
|
||||
addPendingJump(bo, imm, Relocation::HARDCODED);
|
||||
ma_call(imm);
|
||||
}
|
||||
void call(AsmJSImmPtr imm) {
|
||||
movePtr(imm, CallReg);
|
||||
call(CallReg);
|
||||
}
|
||||
void call(JitCode* c) {
|
||||
BufferOffset bo = m_buffer.nextOffset();
|
||||
addPendingJump(bo, ImmPtr(c->raw()), Relocation::JITCODE);
|
||||
RelocStyle rs;
|
||||
if (HasMOVWT())
|
||||
rs = L_MOVWT;
|
||||
else
|
||||
rs = L_LDR;
|
||||
|
||||
ma_movPatchable(ImmPtr(c->raw()), ScratchRegister, Always, rs);
|
||||
ma_callJitHalfPush(ScratchRegister);
|
||||
}
|
||||
void callAndPushReturnAddress(Label* label) {
|
||||
AutoForbidPools afp(this, 2);
|
||||
ma_push(pc);
|
||||
call(label);
|
||||
}
|
||||
void callAndPushReturnAddress(Label* label);
|
||||
|
||||
void branch(JitCode* c) {
|
||||
BufferOffset bo = m_buffer.nextOffset();
|
||||
|
@ -55,12 +55,29 @@ MacroAssemblerCompat::buildFakeExitFrame(Register scratch, uint32_t* offset)
|
||||
*offset = pseudoReturnOffset;
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerCompat::callWithExitFrame(Label* target)
|
||||
{
|
||||
uint32_t descriptor = MakeFrameDescriptor(framePushed(), JitFrame_IonJS);
|
||||
Push(Imm32(descriptor)); // descriptor
|
||||
asMasm().call(target);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerCompat::callWithExitFrame(JitCode* target)
|
||||
{
|
||||
uint32_t descriptor = MakeFrameDescriptor(framePushed(), JitFrame_IonJS);
|
||||
asMasm().Push(Imm32(descriptor));
|
||||
call(target);
|
||||
asMasm().call(target);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerCompat::callWithExitFrame(JitCode* target, Register dynStack)
|
||||
{
|
||||
add32(Imm32(framePushed()), dynStack);
|
||||
makeFrameDescriptor(dynStack, JitFrame_IonJS);
|
||||
Push(dynStack); // descriptor
|
||||
asMasm().call(target);
|
||||
}
|
||||
|
||||
void
|
||||
@ -441,7 +458,7 @@ MacroAssemblerCompat::callWithABI(void* fun, MoveOp::Type result)
|
||||
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(ImmPtr(fun));
|
||||
asMasm().call(ImmPtr(fun));
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -452,7 +469,7 @@ MacroAssemblerCompat::callWithABI(Register fun, MoveOp::Type result)
|
||||
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(ip0);
|
||||
asMasm().call(ip0);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -461,7 +478,7 @@ MacroAssemblerCompat::callWithABI(AsmJSImmPtr imm, MoveOp::Type result)
|
||||
{
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(imm);
|
||||
asMasm().call(imm);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -472,7 +489,7 @@ MacroAssemblerCompat::callWithABI(Address fun, MoveOp::Type result)
|
||||
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(ip0);
|
||||
asMasm().call(ip0);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -684,5 +701,57 @@ MacroAssembler::Pop(const ValueOperand& val)
|
||||
adjustFrame(-1 * int64_t(sizeof(int64_t)));
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
// Simple call functions.
|
||||
|
||||
void
|
||||
MacroAssembler::call(Register reg)
|
||||
{
|
||||
syncStackPtr();
|
||||
Blr(ARMRegister(reg, 64));
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(Label* label)
|
||||
{
|
||||
syncStackPtr();
|
||||
Bl(label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(ImmWord imm)
|
||||
{
|
||||
call(ImmPtr((void*)imm.value));
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(ImmPtr imm)
|
||||
{
|
||||
syncStackPtr();
|
||||
movePtr(imm, ip0);
|
||||
Blr(vixl::ip0);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(AsmJSImmPtr imm)
|
||||
{
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const Register scratch = temps.AcquireX().asUnsized();
|
||||
syncStackPtr();
|
||||
movePtr(imm, scratch);
|
||||
call(scratch);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(JitCode* c)
|
||||
{
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const ARMRegister scratch64 = temps.AcquireX();
|
||||
syncStackPtr();
|
||||
BufferOffset off = immPool64(scratch64, uint64_t(c->raw()));
|
||||
addPendingJump(off, ImmPtr(c->raw()), Relocation::JITCODE);
|
||||
blr(scratch64);
|
||||
}
|
||||
|
||||
} // namespace jit
|
||||
} // namespace js
|
||||
|
@ -2706,14 +2706,6 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||
orPtr(Imm32(type), frameSizeReg);
|
||||
}
|
||||
|
||||
void callWithExitFrame(JitCode* target, Register dynStack) {
|
||||
add32(Imm32(framePushed()), dynStack);
|
||||
makeFrameDescriptor(dynStack, JitFrame_IonJS);
|
||||
Push(dynStack); // descriptor
|
||||
|
||||
call(target);
|
||||
}
|
||||
|
||||
// FIXME: See CodeGeneratorX64 calls to noteAsmJSGlobalAccess.
|
||||
void patchAsmJSGlobalAccess(CodeOffsetLabel patchAt, uint8_t* code,
|
||||
uint8_t* globalData, unsigned globalDataOffset)
|
||||
@ -2737,14 +2729,9 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||
// non-function. Returns offset to be passed to markSafepointAt().
|
||||
void buildFakeExitFrame(Register scratch, uint32_t* offset);
|
||||
|
||||
void callWithExitFrame(Label* target) {
|
||||
uint32_t descriptor = MakeFrameDescriptor(framePushed(), JitFrame_IonJS);
|
||||
Push(Imm32(descriptor)); // descriptor
|
||||
|
||||
call(target);
|
||||
}
|
||||
|
||||
void callWithExitFrame(Label* target);
|
||||
void callWithExitFrame(JitCode* target);
|
||||
void callWithExitFrame(JitCode* target, Register dynStack);
|
||||
|
||||
void callJit(Register callee) {
|
||||
// AArch64 cannot read from the PC, so pushing must be handled callee-side.
|
||||
@ -2756,53 +2743,6 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||
MOZ_CRASH("appendCallSite");
|
||||
}
|
||||
|
||||
void call(const CallSiteDesc& desc, Label* label) {
|
||||
syncStackPtr();
|
||||
call(label);
|
||||
append(desc, currentOffset(), framePushed_);
|
||||
}
|
||||
void call(const CallSiteDesc& desc, Register reg) {
|
||||
syncStackPtr();
|
||||
call(reg);
|
||||
append(desc, currentOffset(), framePushed_);
|
||||
}
|
||||
void call(const CallSiteDesc& desc, AsmJSImmPtr imm) {
|
||||
syncStackPtr();
|
||||
call(imm);
|
||||
append(desc, currentOffset(), framePushed_);
|
||||
}
|
||||
|
||||
void call(AsmJSImmPtr imm) {
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const Register scratch = temps.AcquireX().asUnsized();
|
||||
syncStackPtr();
|
||||
movePtr(imm, scratch);
|
||||
call(scratch);
|
||||
}
|
||||
|
||||
void call(Register target) {
|
||||
syncStackPtr();
|
||||
Blr(ARMRegister(target, 64));
|
||||
}
|
||||
// Call a target JitCode, which must be traceable, and may be movable.
|
||||
void call(JitCode* target) {
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const ARMRegister scratch64 = temps.AcquireX();
|
||||
syncStackPtr();
|
||||
BufferOffset off = immPool64(scratch64, uint64_t(target->raw()));
|
||||
addPendingJump(off, ImmPtr(target->raw()), Relocation::JITCODE);
|
||||
blr(scratch64);
|
||||
}
|
||||
// Call a target native function, which is neither traceable nor movable.
|
||||
void call(ImmPtr target) {
|
||||
syncStackPtr();
|
||||
movePtr(target, ip0);
|
||||
Blr(vixl::ip0);
|
||||
}
|
||||
void call(Label* target) {
|
||||
syncStackPtr();
|
||||
Bl(target);
|
||||
}
|
||||
void callExit(AsmJSImmPtr imm, uint32_t stackArgBytes) {
|
||||
MOZ_CRASH("callExit");
|
||||
}
|
||||
|
@ -3445,7 +3445,7 @@ MacroAssemblerMIPSCompat::callWithABI(AsmJSImmPtr imm, MoveOp::Type result)
|
||||
{
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust, /* callFromAsmJS = */ true);
|
||||
call(imm);
|
||||
asMasm().call(imm);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -3458,7 +3458,7 @@ MacroAssemblerMIPSCompat::callWithABI(const Address& fun, MoveOp::Type result)
|
||||
ma_lw(t9, Address(fun.base, fun.offset));
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(t9);
|
||||
asMasm().call(t9);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
|
||||
}
|
||||
@ -3470,7 +3470,7 @@ MacroAssemblerMIPSCompat::callWithABI(Register fun, MoveOp::Type result)
|
||||
ma_move(t9, fun);
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(t9);
|
||||
asMasm().call(t9);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -3776,3 +3776,49 @@ MacroAssembler::reserveStack(uint32_t amount)
|
||||
ma_subu(StackPointer, StackPointer, Imm32(amount));
|
||||
adjustFrame(amount);
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
// Simple call functions.
|
||||
|
||||
void
|
||||
MacroAssembler::call(Register reg)
|
||||
{
|
||||
as_jalr(reg);
|
||||
as_nop();
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(Label* label)
|
||||
{
|
||||
ma_bal(label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(AsmJSImmPtr target)
|
||||
{
|
||||
movePtr(target, CallReg);
|
||||
call(CallReg);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(ImmWord target)
|
||||
{
|
||||
call(ImmPtr((void*)target.value));
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(ImmPtr target)
|
||||
{
|
||||
BufferOffset bo = m_buffer.nextOffset();
|
||||
addPendingJump(bo, target, Relocation::HARDCODED);
|
||||
ma_call(target);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(JitCode* c)
|
||||
{
|
||||
BufferOffset bo = m_buffer.nextOffset();
|
||||
addPendingJump(bo, ImmPtr(c->raw()), Relocation::JITCODE);
|
||||
ma_liPatchable(ScratchRegister, Imm32((uint32_t)c->raw()));
|
||||
ma_callJitHalfPush(ScratchRegister);
|
||||
}
|
||||
|
@ -405,34 +405,6 @@ class MacroAssemblerMIPSCompat : public MacroAssemblerMIPS
|
||||
MOZ_CRASH("NYI-IC");
|
||||
}
|
||||
|
||||
void call(const Register reg) {
|
||||
as_jalr(reg);
|
||||
as_nop();
|
||||
}
|
||||
|
||||
void call(Label* label) {
|
||||
ma_bal(label);
|
||||
}
|
||||
|
||||
void call(ImmWord imm) {
|
||||
call(ImmPtr((void*)imm.value));
|
||||
}
|
||||
void call(ImmPtr imm) {
|
||||
BufferOffset bo = m_buffer.nextOffset();
|
||||
addPendingJump(bo, imm, Relocation::HARDCODED);
|
||||
ma_call(imm);
|
||||
}
|
||||
void call(AsmJSImmPtr imm) {
|
||||
movePtr(imm, CallReg);
|
||||
call(CallReg);
|
||||
}
|
||||
void call(JitCode* c) {
|
||||
BufferOffset bo = m_buffer.nextOffset();
|
||||
addPendingJump(bo, ImmPtr(c->raw()), Relocation::JITCODE);
|
||||
ma_liPatchable(ScratchRegister, Imm32((uint32_t)c->raw()));
|
||||
ma_callJitHalfPush(ScratchRegister);
|
||||
}
|
||||
|
||||
void callAndPushReturnAddress(Label* label) {
|
||||
ma_callJitHalfPush(label);
|
||||
}
|
||||
|
@ -323,7 +323,7 @@ MacroAssemblerX64::callWithABI(void* fun, MoveOp::Type result)
|
||||
{
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(ImmPtr(fun));
|
||||
asMasm().call(ImmPtr(fun));
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -332,7 +332,7 @@ MacroAssemblerX64::callWithABI(AsmJSImmPtr imm, MoveOp::Type result)
|
||||
{
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(imm);
|
||||
asMasm().call(imm);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -361,7 +361,7 @@ MacroAssemblerX64::callWithABI(Address fun, MoveOp::Type result)
|
||||
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(Operand(fun));
|
||||
asMasm().call(fun);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -379,7 +379,7 @@ MacroAssemblerX64::callWithABI(Register fun, MoveOp::Type result)
|
||||
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(Operand(fun));
|
||||
asMasm().call(fun);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -513,7 +513,7 @@ MacroAssemblerX64::callWithExitFrame(JitCode* target, Register dynStack)
|
||||
addPtr(Imm32(asMasm().framePushed()), dynStack);
|
||||
makeFrameDescriptor(dynStack, JitFrame_IonJS);
|
||||
asMasm().Push(dynStack);
|
||||
call(target);
|
||||
asMasm().call(target);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -89,7 +89,6 @@ class MacroAssemblerX64 : public MacroAssemblerX86Shared
|
||||
MoveResolver moveResolver_;
|
||||
|
||||
public:
|
||||
using MacroAssemblerX86Shared::call;
|
||||
using MacroAssemblerX86Shared::callWithExitFrame;
|
||||
using MacroAssemblerX86Shared::branch32;
|
||||
using MacroAssemblerX86Shared::branchTest32;
|
||||
@ -108,13 +107,6 @@ class MacroAssemblerX64 : public MacroAssemblerX86Shared
|
||||
/////////////////////////////////////////////////////////////////
|
||||
// X64 helpers.
|
||||
/////////////////////////////////////////////////////////////////
|
||||
void call(ImmWord target) {
|
||||
mov(target, rax);
|
||||
call(rax);
|
||||
}
|
||||
void call(ImmPtr target) {
|
||||
call(ImmWord(uintptr_t(target.value)));
|
||||
}
|
||||
void writeDataRelocation(const Value& val) {
|
||||
if (val.isMarkable()) {
|
||||
gc::Cell* cell = reinterpret_cast<gc::Cell*>(val.toGCThing());
|
||||
|
@ -42,7 +42,7 @@ EmitCallIC(CodeOffsetLabel* patchOffset, MacroAssembler& masm)
|
||||
ICStubReg);
|
||||
|
||||
// Call the stubcode.
|
||||
masm.call(Operand(ICStubReg, ICStub::offsetOfStubCode()));
|
||||
masm.call(Address(ICStubReg, ICStub::offsetOfStubCode()));
|
||||
}
|
||||
|
||||
inline void
|
||||
@ -230,7 +230,7 @@ EmitCallTypeUpdateIC(MacroAssembler& masm, JitCode* code, uint32_t objectOffset)
|
||||
ICStubReg);
|
||||
|
||||
// Call the stubcode.
|
||||
masm.call(Operand(ICStubReg, ICStub::offsetOfStubCode()));
|
||||
masm.call(Address(ICStubReg, ICStub::offsetOfStubCode()));
|
||||
|
||||
// Restore the old stub reg.
|
||||
masm.pop(ICStubReg);
|
||||
|
@ -165,6 +165,24 @@ MacroAssemblerX86Shared::branchNegativeZeroFloat32(FloatRegister reg,
|
||||
j(Overflow, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerX86Shared::callJit(Register callee)
|
||||
{
|
||||
call(callee);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerX86Shared::callJitFromAsmJS(Register callee)
|
||||
{
|
||||
call(callee);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerX86Shared::callAndPushReturnAddress(Label* label)
|
||||
{
|
||||
call(label);
|
||||
}
|
||||
|
||||
MacroAssembler&
|
||||
MacroAssemblerX86Shared::asMasm()
|
||||
{
|
||||
@ -350,3 +368,50 @@ MacroAssembler::Pop(const ValueOperand& val)
|
||||
popValue(val);
|
||||
framePushed_ -= sizeof(Value);
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
// Simple call functions.
|
||||
|
||||
void
|
||||
MacroAssembler::call(Register reg)
|
||||
{
|
||||
Assembler::call(reg);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(Label* label)
|
||||
{
|
||||
Assembler::call(label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(const Address& addr)
|
||||
{
|
||||
Assembler::call(Operand(addr.base, addr.offset));
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(AsmJSImmPtr target)
|
||||
{
|
||||
mov(target, eax);
|
||||
Assembler::call(eax);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(ImmWord target)
|
||||
{
|
||||
mov(target, eax);
|
||||
Assembler::call(eax);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(ImmPtr target)
|
||||
{
|
||||
call(ImmWord(uintptr_t(target.value)));
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(JitCode* target)
|
||||
{
|
||||
Assembler::call(target);
|
||||
}
|
||||
|
@ -1433,19 +1433,9 @@ class MacroAssemblerX86Shared : public Assembler
|
||||
void callWithExitFrame(Label* target);
|
||||
void callWithExitFrame(JitCode* target);
|
||||
|
||||
void callJit(Register callee) {
|
||||
call(callee);
|
||||
}
|
||||
void callJitFromAsmJS(Register callee) {
|
||||
call(callee);
|
||||
}
|
||||
void call(AsmJSImmPtr target) {
|
||||
mov(target, eax);
|
||||
call(eax);
|
||||
}
|
||||
void callAndPushReturnAddress(Label* label) {
|
||||
call(label);
|
||||
}
|
||||
void callJit(Register callee);
|
||||
void callJitFromAsmJS(Register callee);
|
||||
void callAndPushReturnAddress(Label* label);
|
||||
|
||||
void checkStackAlignment() {
|
||||
// Exists for ARM compatibility.
|
||||
|
@ -328,7 +328,7 @@ MacroAssemblerX86::callWithABI(void* fun, MoveOp::Type result)
|
||||
{
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(ImmPtr(fun));
|
||||
asMasm().call(ImmPtr(fun));
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -337,7 +337,7 @@ MacroAssemblerX86::callWithABI(AsmJSImmPtr fun, MoveOp::Type result)
|
||||
{
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(fun);
|
||||
asMasm().call(fun);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -346,7 +346,7 @@ MacroAssemblerX86::callWithABI(const Address& fun, MoveOp::Type result)
|
||||
{
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(Operand(fun));
|
||||
asMasm().call(fun);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -355,7 +355,7 @@ MacroAssemblerX86::callWithABI(Register fun, MoveOp::Type result)
|
||||
{
|
||||
uint32_t stackAdjust;
|
||||
callWithABIPre(&stackAdjust);
|
||||
call(Operand(fun));
|
||||
asMasm().call(fun);
|
||||
callWithABIPost(stackAdjust, result);
|
||||
}
|
||||
|
||||
@ -506,7 +506,7 @@ MacroAssemblerX86::callWithExitFrame(JitCode* target, Register dynStack)
|
||||
addPtr(ImmWord(asMasm().framePushed()), dynStack);
|
||||
makeFrameDescriptor(dynStack, JitFrame_IonJS);
|
||||
asMasm().Push(dynStack);
|
||||
call(target);
|
||||
asMasm().call(target);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -43,7 +43,7 @@ EmitCallIC(CodeOffsetLabel* patchOffset, MacroAssembler& masm)
|
||||
|
||||
// Load stubcode pointer from BaselineStubEntry into ICTailCallReg
|
||||
// ICTailCallReg will always be unused in the contexts where ICs are called.
|
||||
masm.call(Operand(ICStubReg, ICStub::offsetOfStubCode()));
|
||||
masm.call(Address(ICStubReg, ICStub::offsetOfStubCode()));
|
||||
}
|
||||
|
||||
inline void
|
||||
@ -236,7 +236,7 @@ EmitCallTypeUpdateIC(MacroAssembler& masm, JitCode* code, uint32_t objectOffset)
|
||||
ICStubReg);
|
||||
|
||||
// Call the stubcode.
|
||||
masm.call(Operand(ICStubReg, ICStub::offsetOfStubCode()));
|
||||
masm.call(Address(ICStubReg, ICStub::offsetOfStubCode()));
|
||||
|
||||
// Restore the old stub reg.
|
||||
masm.pop(ICStubReg);
|
||||
|
@ -274,7 +274,7 @@ JitRuntime::generateEnterJIT(JSContext* cx, EnterJitType type)
|
||||
Call passed-in code, get return value and fill in the
|
||||
passed in return value pointer
|
||||
***************************************************************/
|
||||
masm.call(Operand(ebp, ARG_JITCODE));
|
||||
masm.call(Address(ebp, ARG_JITCODE));
|
||||
|
||||
if (type == EnterJitBaseline) {
|
||||
// Baseline OSR will return here.
|
||||
|
Loading…
Reference in New Issue
Block a user