⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 197653 in webkit


Ignore:
Timestamp:
Mar 6, 2016, 6:42:43 PM (11 years ago)
Author:
benjamin@webkit.org
Message:

[JSC] Use 3 operands Add in more places
https://bugs.webkit.org/show_bug.cgi?id=155082

Reviewed by Filip Pizlo.

  • assembler/MacroAssembler.h:

(JSC::MacroAssembler::addPtr):
(JSC::MacroAssembler::add32):

  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::add32):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compileArithAdd):
The case with child1 constant is useless.
The canonical form will have the constant as child2.

Also add register reuse for the fast-add.
Registers are a scarce resource on x86.

  • jit/CCallHelpers.h:

(JSC::CCallHelpers::prepareForTailCallSlow):

  • yarr/YarrJIT.cpp:

(JSC::Yarr::YarrGenerator::generate):

Location:
trunk/Source/JavaScriptCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r197652 r197653  
     12016-03-06  Benjamin Poulain  <benjamin@webkit.org>
     2
     3        [JSC] Use 3 operands Add in more places
     4        https://bugs.webkit.org/show_bug.cgi?id=155082
     5
     6        Reviewed by Filip Pizlo.
     7
     8        * assembler/MacroAssembler.h:
     9        (JSC::MacroAssembler::addPtr):
     10        (JSC::MacroAssembler::add32):
     11        * assembler/MacroAssemblerARMv7.h:
     12        (JSC::MacroAssemblerARMv7::add32):
     13        * dfg/DFGSpeculativeJIT.cpp:
     14        (JSC::DFG::SpeculativeJIT::compileArithAdd):
     15        The case with child1 constant is useless.
     16        The canonical form will have the constant as child2.
     17
     18        Also add register reuse for the fast-add.
     19        Registers are a scarce resource on x86.
     20
     21        * jit/CCallHelpers.h:
     22        (JSC::CCallHelpers::prepareForTailCallSlow):
     23        * yarr/YarrJIT.cpp:
     24        (JSC::Yarr::YarrGenerator::generate):
     25
    1262016-03-06  Benjamin Poulain  <bpoulain@apple.com>
    227
  • trunk/Source/JavaScriptCore/assembler/MacroAssembler.h

    r197652 r197653  
    522522    }
    523523
     524    void addPtr(RegisterID left, RegisterID right, RegisterID dest)
     525    {
     526        add32(left, right, dest);
     527    }
     528
    524529    void addPtr(TrustedImm32 imm, RegisterID srcDest)
    525530    {
     
    793798    {
    794799        add64(src, dest);
     800    }
     801
     802    void addPtr(RegisterID left, RegisterID right, RegisterID dest)
     803    {
     804        add64(left, right, dest);
    795805    }
    796806   
     
    14571467        } else
    14581468            add32(imm.asTrustedImm32(), dest);
     1469    }
     1470
     1471    void add32(Imm32 imm, RegisterID src, RegisterID dest)
     1472    {
     1473        if (shouldBlind(imm)) {
     1474            BlindedImm32 key = additionBlindedConstant(imm);
     1475            add32(key.value1, src, dest);
     1476            add32(key.value2, dest);
     1477        } else
     1478            add32(imm.asTrustedImm32(), src, dest);
    14591479    }
    14601480   
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h

    r197652 r197653  
    156156    }
    157157
     158    void add32(RegisterID left, RegisterID right, RegisterID dest)
     159    {
     160        m_assembler.add(dest, left, right);
     161    }
     162
    158163    void add32(TrustedImm32 imm, RegisterID dest)
    159164    {
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp

    r197652 r197653  
    32573257    case Int32Use: {
    32583258        ASSERT(!shouldCheckNegativeZero(node->arithMode()));
    3259        
    3260         if (node->child1()->isInt32Constant()) {
    3261             int32_t imm1 = node->child1()->asInt32();
    3262             SpeculateInt32Operand op2(this, node->child2());
    3263             GPRTemporary result(this);
    3264 
    3265             if (!shouldCheckOverflow(node->arithMode())) {
    3266                 m_jit.move(op2.gpr(), result.gpr());
    3267                 m_jit.add32(Imm32(imm1), result.gpr());
    3268             } else
    3269                 speculationCheck(Overflow, JSValueRegs(), 0, m_jit.branchAdd32(MacroAssembler::Overflow, op2.gpr(), Imm32(imm1), result.gpr()));
    3270 
    3271             int32Result(result.gpr(), node);
    3272             return;
    3273         }
    3274        
     3259
    32753260        if (node->child2()->isInt32Constant()) {
    32763261            SpeculateInt32Operand op1(this, node->child1());
    32773262            int32_t imm2 = node->child2()->asInt32();
     3263
     3264            if (!shouldCheckOverflow(node->arithMode())) {
     3265                GPRTemporary result(this, Reuse, op1);
     3266                m_jit.add32(Imm32(imm2), op1.gpr(), result.gpr());
     3267                int32Result(result.gpr(), node);
     3268                return;
     3269            }
     3270
    32783271            GPRTemporary result(this);
    3279                
    3280             if (!shouldCheckOverflow(node->arithMode())) {
    3281                 m_jit.move(op1.gpr(), result.gpr());
    3282                 m_jit.add32(Imm32(imm2), result.gpr());
    3283             } else
    3284                 speculationCheck(Overflow, JSValueRegs(), 0, m_jit.branchAdd32(MacroAssembler::Overflow, op1.gpr(), Imm32(imm2), result.gpr()));
     3272            speculationCheck(Overflow, JSValueRegs(), 0, m_jit.branchAdd32(MacroAssembler::Overflow, op1.gpr(), Imm32(imm2), result.gpr()));
    32853273
    32863274            int32Result(result.gpr(), node);
     
    32963284        GPRReg gprResult = result.gpr();
    32973285
    3298         if (!shouldCheckOverflow(node->arithMode())) {
    3299             if (gpr1 == gprResult)
    3300                 m_jit.add32(gpr2, gprResult);
    3301             else {
    3302                 m_jit.move(gpr2, gprResult);
    3303                 m_jit.add32(gpr1, gprResult);
    3304             }
    3305         } else {
     3286        if (!shouldCheckOverflow(node->arithMode()))
     3287            m_jit.add32(gpr1, gpr2, gprResult);
     3288        else {
    33063289            MacroAssembler::Jump check = m_jit.branchAdd32(MacroAssembler::Overflow, gpr1, gpr2, gprResult);
    33073290               
     
    33303313            SpeculateWhicheverInt52Operand op2(this, node->child2(), op1);
    33313314            GPRTemporary result(this, Reuse, op1);
    3332             m_jit.move(op1.gpr(), result.gpr());
    3333             m_jit.add64(op2.gpr(), result.gpr());
     3315            m_jit.add64(op1.gpr(), op2.gpr(), result.gpr());
    33343316            int52Result(result.gpr(), node, op1.format());
    33353317            return;
  • trunk/Source/JavaScriptCore/jit/CCallHelpers.h

    r196368 r197653  
    21582158            // The new frame pointer is at framePointer + oldFrameSize - newFrameSize
    21592159            ASSERT(newFramePointer != oldFrameSizeGPR);
    2160             move(framePointerRegister, newFramePointer);
    2161             addPtr(oldFrameSizeGPR, newFramePointer);
     2160            addPtr(framePointerRegister, oldFrameSizeGPR, newFramePointer);
    21622161
    21632162            // The new frame size is just the number of arguments plus the
  • trunk/Source/JavaScriptCore/yarr/YarrJIT.cpp

    r197426 r197653  
    16271627                        inputOffset -= term->parentheses.disjunction->m_minimumSize;
    16281628                    if (inputOffset) {
    1629                         move(index, indexTemporary);
    1630                         add32(Imm32(inputOffset), indexTemporary);
     1629                        add32(Imm32(inputOffset), index, indexTemporary);
    16311630                        setSubpatternStart(indexTemporary, term->parentheses.subpatternId);
    16321631                    } else
     
    16581657                    int inputOffset = term->inputPosition - m_checked;
    16591658                    if (inputOffset) {
    1660                         move(index, indexTemporary);
    1661                         add32(Imm32(inputOffset), indexTemporary);
     1659                        add32(Imm32(inputOffset), index, indexTemporary);
    16621660                        setSubpatternEnd(indexTemporary, term->parentheses.subpatternId);
    16631661                    } else
Note: See TracChangeset for help on using the changeset viewer.