diff options
| author | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-13 16:45:54 +0100 |
|---|---|---|
| committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-02-01 08:17:10 +0000 |
| commit | 6aaf6abb692dbdc0f0400ab5c76c438034957d55 (patch) | |
| tree | c5b1d58ab2932bebc078bf979b682c2a43051a69 /src/3rdparty/masm/assembler/X86Assembler.h | |
| parent | a159d6d43da100c5a4acb183589fa4554b33a474 (diff) | |
Include the ARMv7 assembler in the qmldevtools bootstrap build
Even when the C++ target is not ARMv7 we want to include it in order to
be able to generate QML cache files with code ahead of time.
This requires a few changes:
* The Jump classes need to move from the AbstractMacroAssembler
super-class into the concrete assembler sub-class, in order to
use it in specializations.
* Some of the template specializations in LinkBuffer for example or
for platform dependent operations need to be pre-processor enabled
when bootstrapping
* The generic loadPtr/addPtr etc. functions need to move to the concrete
assemblers to be able to call the correct 32-bit or 64-bit variations.
* We need to force what looks like a loss of precision to the compiler
in the 32-bit ARMv7 linking code when linking jumps.
Finally then we can explicitly instantiate at least QV4::JIT::Assembler
for ARMv7 when bootstrapping. Currently only on x86-64 hosts, but that
is a temporary limitation.
Change-Id: I501db2360e1fded48f17f17d9e87252d47f8537e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/3rdparty/masm/assembler/X86Assembler.h')
| -rw-r--r-- | src/3rdparty/masm/assembler/X86Assembler.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/3rdparty/masm/assembler/X86Assembler.h b/src/3rdparty/masm/assembler/X86Assembler.h index 1875ebaff0..24462ef38f 100644 --- a/src/3rdparty/masm/assembler/X86Assembler.h +++ b/src/3rdparty/masm/assembler/X86Assembler.h @@ -29,6 +29,7 @@ #if ENABLE(ASSEMBLER) && (CPU(X86) || CPU(X86_64)) #include "AssemblerBuffer.h" +#include "AbstractMacroAssembler.h" #include "JITCompilationEffort.h" #include <stdint.h> #include <wtf/Assertions.h> @@ -252,6 +253,45 @@ public: { } + template <typename LabelType> + class Jump { + template<class TemplateAssemblerType> + friend class AbstractMacroAssembler; + friend class Call; + template <typename, template <typename> class> friend class LinkBufferBase; + public: + Jump() + { + } + + Jump(AssemblerLabel jmp) + : m_label(jmp) + { + } + + LabelType label() const + { + LabelType result; + result.m_label = m_label; + return result; + } + + void link(AbstractMacroAssembler<X86Assembler>* masm) const + { + masm->m_assembler.linkJump(m_label, masm->m_assembler.label()); + } + + void linkTo(LabelType label, AbstractMacroAssembler<X86Assembler>* masm) const + { + masm->m_assembler.linkJump(m_label, label.label()); + } + + bool isSet() const { return m_label.isSet(); } + + private: + AssemblerLabel m_label; + }; + // Stack operations: void push_r(RegisterID reg) |
