aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jit/qv4registerinfo_p.h
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2014-08-12 09:40:11 +0200
committerErik Verbruggen <erik.verbruggen@digia.com>2014-08-14 15:27:51 +0200
commitd9f33ccdef985badc56fd8940373748626beffc7 (patch)
treeccacfa93345abba1d274dfb0bae178e855efb613 /src/qml/jit/qv4registerinfo_p.h
parent17743ea6e22535bd5c6c01436c40084f0c4053bc (diff)
V4 JIT: parameterize the prologue and epilogue generation
... with the regular (non-FP) registers that need to be saved. This patch shouldn't change any of the JIT generated code, because all regular callee saved registers are passed in. Change-Id: Id11b8f37f06d80e8015ac6f0d0ccefdfa3342cbe Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jit/qv4registerinfo_p.h')
-rw-r--r--src/qml/jit/qv4registerinfo_p.h26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/qml/jit/qv4registerinfo_p.h b/src/qml/jit/qv4registerinfo_p.h
index b8701d72f4..ed816fdb05 100644
--- a/src/qml/jit/qv4registerinfo_p.h
+++ b/src/qml/jit/qv4registerinfo_p.h
@@ -52,27 +52,30 @@ namespace JIT {
class RegisterInfo
{
public:
- enum { InvalidRegister = -1 };
+ enum { InvalidRegister = (1 << 29) - 1 };
enum SavedBy { CallerSaved, CalleeSaved };
enum RegisterType { RegularRegister, FloatingPointRegister };
enum Usage { Predefined, RegAlloc };
public:
RegisterInfo()
- : _reg(InvalidRegister)
- , _type(RegularRegister)
- , _savedBy(CallerSaved)
+ : _savedBy(CallerSaved)
, _usage(Predefined)
+ , _type(RegularRegister)
+ , _reg(InvalidRegister)
{}
RegisterInfo(int reg, const QString &prettyName, RegisterType type, SavedBy savedBy, Usage usage)
- : _reg(reg)
- , _prettyName(prettyName)
- , _type(type)
+ : _prettyName(prettyName)
, _savedBy(savedBy)
, _usage(usage)
+ , _type(type)
+ , _reg(reg)
{}
+ bool operator==(const RegisterInfo &other) const
+ { return _type == other._type && _reg == other._reg; }
+
bool isValid() const { return _reg != InvalidRegister; }
template <typename T> T reg() const { return static_cast<T>(_reg); }
QString prettyName() const { return _prettyName; }
@@ -81,13 +84,14 @@ public:
bool isFloatingPoint() const { return _type == FloatingPointRegister; }
bool isRegularRegister() const { return _type == RegularRegister; }
bool useForRegAlloc() const { return _usage == RegAlloc; }
+ bool isPredefined() const { return _usage == Predefined; }
private:
- int _reg;
QString _prettyName;
- RegisterType _type;
- SavedBy _savedBy;
- Usage _usage;
+ unsigned _savedBy : 1;
+ unsigned _usage : 1;
+ unsigned _type : 1;
+ unsigned _reg : 29;
};
typedef QVector<RegisterInfo> RegisterInformation;