void AssemblyHelpers::jitAssertIsJSDouble(GPRReg gpr) { Jump checkJSInt32 = branch64(AboveOrEqual, gpr, GPRInfo::tagTypeNumberRegister); Jump checkJSNumber = branchTest64(MacroAssembler::NonZero, gpr, GPRInfo::tagTypeNumberRegister); checkJSInt32.link(this); abortWithReason(AHIsNotJSDouble); checkJSNumber.link(this); }
AssemblyHelpers::Jump AssemblyHelpers::emitExceptionCheck(ExceptionCheckKind kind) { callExceptionFuzz(); #if USE(JSVALUE64) return branchTest64(kind == NormalExceptionCheck ? NonZero : Zero, AbsoluteAddress(vm()->addressOfException())); #elif USE(JSVALUE32_64) return branch32(kind == NormalExceptionCheck ? NotEqual : Equal, AbsoluteAddress(reinterpret_cast<char*>(vm()->addressOfException()) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), TrustedImm32(JSValue::EmptyValueTag)); #endif }
void AssemblyHelpers::jitAssertNoException() { Jump noException; #if USE(JSVALUE64) noException = branchTest64(Zero, AbsoluteAddress(vm()->addressOfException())); #elif USE(JSVALUE32_64) noException = branch32(Equal, AbsoluteAddress(vm()->addressOfException()), TrustedImm32(0)); #endif abortWithReason(JITUncoughtExceptionAfterCall); noException.link(this); }
AssemblyHelpers::Jump AssemblyHelpers::emitNonPatchableExceptionCheck() { callExceptionFuzz(); Jump result; #if USE(JSVALUE64) result = branchTest64(NonZero, AbsoluteAddress(vm()->addressOfException())); #elif USE(JSVALUE32_64) result = branch32(NotEqual, AbsoluteAddress(vm()->addressOfException()), TrustedImm32(0)); #endif return result; }
AssemblyHelpers::Jump AssemblyHelpers::emitExceptionCheck(ExceptionCheckKind kind, ExceptionJumpWidth width) { callExceptionFuzz(); if (width == FarJumpWidth) kind = (kind == NormalExceptionCheck ? InvertedExceptionCheck : NormalExceptionCheck); Jump result; #if USE(JSVALUE64) result = branchTest64(kind == NormalExceptionCheck ? NonZero : Zero, AbsoluteAddress(vm()->addressOfException())); #elif USE(JSVALUE32_64) result = branch32(kind == NormalExceptionCheck ? NotEqual : Equal, AbsoluteAddress(vm()->addressOfException()), TrustedImm32(0)); #endif if (width == NormalJumpWidth) return result; PatchableJump realJump = patchableJump(); result.link(this); return realJump.m_jump; }
void AssemblyHelpers::jitAssertIsCell(GPRReg gpr) { Jump checkCell = branchTest64(MacroAssembler::Zero, gpr, GPRInfo::tagMaskRegister); abortWithReason(AHIsNotCell); checkCell.link(this); }