diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/ftl/FTLExitValue.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/JavaScriptCore/ftl/FTLExitValue.cpp')
-rw-r--r-- | Source/JavaScriptCore/ftl/FTLExitValue.cpp | 75 |
1 files changed, 69 insertions, 6 deletions
diff --git a/Source/JavaScriptCore/ftl/FTLExitValue.cpp b/Source/JavaScriptCore/ftl/FTLExitValue.cpp index a987c60ce..7004b9bdb 100644 --- a/Source/JavaScriptCore/ftl/FTLExitValue.cpp +++ b/Source/JavaScriptCore/ftl/FTLExitValue.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 Apple Inc. All rights reserved. + * Copyright (C) 2013-2015 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,10 +28,61 @@ #if ENABLE(FTL_JIT) -#include "Operations.h" +#include "FTLExitTimeObjectMaterialization.h" +#include "JSCInlines.h" +#include "TrackedReferences.h" namespace JSC { namespace FTL { +ExitValue ExitValue::materializeNewObject(ExitTimeObjectMaterialization* data) +{ + ExitValue result; + result.m_kind = ExitValueMaterializeNewObject; + result.u.newObjectMaterializationData = data; + return result; +} + +ExitValue ExitValue::withLocalsOffset(int offset) const +{ + if (!isInJSStackSomehow()) + return *this; + if (!virtualRegister().isLocal()) + return *this; + return withVirtualRegister(virtualRegister() + offset); +} + +DataFormat ExitValue::dataFormat() const +{ + switch (kind()) { + case InvalidExitValue: + RELEASE_ASSERT_NOT_REACHED(); + return DataFormatNone; + + case ExitValueDead: + case ExitValueConstant: + case ExitValueInJSStack: + case ExitValueMaterializeNewObject: + return DataFormatJS; + + case ExitValueArgument: + return exitArgument().format(); + + case ExitValueInJSStackAsInt32: + return DataFormatInt32; + + case ExitValueInJSStackAsInt52: + return DataFormatInt52; + + case ExitValueInJSStackAsDouble: + return DataFormatDouble; + + case ExitValueRecovery: + return recoveryFormat(); + } + + RELEASE_ASSERT_NOT_REACHED(); +} + void ExitValue::dumpInContext(PrintStream& out, DumpContext* context) const { switch (kind()) { @@ -48,16 +99,22 @@ void ExitValue::dumpInContext(PrintStream& out, DumpContext* context) const out.print("Constant(", inContext(constant(), context), ")"); return; case ExitValueInJSStack: - out.print("InJSStack:r", virtualRegister()); + out.print("InJSStack:", virtualRegister()); return; case ExitValueInJSStackAsInt32: - out.print("InJSStackAsInt32:r", virtualRegister()); + out.print("InJSStackAsInt32:", virtualRegister()); return; case ExitValueInJSStackAsInt52: - out.print("InJSStackAsInt52:r", virtualRegister()); + out.print("InJSStackAsInt52:", virtualRegister()); return; case ExitValueInJSStackAsDouble: - out.print("InJSStackAsDouble:r", virtualRegister()); + out.print("InJSStackAsDouble:", virtualRegister()); + return; + case ExitValueRecovery: + out.print("Recovery(", recoveryOpcode(), ", arg", leftRecoveryArgument(), ", arg", rightRecoveryArgument(), ", ", recoveryFormat(), ")"); + return; + case ExitValueMaterializeNewObject: + out.print("Materialize(", WTF::RawPointer(objectMaterialization()), ")"); return; } @@ -69,6 +126,12 @@ void ExitValue::dump(PrintStream& out) const dumpInContext(out, 0); } +void ExitValue::validateReferences(const TrackedReferences& trackedReferences) const +{ + if (isConstant()) + trackedReferences.check(constant()); +} + } } // namespace JSC::FTL #endif // ENABLE(FTL_JIT) |