Changeset 197653 in webkit
- Timestamp:
- Mar 6, 2016, 6:42:43 PM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 6 edited
-
ChangeLog (modified) (1 diff)
-
assembler/MacroAssembler.h (modified) (3 diffs)
-
assembler/MacroAssemblerARMv7.h (modified) (1 diff)
-
dfg/DFGSpeculativeJIT.cpp (modified) (3 diffs)
-
jit/CCallHelpers.h (modified) (1 diff)
-
yarr/YarrJIT.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r197652 r197653 1 2016-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 1 26 2016-03-06 Benjamin Poulain <bpoulain@apple.com> 2 27 -
trunk/Source/JavaScriptCore/assembler/MacroAssembler.h
r197652 r197653 522 522 } 523 523 524 void addPtr(RegisterID left, RegisterID right, RegisterID dest) 525 { 526 add32(left, right, dest); 527 } 528 524 529 void addPtr(TrustedImm32 imm, RegisterID srcDest) 525 530 { … … 793 798 { 794 799 add64(src, dest); 800 } 801 802 void addPtr(RegisterID left, RegisterID right, RegisterID dest) 803 { 804 add64(left, right, dest); 795 805 } 796 806 … … 1457 1467 } else 1458 1468 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); 1459 1479 } 1460 1480 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h
r197652 r197653 156 156 } 157 157 158 void add32(RegisterID left, RegisterID right, RegisterID dest) 159 { 160 m_assembler.add(dest, left, right); 161 } 162 158 163 void add32(TrustedImm32 imm, RegisterID dest) 159 164 { -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r197652 r197653 3257 3257 case Int32Use: { 3258 3258 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 3275 3260 if (node->child2()->isInt32Constant()) { 3276 3261 SpeculateInt32Operand op1(this, node->child1()); 3277 3262 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 3278 3271 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())); 3285 3273 3286 3274 int32Result(result.gpr(), node); … … 3296 3284 GPRReg gprResult = result.gpr(); 3297 3285 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 { 3306 3289 MacroAssembler::Jump check = m_jit.branchAdd32(MacroAssembler::Overflow, gpr1, gpr2, gprResult); 3307 3290 … … 3330 3313 SpeculateWhicheverInt52Operand op2(this, node->child2(), op1); 3331 3314 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()); 3334 3316 int52Result(result.gpr(), node, op1.format()); 3335 3317 return; -
trunk/Source/JavaScriptCore/jit/CCallHelpers.h
r196368 r197653 2158 2158 // The new frame pointer is at framePointer + oldFrameSize - newFrameSize 2159 2159 ASSERT(newFramePointer != oldFrameSizeGPR); 2160 move(framePointerRegister, newFramePointer); 2161 addPtr(oldFrameSizeGPR, newFramePointer); 2160 addPtr(framePointerRegister, oldFrameSizeGPR, newFramePointer); 2162 2161 2163 2162 // The new frame size is just the number of arguments plus the -
trunk/Source/JavaScriptCore/yarr/YarrJIT.cpp
r197426 r197653 1627 1627 inputOffset -= term->parentheses.disjunction->m_minimumSize; 1628 1628 if (inputOffset) { 1629 move(index, indexTemporary); 1630 add32(Imm32(inputOffset), indexTemporary); 1629 add32(Imm32(inputOffset), index, indexTemporary); 1631 1630 setSubpatternStart(indexTemporary, term->parentheses.subpatternId); 1632 1631 } else … … 1658 1657 int inputOffset = term->inputPosition - m_checked; 1659 1658 if (inputOffset) { 1660 move(index, indexTemporary); 1661 add32(Imm32(inputOffset), indexTemporary); 1659 add32(Imm32(inputOffset), index, indexTemporary); 1662 1660 setSubpatternEnd(indexTemporary, term->parentheses.subpatternId); 1663 1661 } else
Note:
See TracChangeset
for help on using the changeset viewer.