Get lookups working (somehow) on ARM
authorPetr Nejedly <pnejedly@blackberry.com>
Tue, 1 Oct 2013 06:23:25 +0000 (23:23 -0700)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 3 Oct 2013 12:24:39 +0000 (14:24 +0200)
Edit(Simon): This is a workaround for the register clash on ARM. r0
(ReturnValueRegister) is also used to pass the first argument, therefore we
can't use it as "temporary" register for the duration of the parameter setup.
Temporarily allocate r8 for now until we have constraints like these properly
propagated into the register allocator.

Change-Id: Iae266672856dea247b720367b8e8393333622e4e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/qml/compiler/qv4isel_masm_p.h

index 0ee363f..013c2ef 100644 (file)
@@ -1505,7 +1505,13 @@ private:
     template <typename Retval, typename Arg1, typename Arg2>
     void generateLookupCall(Retval retval, uint index, uint getterSetterOffset, Arg1 arg1, Arg2 arg2)
     {
-        Assembler::Pointer lookupAddr(Assembler::ReturnValueRegister, index * sizeof(QV4::Lookup));
+        Assembler::RegisterID lookupRegister;
+#if CPU(ARM)
+        lookupRegister = JSC::ARMRegisters::r8;
+#else
+        lookupRegister = Assembler::ReturnValueRegister;
+#endif
+        Assembler::Pointer lookupAddr(lookupRegister, index * sizeof(QV4::Lookup));
 
         Assembler::Address getterSetter = lookupAddr;
         getterSetter.offset += getterSetterOffset;