void ValueSource::dump(PrintStream& out) const
{
    switch (kind()) {
    case SourceNotSet:
        out.print("SourceNotSet");
        return;
    case ValueInJSStack:
        out.print("ValueInJSStack:", virtualRegister());
        return;
    case Int32InJSStack:
        out.print("Int32InJSStack:", virtualRegister());
        return;
    case Int52InJSStack:
        out.print("Int52InJSStack:", virtualRegister());
        return;
    case DoubleInJSStack:
        out.print("DoubleInJSStack:", virtualRegister());
        return;
    case SourceIsDead:
        out.print("SourceIsDead");
        return;
    case HaveNode:
        out.print("Node(", node(), ")");
        return;
    }
    
    RELEASE_ASSERT_NOT_REACHED();
}
예제 #2
0
void ExitValue::dumpInContext(PrintStream& out, DumpContext* context) const
{
    switch (kind()) {
    case InvalidExitValue:
        out.print("Invalid");
        return;
    case ExitValueDead:
        out.print("Dead");
        return;
    case ExitValueArgument:
        out.print("Argument(", exitArgument(), ")");
        return;
    case ExitValueConstant:
        out.print("Constant(", inContext(constant(), context), ")");
        return;
    case ExitValueInJSStack:
        out.print("InJSStack:r", virtualRegister());
        return;
    case ExitValueInJSStackAsInt32:
        out.print("InJSStackAsInt32:r", virtualRegister());
        return;
    case ExitValueInJSStackAsInt52:
        out.print("InJSStackAsInt52:r", virtualRegister());
        return;
    case ExitValueInJSStackAsDouble:
        out.print("InJSStackAsDouble:r", virtualRegister());
        return;
    case ExitValueRecovery:
        out.print("Recovery(", recoveryOpcode(), ", arg", leftRecoveryArgument(), ", arg", rightRecoveryArgument(), ", ", recoveryFormat(), ")");
        return;
    }
    
    RELEASE_ASSERT_NOT_REACHED();
}
예제 #3
0
ExitValue ExitValue::withLocalsOffset(int offset) const
{
    if (!isInJSStackSomehow())
        return *this;
    if (!virtualRegister().isLocal())
        return *this;
    return withVirtualRegister(virtualRegister() + offset);
}
JSValue ValueRecovery::recover(ExecState* exec) const
{
    switch (technique()) {
    case DisplacedInJSStack:
        return exec->r(virtualRegister().offset()).jsValue();
    case Int32DisplacedInJSStack:
        return jsNumber(exec->r(virtualRegister().offset()).unboxedInt32());
    case Int52DisplacedInJSStack:
        return jsNumber(exec->r(virtualRegister().offset()).unboxedInt52());
    case StrictInt52DisplacedInJSStack:
        return jsNumber(exec->r(virtualRegister().offset()).unboxedStrictInt52());
    case DoubleDisplacedInJSStack:
        return jsNumber(exec->r(virtualRegister().offset()).unboxedDouble());
    case CellDisplacedInJSStack:
        return exec->r(virtualRegister().offset()).unboxedCell();
    case BooleanDisplacedInJSStack:
#if USE(JSVALUE64)
        return exec->r(virtualRegister().offset()).jsValue();
#else
        return jsBoolean(exec->r(virtualRegister().offset()).unboxedBoolean());
#endif
    case Constant:
        return constant();
    default:
        RELEASE_ASSERT_NOT_REACHED();
        return JSValue();
    }
}
예제 #5
0
void ValueSource::dump(PrintStream& out) const
{
    switch (kind()) {
    case SourceNotSet:
        out.print("NotSet");
        break;
    case SourceIsDead:
        out.print("IsDead");
        break;
    case ValueInJSStack:
        out.print("JS:", virtualRegister());
        break;
    case Int32InJSStack:
        out.print("Int32:", virtualRegister());
        break;
    case Int52InJSStack:
        out.print("Int52:", virtualRegister());
        break;
    case CellInJSStack:
        out.print("Cell:", virtualRegister());
        break;
    case BooleanInJSStack:
        out.print("Bool:", virtualRegister());
        break;
    case DoubleInJSStack:
        out.print("Double:", virtualRegister());
        break;
    case HaveNode:
        out.print("Node(", m_value, ")");
        break;
    default:
        RELEASE_ASSERT_NOT_REACHED();
        break;
    }
}
예제 #6
0
void VariableEvent::dumpSpillInfo(const char* name, PrintStream& out) const
{
    out.print(name, "(", id(), ", r", virtualRegister(), ", ", dataFormatToString(dataFormat()), ")");
}
void ValueRecovery::dumpInContext(PrintStream& out, DumpContext* context) const
{
    switch (technique()) {
    case InGPR:
        out.print(gpr());
        return;
    case UnboxedInt32InGPR:
        out.print("int32(", gpr(), ")");
        return;
    case UnboxedInt52InGPR:
        out.print("int52(", gpr(), ")");
        return;
    case UnboxedStrictInt52InGPR:
        out.print("strictInt52(", gpr(), ")");
        return;
    case UnboxedBooleanInGPR:
        out.print("bool(", gpr(), ")");
        return;
    case UnboxedCellInGPR:
        out.print("cell(", gpr(), ")");
        return;
    case UInt32InGPR:
        out.print("uint32(", gpr(), ")");
        return;
    case InFPR:
        out.print(fpr());
        return;
#if USE(JSVALUE32_64)
    case InPair:
        out.print("pair(", tagGPR(), ", ", payloadGPR(), ")");
        return;
#endif
    case DisplacedInJSStack:
        out.printf("*%d", virtualRegister().offset());
        return;
    case Int32DisplacedInJSStack:
        out.printf("*int32(%d)", virtualRegister().offset());
        return;
    case Int52DisplacedInJSStack:
        out.printf("*int52(%d)", virtualRegister().offset());
        return;
    case StrictInt52DisplacedInJSStack:
        out.printf("*strictInt52(%d)", virtualRegister().offset());
        return;
    case DoubleDisplacedInJSStack:
        out.printf("*double(%d)", virtualRegister().offset());
        return;
    case CellDisplacedInJSStack:
        out.printf("*cell(%d)", virtualRegister().offset());
        return;
    case BooleanDisplacedInJSStack:
        out.printf("*bool(%d)", virtualRegister().offset());
        return;
    case ArgumentsThatWereNotCreated:
        out.printf("arguments");
        return;
    case Constant:
        out.print("[", inContext(constant(), context), "]");
        return;
    case DontKnow:
        out.printf("!");
        return;
    }
    RELEASE_ASSERT_NOT_REACHED();
}