Changeset 39738 in webkit for trunk/JavaScriptCore/jit/JITInlineMethods.h
- Timestamp:
- Jan 9, 2009, 12:11:00 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITInlineMethods.h
r39670 r39738 129 129 } 130 130 131 ALWAYS_INLINE bool JIT::isOperandConstant31BitImmediateInt(unsigned src)132 {133 if (!m_codeBlock->isConstantRegisterIndex(src))134 return false;135 136 JSValuePtr value = getConstantOperand(src);137 138 #if USE(ALTERNATE_JSIMMEDIATE)139 if (!JSImmediate::isNumber(value))140 return false;141 142 int32_t imm = JSImmediate::intValue(value);143 return (imm == ((imm << 1) >> 1));144 #else145 return JSImmediate::isNumber(value);146 #endif147 }148 149 131 // get arg puts an arg from the SF register array onto the stack, as an arg to a context threaded function. 150 132 ALWAYS_INLINE void JIT::emitPutJITStubArgFromVirtualRegister(unsigned src, unsigned argumentNumber, RegisterID scratch) … … 282 264 ALWAYS_INLINE JIT::Jump JIT::emitJumpIfJSCell(RegisterID reg) 283 265 { 266 #if USE(ALTERNATE_JSIMMEDIATE) 267 return jzPtr(reg, ImmPtr(reinterpret_cast<void*>(JSImmediate::TagMask))); 268 #else 284 269 return jz32(reg, Imm32(JSImmediate::TagMask)); 270 #endif 285 271 } 286 272 … … 292 278 ALWAYS_INLINE JIT::Jump JIT::emitJumpIfNotJSCell(RegisterID reg) 293 279 { 280 #if USE(ALTERNATE_JSIMMEDIATE) 281 return jnzPtr(reg, ImmPtr(reinterpret_cast<void*>(JSImmediate::TagMask))); 282 #else 294 283 return jnz32(reg, Imm32(JSImmediate::TagMask)); 284 #endif 295 285 } 296 286 … … 312 302 } 313 303 304 ALWAYS_INLINE JIT::Jump JIT::emitJumpIfImmNum(RegisterID reg) 305 { 306 #if USE(ALTERNATE_JSIMMEDIATE) 307 return jaePtr(reg, ImmPtr(reinterpret_cast<void*>(JSImmediate::TagTypeInteger))); 308 #else 309 return jnz32(reg, Imm32(JSImmediate::TagTypeInteger)); 310 #endif 311 } 312 314 313 ALWAYS_INLINE void JIT::emitJumpSlowCaseIfNotImmNum(RegisterID reg) 315 314 { 316 addSlowCase(jz32(reg, Imm32(JSImmediate::TagBitTypeInteger))); 315 #if USE(ALTERNATE_JSIMMEDIATE) 316 addSlowCase(jbPtr(reg, ImmPtr(reinterpret_cast<void*>(JSImmediate::TagTypeInteger)))); 317 #else 318 addSlowCase(jz32(reg, Imm32(JSImmediate::TagTypeInteger))); 319 #endif 317 320 } 318 321 … … 320 323 { 321 324 move(reg1, scratch); 322 and 32(reg2, scratch);325 andPtr(reg2, scratch); 323 326 emitJumpSlowCaseIfNotImmNum(scratch); 324 327 } 325 328 329 #if !USE(ALTERNATE_JSIMMEDIATE) 326 330 ALWAYS_INLINE void JIT::emitFastArithDeTagImmediate(RegisterID reg) 327 331 { 328 subPtr(Imm32(JSImmediate::Tag BitTypeInteger), reg);332 subPtr(Imm32(JSImmediate::TagTypeInteger), reg); 329 333 } 330 334 331 335 ALWAYS_INLINE JIT::Jump JIT::emitFastArithDeTagImmediateJumpIfZero(RegisterID reg) 332 336 { 333 return jzSubPtr(Imm32(JSImmediate::TagBitTypeInteger), reg); 334 } 335 336 ALWAYS_INLINE void JIT::emitFastArithReTagImmediate(RegisterID reg) 337 { 338 addPtr(Imm32(JSImmediate::TagBitTypeInteger), reg); 337 return jzSubPtr(Imm32(JSImmediate::TagTypeInteger), reg); 338 } 339 #endif 340 341 ALWAYS_INLINE void JIT::emitFastArithReTagImmediate(RegisterID src, RegisterID dest) 342 { 343 #if USE(ALTERNATE_JSIMMEDIATE) 344 emitFastArithIntToImmNoCheck(src, dest); 345 #else 346 if (src != dest) 347 move(src, dest); 348 addPtr(Imm32(JSImmediate::TagTypeInteger), dest); 349 #endif 339 350 } 340 351 341 352 ALWAYS_INLINE void JIT::emitFastArithImmToInt(RegisterID reg) 342 353 { 354 #if USE(ALTERNATE_JSIMMEDIATE) 355 UNUSED_PARAM(reg); 356 #else 343 357 rshiftPtr(Imm32(JSImmediate::IntegerPayloadShift), reg); 344 } 345 346 ALWAYS_INLINE void JIT::emitFastArithIntToImmNoCheck(RegisterID reg) 347 { 348 signExtend32ToPtr(reg, reg); 349 addPtr(reg, reg); 350 emitFastArithReTagImmediate(reg); 358 #endif 359 } 360 361 // operand is int32_t, must have been zero-extended if register is 64-bit. 362 ALWAYS_INLINE void JIT::emitFastArithIntToImmNoCheck(RegisterID src, RegisterID dest) 363 { 364 #if USE(ALTERNATE_JSIMMEDIATE) 365 if (src != dest) 366 move(src, dest); 367 orPtr(ImmPtr(reinterpret_cast<void*>(JSImmediate::TagTypeInteger)), dest); 368 #else 369 signExtend32ToPtr(src, dest); 370 addPtr(dest, dest); 371 emitFastArithReTagImmediate(dest, dest); 372 #endif 351 373 } 352 374 … … 354 376 { 355 377 lshift32(Imm32(JSImmediate::ExtendedPayloadShift), reg); 356 or32(Imm32( JSImmediate::FullTagTypeBool), reg);378 or32(Imm32(static_cast<int32_t>(JSImmediate::FullTagTypeBool)), reg); 357 379 } 358 380
Note:
See TracChangeset
for help on using the changeset viewer.