Changeset 198024 in webkit
- Timestamp:
- Mar 11, 2016 9:51:00 AM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 1 deleted
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r198023 r198024 1 2016-03-11 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r197994. 4 https://bugs.webkit.org/show_bug.cgi?id=155368 5 6 Broke several ARM tests (Requested by msaboff on #webkit). 7 8 Reverted changeset: 9 10 "[JSC] Add register reuse for ArithAdd of an Int32 and 11 constant in DFG" 12 https://bugs.webkit.org/show_bug.cgi?id=155164 13 http://trac.webkit.org/changeset/197994 14 1 15 2016-03-11 Yusuke Suzuki <utatane.tea@gmail.com> 2 16 -
trunk/Source/JavaScriptCore/dfg/DFGOSRExit.h
r197994 r198024 49 49 // This enum describes the types of additional recovery that 50 50 // may need be performed should a speculation check fail. 51 enum SpeculationRecoveryType : uint8_t{51 enum SpeculationRecoveryType { 52 52 SpeculativeAdd, 53 SpeculativeAddImmediate,54 53 BooleanSpeculationCheck 55 54 }; … … 62 61 public: 63 62 SpeculationRecovery(SpeculationRecoveryType type, GPRReg dest, GPRReg src) 64 : m_ src(src)63 : m_type(type) 65 64 , m_dest(dest) 66 , m_type(type) 67 { 68 } 69 70 SpeculationRecovery(SpeculationRecoveryType type, GPRReg dest, int32_t immediate) 71 : m_immediate(immediate) 72 , m_dest(dest) 73 , m_type(type) 65 , m_src(src) 74 66 { 75 67 } … … 78 70 GPRReg dest() { return m_dest; } 79 71 GPRReg src() { return m_src; } 80 int32_t immediate() { return m_immediate; }81 72 82 73 private: 83 // different recovery types may required different additional information here.84 union {85 GPRReg m_src;86 int32_t m_immediate;87 };88 GPRReg m_dest;89 90 74 // Indicates the type of additional recovery to be performed. 91 75 SpeculationRecoveryType m_type; 76 // different recovery types may required different additional information here. 77 GPRReg m_dest; 78 GPRReg m_src; 92 79 }; 93 80 -
trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompiler32_64.cpp
r197994 r198024 56 56 case SpeculativeAdd: 57 57 m_jit.sub32(recovery->src(), recovery->dest()); 58 break;59 60 case SpeculativeAddImmediate:61 m_jit.sub32(AssemblyHelpers::Imm32(recovery->immediate()), recovery->dest());62 58 break; 63 59 -
trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompiler64.cpp
r197994 r198024 62 62 m_jit.or64(GPRInfo::tagTypeNumberRegister, recovery->dest()); 63 63 break; 64 65 case SpeculativeAddImmediate:66 m_jit.sub32(AssemblyHelpers::Imm32(recovery->immediate()), recovery->dest());67 m_jit.or64(GPRInfo::tagTypeNumberRegister, recovery->dest());68 break;69 64 70 65 case BooleanSpeculationCheck: -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r197994 r198024 3257 3257 if (node->child2()->isInt32Constant()) { 3258 3258 SpeculateInt32Operand op1(this, node->child1()); 3259 GPRTemporary result(this, Reuse, op1);3260 3261 GPRReg gpr1 = op1.gpr();3262 3259 int32_t imm2 = node->child2()->asInt32(); 3263 GPRReg gprResult = result.gpr();3264 3260 3265 3261 if (!shouldCheckOverflow(node->arithMode())) { 3266 m_jit.add32(Imm32(imm2), gpr1, gprResult); 3267 int32Result(gprResult, node); 3262 GPRTemporary result(this, Reuse, op1); 3263 m_jit.add32(Imm32(imm2), op1.gpr(), result.gpr()); 3264 int32Result(result.gpr(), node); 3268 3265 return; 3269 3266 } 3270 3267 3271 MacroAssembler::Jump check = m_jit.branchAdd32(MacroAssembler::Overflow, gpr1, Imm32(imm2), gprResult); 3272 if (gpr1 == gprResult) { 3273 speculationCheck(Overflow, JSValueRegs(), 0, check, 3274 SpeculationRecovery(SpeculativeAddImmediate, gpr1, imm2)); 3275 } else 3276 speculationCheck(Overflow, JSValueRegs(), 0, check); 3277 3278 int32Result(gprResult, node); 3268 GPRTemporary result(this); 3269 speculationCheck(Overflow, JSValueRegs(), 0, m_jit.branchAdd32(MacroAssembler::Overflow, op1.gpr(), Imm32(imm2), result.gpr())); 3270 3271 int32Result(result.gpr(), node); 3279 3272 return; 3280 3273 }
Note: See TracChangeset
for help on using the changeset viewer.