[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

loki at webkit.org loki at webkit.org
Wed Dec 22 16:28:35 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit ea6cf189ac0204f1c6af3f24663aafa6c3ba794f
Author: loki at webkit.org <loki at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Nov 24 13:04:35 2010 +0000

    2010-11-24  Gabor Loki  <loki at webkit.org>
    
            Reviewed by Csaba Osztrogonác.
    
            Merge the usage of jumps and calls at ARM-JIT
            https://bugs.webkit.org/show_bug.cgi?id=50008
    
            Those JmpSrc objects which represent jumps (not calls) should point to
            after the jump instruction.
    
            * assembler/ARMAssembler.h:
            (JSC::ARMAssembler::blx):
            (JSC::ARMAssembler::loadBranchTarget):
            (JSC::ARMAssembler::getAbsoluteJumpAddress):
            (JSC::ARMAssembler::linkJump):
            (JSC::ARMAssembler::relinkJump):
            (JSC::ARMAssembler::linkCall):
            (JSC::ARMAssembler::relinkCall):
            (JSC::ARMAssembler::getRelocatedAddress):
            (JSC::ARMAssembler::getDifferenceBetweenLabels):
            (JSC::ARMAssembler::getCallReturnOffset):
            * assembler/MacroAssemblerARM.h:
            (JSC::MacroAssemblerARM::call):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72663 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index 0ff903e..3b939b6 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,3 +1,27 @@
+2010-11-24  Gabor Loki  <loki at webkit.org>
+
+        Reviewed by Csaba Osztrogonác.
+
+        Merge the usage of jumps and calls at ARM-JIT
+        https://bugs.webkit.org/show_bug.cgi?id=50008
+
+        Those JmpSrc objects which represent jumps (not calls) should point to
+        after the jump instruction.
+
+        * assembler/ARMAssembler.h:
+        (JSC::ARMAssembler::blx):
+        (JSC::ARMAssembler::loadBranchTarget):
+        (JSC::ARMAssembler::getAbsoluteJumpAddress):
+        (JSC::ARMAssembler::linkJump):
+        (JSC::ARMAssembler::relinkJump):
+        (JSC::ARMAssembler::linkCall):
+        (JSC::ARMAssembler::relinkCall):
+        (JSC::ARMAssembler::getRelocatedAddress):
+        (JSC::ARMAssembler::getDifferenceBetweenLabels):
+        (JSC::ARMAssembler::getCallReturnOffset):
+        * assembler/MacroAssemblerARM.h:
+        (JSC::MacroAssemblerARM::call):
+
 2010-11-24  Carlos Garcia Campos  <cgarcia at igalia.com>
 
         Reviewed by Xan Lopez.
diff --git a/JavaScriptCore/assembler/ARMAssembler.h b/JavaScriptCore/assembler/ARMAssembler.h
index 900f655..1d24dd3 100644
--- a/JavaScriptCore/assembler/ARMAssembler.h
+++ b/JavaScriptCore/assembler/ARMAssembler.h
@@ -624,16 +624,14 @@ namespace JSC {
         JmpSrc blx(int rm, Condition cc = AL)
         {
 #if WTF_ARM_ARCH_AT_LEAST(5)
-            int s = m_buffer.uncheckedSize();
             emitInst(static_cast<ARMWord>(cc) | BLX, 0, 0, RM(rm));
 #else
             ASSERT(rm != 14);
             ensureSpace(2 * sizeof(ARMWord), 0);
             mov_r(ARMRegisters::lr, ARMRegisters::pc, cc);
-            int s = m_buffer.uncheckedSize();
             bx(rm, cc);
 #endif
-            return JmpSrc(s);
+            return JmpSrc(m_buffer.uncheckedSize());
         }
 
         static ARMWord lsl(int reg, ARMWord value)
@@ -711,10 +709,9 @@ namespace JSC {
         JmpSrc loadBranchTarget(int rd, Condition cc = AL, int useConstantPool = 0)
         {
             ensureSpace(sizeof(ARMWord), sizeof(ARMWord));
-            int s = m_buffer.uncheckedSize();
+            m_jumps.append(m_buffer.uncheckedSize() | (useConstantPool & 0x1));
             ldr_un_imm(rd, InvalidBranchTarget, cc);
-            m_jumps.append(s | (useConstantPool & 0x1));
-            return JmpSrc(s);
+            return JmpSrc(m_buffer.uncheckedSize());
         }
 
         JmpSrc jmp(Condition cc = AL, int useConstantPool = 0)
@@ -800,51 +797,55 @@ namespace JSC {
         }
 
         // Linkers
+        static intptr_t getAbsoluteJumpAddress(void* base, int offset = 0)
+        {
+            return reinterpret_cast<intptr_t>(base) + offset - sizeof(ARMWord);
+        }
 
         void linkJump(JmpSrc from, JmpDst to)
         {
-            ARMWord* insn = reinterpret_cast<ARMWord*>(m_buffer.data()) + (from.m_offset / sizeof(ARMWord));
+            ARMWord* insn = reinterpret_cast<ARMWord*>(getAbsoluteJumpAddress(m_buffer.data(), from.m_offset));
             ARMWord* addr = getLdrImmAddressOnPool(insn, m_buffer.poolAddress());
             *addr = static_cast<ARMWord>(to.m_offset);
         }
 
         static void linkJump(void* code, JmpSrc from, void* to)
         {
-            patchPointerInternal(reinterpret_cast<intptr_t>(code) + from.m_offset, to);
+            patchPointerInternal(getAbsoluteJumpAddress(code, from.m_offset), to);
         }
 
         static void relinkJump(void* from, void* to)
         {
-            patchPointerInternal(reinterpret_cast<intptr_t>(from) - sizeof(ARMWord), to);
+            patchPointerInternal(getAbsoluteJumpAddress(from), to);
         }
 
         static void linkCall(void* code, JmpSrc from, void* to)
         {
-            patchPointerInternal(reinterpret_cast<intptr_t>(code) + from.m_offset, to);
+            patchPointerInternal(getAbsoluteJumpAddress(code, from.m_offset), to);
         }
 
         static void relinkCall(void* from, void* to)
         {
-            patchPointerInternal(reinterpret_cast<intptr_t>(from) - sizeof(ARMWord), to);
+            patchPointerInternal(getAbsoluteJumpAddress(from), to);
         }
 
         // Address operations
 
         static void* getRelocatedAddress(void* code, JmpSrc jump)
         {
-            return reinterpret_cast<void*>(reinterpret_cast<ARMWord*>(code) + jump.m_offset / sizeof(ARMWord) + 1);
+            return reinterpret_cast<void*>(reinterpret_cast<char*>(code) + jump.m_offset);
         }
 
         static void* getRelocatedAddress(void* code, JmpDst label)
         {
-            return reinterpret_cast<void*>(reinterpret_cast<ARMWord*>(code) + label.m_offset / sizeof(ARMWord));
+            return reinterpret_cast<void*>(reinterpret_cast<char*>(code) + label.m_offset);
         }
 
         // Address differences
 
         static int getDifferenceBetweenLabels(JmpDst from, JmpSrc to)
         {
-            return (to.m_offset + sizeof(ARMWord)) - from.m_offset;
+            return to.m_offset - from.m_offset;
         }
 
         static int getDifferenceBetweenLabels(JmpDst from, JmpDst to)
@@ -854,7 +855,7 @@ namespace JSC {
 
         static unsigned getCallReturnOffset(JmpSrc call)
         {
-            return call.m_offset + sizeof(ARMWord);
+            return call.m_offset;
         }
 
         // Handle immediates
diff --git a/JavaScriptCore/assembler/MacroAssemblerARM.h b/JavaScriptCore/assembler/MacroAssemblerARM.h
index ab6104d..c51686a 100644
--- a/JavaScriptCore/assembler/MacroAssemblerARM.h
+++ b/JavaScriptCore/assembler/MacroAssemblerARM.h
@@ -615,9 +615,7 @@ public:
 
     Call call(RegisterID target)
     {
-        m_assembler.blx(target);
-        JmpSrc jmpSrc;
-        return Call(jmpSrc, Call::None);
+        return Call(m_assembler.blx(target), Call::None);
     }
 
     void call(Address address)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list