diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-04-22 15:04:42 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-04-22 15:32:19 +0200 |
commit | 07782f48f4318a7261f1b0ddcd686b19ec812e36 (patch) | |
tree | 3fa2aa3a1170ad7ebaf5b1641cdce19a941ca480 /src/qml/jit/qv4isel_masm.cpp | |
parent | 50fcdfd705c2ad9560641986bf4152b017ee8bb6 (diff) | |
parent | f15a90e5d10465e66698209a5d88f1e63ae336fa (diff) |
Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
src/qml/qml/qqmlbinding.cpp
src/qml/jsruntime/qv4arraybuffer.cpp
src/qml/jsruntime/qv4functionobject.cpp
Change-Id: Ic752e9dfd69b282093651c9234c110a49762f06d
Diffstat (limited to 'src/qml/jit/qv4isel_masm.cpp')
-rw-r--r-- | src/qml/jit/qv4isel_masm.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/qml/jit/qv4isel_masm.cpp b/src/qml/jit/qv4isel_masm.cpp index 05d3876466..da511cd1eb 100644 --- a/src/qml/jit/qv4isel_masm.cpp +++ b/src/qml/jit/qv4isel_masm.cpp @@ -1485,7 +1485,7 @@ void InstructionSelection::visitRet(IR::Ret *s) Q_UNUSED(s); } - _as->exceptionReturnLabel = _as->label(); + Assembler::Label leaveStackFrame = _as->label(); const int locals = _as->stackLayout().calculateJSStackFrameSize(); _as->subPtr(Assembler::TrustedImm32(sizeof(QV4::Value)*locals), Assembler::LocalsRegister); @@ -1495,6 +1495,19 @@ void InstructionSelection::visitRet(IR::Ret *s) _as->leaveStandardStackFrame(regularRegistersToSave, fpRegistersToSave); _as->ret(); + + _as->exceptionReturnLabel = _as->label(); + QV4::Primitive retVal = Primitive::undefinedValue(); +#if CPU(X86) + _as->move(Assembler::TrustedImm32(retVal.int_32), JSC::X86Registers::eax); + _as->move(Assembler::TrustedImm32(retVal.tag), JSC::X86Registers::edx); +#elif CPU(ARM) + _as->move(Assembler::TrustedImm32(retVal.int_32), JSC::ARMRegisters::r0); + _as->move(Assembler::TrustedImm32(retVal.tag), JSC::ARMRegisters::r1); +#else + _as->move(Assembler::TrustedImm64(retVal.val), Assembler::ReturnValueRegister); +#endif + _as->jump(leaveStackFrame); } int InstructionSelection::prepareVariableArguments(IR::ExprList* args) |