aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jit/qv4assembler_p.h
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2014-08-12 16:28:49 +0200
committerErik Verbruggen <erik.verbruggen@digia.com>2014-08-14 15:27:59 +0200
commit8e47157252b41c537bb1e05c621d16654c2639fd (patch)
tree81ec3733176bff10bb0085bfa281fbdb634e173f /src/qml/jit/qv4assembler_p.h
parenta503efe0df31742bac7d5af6ed4a53ee79a4c2a7 (diff)
V4 JIT: support saving used callee saved FP registers.
This is not used yet by any platform/abi we support, because we do not define any callee-saved FP registers. Yet. Change-Id: I5857a452456175398c5e9681ff33800b9431b9da Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jit/qv4assembler_p.h')
-rw-r--r--src/qml/jit/qv4assembler_p.h17
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 &regularRegistersToSave);
- void leaveStandardStackFrame(const RegisterInformation &regularRegistersToSave);
+ void enterStandardStackFrame(const RegisterInformation &regularRegistersToSave,
+ const RegisterInformation &fpRegistersToSave);
+ void leaveStandardStackFrame(const RegisterInformation &regularRegistersToSave,
+ 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; }