Changeset 173222 in webkit for trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
- Timestamp:
- Sep 3, 2014, 1:53:20 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
r168729 r173222 932 932 } 933 933 934 void store8(TrustedImm32 imm, Address address) 935 { 936 ASSERT((imm.m_value >= -128) && (imm.m_value <= 127)); 937 RegisterID dstptr = claimScratch(); 938 move(address.base, dstptr); 939 add32(TrustedImm32(address.offset), dstptr); 940 RegisterID srcval = claimScratch(); 941 move(imm, srcval); 942 m_assembler.movbRegMem(srcval, dstptr); 943 releaseScratch(dstptr); 944 releaseScratch(srcval); 945 } 946 934 947 void store16(RegisterID src, BaseIndex address) 935 948 { … … 1734 1747 } 1735 1748 1749 DataLabel32 moveWithPatch(TrustedImm32 initialValue, RegisterID dest) 1750 { 1751 m_assembler.ensureSpace(m_assembler.maxInstructionSize, sizeof(uint32_t)); 1752 DataLabel32 dataLabel(this); 1753 m_assembler.loadConstantUnReusable(static_cast<uint32_t>(initialValue.m_value), dest); 1754 return dataLabel; 1755 } 1756 1736 1757 void move(RegisterID src, RegisterID dest) 1737 1758 { … … 2141 2162 } 2142 2163 2164 Jump branchAdd32(ResultCondition cond, Address src, RegisterID dest) 2165 { 2166 ASSERT((cond == Overflow) || (cond == Signed) || (cond == PositiveOrZero) || (cond == Zero) || (cond == NonZero)); 2167 2168 if (cond == Overflow) { 2169 RegisterID srcVal = claimScratch(); 2170 load32(src, srcVal); 2171 m_assembler.addvlRegReg(srcVal, dest); 2172 releaseScratch(srcVal); 2173 return branchTrue(); 2174 } 2175 2176 add32(src, dest); 2177 2178 if ((cond == Signed) || (cond == PositiveOrZero)) { 2179 m_assembler.cmppz(dest); 2180 return (cond == Signed) ? branchFalse() : branchTrue(); 2181 } 2182 2183 compare32(0, dest, Equal); 2184 return (cond == NonZero) ? branchFalse() : branchTrue(); 2185 } 2186 2143 2187 Jump branchMul32(ResultCondition cond, RegisterID src, RegisterID dest) 2144 2188 { … … 2420 2464 } 2421 2465 2466 Jump branch32WithPatch(RelationalCondition cond, Address left, DataLabel32& dataLabel, TrustedImm32 initialRightValue = TrustedImm32(0)) 2467 { 2468 RegisterID scr = claimScratch(); 2469 2470 m_assembler.loadConstant(left.offset, scr); 2471 m_assembler.addlRegReg(left.base, scr); 2472 m_assembler.movlMemReg(scr, scr); 2473 RegisterID scr1 = claimScratch(); 2474 m_assembler.ensureSpace(m_assembler.maxInstructionSize + 10, 2 * sizeof(uint32_t)); 2475 dataLabel = moveWithPatch(initialRightValue, scr1); 2476 m_assembler.cmplRegReg(scr1, scr, SH4Condition(cond)); 2477 releaseScratch(scr); 2478 releaseScratch(scr1); 2479 2480 return (cond == NotEqual) ? branchFalse() : branchTrue(); 2481 } 2482 2422 2483 void ret() 2423 2484 { … … 2469 2530 } 2470 2531 2532 void abortWithReason(AbortReason reason) 2533 { 2534 move(TrustedImm32(reason), SH4Registers::r0); 2535 breakpoint(); 2536 } 2537 2538 void abortWithReason(AbortReason reason, intptr_t misc) 2539 { 2540 move(TrustedImm32(misc), SH4Registers::r1); 2541 abortWithReason(reason); 2542 } 2543 2471 2544 static FunctionPtr readCallTarget(CodeLocationCall call) 2472 2545 { … … 2486 2559 static bool canJumpReplacePatchableBranchPtrWithPatch() { return false; } 2487 2560 2561 static bool canJumpReplacePatchableBranch32WithPatch() { return false; } 2562 2488 2563 static CodeLocationLabel startOfBranchPtrWithPatchOnRegister(CodeLocationDataLabelPtr label) 2489 2564 { … … 2502 2577 } 2503 2578 2579 static CodeLocationLabel startOfPatchableBranch32WithPatchOnAddress(CodeLocationDataLabel32) 2580 { 2581 UNREACHABLE_FOR_PLATFORM(); 2582 return CodeLocationLabel(); 2583 } 2584 2504 2585 static void revertJumpReplacementToPatchableBranchPtrWithPatch(CodeLocationLabel, Address, void*) 2586 { 2587 UNREACHABLE_FOR_PLATFORM(); 2588 } 2589 2590 static void revertJumpReplacementToPatchableBranch32WithPatch(CodeLocationLabel, Address, int32_t) 2505 2591 { 2506 2592 UNREACHABLE_FOR_PLATFORM();
Note:
See TracChangeset
for help on using the changeset viewer.