Ignore:
Timestamp:
Jul 5, 2012, 12:04:16 AM (13 years ago)
Author:
[email protected]
Message:

Port DFG JIT to traditional ARM
https://bugs.webkit.org/show_bug.cgi?id=90198

Reviewed by Filip Pizlo.

Source/JavaScriptCore:

This patch contains the macro assembler part of the
DFG JIT support on ARM systems with fixed 32 bit instruction
width. A large amount of old code was refactored, and the ARMv4
or lower support is removed from the macro assembler.

Sunspider is improved by 8%, and V8 is 92%.

  • assembler/ARMAssembler.cpp:

(JSC::ARMAssembler::dataTransfer32):
(JSC::ARMAssembler::baseIndexTransfer32):
(JSC):
(JSC::ARMAssembler::dataTransfer16):
(JSC::ARMAssembler::baseIndexTransfer16):
(JSC::ARMAssembler::dataTransferFloat):
(JSC::ARMAssembler::baseIndexTransferFloat):
(JSC::ARMAssembler::executableCopy):

  • assembler/ARMAssembler.h:

(JSC::ARMAssembler::ARMAssembler):
(JSC::ARMAssembler::emitInst):
(JSC::ARMAssembler::vmov_f64_r):
(ARMAssembler):
(JSC::ARMAssembler::vabs_f64_r):
(JSC::ARMAssembler::vneg_f64_r):
(JSC::ARMAssembler::ldr_imm):
(JSC::ARMAssembler::ldr_un_imm):
(JSC::ARMAssembler::dtr_u):
(JSC::ARMAssembler::dtr_ur):
(JSC::ARMAssembler::dtr_d):
(JSC::ARMAssembler::dtr_dr):
(JSC::ARMAssembler::dtrh_u):
(JSC::ARMAssembler::dtrh_ur):
(JSC::ARMAssembler::dtrh_d):
(JSC::ARMAssembler::dtrh_dr):
(JSC::ARMAssembler::fdtr_u):
(JSC::ARMAssembler::fdtr_d):
(JSC::ARMAssembler::push_r):
(JSC::ARMAssembler::pop_r):
(JSC::ARMAssembler::poke_r):
(JSC::ARMAssembler::peek_r):
(JSC::ARMAssembler::vmov_vfp64_r):
(JSC::ARMAssembler::vmov_arm64_r):
(JSC::ARMAssembler::vmov_vfp32_r):
(JSC::ARMAssembler::vmov_arm32_r):
(JSC::ARMAssembler::vcvt_u32_f64_r):
(JSC::ARMAssembler::vcvt_f64_f32_r):
(JSC::ARMAssembler::vcvt_f32_f64_r):
(JSC::ARMAssembler::clz_r):
(JSC::ARMAssembler::bkpt):
(JSC::ARMAssembler::bx):
(JSC::ARMAssembler::blx):
(JSC::ARMAssembler::labelIgnoringWatchpoints):
(JSC::ARMAssembler::labelForWatchpoint):
(JSC::ARMAssembler::label):
(JSC::ARMAssembler::getLdrImmAddress):
(JSC::ARMAssembler::replaceWithJump):
(JSC::ARMAssembler::maxJumpReplacementSize):
(JSC::ARMAssembler::getOp2Byte):
(JSC::ARMAssembler::getOp2Half):
(JSC::ARMAssembler::RM):
(JSC::ARMAssembler::RS):
(JSC::ARMAssembler::RD):
(JSC::ARMAssembler::RN):

  • assembler/AssemblerBufferWithConstantPool.h:

(JSC::AssemblerBufferWithConstantPool::ensureSpaceForAnyInstruction):

  • assembler/MacroAssemblerARM.cpp:

(JSC::MacroAssemblerARM::load32WithUnalignedHalfWords):

  • assembler/MacroAssemblerARM.h:

