aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2014-06-27 15:10:39 +0200
committerErik Verbruggen <erik.verbruggen@digia.com>2014-07-24 11:13:32 +0200
commit47d4c46cbb3df6c6aaa0e4d82d0ea5ee7f807c06 (patch)
tree43fa773c349e862050a5d29bb0552a756f905e9c /src
parentf5643ac8731e55eb90f1038d371afd53367f33ad (diff)
V4 IR: fix printing with register information.
The register numbers for non-FP registers overlap with the FP ones. So when keying a single mapping on number, this resulted in the FP ones overwriting the non-FP ones. This patch splits the mapping in two. Change-Id: I95042b52a423eaaa96ed55d6c8ef12a2eb99f191 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/qml/jit/qv4regalloc.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/qml/jit/qv4regalloc.cpp b/src/qml/jit/qv4regalloc.cpp
index 8dfd24cbea..52c2936352 100644
--- a/src/qml/jit/qv4regalloc.cpp
+++ b/src/qml/jit/qv4regalloc.cpp
@@ -99,7 +99,8 @@ protected:
class IRPrinterWithRegisters: public IRPrinterWithPositions
{
const RegisterInformation &_registerInformation;
- QHash<int, const RegisterInfo *> _infoForRegister;
+ QHash<int, const RegisterInfo *> _infoForRegularRegister;
+ QHash<int, const RegisterInfo *> _infoForFPRegister;
public:
IRPrinterWithRegisters(QTextStream *out, const LifeTimeIntervals::Ptr &intervals,
@@ -108,8 +109,12 @@ public:
, _registerInformation(registerInformation)
{
for (int i = 0, ei = _registerInformation.size(); i != ei; ++i)
- _infoForRegister.insert(_registerInformation.at(i).reg<int>(),
- &_registerInformation.at(i));
+ if (_registerInformation.at(i).isRegularRegister())
+ _infoForRegularRegister.insert(_registerInformation.at(i).reg<int>(),
+ &_registerInformation.at(i));
+ else
+ _infoForFPRegister.insert(_registerInformation.at(i).reg<int>(),
+ &_registerInformation.at(i));
}
protected:
@@ -117,7 +122,8 @@ protected:
{
switch (e->kind) {
case Temp::PhysicalRegister: {
- const RegisterInfo *ri = _infoForRegister.value(e->index, 0);
+ const RegisterInfo *ri = e->type == DoubleType ? _infoForFPRegister.value(e->index, 0)
+ : _infoForRegularRegister.value(e->index, 0);
if (ri) {
*out << dumpStart(e);
*out << ri->prettyName();