Title: [203293] trunk/Source/_javascript_Core
Revision
203293
Author
[email protected]
Date
2016-07-15 13:03:39 -0700 (Fri, 15 Jul 2016)

Log Message

Add new functions to ARMAssembler after r202214
https://bugs.webkit.org/show_bug.cgi?id=159713

Reviewed by Saam Barati.

* assembler/ARMAssembler.h:
(JSC::ARMAssembler::fillNops):
* assembler/MacroAssemblerARM.h:
(JSC::MacroAssemblerARM::patchableBranch32):
(JSC::MacroAssemblerARM::internalCompare32):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (203292 => 203293)


--- trunk/Source/_javascript_Core/ChangeLog	2016-07-15 19:38:24 UTC (rev 203292)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-07-15 20:03:39 UTC (rev 203293)
@@ -1,3 +1,16 @@
+2016-07-15  Csaba Osztrogonác  <[email protected]>
+
+        Add new functions to ARMAssembler after r202214
+        https://bugs.webkit.org/show_bug.cgi?id=159713
+
+        Reviewed by Saam Barati.
+
+        * assembler/ARMAssembler.h:
+        (JSC::ARMAssembler::fillNops):
+        * assembler/MacroAssemblerARM.h:
+        (JSC::MacroAssemblerARM::patchableBranch32):
+        (JSC::MacroAssemblerARM::internalCompare32):
+
 2016-07-15  Mark Lam  <[email protected]>
 
         Stack overflow error for deeply nested classes.

Modified: trunk/Source/_javascript_Core/assembler/ARMAssembler.h (203292 => 203293)


--- trunk/Source/_javascript_Core/assembler/ARMAssembler.h	2016-07-15 19:38:24 UTC (rev 203292)
+++ trunk/Source/_javascript_Core/assembler/ARMAssembler.h	2016-07-15 20:03:39 UTC (rev 203293)
@@ -706,6 +706,18 @@
             m_buffer.putInt(NOP);
         }
 
+        static void fillNops(void* base, size_t size, bool isCopyingToExecutableMemory)
+        {
+            UNUSED_PARAM(isCopyingToExecutableMemory);
+            RELEASE_ASSERT(!(size % sizeof(int32_t)));
+
+            int32_t* ptr = static_cast<int32_t*>(base);
+            const size_t num32s = size / sizeof(int32_t);
+            const int32_t insn = NOP;
+            for (size_t i = 0; i < num32s; i++)
+                *ptr++ = insn;
+        }
+
         void dmbSY()
         {
             m_buffer.putInt(DMB_SY);

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h (203292 => 203293)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h	2016-07-15 19:38:24 UTC (rev 203292)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h	2016-07-15 20:03:39 UTC (rev 203293)
@@ -910,6 +910,14 @@
         return PatchableJump(jump);
     }
 
+    PatchableJump patchableBranch32(RelationalCondition cond, Address address, TrustedImm32 imm)
+    {
+        internalCompare32(address, imm);
+        Jump jump(m_assembler.loadBranchTarget(ARMRegisters::S1, ARMCondition(cond), false));
+        m_assembler.bx(ARMRegisters::S1, ARMCondition(cond));
+        return PatchableJump(jump);
+    }
+
     void breakpoint()
     {
         m_assembler.bkpt(0);
@@ -1532,6 +1540,16 @@
             m_assembler.cmp(left, m_assembler.getImm(right.m_value, ARMRegisters::S0));
     }
 
+    void internalCompare32(Address left, TrustedImm32 right)
+    {
+        ARMWord tmp = (static_cast<unsigned>(right.m_value) == 0x80000000) ? ARMAssembler::InvalidImmediate : m_assembler.getOp2(-right.m_value);
+        load32(left, ARMRegisters::S1);
+        if (tmp != ARMAssembler::InvalidImmediate)
+            m_assembler.cmn(ARMRegisters::S1, tmp);
+        else
+            m_assembler.cmp(ARMRegisters::S1, m_assembler.getImm(right.m_value, ARMRegisters::S0));
+    }
+
     static void linkCall(void* code, Call call, FunctionPtr function)
     {
         if (call.isFlagSet(Call::Tail))
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to