(JSC::MacroAssemblerARM::add32):
(MacroAssemblerARM):
(JSC::MacroAssemblerARM::and32):
(JSC::MacroAssemblerARM::lshift32):
(JSC::MacroAssemblerARM::mul32):
(JSC::MacroAssemblerARM::neg32):
(JSC::MacroAssemblerARM::rshift32):
(JSC::MacroAssemblerARM::urshift32):
(JSC::MacroAssemblerARM::xor32):
(JSC::MacroAssemblerARM::load8):
(JSC::MacroAssemblerARM::load8Signed):
(JSC::MacroAssemblerARM::load16):
(JSC::MacroAssemblerARM::load16Signed):
(JSC::MacroAssemblerARM::load32):
(JSC::MacroAssemblerARM::load32WithAddressOffsetPatch):
(JSC::MacroAssemblerARM::store32WithAddressOffsetPatch):
(JSC::MacroAssemblerARM::store8):
(JSC::MacroAssemblerARM::store16):
(JSC::MacroAssemblerARM::store32):
(JSC::MacroAssemblerARM::move):
(JSC::MacroAssemblerARM::jump):
(JSC::MacroAssemblerARM::branchAdd32):
(JSC::MacroAssemblerARM::mull32):
(JSC::MacroAssemblerARM::branchMul32):
(JSC::MacroAssemblerARM::nearCall):
(JSC::MacroAssemblerARM::compare32):
(JSC::MacroAssemblerARM::test32):
(JSC::MacroAssemblerARM::sub32):
(JSC::MacroAssemblerARM::call):
(JSC::MacroAssemblerARM::loadFloat):
(JSC::MacroAssemblerARM::loadDouble):
(JSC::MacroAssemblerARM::storeFloat):
(JSC::MacroAssemblerARM::storeDouble):
(JSC::MacroAssemblerARM::moveDouble):
(JSC::MacroAssemblerARM::addDouble):
(JSC::MacroAssemblerARM::divDouble):
(JSC::MacroAssemblerARM::subDouble):
(JSC::MacroAssemblerARM::mulDouble):
(JSC::MacroAssemblerARM::absDouble):
(JSC::MacroAssemblerARM::negateDouble):
(JSC::MacroAssemblerARM::convertInt32ToDouble):
(JSC::MacroAssemblerARM::convertFloatToDouble):
(JSC::MacroAssemblerARM::convertDoubleToFloat):
(JSC::MacroAssemblerARM::branchTruncateDoubleToInt32):
(JSC::MacroAssemblerARM::branchTruncateDoubleToUint32):
(JSC::MacroAssemblerARM::truncateDoubleToInt32):
(JSC::MacroAssemblerARM::truncateDoubleToUint32):
(JSC::MacroAssemblerARM::branchConvertDoubleToInt32):
(JSC::MacroAssemblerARM::branchDoubleNonZero):
(JSC::MacroAssemblerARM::branchDoubleZeroOrNaN):
(JSC::MacroAssemblerARM::invert):
(JSC::MacroAssemblerARM::replaceWithJump):
(JSC::MacroAssemblerARM::maxJumpReplacementSize):
(JSC::MacroAssemblerARM::call32):

  • assembler/SH4Assembler.h:

(JSC::SH4Assembler::label):

  • dfg/DFGAssemblyHelpers.h:

(JSC::DFG::AssemblyHelpers::debugCall):
(JSC::DFG::AssemblyHelpers::boxDouble):
(JSC::DFG::AssemblyHelpers::unboxDouble):

  • dfg/DFGCCallHelpers.h:

(CCallHelpers):
(JSC::DFG::CCallHelpers::setupArguments):

  • dfg/DFGFPRInfo.h:

(DFG):

  • dfg/DFGGPRInfo.h:

(DFG):
(GPRInfo):

  • dfg/DFGOperations.cpp:

(JSC):

  • dfg/DFGSpeculativeJIT.h:

(SpeculativeJIT):
(JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheckSetResult):
(JSC::DFG::SpeculativeJIT::appendCallSetResult):

  • jit/JITStubs.cpp:

(JSC):

  • jit/JITStubs.h:

(JITStackFrame):

  • jit/JSInterfaceJIT.h:

(JSInterfaceJIT):

Source/WTF:

