Title: [209392] trunk/Source/_javascript_Core
Revision
209392
Author
o...@webkit.org
Date
2016-12-06 07:34:22 -0800 (Tue, 06 Dec 2016)

Log Message

Add storeFence support for ARMv7
https://bugs.webkit.org/show_bug.cgi?id=164733

Reviewed by Saam Barati.

* assembler/ARMAssembler.h:
(JSC::ARMAssembler::dmbISHST): Added.
* assembler/ARMv7Assembler.h: Typo fixed, DMB has only T1 encoding.
(JSC::ARMv7Assembler::dmbSY):
(JSC::ARMv7Assembler::dmbISHST): Added.
* assembler/MacroAssemblerARM.h:
(JSC::MacroAssemblerARM::storeFence):
* assembler/MacroAssemblerARMv7.h:
(JSC::MacroAssemblerARMv7::storeFence):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (209391 => 209392)


--- trunk/Source/_javascript_Core/ChangeLog	2016-12-06 12:16:06 UTC (rev 209391)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-12-06 15:34:22 UTC (rev 209392)
@@ -1,3 +1,20 @@
+2016-12-06  Csaba Osztrogonác  <o...@webkit.org>
+
+        Add storeFence support for ARMv7
+        https://bugs.webkit.org/show_bug.cgi?id=164733
+
+        Reviewed by Saam Barati.
+
+        * assembler/ARMAssembler.h:
+        (JSC::ARMAssembler::dmbISHST): Added.
+        * assembler/ARMv7Assembler.h: Typo fixed, DMB has only T1 encoding.
+        (JSC::ARMv7Assembler::dmbSY):
+        (JSC::ARMv7Assembler::dmbISHST): Added.
+        * assembler/MacroAssemblerARM.h:
+        (JSC::MacroAssemblerARM::storeFence):
+        * assembler/MacroAssemblerARMv7.h:
+        (JSC::MacroAssemblerARMv7::storeFence):
+
 2016-12-05  Matt Baker  <mattba...@apple.com>
 
         Web Inspector: remove ASSERT from InspectorDebuggerAgent::derefAsyncCallData

Modified: trunk/Source/_javascript_Core/assembler/ARMAssembler.h (209391 => 209392)


--- trunk/Source/_javascript_Core/assembler/ARMAssembler.h	2016-12-06 12:16:06 UTC (rev 209391)
+++ trunk/Source/_javascript_Core/assembler/ARMAssembler.h	2016-12-06 15:34:22 UTC (rev 209392)
@@ -215,6 +215,7 @@
 #endif
             NOP = 0xe1a00000,
             DMB_SY = 0xf57ff05f,
+            DMB_ISHST = 0xf57ff05a,
 #if HAVE(ARM_IDIV_INSTRUCTIONS)
             SDIV = 0x0710f010,
             UDIV = 0x0730f010,
@@ -722,6 +723,11 @@
             m_buffer.putInt(DMB_SY);
         }
 
