diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-06-27 15:10:39 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-07-24 11:13:32 +0200 |
commit | 47d4c46cbb3df6c6aaa0e4d82d0ea5ee7f807c06 (patch) | |
tree | 43fa773c349e862050a5d29bb0552a756f905e9c /src/qml/jit | |
parent | f5643ac8731e55eb90f1038d371afd53367f33ad (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/qml/jit')
-rw-r--r-- | src/qml/jit/qv4regalloc.cpp | 14 |
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(); |