diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-01-31 12:51:00 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-17 11:52:55 +0100 |
commit | 1674c536de808358ec6bc0694d8b322a65a885a4 (patch) | |
tree | 1888fc354987652426834fd2c9ebe659ccb510b6 | |
parent | 5efc7ae82b36da3a96bd4a1ea8ccb8fa90c6884c (diff) |
V4 JIT: enable register allocator on Linux/ARM.
Change-Id: Ieab86edebcc265063904e78c8c8d0014ace64199
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r-- | src/qml/compiler/qv4isel_masm.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/qml/compiler/qv4isel_masm.cpp b/src/qml/compiler/qv4isel_masm.cpp index 0289abd50f..af4439fd44 100644 --- a/src/qml/compiler/qv4isel_masm.cpp +++ b/src/qml/compiler/qv4isel_masm.cpp @@ -130,8 +130,7 @@ static const Assembler::RegisterID calleeSavedRegisters[] = { #if CPU(ARM) static const Assembler::RegisterID calleeSavedRegisters[] = { - // ### FIXME: remove unused registers. - JSC::ARMRegisters::r12, + JSC::ARMRegisters::r11, JSC::ARMRegisters::r10, JSC::ARMRegisters::r9, JSC::ARMRegisters::r8, @@ -588,6 +587,34 @@ static QVector<int> getFpRegisters() << JSC::X86Registers::xmm7; return fpRegisters; } + +#elif CPU(ARM) && OS(LINUX) + // Note: this is not generic for all ARM platforms. Specifically, r9 is platform dependent + // (e.g. iOS reserves it). See the ARM GNU Linux abi for details. +# define REGALLOC_IS_SUPPORTED +static QVector<int> getIntRegisters() +{ + static const QVector<int> intRegisters = QVector<int>() + << JSC::ARMRegisters::r1 + << JSC::ARMRegisters::r2 + << JSC::ARMRegisters::r8 + << JSC::ARMRegisters::r9 + << JSC::ARMRegisters::r10 + << JSC::ARMRegisters::r11; + return intRegisters; +} + +static QVector<int> getFpRegisters() +{ + static const QVector<int> fpRegisters = QVector<int>() + << JSC::ARMRegisters::d1 + << JSC::ARMRegisters::d2 + << JSC::ARMRegisters::d3 + << JSC::ARMRegisters::d4 + << JSC::ARMRegisters::d5 + << JSC::ARMRegisters::d6; + return fpRegisters; +} #endif void InstructionSelection::run(int functionIndex) |