diff options
Diffstat (limited to 'src/qml/jit/qv4assembler_p.h')
-rw-r--r-- | src/qml/jit/qv4assembler_p.h | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/qml/jit/qv4assembler_p.h b/src/qml/jit/qv4assembler_p.h index 7d774f93f7..8f50610072 100644 --- a/src/qml/jit/qv4assembler_p.h +++ b/src/qml/jit/qv4assembler_p.h @@ -182,8 +182,9 @@ public: class StackLayout { public: - StackLayout(IR::Function *function, int maxArgCountForBuiltins, int normalRegistersToSave) + StackLayout(IR::Function *function, int maxArgCountForBuiltins, int normalRegistersToSave, int fpRegistersToSave) : normalRegistersToSave(normalRegistersToSave) + , fpRegistersToSave(fpRegistersToSave) , maxOutgoingArgumentCount(function->maxNumberOfArguments) , localCount(function->tempCount) , savedRegCount(maxArgCountForBuiltins) @@ -216,7 +217,7 @@ public: + RegisterSize; // saved StackFrameRegister // space for the callee saved registers - int frameSize = RegisterSize * normalRegistersToSave; + int frameSize = RegisterSize * normalRegistersToSave + sizeof(double) * fpRegistersToSave; frameSize += savedRegCount * sizeof(QV4::Value); // these get written out as Values, not as native registers Q_ASSERT(frameSize + stackSpaceAllocatedOtherwise < INT_MAX); @@ -269,11 +270,13 @@ public: int calleeSavedRegisterSpace() const { // plus 1 for the old FP - return RegisterSize * (normalRegistersToSave + 1); + return RegisterSize * (normalRegistersToSave + 1) + + sizeof(double) * fpRegistersToSave; } private: int normalRegistersToSave; + int fpRegistersToSave; /// arg count for calls to JS functions int maxOutgoingArgumentCount; @@ -794,8 +797,10 @@ public: void storeValue(QV4::Primitive value, IR::Expr* temp); - void enterStandardStackFrame(const RegisterInformation ®ularRegistersToSave); - void leaveStandardStackFrame(const RegisterInformation ®ularRegistersToSave); + void enterStandardStackFrame(const RegisterInformation ®ularRegistersToSave, + const RegisterInformation &fpRegistersToSave); + void leaveStandardStackFrame(const RegisterInformation ®ularRegistersToSave, + const RegisterInformation &fpRegistersToSave); void checkException() { loadPtr(Address(ContextRegister, qOffsetOf(QV4::ExecutionContext::Data, engine)), ScratchRegister); @@ -1146,7 +1151,7 @@ public: JSC::MacroAssemblerCodeRef link(int *codeSize); - void setStackLayout(int maxArgCountForBuiltins, int regularRegistersToSave); + void setStackLayout(int maxArgCountForBuiltins, int regularRegistersToSave, int fpRegistersToSave); const StackLayout &stackLayout() const { return *_stackLayout.data(); } ConstantTable &constantTable() { return _constTable; } |