From 565e89780caaccc6d7ffed0fc3a2f212fb4da2ec Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 29 Apr 2013 09:56:00 +0200 Subject: [PATCH] Fix build and crash on 64-bit Change-Id: I058f598a7937a2d0b2bc38bfa5afa72c3d2489ab Reviewed-by: Lars Knoll --- src/qml/qml/v4vm/qv4isel_masm.cpp | 6 +++--- src/qml/qml/v4vm/qv4isel_masm_p.h | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/qml/qml/v4vm/qv4isel_masm.cpp b/src/qml/qml/v4vm/qv4isel_masm.cpp index 69b2750..db071c1 100644 --- a/src/qml/qml/v4vm/qv4isel_masm.cpp +++ b/src/qml/qml/v4vm/qv4isel_masm.cpp @@ -179,7 +179,7 @@ void Assembler::copyValue(Result result, Source source) #ifdef VALUE_FITS_IN_REGISTER // Use ReturnValueRegister as "scratch" register because loadArgument // and storeArgument are functions that may need a scratch register themselves. - loadArgument(source, ReturnValueRegister); + loadArgumentInRegister(source, ReturnValueRegister); storeReturnValue(result); #else loadDouble(source, FPGpr0); @@ -193,7 +193,7 @@ void Assembler::copyValue(Result result, V4IR::Expr* source) #ifdef VALUE_FITS_IN_REGISTER // Use ReturnValueRegister as "scratch" register because loadArgument // and storeArgument are functions that may need a scratch register themselves. - loadArgument(source, ReturnValueRegister); + loadArgumentInRegister(source, ReturnValueRegister); storeReturnValue(result); #else if (V4IR::Temp *temp = source->asTemp()) { @@ -863,7 +863,7 @@ void InstructionSelection::loadThisObject(V4IR::Temp *temp) { #if defined(VALUE_FITS_IN_REGISTER) _as->load64(Pointer(Assembler::ContextRegister, offsetof(ExecutionContext, thisObject)), Assembler::ReturnValueRegister); - _as->store64(Assembler::ReturnValueRegister, temp); + _as->storeReturnValue(temp); #else _as->copyValue(temp, Pointer(Assembler::ContextRegister, offsetof(ExecutionContext, thisObject))); #endif diff --git a/src/qml/qml/v4vm/qv4isel_masm_p.h b/src/qml/qml/v4vm/qv4isel_masm_p.h index dbfdeb1..396801b 100644 --- a/src/qml/qml/v4vm/qv4isel_masm_p.h +++ b/src/qml/qml/v4vm/qv4isel_masm_p.h @@ -352,6 +352,21 @@ public: move(ReturnValueRegister, dest); } +#ifdef VALUE_FITS_IN_REGISTER + void storeReturnValue(const Pointer &dest) + { + store64(ReturnValueRegister, dest); + } + + void storeReturnValue(V4IR::Temp *temp) + { + if (!temp) + return; + Pointer addr = loadTempAddress(ScratchRegister, temp); + storeReturnValue(addr); + } +#endif + void storeReturnValue(VoidType) { } -- 2.7.4