Enabling DFG JIT on ARM systems with 32 bit instruction set.

  • wtf/InlineASM.h:
  • wtf/Platform.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/jit/JITStubs.cpp

    r121511 r121885  
    623623
    624624asm (
     625".text" "\n"
    625626".globl " SYMBOL_STRING(ctiTrampoline) "\n"
    626627HIDE_SYMBOL(ctiTrampoline) "\n"
     628INLINE_ARM_FUNCTION(ctiTrampoline)
    627629SYMBOL_STRING(ctiTrampoline) ":" "\n"
    628630    "stmdb sp!, {r1-r3}" "\n"
    629     "stmdb sp!, {r4-r8, lr}" "\n"
     631    "stmdb sp!, {r4-r6, r8-r11, lr}" "\n"
    630632    "sub sp, sp, #" STRINGIZE_VALUE_OF(PRESERVEDR4_OFFSET) "\n"
    631     "mov r4, r2" "\n"
    632     "mov r5, #512" "\n"
     633    "mov r5, r2" "\n"
     634    "mov r6, #512" "\n"
    633635    // r0 contains the code
    634     "mov lr, pc" "\n"
    635     "mov pc, r0" "\n"
     636    "blx r0" "\n"
    636637    "add sp, sp, #" STRINGIZE_VALUE_OF(PRESERVEDR4_OFFSET) "\n"
    637     "ldmia sp!, {r4-r8, lr}" "\n"
     638    "ldmia sp!, {r4-r6, r8-r11, lr}" "\n"
    638639    "add sp, sp, #12" "\n"
    639     "mov pc, lr" "\n"
     640    "bx lr" "\n"
     641".globl " SYMBOL_STRING(ctiTrampolineEnd) "\n"
     642HIDE_SYMBOL(ctiTrampolineEnd) "\n"
     643SYMBOL_STRING(ctiTrampolineEnd) ":" "\n"
    640644);
    641645
    642646asm (
     647".text" "\n"
    643648".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
    644649HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
     650INLINE_ARM_FUNCTION(ctiVMThrowTrampoline)
    645651SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
    646652    "mov r0, sp" "\n"
     
    648654
    649655// Both has the same return sequence
     656".text" "\n"
    650657".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
    651658HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
     659INLINE_ARM_FUNCTION(ctiOpThrowNotCaught)
    652660SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
    653661    "add sp, sp, #" STRINGIZE_VALUE_OF(PRESERVEDR4_OFFSET) "\n"
    654     "ldmia sp!, {r4-r8, lr}" "\n"
     662    "ldmia sp!, {r4-r6, r8-r11, lr}" "\n"
    655663    "add sp, sp, #12" "\n"
    656     "mov pc, lr" "\n"
     664    "bx lr" "\n"
    657665);
    658666
     
    10791087        ".globl " SYMBOL_STRING(cti_##op) "\n" \
    10801088        HIDE_SYMBOL(cti_##op) "\n"             \
    1081         ".thumb" "\n" \
    1082         ".thumb_func " THUMB_FUNC_PARAM(cti_##op) "\n" \
     1089        INLINE_ARM_FUNCTION(cti_##op) \
    10831090        SYMBOL_STRING(cti_##op) ":" "\n" \
    10841091        "str lr, [sp, #" STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "]" "\n" \
     
    11571164    asm ( \
    11581165        ".globl " SYMBOL_STRING(cti_##op) "\n" \
     1166        INLINE_ARM_FUNCTION(cti_##op) \
    11591167        SYMBOL_STRING(cti_##op) ":" "\n" \
    11601168        "str lr, [sp, #" STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "]" "\n" \
    11611169        "bl " SYMBOL_STRING(JITStubThunked_##op) "\n" \
    11621170        "ldr lr, [sp, #" STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "]" "\n" \
    1163         "mov pc, lr" "\n" \
     1171        "bx lr" "\n" \
    11641172        ); \
    11651173    rtype JITStubThunked_##op(STUB_ARGS_DECLARATION)
Note: See TracChangeset for help on using the changeset viewer.