+        void dmbISHST()
+        {
+            m_buffer.putInt(DMB_ISHST);
+        }
+
         void bx(int rm, Condition cc = AL)
         {
             emitInstruction(toARMWord(cc) | BX, 0, 0, RM(rm));

Modified: trunk/Source/_javascript_Core/assembler/ARMv7Assembler.h (209391 => 209392)


--- trunk/Source/_javascript_Core/assembler/ARMv7Assembler.h	2016-12-06 12:16:06 UTC (rev 209391)
+++ trunk/Source/_javascript_Core/assembler/ARMv7Assembler.h	2016-12-06 15:34:22 UTC (rev 209392)
@@ -681,7 +681,7 @@
         OP_MOVT         = 0xF2C0,
         OP_UBFX_T1      = 0xF3C0,
         OP_NOP_T2a      = 0xF3AF,
-        OP_DMB_SY_T2a   = 0xF3BF,
+        OP_DMB_T1a      = 0xF3BF,
         OP_STRB_imm_T3  = 0xF800,
         OP_STRB_reg_T2  = 0xF800,
         OP_LDRB_imm_T3  = 0xF810,
@@ -715,32 +715,33 @@
     } OpcodeID1;
 
     typedef enum {
-        OP_VADD_T2b     = 0x0A00,
-        OP_VDIVb        = 0x0A00,
-        OP_FLDSb        = 0x0A00,
-        OP_VLDRb        = 0x0A00,
-        OP_VMOV_IMM_T2b = 0x0A00,
-        OP_VMOV_T2b     = 0x0A40,
-        OP_VMUL_T2b     = 0x0A00,
-        OP_FSTSb        = 0x0A00,
-        OP_VSTRb        = 0x0A00,
-        OP_VMOV_StoCb   = 0x0A10,
-        OP_VMOV_CtoSb   = 0x0A10,
-        OP_VMOV_DtoCb   = 0x0A10,
-        OP_VMOV_CtoDb   = 0x0A10,
-        OP_VMRSb        = 0x0A10,
-        OP_VABS_T2b     = 0x0A40,
-        OP_VCMPb        = 0x0A40,
-        OP_VCVT_FPIVFPb = 0x0A40,
-        OP_VNEG_T2b     = 0x0A40,
-        OP_VSUB_T2b     = 0x0A40,
-        OP_VSQRT_T1b    = 0x0A40,
-        OP_VCVTSD_T1b   = 0x0A40,
-        OP_VCVTDS_T1b   = 0x0A40,
-        OP_NOP_T2b      = 0x8000,
-        OP_DMB_SY_T2b   = 0x8F5F,
-        OP_B_T3b        = 0x8000,
-        OP_B_T4b        = 0x9000,
+        OP_VADD_T2b      = 0x0A00,
+        OP_VDIVb         = 0x0A00,
+        OP_FLDSb         = 0x0A00,
+        OP_VLDRb         = 0x0A00,
+        OP_VMOV_IMM_T2b  = 0x0A00,
+        OP_VMOV_T2b      = 0x0A40,
+        OP_VMUL_T2b      = 0x0A00,
+        OP_FSTSb         = 0x0A00,
+        OP_VSTRb         = 0x0A00,
+        OP_VMOV_StoCb    = 0x0A10,
+        OP_VMOV_CtoSb    = 0x0A10,
+        OP_VMOV_DtoCb    = 0x0A10,
+        OP_VMOV_CtoDb    = 0x0A10,
+        OP_VMRSb         = 0x0A10,
+        OP_VABS_T2b      = 0x0A40,
+        OP_VCMPb         = 0x0A40,
+        OP_VCVT_FPIVFPb  = 0x0A40,
+        OP_VNEG_T2b      = 0x0A40,
+        OP_VSUB_T2b      = 0x0A40,
+        OP_VSQRT_T1b     = 0x0A40,
+        OP_VCVTSD_T1b    = 0x0A40,
+        OP_VCVTDS_T1b    = 0x0A40,
+        OP_NOP_T2b       = 0x8000,
+        OP_DMB_SY_T1b    = 0x8F5F,
+        OP_DMB_ISHST_T1b = 0x8F5A,
+        OP_B_T3b         = 0x8000,
+        OP_B_T4b         = 0x9000,
     } OpcodeID2;
 
     struct FourFours {
@@ -2042,9 +2043,14 @@
 
     void dmbSY()
     {
-        m_formatter.twoWordOp16Op16(OP_DMB_SY_T2a, OP_DMB_SY_T2b);
+        m_formatter.twoWordOp16Op16(OP_DMB_T1a, OP_DMB_SY_T1b);
     }
 
+    void dmbISHST()
+    {
+        m_formatter.twoWordOp16Op16(OP_DMB_T1a, OP_DMB_ISHST_T1b);
+    }
+
     AssemblerLabel labelIgnoringWatchpoints()
     {
         return m_formatter.label();

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h (209391 => 209392)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h	2016-12-06 12:16:06 UTC (rev 209391)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h	2016-12-06 15:34:22 UTC (rev 209392)
@@ -1465,9 +1465,7 @@
 
     void storeFence()
     {
-        // FIXME: We should actually implement this. The only current caller is related to
-        // concurrent GC, which is disabled on 32-bit systems.
-        // https://bugs.webkit.org/show_bug.cgi?id=164733
+        m_assembler.dmbISHST();
     }
 
     static FunctionPtr readCallTarget(CodeLocationCall call)

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h (209391 => 209392)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2016-12-06 12:16:06 UTC (rev 209391)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2016-12-06 15:34:22 UTC (rev 209392)
@@ -1346,9 +1346,7 @@
     
     void storeFence()
     {
-        // FIXME: We should actually implement this. The only current caller is related to
-        // concurrent GC, which is disabled on 32-bit systems.
-        // https://bugs.webkit.org/show_bug.cgi?id=164733
+        m_assembler.dmbISHST();
     }
     
     static void replaceWithJump(CodeLocationLabel instructionStart, CodeLocationLabel destination)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to