Title: [127148] trunk/Source/_javascript_Core
Revision
127148
Author
[email protected]
Date
2012-08-30 09:03:47 -0700 (Thu, 30 Aug 2012)

Log Message

[sh4] Add missing implementation for _javascript_Core JIT
https://bugs.webkit.org/show_bug.cgi?id=95452

Patch by Julien BRIANCEAU <[email protected]> on 2012-08-30
Reviewed by Oliver Hunt.

* assembler/MacroAssemblerSH4.h:
(JSC::MacroAssemblerSH4::isCompactPtrAlignedAddressOffset):
(MacroAssemblerSH4):
(JSC::MacroAssemblerSH4::add32):
(JSC::MacroAssemblerSH4::convertibleLoadPtr):
* assembler/SH4Assembler.h:
(JSC::SH4Assembler::labelIgnoringWatchpoints):
(SH4Assembler):
(JSC::SH4Assembler::replaceWithLoad):
(JSC::SH4Assembler::replaceWithAddressComputation):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (127147 => 127148)


--- trunk/Source/_javascript_Core/ChangeLog	2012-08-30 15:58:47 UTC (rev 127147)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-08-30 16:03:47 UTC (rev 127148)
@@ -1,3 +1,21 @@
+2012-08-30  Julien BRIANCEAU   <[email protected]>
+
+        [sh4] Add missing implementation for _javascript_Core JIT
+        https://bugs.webkit.org/show_bug.cgi?id=95452
+
+        Reviewed by Oliver Hunt.
+
+        * assembler/MacroAssemblerSH4.h:
+        (JSC::MacroAssemblerSH4::isCompactPtrAlignedAddressOffset):
+        (MacroAssemblerSH4):
+        (JSC::MacroAssemblerSH4::add32):
+        (JSC::MacroAssemblerSH4::convertibleLoadPtr):
+        * assembler/SH4Assembler.h:
+        (JSC::SH4Assembler::labelIgnoringWatchpoints):
+        (SH4Assembler):
+        (JSC::SH4Assembler::replaceWithLoad):
+        (JSC::SH4Assembler::replaceWithAddressComputation):
+
 2012-08-30  Charles Wei  <[email protected]>
 
         [BlackBerry] Eliminate build warnings

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerSH4.h (127147 => 127148)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerSH4.h	2012-08-30 15:58:47 UTC (rev 127147)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerSH4.h	2012-08-30 16:03:47 UTC (rev 127148)
@@ -47,6 +47,11 @@
 
     static const int MaximumCompactPtrAlignedAddressOffset = 60;
 
+    static bool isCompactPtrAlignedAddressOffset(ptrdiff_t value)
+    {
+        return (value >= 0) && (value <= MaximumCompactPtrAlignedAddressOffset);
+    }
+
     enum RelationalCondition {
         Equal = SH4Assembler::EQ,
         NotEqual = SH4Assembler::NE,
@@ -138,6 +143,14 @@
         releaseScratch(scr);
     }
 
+    void add32(AbsoluteAddress src, RegisterID dest)
+    {
+        RegisterID scr = claimScratch();
+        load32(src.m_ptr, scr);
+        m_assembler.addlRegReg(scr, dest);
+        releaseScratch(scr);
+    }
+
     void and32(RegisterID src, RegisterID dest)
     {
         m_assembler.andlRegReg(src, dest);
@@ -874,6 +887,19 @@
         return dataLabel;
     }
 
+    ConvertibleLoadLabel convertibleLoadPtr(Address address, RegisterID dest)
+    {
+        ConvertibleLoadLabel result(this);
+
+        RegisterID scr = claimScratch();
+        m_assembler.movImm8(address.offset, scr);
+        m_assembler.addlRegReg(address.base, scr);
+        m_assembler.movlMemReg(scr, dest);
+        releaseScratch(scr);
+
+        return result;
+    }
+
      // Floating-point operations
 
     static bool supportsFloatingPoint() { return true; }

Modified: trunk/Source/_javascript_Core/assembler/SH4Assembler.h (127147 => 127148)


--- trunk/Source/_javascript_Core/assembler/SH4Assembler.h	2012-08-30 15:58:47 UTC (rev 127147)
+++ trunk/Source/_javascript_Core/assembler/SH4Assembler.h	2012-08-30 16:03:47 UTC (rev 127148)
@@ -1239,6 +1239,12 @@
         oneShortOp(RTS_OPCODE, false);
     }
 
+    AssemblerLabel labelIgnoringWatchpoints()
+    {
+        m_buffer.ensureSpaceForAnyInstruction();
+        return m_buffer.label();
+    }
+
     AssemblerLabel label()
     {
         m_buffer.ensureSpaceForAnyInstruction();
@@ -2079,6 +2085,30 @@
     static void printBlockInstr(uint16_t* first, unsigned int offset, int nbInstr) {};
 #endif
 
+    static void replaceWithLoad(void* instructionStart)
+    {
+        SH4Word* insPtr = reinterpret_cast<SH4Word*>(instructionStart);
+
+        insPtr += 2; // skip MOV and ADD opcodes
+
+        if (((*insPtr) & 0xf00f) != MOVL_READ_RM_OPCODE) {
+            *insPtr = MOVL_READ_RM_OPCODE | (*insPtr & 0x0ff0);
+            cacheFlush(insPtr, sizeof(SH4Word));
+        }
+    }
+
+    static void replaceWithAddressComputation(void* instructionStart)
+    {
+        SH4Word* insPtr = reinterpret_cast<SH4Word*>(instructionStart);
+
+        insPtr += 2; // skip MOV and ADD opcodes
+
+        if (((*insPtr) & 0xf00f) != MOV_OPCODE) {
+            *insPtr = MOV_OPCODE | (*insPtr & 0x0ff0);
+            cacheFlush(insPtr, sizeof(SH4Word));
+        }
+    }
+
 private:
     SH4Buffer m_buffer;
     int m_claimscratchReg;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to