summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/jit/AssemblyHelpers.cpp')
-rw-r--r--Source/JavaScriptCore/jit/AssemblyHelpers.cpp126
1 files changed, 12 insertions, 114 deletions
diff --git a/Source/JavaScriptCore/jit/AssemblyHelpers.cpp b/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
index 09133a8e6..ddf1d6359 100644
--- a/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
+++ b/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011, 2013-2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2011, 2013 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -28,9 +28,6 @@
#if ENABLE(JIT)
-#include "JITOperations.h"
-#include "JSCInlines.h"
-
namespace JSC {
ExecutableBase* AssemblyHelpers::executableFor(const CodeOrigin& codeOrigin)
@@ -55,14 +52,6 @@ Vector<BytecodeAndMachineOffset>& AssemblyHelpers::decodedCodeMapFor(CodeBlock*
return result.iterator->value;
}
-void AssemblyHelpers::purifyNaN(FPRReg fpr)
-{
- MacroAssembler::Jump notNaN = branchDouble(DoubleEqual, fpr, fpr);
- static const double NaN = PNaN;
- loadDouble(TrustedImmPtr(&NaN), fpr);
- notNaN.link(this);
-}
-
#if ENABLE(SAMPLING_FLAGS)
void AssemblyHelpers::setSamplingFlag(int32_t flag)
{
@@ -85,7 +74,7 @@ void AssemblyHelpers::jitAssertIsInt32(GPRReg gpr)
{
#if CPU(X86_64)
Jump checkInt32 = branch64(BelowOrEqual, gpr, TrustedImm64(static_cast<uintptr_t>(0xFFFFFFFFu)));
- abortWithReason(AHIsNotInt32);
+ breakpoint();
checkInt32.link(this);
#else
UNUSED_PARAM(gpr);
@@ -95,14 +84,14 @@ void AssemblyHelpers::jitAssertIsInt32(GPRReg gpr)
void AssemblyHelpers::jitAssertIsJSInt32(GPRReg gpr)
{
Jump checkJSInt32 = branch64(AboveOrEqual, gpr, GPRInfo::tagTypeNumberRegister);
- abortWithReason(AHIsNotJSInt32);
+ breakpoint();
checkJSInt32.link(this);
}
void AssemblyHelpers::jitAssertIsJSNumber(GPRReg gpr)
{
Jump checkJSNumber = branchTest64(MacroAssembler::NonZero, gpr, GPRInfo::tagTypeNumberRegister);
- abortWithReason(AHIsNotJSNumber);
+ breakpoint();
checkJSNumber.link(this);
}
@@ -111,27 +100,15 @@ 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);
+ breakpoint();
checkJSNumber.link(this);
}
void AssemblyHelpers::jitAssertIsCell(GPRReg gpr)
{
Jump checkCell = branchTest64(MacroAssembler::Zero, gpr, GPRInfo::tagMaskRegister);
- abortWithReason(AHIsNotCell);
- checkCell.link(this);
-}
-
-void AssemblyHelpers::jitAssertTagsInPlace()
-{
- Jump ok = branch64(Equal, GPRInfo::tagTypeNumberRegister, TrustedImm64(TagTypeNumber));
- abortWithReason(AHTagTypeNumberNotInPlace);
breakpoint();
- ok.link(this);
-
- ok = branch64(Equal, GPRInfo::tagMaskRegister, TrustedImm64(TagMask));
- abortWithReason(AHTagMaskNotInPlace);
- ok.link(this);
+ checkCell.link(this);
}
#elif USE(JSVALUE32_64)
void AssemblyHelpers::jitAssertIsInt32(GPRReg gpr)
@@ -142,7 +119,7 @@ void AssemblyHelpers::jitAssertIsInt32(GPRReg gpr)
void AssemblyHelpers::jitAssertIsJSInt32(GPRReg gpr)
{
Jump checkJSInt32 = branch32(Equal, gpr, TrustedImm32(JSValue::Int32Tag));
- abortWithReason(AHIsNotJSInt32);
+ breakpoint();
checkJSInt32.link(this);
}
@@ -150,7 +127,7 @@ void AssemblyHelpers::jitAssertIsJSNumber(GPRReg gpr)
{
Jump checkJSInt32 = branch32(Equal, gpr, TrustedImm32(JSValue::Int32Tag));
Jump checkJSDouble = branch32(Below, gpr, TrustedImm32(JSValue::LowestTag));
- abortWithReason(AHIsNotJSNumber);
+ breakpoint();
checkJSInt32.link(this);
checkJSDouble.link(this);
}
@@ -158,112 +135,33 @@ void AssemblyHelpers::jitAssertIsJSNumber(GPRReg gpr)
void AssemblyHelpers::jitAssertIsJSDouble(GPRReg gpr)
{
Jump checkJSDouble = branch32(Below, gpr, TrustedImm32(JSValue::LowestTag));
- abortWithReason(AHIsNotJSDouble);
+ breakpoint();
checkJSDouble.link(this);
}
void AssemblyHelpers::jitAssertIsCell(GPRReg gpr)
{
Jump checkCell = branch32(Equal, gpr, TrustedImm32(JSValue::CellTag));
- abortWithReason(AHIsNotCell);
+ breakpoint();
checkCell.link(this);
}
-
-void AssemblyHelpers::jitAssertTagsInPlace()
-{
-}
#endif // USE(JSVALUE32_64)
void AssemblyHelpers::jitAssertHasValidCallFrame()
{
Jump checkCFR = branchTestPtr(Zero, GPRInfo::callFrameRegister, TrustedImm32(7));
- abortWithReason(AHCallFrameMisaligned);
+ breakpoint();
checkCFR.link(this);
}
void AssemblyHelpers::jitAssertIsNull(GPRReg gpr)
{
Jump checkNull = branchTestPtr(Zero, gpr);
- abortWithReason(AHIsNotNull);
+ breakpoint();
checkNull.link(this);
}
-
-void AssemblyHelpers::jitAssertArgumentCountSane()
-{
- Jump ok = branch32(Below, payloadFor(JSStack::ArgumentCount), TrustedImm32(10000000));
- abortWithReason(AHInsaneArgumentCount);
- ok.link(this);
-}
#endif // !ASSERT_DISABLED
-void AssemblyHelpers::callExceptionFuzz()
-{
- if (!Options::enableExceptionFuzz())
- return;
-
- ASSERT(stackAlignmentBytes() >= sizeof(void*) * 2);
- subPtr(TrustedImm32(stackAlignmentBytes()), stackPointerRegister);
- poke(GPRInfo::returnValueGPR, 0);
- poke(GPRInfo::returnValueGPR2, 1);
- move(TrustedImmPtr(bitwise_cast<void*>(operationExceptionFuzz)), GPRInfo::nonPreservedNonReturnGPR);
- call(GPRInfo::nonPreservedNonReturnGPR);
- peek(GPRInfo::returnValueGPR, 0);
- peek(GPRInfo::returnValueGPR2, 1);
- addPtr(TrustedImm32(stackAlignmentBytes()), stackPointerRegister);
-}
-
-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::emitStoreStructureWithTypeInfo(AssemblyHelpers& jit, TrustedImmPtr structure, RegisterID dest)
-{
- const Structure* structurePtr = static_cast<const Structure*>(structure.m_value);
-#if USE(JSVALUE64)
- jit.store64(TrustedImm64(structurePtr->idBlob()), MacroAssembler::Address(dest, JSCell::structureIDOffset()));
- if (!ASSERT_DISABLED) {
- Jump correctStructure = jit.branch32(Equal, MacroAssembler::Address(dest, JSCell::structureIDOffset()), TrustedImm32(structurePtr->id()));
- jit.abortWithReason(AHStructureIDIsValid);
- correctStructure.link(&jit);
-
- Jump correctIndexingType = jit.branch8(Equal, MacroAssembler::Address(dest, JSCell::indexingTypeOffset()), TrustedImm32(structurePtr->indexingType()));
- jit.abortWithReason(AHIndexingTypeIsValid);
- correctIndexingType.link(&jit);
-
- Jump correctType = jit.branch8(Equal, MacroAssembler::Address(dest, JSCell::typeInfoTypeOffset()), TrustedImm32(structurePtr->typeInfo().type()));
- jit.abortWithReason(AHTypeInfoIsValid);
- correctType.link(&jit);
-
- Jump correctFlags = jit.branch8(Equal, MacroAssembler::Address(dest, JSCell::typeInfoFlagsOffset()), TrustedImm32(structurePtr->typeInfo().inlineTypeFlags()));
- jit.abortWithReason(AHTypeInfoInlineTypeFlagsAreValid);
- correctFlags.link(&jit);
- }
-#else
- // Do a 32-bit wide store to initialize the cell's fields.
- jit.store32(TrustedImm32(structurePtr->objectInitializationBlob()), MacroAssembler::Address(dest, JSCell::indexingTypeOffset()));
- jit.storePtr(structure, MacroAssembler::Address(dest, JSCell::structureIDOffset()));
-#endif
-}
-
} // namespace JSC
#endif // ENABLE(JIT)