Changeset 46059 in webkit
- Timestamp:
- Jul 17, 2009 2:56:28 PM (15 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 3 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r46057 r46059 1 2009-07-17 Gabor Loki <loki@inf.u-szeged.hu> 2 3 Reviewed by Gavin Barraclough. 4 5 Add YARR support for generic ARM platforms (disabled by default). 6 https://bugs.webkit.org/show_bug.cgi?id=24986 7 8 Add generic ARM port for MacroAssembler. It supports the whole 9 MacroAssembler functionality except floating point. 10 11 The class JmpSrc is extended with a flag which enables to patch 12 the jump destination offset during execution. This feature is 13 required for generic ARM port. 14 15 Signed off by Zoltan Herczeg <zherczeg@inf.u-szeged.hu> 16 Signed off by Gabor Loki <loki@inf.u-szeged.hu> 17 18 * JavaScriptCore.pri: 19 * assembler/ARMAssembler.cpp: Added. 20 (JSC::ARMAssembler::getLdrImmAddress): 21 (JSC::ARMAssembler::linkBranch): 22 (JSC::ARMAssembler::patchConstantPoolLoad): 23 (JSC::ARMAssembler::getOp2): 24 (JSC::ARMAssembler::genInt): 25 (JSC::ARMAssembler::getImm): 26 (JSC::ARMAssembler::moveImm): 27 (JSC::ARMAssembler::dataTransfer32): 28 (JSC::ARMAssembler::baseIndexTransfer32): 29 (JSC::ARMAssembler::executableCopy): 30 * assembler/ARMAssembler.h: Added. 31 (JSC::ARM::): 32 (JSC::ARMAssembler::ARMAssembler): 33 (JSC::ARMAssembler::): 34 (JSC::ARMAssembler::JmpSrc::JmpSrc): 35 (JSC::ARMAssembler::JmpSrc::enableLatePatch): 36 (JSC::ARMAssembler::JmpDst::JmpDst): 37 (JSC::ARMAssembler::JmpDst::isUsed): 38 (JSC::ARMAssembler::JmpDst::used): 39 (JSC::ARMAssembler::emitInst): 40 (JSC::ARMAssembler::and_r): 41 (JSC::ARMAssembler::ands_r): 42 (JSC::ARMAssembler::eor_r): 43 (JSC::ARMAssembler::eors_r): 44 (JSC::ARMAssembler::sub_r): 45 (JSC::ARMAssembler::subs_r): 46 (JSC::ARMAssembler::rsb_r): 47 (JSC::ARMAssembler::rsbs_r): 48 (JSC::ARMAssembler::add_r): 49 (JSC::ARMAssembler::adds_r): 50 (JSC::ARMAssembler::adc_r): 51 (JSC::ARMAssembler::adcs_r): 52 (JSC::ARMAssembler::sbc_r): 53 (JSC::ARMAssembler::sbcs_r): 54 (JSC::ARMAssembler::rsc_r): 55 (JSC::ARMAssembler::rscs_r): 56 (JSC::ARMAssembler::tst_r): 57 (JSC::ARMAssembler::teq_r): 58 (JSC::ARMAssembler::cmp_r): 59 (JSC::ARMAssembler::orr_r): 60 (JSC::ARMAssembler::orrs_r): 61 (JSC::ARMAssembler::mov_r): 62 (JSC::ARMAssembler::movs_r): 63 (JSC::ARMAssembler::bic_r): 64 (JSC::ARMAssembler::bics_r): 65 (JSC::ARMAssembler::mvn_r): 66 (JSC::ARMAssembler::mvns_r): 67 (JSC::ARMAssembler::mul_r): 68 (JSC::ARMAssembler::muls_r): 69 (JSC::ARMAssembler::mull_r): 70 (JSC::ARMAssembler::ldr_imm): 71 (JSC::ARMAssembler::ldr_un_imm): 72 (JSC::ARMAssembler::dtr_u): 73 (JSC::ARMAssembler::dtr_ur): 74 (JSC::ARMAssembler::dtr_d): 75 (JSC::ARMAssembler::dtr_dr): 76 (JSC::ARMAssembler::ldrh_r): 77 (JSC::ARMAssembler::ldrh_d): 78 (JSC::ARMAssembler::ldrh_u): 79 (JSC::ARMAssembler::strh_r): 80 (JSC::ARMAssembler::push_r): 81 (JSC::ARMAssembler::pop_r): 82 (JSC::ARMAssembler::poke_r): 83 (JSC::ARMAssembler::peek_r): 84 (JSC::ARMAssembler::clz_r): 85 (JSC::ARMAssembler::bkpt): 86 (JSC::ARMAssembler::lsl): 87 (JSC::ARMAssembler::lsr): 88 (JSC::ARMAssembler::asr): 89 (JSC::ARMAssembler::lsl_r): 90 (JSC::ARMAssembler::lsr_r): 91 (JSC::ARMAssembler::asr_r): 92 (JSC::ARMAssembler::size): 93 (JSC::ARMAssembler::ensureSpace): 94 (JSC::ARMAssembler::label): 95 (JSC::ARMAssembler::align): 96 (JSC::ARMAssembler::jmp): 97 (JSC::ARMAssembler::patchPointerInternal): 98 (JSC::ARMAssembler::patchConstantPoolLoad): 99 (JSC::ARMAssembler::patchPointer): 100 (JSC::ARMAssembler::repatchInt32): 101 (JSC::ARMAssembler::repatchPointer): 102 (JSC::ARMAssembler::repatchLoadPtrToLEA): 103 (JSC::ARMAssembler::linkJump): 104 (JSC::ARMAssembler::relinkJump): 105 (JSC::ARMAssembler::linkCall): 106 (JSC::ARMAssembler::relinkCall): 107 (JSC::ARMAssembler::getRelocatedAddress): 108 (JSC::ARMAssembler::getDifferenceBetweenLabels): 109 (JSC::ARMAssembler::getCallReturnOffset): 110 (JSC::ARMAssembler::getOp2Byte): 111 (JSC::ARMAssembler::placeConstantPoolBarrier): 112 (JSC::ARMAssembler::RM): 113 (JSC::ARMAssembler::RS): 114 (JSC::ARMAssembler::RD): 115 (JSC::ARMAssembler::RN): 116 (JSC::ARMAssembler::getConditionalField): 117 * assembler/ARMv7Assembler.h: 118 (JSC::ARMv7Assembler::JmpSrc::enableLatePatch): 119 * assembler/AbstractMacroAssembler.h: 120 (JSC::AbstractMacroAssembler::Call::enableLatePatch): 121 (JSC::AbstractMacroAssembler::Jump::enableLatePatch): 122 * assembler/MacroAssembler.h: 123 * assembler/MacroAssemblerARM.h: Added. 124 (JSC::MacroAssemblerARM::): 125 (JSC::MacroAssemblerARM::add32): 126 (JSC::MacroAssemblerARM::and32): 127 (JSC::MacroAssemblerARM::lshift32): 128 (JSC::MacroAssemblerARM::mul32): 129 (JSC::MacroAssemblerARM::not32): 130 (JSC::MacroAssemblerARM::or32): 131 (JSC::MacroAssemblerARM::rshift32): 132 (JSC::MacroAssemblerARM::sub32): 133 (JSC::MacroAssemblerARM::xor32): 134 (JSC::MacroAssemblerARM::load32): 135 (JSC::MacroAssemblerARM::load32WithAddressOffsetPatch): 136 (JSC::MacroAssemblerARM::loadPtrWithPatchToLEA): 137 (JSC::MacroAssemblerARM::load16): 138 (JSC::MacroAssemblerARM::store32WithAddressOffsetPatch): 139 (JSC::MacroAssemblerARM::store32): 140 (JSC::MacroAssemblerARM::pop): 141 (JSC::MacroAssemblerARM::push): 142 (JSC::MacroAssemblerARM::move): 143 (JSC::MacroAssemblerARM::swap): 144 (JSC::MacroAssemblerARM::signExtend32ToPtr): 145 (JSC::MacroAssemblerARM::zeroExtend32ToPtr): 146 (JSC::MacroAssemblerARM::branch32): 147 (JSC::MacroAssemblerARM::branch16): 148 (JSC::MacroAssemblerARM::branchTest32): 149 (JSC::MacroAssemblerARM::jump): 150 (JSC::MacroAssemblerARM::branchAdd32): 151 (JSC::MacroAssemblerARM::mull32): 152 (JSC::MacroAssemblerARM::branchMul32): 153 (JSC::MacroAssemblerARM::branchSub32): 154 (JSC::MacroAssemblerARM::breakpoint): 155 (JSC::MacroAssemblerARM::nearCall): 156 (JSC::MacroAssemblerARM::call): 157 (JSC::MacroAssemblerARM::ret): 158 (JSC::MacroAssemblerARM::set32): 159 (JSC::MacroAssemblerARM::setTest32): 160 (JSC::MacroAssemblerARM::tailRecursiveCall): 161 (JSC::MacroAssemblerARM::makeTailRecursiveCall): 162 (JSC::MacroAssemblerARM::moveWithPatch): 163 (JSC::MacroAssemblerARM::branchPtrWithPatch): 164 (JSC::MacroAssemblerARM::storePtrWithPatch): 165 (JSC::MacroAssemblerARM::supportsFloatingPoint): 166 (JSC::MacroAssemblerARM::supportsFloatingPointTruncate): 167 (JSC::MacroAssemblerARM::loadDouble): 168 (JSC::MacroAssemblerARM::storeDouble): 169 (JSC::MacroAssemblerARM::addDouble): 170 (JSC::MacroAssemblerARM::subDouble): 171 (JSC::MacroAssemblerARM::mulDouble): 172 (JSC::MacroAssemblerARM::convertInt32ToDouble): 173 (JSC::MacroAssemblerARM::branchDouble): 174 (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32): 175 (JSC::MacroAssemblerARM::ARMCondition): 176 (JSC::MacroAssemblerARM::prepareCall): 177 (JSC::MacroAssemblerARM::call32): 178 * assembler/X86Assembler.h: 179 (JSC::X86Assembler::JmpSrc::enableLatePatch): 180 * jit/ExecutableAllocator.h: 181 (JSC::ExecutableAllocator::cacheFlush): 182 * wtf/Platform.h: 183 * yarr/RegexJIT.cpp: 184 (JSC::Yarr::RegexGenerator::generateEnter): 185 (JSC::Yarr::RegexGenerator::generateReturn): 186 1 187 2009-07-17 Gabor Loki <loki@inf.u-szeged.hu> 2 188 -
trunk/JavaScriptCore/JavaScriptCore.pri
r46032 r46059 120 120 bytecode/StructureStubInfo.cpp \ 121 121 bytecode/JumpTable.cpp \ 122 assembler/ARMAssembler.cpp \ 122 123 jit/JIT.cpp \ 123 124 jit/JITCall.cpp \ -
trunk/JavaScriptCore/assembler/ARMv7Assembler.h
r44886 r46059 443 443 } 444 444 445 void enableLatePatch() { } 445 446 private: 446 447 JmpSrc(int offset) -
trunk/JavaScriptCore/assembler/AbstractMacroAssembler.h
r44886 r46059 323 323 } 324 324 325 void enableLatePatch() 326 { 327 m_jmp.enableLatePatch(); 328 } 329 325 330 private: 326 331 JmpSrc m_jmp; … … 357 362 { 358 363 masm->m_assembler.linkJump(m_jmp, label.m_label); 364 } 365 366 void enableLatePatch() 367 { 368 m_jmp.enableLatePatch(); 359 369 } 360 370 -
trunk/JavaScriptCore/assembler/MacroAssembler.h
r44886 r46059 35 35 namespace JSC { typedef MacroAssemblerARMv7 MacroAssemblerBase; }; 36 36 37 #elif PLATFORM(ARM) 38 #include "MacroAssemblerARM.h" 39 namespace JSC { typedef MacroAssemblerARM MacroAssemblerBase; }; 40 37 41 #elif PLATFORM(X86) 38 42 #include "MacroAssemblerX86.h" -
trunk/JavaScriptCore/assembler/X86Assembler.h
r44478 r46059 227 227 } 228 228 229 void enableLatePatch() { } 229 230 private: 230 231 JmpSrc(int offset) -
trunk/JavaScriptCore/jit/ExecutableAllocator.h
r44886 r46059 214 214 sys_dcache_flush(code, size); 215 215 sys_icache_invalidate(code, size); 216 #elif PLATFORM(ARM) 217 #if COMPILER(GCC) && (GCC_VERSION >= 30406) 218 __clear_cache(reinterpret_cast<char*>(code), reinterpret_cast<char*>(code) + size); 219 #else 220 const int syscall = 0xf0002; 221 __asm __volatile ( 222 "mov r0, %0\n" 223 "mov r1, %1\n" 224 "mov r7, %2\n" 225 "mov r2, #0x0\n" 226 "swi 0x00000000\n" 227 : 228 : "r" (code), "r" (reinterpret_cast<char*>(code) + size), "r" (syscall) 229 : "r0", "r1", "r7"); 230 #endif // COMPILER(GCC) && (GCC_VERSION >= 30406) 216 231 #else 217 232 #error "ExecutableAllocator::cacheFlush not implemented on this platform." -
trunk/JavaScriptCore/wtf/Platform.h
r45972 r46059 312 312 #if defined(__GNUC__) && !COMPILER(RVCT) 313 313 #define WTF_COMPILER_GCC 1 314 #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) 314 315 #endif 315 316 … … 643 644 /* Setting this flag prevents the assembler from using RWX memory; this may improve 644 645 security but currectly comes at a significant performance cost. */ 645 #if PLATFORM _ARM_ARCH(7) && PLATFORM(IPHONE)646 #if PLATFORM(ARM) 646 647 #define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1 647 648 #else -
trunk/JavaScriptCore/yarr/RegexJIT.cpp
r45600 r46059 44 44 friend void jitCompileRegex(JSGlobalData* globalData, RegexCodeBlock& jitObject, const UString& pattern, unsigned& numSubpatterns, const char*& error, bool ignoreCase, bool multiline); 45 45 46 #if PLATFORM _ARM_ARCH(7)46 #if PLATFORM(ARM) 47 47 static const RegisterID input = ARM::r0; 48 48 static const RegisterID index = ARM::r1; 49 49 static const RegisterID length = ARM::r2; 50 51 50 static const RegisterID output = ARM::r4; 51 52 52 static const RegisterID regT0 = ARM::r5; 53 53 static const RegisterID regT1 = ARM::r6; 54 54 55 55 static const RegisterID returnRegister = ARM::r0; 56 #endif 57 #if PLATFORM(X86) 56 #elif PLATFORM(X86) 58 57 static const RegisterID input = X86::eax; 59 58 static const RegisterID index = X86::edx; … … 65 64 66 65 static const RegisterID returnRegister = X86::eax; 67 #endif 68 #if PLATFORM(X86_64) 66 #elif PLATFORM(X86_64) 69 67 static const RegisterID input = X86::edi; 70 68 static const RegisterID index = X86::esi; … … 1310 1308 loadPtr(Address(X86::ebp, 2 * sizeof(void*)), output); 1311 1309 #endif 1312 #elif PLATFORM_ARM_ARCH(7) 1310 #elif PLATFORM(ARM) 1311 #if !PLATFORM_ARM_ARCH(7) 1312 push(ARM::lr); 1313 #endif 1313 1314 push(ARM::r4); 1314 1315 push(ARM::r5); … … 1328 1329 pop(X86::ebx); 1329 1330 pop(X86::ebp); 1330 #elif PLATFORM _ARM_ARCH(7)1331 #elif PLATFORM(ARM) 1331 1332 pop(ARM::r6); 1332 1333 pop(ARM::r5);
Note: See TracChangeset
for help on using the changeset viewer.