diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-19 14:34:40 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-31 13:40:37 +0000 |
commit | 6158a8b935cc168683f35cf605aafcf6dd8ad125 (patch) | |
tree | df45db5c6c724854e87a35607cb6586f7b2209ff /src/qml/jit | |
parent | ca402cfe7e03d1f9a8d5cb47130e37a481c9e30a (diff) |
Fix intermixed 32-bit/64-bit build
Replace the use of TrustedImmPtr(0) with target register size dependent
template functions, as TrustedImmPtr is forbidden for non-zero values
(non-relocatable code) and for zero still ends up using functions in the
underlying assembler that are behind #ifdefs.
Similarly the use of xorPtr does not compile with ARMv7, so use the
zeroRegister abstraction instead.
Change-Id: I84c1792847bd51d1cf5f305c3589517583b816f3
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r-- | src/qml/jit/qv4assembler_p.h | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/qml/jit/qv4assembler_p.h b/src/qml/jit/qv4assembler_p.h index 308f31e97a..ff3f287c8d 100644 --- a/src/qml/jit/qv4assembler_p.h +++ b/src/qml/jit/qv4assembler_p.h @@ -231,6 +231,16 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo Q_UNUSED(argumentNumber); } + static void zeroRegister(JITAssembler *as, RegisterID reg) + { + as->move(TrustedImm32(0), reg); + } + + static void zeroStackSlot(JITAssembler *as, int slot) + { + as->poke(TrustedImm32(0), slot); + } + static void generateCJumpOnCompare(JITAssembler *as, RelationalCondition cond, RegisterID, @@ -404,6 +414,16 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo } } + static void zeroRegister(JITAssembler *as, RegisterID reg) + { + as->move(TrustedImm64(0), reg); + } + + static void zeroStackSlot(JITAssembler *as, int slot) + { + as->store64(TrustedImm64(0), as->addressForPoke(slot)); + } + static void generateCJumpOnCompare(JITAssembler *as, RelationalCondition cond, RegisterID left, @@ -502,7 +522,6 @@ public: using MacroAssembler::addPtr; using MacroAssembler::call; using MacroAssembler::poke; - using MacroAssembler::xorPtr; using MacroAssembler::branchTruncateDoubleToUint32; using MacroAssembler::or32; using MacroAssembler::moveDouble; @@ -829,7 +848,7 @@ public: void loadArgumentInRegister(PointerToValue temp, RegisterID dest, int argumentNumber) { if (!temp.value) { - move(TrustedImmPtr(0), dest); + RegisterSizeDependentOps::zeroRegister(this, dest); } else { Pointer addr = toAddress(dest, temp.value, argumentNumber); loadArgumentInRegister(addr, dest, argumentNumber); @@ -872,7 +891,7 @@ public: { Q_UNUSED(argumentNumber); - xorPtr(dest, dest); + RegisterSizeDependentOps::zeroRegister(this, dest); if (imm32.m_value) move(imm32, dest); } @@ -961,7 +980,7 @@ public: Pointer ptr = toAddress(ScratchRegister, temp.value, argumentNumber); loadArgumentOnStack<StackSlot>(ptr, argumentNumber); } else { - poke(TrustedImmPtr(0), StackSlot); + RegisterSizeDependentOps::zeroStackSlot(this, StackSlot); } } |