diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-08-12 09:40:11 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-08-14 15:27:51 +0200 |
commit | d9f33ccdef985badc56fd8940373748626beffc7 (patch) | |
tree | ccacfa93345abba1d274dfb0bae178e855efb613 /src/qml/jit/qv4registerinfo_p.h | |
parent | 17743ea6e22535bd5c6c01436c40084f0c4053bc (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.h | 26 |
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; |