From 89e2486a48b739f8d771d69ede5a6a1b244a10fc Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 30 Jul 2012 11:37:48 +0200 Subject: Imported WebKit commit 0282df8ca7c11d8c8a66ea18543695c69f545a27 (http://svn.webkit.org/repository/webkit/trunk@124002) New snapshot with prospective Mountain Lion build fix --- Source/JavaScriptCore/assembler/ARMAssembler.h | 22 ++++++++++++++-------- .../JavaScriptCore/assembler/MacroAssemblerARM.h | 14 +++++++++++--- 2 files changed, 25 insertions(+), 11 deletions(-) (limited to 'Source/JavaScriptCore/assembler') diff --git a/Source/JavaScriptCore/assembler/ARMAssembler.h b/Source/JavaScriptCore/assembler/ARMAssembler.h index a0d7d27c3..87aed853e 100644 --- a/Source/JavaScriptCore/assembler/ARMAssembler.h +++ b/Source/JavaScriptCore/assembler/ARMAssembler.h @@ -817,11 +817,11 @@ namespace JSC { // Read pointers static void* readPointer(void* from) { - ARMWord* insn = reinterpret_cast(from); - ARMWord* addr = getLdrImmAddress(insn); - return *reinterpret_cast(addr); + ARMWord* instruction = reinterpret_cast(from); + ARMWord* address = getLdrImmAddress(instruction); + return *reinterpret_cast(address); } - + // Patch pointers static void linkPointer(void* code, AssemblerLabel from, void* to) @@ -829,14 +829,20 @@ namespace JSC { patchPointerInternal(reinterpret_cast(code) + from.m_offset, to); } - static void repatchInt32(void* from, int32_t to) + static void repatchInt32(void* where, int32_t to) { - patchPointerInternal(reinterpret_cast(from), reinterpret_cast(to)); + patchPointerInternal(reinterpret_cast(where), reinterpret_cast(to)); } - + static void repatchCompact(void* where, int32_t value) { - repatchInt32(where, value); + ARMWord* instruction = reinterpret_cast(where); + ASSERT((*instruction & 0x0f700000) == LoadUint32); + if (value >= 0) + *instruction = (*instruction & 0xff7ff000) | DT_UP | value; + else + *instruction = (*instruction & 0xff7ff000) | -value; + cacheFlush(instruction, sizeof(ARMWord)); } static void repatchPointer(void* from, void* to) diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerARM.h b/Source/JavaScriptCore/assembler/MacroAssemblerARM.h index 2773b022c..530f62b86 100644 --- a/Source/JavaScriptCore/assembler/MacroAssemblerARM.h +++ b/Source/JavaScriptCore/assembler/MacroAssemblerARM.h @@ -41,7 +41,6 @@ class MacroAssemblerARM : public AbstractMacroAssembler { COMPILE_ASSERT(!(DoubleConditionBitSpecial & DoubleConditionMask), DoubleConditionBitSpecial_should_not_interfere_with_ARMAssembler_Condition_codes); public: typedef ARMRegisters::FPRegisterID FPRegisterID; - static const int MaximumCompactPtrAlignedAddressOffset = 0x7FFFFFFF; enum RelationalCondition { Equal = ARMAssembler::EQ, @@ -408,11 +407,20 @@ public: m_assembler.dtr_ur(ARMAssembler::LoadUint32, dest, address.base, ARMRegisters::S0); return dataLabel; } - + + static bool isCompactPtrAlignedAddressOffset(ptrdiff_t value) + { + return value >= -4095 && value <= 4095; + } + DataLabelCompact load32WithCompactAddressOffsetPatch(Address address, RegisterID dest) { DataLabelCompact dataLabel(this); - load32WithAddressOffsetPatch(address, dest); + ASSERT(isCompactPtrAlignedAddressOffset(address.offset)); + if (address.offset >= 0) + m_assembler.dtr_u(ARMAssembler::LoadUint32, dest, address.base, address.offset); + else + m_assembler.dtr_d(ARMAssembler::LoadUint32, dest, address.base, address.offset); return dataLabel; } -- cgit v1.2.1