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