Changeset 39540 in webkit for trunk/JavaScriptCore/jit/JITInlineMethods.h
- Timestamp:
- Jan 1, 2009, 7:06:10 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITInlineMethods.h
r39428 r39540 42 42 namespace JSC { 43 43 44 static ALWAYS_INLINE uintptr_t asInteger(JSValue* value)45 {46 return reinterpret_cast<uintptr_t>(value);47 }48 49 44 ALWAYS_INLINE void JIT::killLastResultRegister() 50 45 { … … 127 122 } 128 123 124 ALWAYS_INLINE JSValue* JIT::getConstantOperand(unsigned src) 125 { 126 ASSERT(m_codeBlock->isConstantRegisterIndex(src)); 127 return m_codeBlock->getConstant(src); 128 } 129 130 ALWAYS_INLINE int32_t JIT::getConstantOperandImmediateInt(unsigned src) 131 { 132 return static_cast<int32_t>(JSImmediate::intValue(getConstantOperand(src))); 133 } 134 135 ALWAYS_INLINE bool JIT::isOperandConstantImmediateInt(unsigned src) 136 { 137 return m_codeBlock->isConstantRegisterIndex(src) && JSImmediate::isNumber(getConstantOperand(src)); 138 } 139 140 ALWAYS_INLINE bool JIT::isOperandConstant31BitImmediateInt(unsigned src) 141 { 142 if (!m_codeBlock->isConstantRegisterIndex(src)) 143 return false; 144 145 JSValue* value = getConstantOperand(src); 146 147 #if USE(ALTERNATE_JSIMMEDIATE) 148 if (!JSImmediate::isNumber(value)) 149 return false; 150 151 int32_t imm = JSImmediate::intValue(value); 152 return (imm == ((imm << 1) >> 1)); 153 #else 154 return JSImmediate::isNumber(value); 155 #endif 156 } 157 129 158 // get arg puts an arg from the SF register array onto the stack, as an arg to a context threaded function. 130 159 ALWAYS_INLINE void JIT::emitPutJITStubArgFromVirtualRegister(unsigned src, unsigned argumentNumber, RegisterID scratch) … … 304 333 } 305 334 306 ALWAYS_INLINE unsigned JIT::getDeTaggedConstantImmediate(JSValue* imm)307 {308 ASSERT(JSImmediate::isNumber(imm));309 return asInteger(imm) & ~JSImmediate::TagBitTypeInteger;310 }311 312 335 ALWAYS_INLINE void JIT::emitFastArithDeTagImmediate(RegisterID reg) 313 336 { 314 sub 32(Imm32(JSImmediate::TagBitTypeInteger), reg);337 subPtr(Imm32(JSImmediate::TagBitTypeInteger), reg); 315 338 } 316 339 317 340 ALWAYS_INLINE JIT::Jump JIT::emitFastArithDeTagImmediateJumpIfZero(RegisterID reg) 318 341 { 319 return jzSub 32(Imm32(JSImmediate::TagBitTypeInteger), reg);342 return jzSubPtr(Imm32(JSImmediate::TagBitTypeInteger), reg); 320 343 } 321 344 322 345 ALWAYS_INLINE void JIT::emitFastArithReTagImmediate(RegisterID reg) 323 346 { 324 add32(Imm32(JSImmediate::TagBitTypeInteger), reg); 347 addPtr(Imm32(JSImmediate::TagBitTypeInteger), reg); 348 } 349 350 ALWAYS_INLINE void JIT::emitFastArithImmToInt(RegisterID reg) 351 { 352 rshiftPtr(Imm32(JSImmediate::IntegerPayloadShift), reg); 353 } 354 355 ALWAYS_INLINE void JIT::emitFastArithIntToImmNoCheck(RegisterID reg) 356 { 325 357 signExtend32ToPtr(reg, reg); 326 } 327 328 ALWAYS_INLINE void JIT::emitFastArithPotentiallyReTagImmediate(RegisterID reg) 329 { 330 or32(Imm32(JSImmediate::TagBitTypeInteger), reg); 331 signExtend32ToPtr(reg, reg); 332 } 333 334 ALWAYS_INLINE void JIT::emitFastArithImmToInt(RegisterID reg) 335 { 336 rshift32(Imm32(JSImmediate::IntegerPayloadShift), reg); 337 } 338 339 ALWAYS_INLINE void JIT::emitFastArithIntToImmOrSlowCase(RegisterID reg) 340 { 341 addSlowCase(joAdd32(reg, reg)); 342 emitFastArithReTagImmediate(reg); 343 } 344 345 ALWAYS_INLINE void JIT::emitFastArithIntToImmNoCheck(RegisterID reg) 346 { 347 add32(reg, reg); 358 addPtr(reg, reg); 348 359 emitFastArithReTagImmediate(reg); 349 360 }
Note:
See TracChangeset
for help on using the changeset viewer.