Ignore:
Timestamp:
Feb 3, 2009, 6:02:32 PM (16 years ago)
Author:
[email protected]
Message:

2009-02-03 Gavin Barraclough <[email protected]>

Reviewed by Geoff Garen.

https://bugs.webkit.org/show_bug.cgi?id=23715

Simplify MacroAssembler interface, by combining comparison methods.
Seprate operations are combined as follows:

jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr,
j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr
j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr
set*32 -> set32

Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3),
instead of as multiplicands (1,2,4,8).

This patch singificantly reduces replication of code, and increases functionality supported
by the MacroAssembler. No performance impact.

  • assembler/MacroAssembler.h: (JSC::MacroAssembler::): (JSC::MacroAssembler::branchPtr): (JSC::MacroAssembler::branchPtrWithPatch): (JSC::MacroAssembler::branch32): (JSC::MacroAssembler::branch16): (JSC::MacroAssembler::branchTestPtr): (JSC::MacroAssembler::branchTest32): (JSC::MacroAssembler::branchAddPtr): (JSC::MacroAssembler::branchAdd32): (JSC::MacroAssembler::branchMul32): (JSC::MacroAssembler::branchSubPtr): (JSC::MacroAssembler::branchSub32): (JSC::MacroAssembler::set32): (JSC::MacroAssembler::setTest32):
  • assembler/X86Assembler.h: (JSC::X86Assembler::): (JSC::X86Assembler::jccRel32): (JSC::X86Assembler::setccOpcode): (JSC::X86Assembler::cmpq_mr): (JSC::X86Assembler::setcc_r): (JSC::X86Assembler::sete_r): (JSC::X86Assembler::setne_r): (JSC::X86Assembler::jne): (JSC::X86Assembler::je): (JSC::X86Assembler::jl): (JSC::X86Assembler::jb): (JSC::X86Assembler::jle): (JSC::X86Assembler::jbe): (JSC::X86Assembler::jge): (JSC::X86Assembler::jg): (JSC::X86Assembler::ja): (JSC::X86Assembler::jae): (JSC::X86Assembler::jo): (JSC::X86Assembler::jp): (JSC::X86Assembler::js): (JSC::X86Assembler::jcc): (JSC::X86Assembler::X86InstructionFormatter::putModRmSib):
  • jit/JIT.cpp: (JSC::JIT::compileOpStrictEq): (JSC::JIT::emitSlowScriptCheck): (JSC::JIT::privateCompileMainPass): (JSC::JIT::privateCompileSlowCases): (JSC::JIT::privateCompile): (JSC::JIT::privateCompileCTIMachineTrampolines):
  • jit/JITArithmetic.cpp: (JSC::JIT::compileFastArith_op_lshift): (JSC::JIT::compileFastArith_op_mod): (JSC::JIT::compileFastArith_op_post_inc): (JSC::JIT::compileFastArith_op_post_dec): (JSC::JIT::compileFastArith_op_pre_inc): (JSC::JIT::compileFastArith_op_pre_dec): (JSC::JIT::compileBinaryArithOp): (JSC::JIT::compileFastArith_op_add): (JSC::JIT::compileFastArith_op_mul):
  • jit/JITCall.cpp: (JSC::JIT::compileOpCall): (JSC::JIT::compileOpCallSlowCase):
  • jit/JITInlineMethods.h: (JSC::JIT::checkStructure): (JSC::JIT::emitJumpIfJSCell): (JSC::JIT::emitJumpIfNotJSCell): (JSC::JIT::emitJumpIfImmediateNumber): (JSC::JIT::emitJumpIfNotImmediateNumber): (JSC::JIT::emitJumpIfImmediateInteger): (JSC::JIT::emitJumpIfNotImmediateInteger): (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
  • jit/JITPropertyAccess.cpp: (JSC::JIT::compileGetByIdHotPath): (JSC::JIT::compilePutByIdHotPath): (JSC::JIT::privateCompilePutByIdTransition): (JSC::JIT::privateCompilePatchGetArrayLength): (JSC::JIT::privateCompileGetByIdProto): (JSC::JIT::privateCompileGetByIdProtoList): (JSC::JIT::privateCompileGetByIdChainList): (JSC::JIT::privateCompileGetByIdChain):
  • runtime/RegExp.cpp: (JSC::RegExp::match):
  • wrec/WRECGenerator.cpp: (JSC::WREC::Generator::generateEnter): (JSC::WREC::Generator::generateIncrementIndex): (JSC::WREC::Generator::generateLoadCharacter): (JSC::WREC::Generator::generateJumpIfNotEndOfInput): (JSC::WREC::Generator::generateBackreferenceQuantifier): (JSC::WREC::Generator::generateNonGreedyQuantifier): (JSC::WREC::Generator::generateGreedyQuantifier): (JSC::WREC::Generator::generatePatternCharacterPair): (JSC::WREC::Generator::generatePatternCharacter): (JSC::WREC::Generator::generateCharacterClassInvertedRange): (JSC::WREC::Generator::generateCharacterClassInverted): (JSC::WREC::Generator::generateAssertionBOL): (JSC::WREC::Generator::generateAssertionEOL): (JSC::WREC::Generator::generateAssertionWordBoundary): (JSC::WREC::Generator::generateBackreference):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/jit/JITArithmetic.cpp

    r40004 r40562  
    6262    lshift32(X86::ecx, X86::eax);
    6363#if !USE(ALTERNATE_JSIMMEDIATE)
    64     addSlowCase(joAdd32(X86::eax, X86::eax));
     64    addSlowCase(branchAdd32(Overflow, X86::eax, X86::eax));
    6565    signExtend32ToPtr(X86::eax, X86::eax);
    6666#endif
     
    193193    emitJumpSlowCaseIfNotImmediateInteger(X86::ecx);
    194194#if USE(ALTERNATE_JSIMMEDIATE)
    195     addSlowCase(jePtr(X86::ecx, ImmPtr(JSValuePtr::encode(js0()))));
     195    addSlowCase(branchPtr(Equal, X86::ecx, ImmPtr(JSValuePtr::encode(js0()))));
    196196    mod32(X86::ecx, X86::eax, X86::edx);
    197197#else
     
    231231    emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    232232#if USE(ALTERNATE_JSIMMEDIATE)
    233     addSlowCase(joAdd32(Imm32(1), X86::edx));
     233    addSlowCase(branchAdd32(Overflow, Imm32(1), X86::edx));
    234234    emitFastArithIntToImmNoCheck(X86::edx, X86::edx);
    235235#else
    236     addSlowCase(joAdd32(Imm32(1 << JSImmediate::IntegerPayloadShift), X86::edx));
     236    addSlowCase(branchAdd32(Overflow, Imm32(1 << JSImmediate::IntegerPayloadShift), X86::edx));
    237237    signExtend32ToPtr(X86::edx, X86::edx);
    238238#endif
     
    256256    emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    257257#if USE(ALTERNATE_JSIMMEDIATE)
    258     addSlowCase(joSub32(Imm32(1), X86::edx));
     258    addSlowCase(branchSub32(Zero, Imm32(1), X86::edx));
    259259    emitFastArithIntToImmNoCheck(X86::edx, X86::edx);
    260260#else
    261     addSlowCase(joSub32(Imm32(1 << JSImmediate::IntegerPayloadShift), X86::edx));
     261    addSlowCase(branchSub32(Zero, Imm32(1 << JSImmediate::IntegerPayloadShift), X86::edx));
    262262    signExtend32ToPtr(X86::edx, X86::edx);
    263263#endif
     
    280280    emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    281281#if USE(ALTERNATE_JSIMMEDIATE)
    282     addSlowCase(joAdd32(Imm32(1), X86::eax));
     282    addSlowCase(branchAdd32(Overflow, Imm32(1), X86::eax));
    283283    emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
    284284#else
    285     addSlowCase(joAdd32(Imm32(1 << JSImmediate::IntegerPayloadShift), X86::eax));
     285    addSlowCase(branchAdd32(Overflow, Imm32(1 << JSImmediate::IntegerPayloadShift), X86::eax));
    286286    signExtend32ToPtr(X86::eax, X86::eax);
    287287#endif
     
    304304    emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    305305#if USE(ALTERNATE_JSIMMEDIATE)
    306     addSlowCase(joSub32(Imm32(1), X86::eax));
     306    addSlowCase(branchSub32(Zero, Imm32(1), X86::eax));
    307307    emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
    308308#else
    309     addSlowCase(joSub32(Imm32(1 << JSImmediate::IntegerPayloadShift), X86::eax));
     309    addSlowCase(branchSub32(Zero, Imm32(1 << JSImmediate::IntegerPayloadShift), X86::eax));
    310310    signExtend32ToPtr(X86::eax, X86::eax);
    311311#endif
     
    382382    emitJumpSlowCaseIfNotImmediateInteger(X86::edx);
    383383    if (opcodeID == op_add)
    384         addSlowCase(joAdd32(X86::edx, X86::eax));
     384        addSlowCase(branchAdd32(Overflow, X86::edx, X86::eax));
    385385    else if (opcodeID == op_sub)
    386         addSlowCase(joSub32(X86::edx, X86::eax));
     386        addSlowCase(branchSub32(Zero, X86::edx, X86::eax));
    387387    else {
    388388        ASSERT(opcodeID == op_mul);
    389         addSlowCase(joMul32(X86::edx, X86::eax));
    390         addSlowCase(jz32(X86::eax));
     389        addSlowCase(branchMul32(Overflow, X86::edx, X86::eax));
     390        addSlowCase(branchTest32(Zero, X86::eax));
    391391    }
    392392    emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
     
    473473        emitGetVirtualRegister(op2, X86::eax);
    474474        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    475         addSlowCase(joAdd32(Imm32(getConstantOperandImmediateInt(op1)), X86::eax));
     475        addSlowCase(branchAdd32(Overflow, Imm32(getConstantOperandImmediateInt(op1)), X86::eax));
    476476        emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
    477477    } else if (isOperandConstantImmediateInt(op2)) {
    478478        emitGetVirtualRegister(op1, X86::eax);
    479479        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    480         addSlowCase(joAdd32(Imm32(getConstantOperandImmediateInt(op2)), X86::eax));
     480        addSlowCase(branchAdd32(Overflow, Imm32(getConstantOperandImmediateInt(op2)), X86::eax));
    481481        emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
    482482    } else
     
    522522        emitGetVirtualRegister(op2, X86::eax);
    523523        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    524         addSlowCase(joMul32(Imm32(value), X86::eax, X86::eax));
     524        addSlowCase(branchMul32(Overflow, Imm32(value), X86::eax, X86::eax));
    525525        emitFastArithReTagImmediate(X86::eax, X86::eax);
    526526    } else if (isOperandConstantImmediateInt(op2) && ((value = getConstantOperandImmediateInt(op2)) > 0)) {
    527527        emitGetVirtualRegister(op1, X86::eax);
    528528        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    529         addSlowCase(joMul32(Imm32(value), X86::eax, X86::eax));
     529        addSlowCase(branchMul32(Overflow, Imm32(value), X86::eax, X86::eax));
    530530        emitFastArithReTagImmediate(X86::eax, X86::eax);
    531531    } else
     
    861861        emitGetVirtualRegister(op2, X86::eax);
    862862        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    863         addSlowCase(joAdd32(Imm32(getConstantOperandImmediateInt(op1) << JSImmediate::IntegerPayloadShift), X86::eax));
     863        addSlowCase(branchAdd32(Overflow, Imm32(getConstantOperandImmediateInt(op1) << JSImmediate::IntegerPayloadShift), X86::eax));
    864864        signExtend32ToPtr(X86::eax, X86::eax);
    865865        emitPutVirtualRegister(result);
     
    867867        emitGetVirtualRegister(op1, X86::eax);
    868868        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    869         addSlowCase(joAdd32(Imm32(getConstantOperandImmediateInt(op2) << JSImmediate::IntegerPayloadShift), X86::eax));
     869        addSlowCase(branchAdd32(Overflow, Imm32(getConstantOperandImmediateInt(op2) << JSImmediate::IntegerPayloadShift), X86::eax));
    870870        signExtend32ToPtr(X86::eax, X86::eax);
    871871        emitPutVirtualRegister(result);
     
    925925        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    926926        emitFastArithDeTagImmediate(X86::eax);
    927         addSlowCase(joMul32(Imm32(value), X86::eax, X86::eax));
     927        addSlowCase(branchMul32(Overflow, Imm32(value), X86::eax, X86::eax));
    928928        signExtend32ToPtr(X86::eax, X86::eax);
    929929        emitFastArithReTagImmediate(X86::eax, X86::eax);
     
    933933        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    934934        emitFastArithDeTagImmediate(X86::eax);
    935         addSlowCase(joMul32(Imm32(value), X86::eax, X86::eax));
     935        addSlowCase(branchMul32(Overflow, Imm32(value), X86::eax, X86::eax));
    936936        signExtend32ToPtr(X86::eax, X86::eax);
    937937        emitFastArithReTagImmediate(X86::eax, X86::eax);
Note: See TracChangeset for help on using the changeset viewer.