diff --git a/browser/base/content/browser-sync.js b/browser/base/content/browser-sync.js index 2a13efaec4a1..53007b65edec 100644 --- a/browser/base/content/browser-sync.js +++ b/browser/base/content/browser-sync.js @@ -285,6 +285,8 @@ var gSync = { document.documentElement.removeAttribute("fxa_avatar_badged"); } + this.enableSendTabIfValidTab(); + const anchor = document.getElementById("fxa-toolbar-menu-button"); if (anchor.getAttribute("open") == "true") { PanelUI.hide(); @@ -340,6 +342,18 @@ var gSync = { mainWindowEl.setAttribute("fxastatus", stateValue); }, + enableSendTabIfValidTab() { + // All tabs selected must be sendable for the Send Tab button to be enabled + // on the FxA menu. + let canSendAllURIs = gBrowser.selectedTabs.every(t => this.isSendableURI(t.linkedBrowser.currentURI.spec)); + + if (canSendAllURIs) { + document.getElementById("PanelUI-fxa-menu-sendtab-button").removeAttribute("disabled"); + } else { + document.getElementById("PanelUI-fxa-menu-sendtab-button").setAttribute("disabled", true); + } + }, + updatePanelPopup(state) { let defaultLabel = this.appMenuStatus.getAttribute("defaultlabel"); // The localization string is for the signed in text, but it's the default text as well diff --git a/dom/localstorage/ActorsParent.cpp b/dom/localstorage/ActorsParent.cpp index 144639a6f828..caf8cdfbd6cf 100644 --- a/dom/localstorage/ActorsParent.cpp +++ b/dom/localstorage/ActorsParent.cpp @@ -57,6 +57,9 @@ # define ASSERT_UNLESS_FUZZING(...) MOZ_ASSERT(false, __VA_ARGS__) #endif +#define LS_LOG_TEST() MOZ_LOG_TEST(GetLocalStorageLogger(), LogLevel::Info) +#define LS_LOG(_args) MOZ_LOG(GetLocalStorageLogger(), LogLevel::Info, _args) + #if defined(MOZ_WIDGET_ANDROID) # define LS_MOBILE #endif @@ -2159,6 +2162,10 @@ class LSRequestBase : public DatastoreOperationBase, virtual void Cleanup() {} + void LogState(); + + virtual void LogNestedState() {} + private: void SendReadyMessage(); @@ -2172,9 +2179,9 @@ class LSRequestBase : public DatastoreOperationBase, // IPDL methods. void ActorDestroy(ActorDestroyReason aWhy) override; - mozilla::ipc::IPCResult RecvCancel() override; - private: + mozilla::ipc::IPCResult RecvCancel() final; + mozilla::ipc::IPCResult RecvFinish() final; }; @@ -2231,6 +2238,7 @@ class PrepareDatastoreOp : public LSRequestBase, public OpenDirectoryListener { nsCOMPtr mMainEventTarget; RefPtr mDelayedOp; + RefPtr mPendingDirectoryLock; RefPtr mDirectoryLock; RefPtr mConnection; RefPtr mDatastore; @@ -2339,13 +2347,13 @@ class PrepareDatastoreOp : public LSRequestBase, public OpenDirectoryListener { void CleanupMetadata(); + void LogNestedState() override; + NS_DECL_ISUPPORTS_INHERITED // IPDL overrides. void ActorDestroy(ActorDestroyReason aWhy) override; - mozilla::ipc::IPCResult RecvCancel() final; - // OpenDirectoryListener overrides. void DirectoryLockAcquired(DirectoryLock* aLock) override; @@ -2742,8 +2750,6 @@ StaticAutoPtr gArchivedOrigins; // Can only be touched on the Quota Manager I/O thread. bool gInitializedShadowStorage = false; -LazyLogModule gLogger("LocalStorage"); - bool IsOnConnectionThread() { MOZ_ASSERT(gConnectionThread); return gConnectionThread->IsOnConnectionThread(); @@ -5628,6 +5634,61 @@ void LSRequestBase::Dispatch() { nsresult LSRequestBase::NestedRun() { return NS_OK; } +void LSRequestBase::LogState() { + AssertIsOnOwningThread(); + + if (!LS_LOG_TEST()) { + return; + } + + LS_LOG(("LSRequestBase [%p]", this)); + + nsCString state; + + switch (mState) { + case State::Initial: + state.AssignLiteral("Initial"); + break; + + case State::Opening: + state.AssignLiteral("Opening"); + break; + + case State::Nesting: + state.AssignLiteral("Nesting"); + break; + + case State::SendingReadyMessage: + state.AssignLiteral("SendingReadyMessage"); + break; + + case State::WaitingForFinish: + state.AssignLiteral("WaitingForFinish"); + break; + + case State::SendingResults: + state.AssignLiteral("SendingResults"); + break; + + case State::Completed: + state.AssignLiteral("Completed"); + break; + + default: + MOZ_CRASH("Bad state!"); + } + + LS_LOG((" mState: %s", state.get())); + + switch (mState) { + case State::Nesting: + LogNestedState(); + break; + + default:; + } +} + void LSRequestBase::SendReadyMessage() { AssertIsOnOwningThread(); MOZ_ASSERT(mState == State::SendingReadyMessage); @@ -5726,46 +5787,7 @@ void LSRequestBase::ActorDestroy(ActorDestroyReason aWhy) { mozilla::ipc::IPCResult LSRequestBase::RecvCancel() { AssertIsOnOwningThread(); - if (MOZ_LOG_TEST(gLogger, LogLevel::Info)) { - MOZ_LOG(gLogger, LogLevel::Info, ("LSRequestBase::RecvCancel")); - - nsCString state; - - switch (mState) { - case State::Initial: - state.AssignLiteral("Initial"); - break; - - case State::Opening: - state.AssignLiteral("Opening"); - break; - - case State::Nesting: - state.AssignLiteral("Nesting"); - break; - - case State::SendingReadyMessage: - state.AssignLiteral("SendingReadyMessage"); - break; - - case State::WaitingForFinish: - state.AssignLiteral("WaitingForFinish"); - break; - - case State::SendingResults: - state.AssignLiteral("SendingResults"); - break; - - case State::Completed: - state.AssignLiteral("Completed"); - break; - - default: - MOZ_CRASH("Bad state!"); - } - - MOZ_LOG(gLogger, LogLevel::Info, (" mState: %s", state.get())); - } + LogState(); const char* crashOnCancel = PR_GetEnv("LSNG_CRASH_ON_CANCEL"); if (crashOnCancel) { @@ -6066,9 +6088,16 @@ nsresult PrepareDatastoreOp::OpenDirectory() { MOZ_ASSERT(QuotaManager::Get()); mNestedState = NestedState::DirectoryOpenPending; - QuotaManager::Get()->OpenDirectory(PERSISTENCE_TYPE_DEFAULT, mGroup, mOrigin, - mozilla::dom::quota::Client::LS, - /* aExclusive */ false, this); + RefPtr pendingDirectoryLock = + QuotaManager::Get()->CreateDirectoryLock(PERSISTENCE_TYPE_DEFAULT, mGroup, + mOrigin, + mozilla::dom::quota::Client::LS, + /* aExclusive */ false, this); + MOZ_ASSERT(pendingDirectoryLock); + + if (mNestedState == NestedState::DirectoryOpenPending) { + mPendingDirectoryLock = pendingDirectoryLock.forget(); + } mRequestedDirectoryLock = true; @@ -6719,6 +6748,90 @@ void PrepareDatastoreOp::CleanupMetadata() { } } +void PrepareDatastoreOp::LogNestedState() { + AssertIsOnOwningThread(); + + nsCString nestedState; + + switch (mNestedState) { + case NestedState::BeforeNesting: + nestedState.AssignLiteral("BeforeNesting"); + break; + + case NestedState::CheckExistingOperations: + nestedState.AssignLiteral("CheckExistingOperations"); + break; + + case NestedState::CheckClosingDatastore: + nestedState.AssignLiteral("CheckClosingDatastore"); + break; + + case NestedState::PreparationPending: + nestedState.AssignLiteral("PreparationPending"); + break; + + case NestedState::QuotaManagerPending: + nestedState.AssignLiteral("QuotaManagerPending"); + break; + + case NestedState::DirectoryOpenPending: + nestedState.AssignLiteral("DirectoryOpenPending"); + break; + + case NestedState::DatabaseWorkOpen: + nestedState.AssignLiteral("DatabaseWorkOpen"); + break; + + case NestedState::BeginLoadData: + nestedState.AssignLiteral("BeginLoadData"); + break; + + case NestedState::DatabaseWorkLoadData: + nestedState.AssignLiteral("DatabaseWorkLoadData"); + break; + + case NestedState::AfterNesting: + nestedState.AssignLiteral("AfterNesting"); + break; + + default: + MOZ_CRASH("Bad state!"); + } + + LS_LOG((" mNestedState: %s", nestedState.get())); + + switch (mNestedState) { + case NestedState::CheckClosingDatastore: { + for (uint32_t index = gPrepareDatastoreOps->Length(); index > 0; + index--) { + PrepareDatastoreOp* existingOp = (*gPrepareDatastoreOps)[index - 1]; + + if (existingOp->mDelayedOp == this) { + LS_LOG((" mDelayedBy: [%p]", existingOp)); + + existingOp->LogState(); + + break; + } + } + + break; + } + + case NestedState::DirectoryOpenPending: { + MOZ_ASSERT(mPendingDirectoryLock); + + LS_LOG((" mPendingDirectoryLock: [%p]", mPendingDirectoryLock.get())); + + mPendingDirectoryLock->LogState(); + + break; + } + + default:; + } +} + NS_IMPL_ISUPPORTS_INHERITED0(PrepareDatastoreOp, LSRequestBase) void PrepareDatastoreOp::ActorDestroy(ActorDestroyReason aWhy) { @@ -6731,71 +6844,14 @@ void PrepareDatastoreOp::ActorDestroy(ActorDestroyReason aWhy) { } } -mozilla::ipc::IPCResult PrepareDatastoreOp::RecvCancel() { - AssertIsOnOwningThread(); - - if (MOZ_LOG_TEST(gLogger, LogLevel::Info)) { - MOZ_LOG(gLogger, LogLevel::Info, ("PrepareDatastoreOp::RecvCancel")); - - nsCString nestedState; - - switch (mNestedState) { - case NestedState::BeforeNesting: - nestedState.AssignLiteral("BeforeNesting"); - break; - - case NestedState::CheckExistingOperations: - nestedState.AssignLiteral("CheckExistingOperations"); - break; - - case NestedState::CheckClosingDatastore: - nestedState.AssignLiteral("CheckClosingDatastore"); - break; - - case NestedState::PreparationPending: - nestedState.AssignLiteral("PreparationPending"); - break; - - case NestedState::QuotaManagerPending: - nestedState.AssignLiteral("QuotaManagerPending"); - break; - - case NestedState::DirectoryOpenPending: - nestedState.AssignLiteral("DirectoryOpenPending"); - break; - - case NestedState::DatabaseWorkOpen: - nestedState.AssignLiteral("DatabaseWorkOpen"); - break; - - case NestedState::BeginLoadData: - nestedState.AssignLiteral("BeginLoadData"); - break; - - case NestedState::DatabaseWorkLoadData: - nestedState.AssignLiteral("DatabaseWorkLoadData"); - break; - - case NestedState::AfterNesting: - nestedState.AssignLiteral("AfterNesting"); - break; - - default: - MOZ_CRASH("Bad state!"); - } - - MOZ_LOG(gLogger, LogLevel::Info, (" mNestedState: %s", nestedState.get())); - } - - return LSRequestBase::RecvCancel(); -} - void PrepareDatastoreOp::DirectoryLockAcquired(DirectoryLock* aLock) { AssertIsOnOwningThread(); MOZ_ASSERT(mState == State::Nesting); MOZ_ASSERT(mNestedState == NestedState::DirectoryOpenPending); MOZ_ASSERT(!mDirectoryLock); + mPendingDirectoryLock = nullptr; + if (NS_WARN_IF(QuotaClient::IsShuttingDownOnBackgroundThread()) || !MayProceed()) { MaybeSetFailureCode(NS_ERROR_FAILURE); @@ -6816,6 +6872,8 @@ void PrepareDatastoreOp::DirectoryLockFailed() { MOZ_ASSERT(mNestedState == NestedState::DirectoryOpenPending); MOZ_ASSERT(!mDirectoryLock); + mPendingDirectoryLock = nullptr; + MaybeSetFailureCode(NS_ERROR_FAILURE); FinishNesting(); diff --git a/dom/localstorage/LocalStorageCommon.cpp b/dom/localstorage/LocalStorageCommon.cpp index 32af67ac06ba..ff8c4054a633 100644 --- a/dom/localstorage/LocalStorageCommon.cpp +++ b/dom/localstorage/LocalStorageCommon.cpp @@ -18,6 +18,7 @@ namespace { StaticMutex gNextGenLocalStorageMutex; Atomic gNextGenLocalStorageEnabled(-1); +LazyLogModule gLogger("LocalStorage"); } // namespace @@ -133,5 +134,7 @@ nsresult GenerateOriginKey2(const PrincipalInfo& aPrincipalInfo, return NS_OK; } +LogModule* GetLocalStorageLogger() { return gLogger; } + } // namespace dom } // namespace mozilla diff --git a/dom/localstorage/LocalStorageCommon.h b/dom/localstorage/LocalStorageCommon.h index 415437fbd647..5abaad076a66 100644 --- a/dom/localstorage/LocalStorageCommon.h +++ b/dom/localstorage/LocalStorageCommon.h @@ -186,6 +186,8 @@ namespace mozilla { +class LogModule; + namespace ipc { class PrincipalInfo; @@ -238,6 +240,8 @@ nsresult GenerateOriginKey2(const mozilla::ipc::PrincipalInfo& aPrincipalInfo, nsACString& aOriginAttrSuffix, nsACString& aOriginKey); +LogModule* GetLocalStorageLogger(); + } // namespace dom } // namespace mozilla diff --git a/dom/quota/ActorsParent.cpp b/dom/quota/ActorsParent.cpp index 03f0da706d54..726fe9796f6b 100644 --- a/dom/quota/ActorsParent.cpp +++ b/dom/quota/ActorsParent.cpp @@ -91,6 +91,9 @@ # define ASSERT_UNLESS_FUZZING(...) MOZ_ASSERT(false, __VA_ARGS__) #endif +#define QM_LOG_TEST() MOZ_LOG_TEST(GetQuotaManagerLogger(), LogLevel::Info) +#define QM_LOG(_args) MOZ_LOG(GetQuotaManagerLogger(), LogLevel::Info, _args) + #define UNKNOWN_FILE_WARNING(_leafName) \ QM_WARNING("Something (%s) in the directory that doesn't belong!", \ NS_ConvertUTF16toUTF8(_leafName).get()) @@ -417,6 +420,8 @@ class DirectoryLockImpl final : public DirectoryLock { NS_INLINE_DECL_REFCOUNTING(DirectoryLockImpl, override) + void LogState() override; + private: ~DirectoryLockImpl(); }; @@ -2345,6 +2350,66 @@ void DirectoryLockImpl::NotifyOpenListener() { mQuotaManager->RemovePendingDirectoryLock(this); } +void DirectoryLockImpl::LogState() { + AssertIsOnOwningThread(); + + if (!QM_LOG_TEST()) { + return; + } + + QM_LOG(("DirectoryLockImpl [%p]", this)); + + nsCString persistenceType; + if (mPersistenceType.IsNull()) { + persistenceType.AssignLiteral("null"); + } else { + PersistenceTypeToText(mPersistenceType.Value(), persistenceType); + } + QM_LOG((" mPersistenceType: %s", persistenceType.get())); + + QM_LOG((" mGroup: %s", mGroup.get())); + + nsCString originScope; + if (mOriginScope.IsOrigin()) { + originScope.AssignLiteral("origin:"); + originScope.Append(mOriginScope.GetOrigin()); + } else if (mOriginScope.IsPrefix()) { + originScope.AssignLiteral("prefix:"); + originScope.Append(mOriginScope.GetOriginNoSuffix()); + } else if (mOriginScope.IsPattern()) { + originScope.AssignLiteral("pattern:"); + // Can't call GetJSONPattern since it only works on the main thread. + } else { + MOZ_ASSERT(mOriginScope.IsNull()); + originScope.AssignLiteral("null"); + } + QM_LOG((" mOriginScope: %s", originScope.get())); + + nsString clientType; + if (mClientType.IsNull()) { + clientType.AssignLiteral("null"); + } else { + Client::TypeToText(mClientType.Value(), clientType); + } + QM_LOG((" mClientType: %s", NS_ConvertUTF16toUTF8(clientType).get())); + + nsCString blockedOnString; + for (auto blockedOn : mBlockedOn) { + blockedOnString.Append(nsPrintfCString(" [%p]", blockedOn)); + } + QM_LOG((" mBlockedOn:%s", blockedOnString.get())); + + QM_LOG((" mExclusive: %d", mExclusive)); + + QM_LOG((" mInternal: %d", mInternal)); + + QM_LOG((" mInvalidated: %d", mInvalidated)); + + for (auto blockedOn : mBlockedOn) { + blockedOn->LogState(); + } +} + QuotaManager::Observer* QuotaManager::Observer::sInstance = nullptr; // static @@ -5015,6 +5080,21 @@ nsresult QuotaManager::EnsureStorageIsInitialized() { return NS_OK; } +already_AddRefed QuotaManager::CreateDirectoryLock( + PersistenceType aPersistenceType, const nsACString& aGroup, + const nsACString& aOrigin, Client::Type aClientType, bool aExclusive, + OpenDirectoryListener* aOpenListener) { + AssertIsOnOwningThread(); + + RefPtr lock = CreateDirectoryLock( + Nullable(aPersistenceType), aGroup, + OriginScope::FromOrigin(aOrigin), Nullable(aClientType), + aExclusive, false, aOpenListener); + MOZ_ASSERT(lock); + + return lock.forget(); +} + void QuotaManager::OpenDirectory(PersistenceType aPersistenceType, const nsACString& aGroup, const nsACString& aOrigin, @@ -5022,10 +5102,9 @@ void QuotaManager::OpenDirectory(PersistenceType aPersistenceType, OpenDirectoryListener* aOpenListener) { AssertIsOnOwningThread(); - RefPtr lock = CreateDirectoryLock( - Nullable(aPersistenceType), aGroup, - OriginScope::FromOrigin(aOrigin), Nullable(aClientType), - aExclusive, false, aOpenListener); + RefPtr lock = + CreateDirectoryLock(aPersistenceType, aGroup, aOrigin, aClientType, + aExclusive, aOpenListener); MOZ_ASSERT(lock); } diff --git a/dom/quota/QuotaCommon.cpp b/dom/quota/QuotaCommon.cpp index c51e0056a4b1..08d0d040dc60 100644 --- a/dom/quota/QuotaCommon.cpp +++ b/dom/quota/QuotaCommon.cpp @@ -6,11 +6,23 @@ #include "QuotaCommon.h" -BEGIN_QUOTA_NAMESPACE +namespace mozilla { +namespace dom { +namespace quota { + +namespace { + +LazyLogModule gLogger("QuotaManager"); + +} // namespace #ifdef NIGHTLY_BUILD NS_NAMED_LITERAL_CSTRING(kInternalError, "internal"); NS_NAMED_LITERAL_CSTRING(kExternalError, "external"); #endif -END_QUOTA_NAMESPACE +LogModule* GetQuotaManagerLogger() { return gLogger; } + +} // namespace quota +} // namespace dom +} // namespace mozilla diff --git a/dom/quota/QuotaCommon.h b/dom/quota/QuotaCommon.h index ca46df4e808b..7bac5908901d 100644 --- a/dom/quota/QuotaCommon.h +++ b/dom/quota/QuotaCommon.h @@ -72,7 +72,12 @@ class nsIEventTarget; -BEGIN_QUOTA_NAMESPACE +namespace mozilla { + +class LogModule; + +namespace dom { +namespace quota { // Telemetry keys to indicate types of errors. #ifdef NIGHTLY_BUILD @@ -113,6 +118,10 @@ bool IsOnIOThread(); void ReportInternalError(const char* aFile, uint32_t aLine, const char* aStr); -END_QUOTA_NAMESPACE +LogModule* GetQuotaManagerLogger(); + +} // namespace quota +} // namespace dom +} // namespace mozilla #endif // mozilla_dom_quota_quotacommon_h__ diff --git a/dom/quota/QuotaManager.h b/dom/quota/QuotaManager.h index 31c3ad752385..e5a064c20273 100644 --- a/dom/quota/QuotaManager.h +++ b/dom/quota/QuotaManager.h @@ -61,6 +61,9 @@ class NS_NO_VTABLE RefCountedObject { class DirectoryLock : public RefCountedObject { friend class DirectoryLockImpl; + public: + virtual void LogState() = 0; + private: DirectoryLock() {} @@ -210,6 +213,11 @@ class QuotaManager final : public BackgroundThreadObject { int64_t* aTimestamp, bool* aPersisted); + already_AddRefed CreateDirectoryLock( + PersistenceType aPersistenceType, const nsACString& aGroup, + const nsACString& aOrigin, Client::Type aClientType, bool aExclusive, + OpenDirectoryListener* aOpenListener); + // This is the main entry point into the QuotaManager API. // Any storage API implementation (quota client) that participates in // centralized quota and storage handling should call this method to get diff --git a/js/src/builtin/Array.cpp b/js/src/builtin/Array.cpp index de15684097c3..ba6e50500b46 100644 --- a/js/src/builtin/Array.cpp +++ b/js/src/builtin/Array.cpp @@ -4078,10 +4078,9 @@ static MOZ_ALWAYS_INLINE ArrayObject* NewArray( } AutoSetNewObjectMetadata metadata(cx); - RootedArrayObject arr( - cx, ArrayObject::createArray( - cx, allocKind, GetInitialHeap(newKind, &ArrayObject::class_), - shape, group, length, metadata)); + RootedArrayObject arr(cx, ArrayObject::createArray( + cx, allocKind, GetInitialHeap(newKind, group), + shape, group, length, metadata)); if (!arr) { return nullptr; } @@ -4169,7 +4168,7 @@ ArrayObject* js::NewDenseFullyAllocatedArrayWithTemplate( RootedObjectGroup group(cx, templateObject->group()); RootedShape shape(cx, templateObject->as().lastProperty()); - gc::InitialHeap heap = GetInitialHeap(GenericObject, &ArrayObject::class_); + gc::InitialHeap heap = GetInitialHeap(GenericObject, group); Rooted arr( cx, ArrayObject::createArray(cx, allocKind, heap, shape, group, length, metadata)); @@ -4187,10 +4186,11 @@ ArrayObject* js::NewDenseFullyAllocatedArrayWithTemplate( } ArrayObject* js::NewDenseCopyOnWriteArray(JSContext* cx, - HandleArrayObject templateObject, - gc::InitialHeap heap) { + HandleArrayObject templateObject) { MOZ_ASSERT(!gc::IsInsideNursery(templateObject)); + gc::InitialHeap heap = GetInitialHeap(GenericObject, templateObject->group()); + ArrayObject* arr = ArrayObject::createCopyOnWriteArray(cx, heap, templateObject); if (!arr) { diff --git a/js/src/builtin/Array.h b/js/src/builtin/Array.h index be80883f52a7..9f00c5c5e5d4 100644 --- a/js/src/builtin/Array.h +++ b/js/src/builtin/Array.h @@ -79,8 +79,7 @@ extern ArrayObject* NewDenseFullyAllocatedArrayWithTemplate( // Create a dense array with the same copy-on-write elements as another object. extern ArrayObject* NewDenseCopyOnWriteArray(JSContext* cx, - HandleArrayObject templateObject, - gc::InitialHeap heap); + HandleArrayObject templateObject); extern ArrayObject* NewFullyAllocatedArrayTryUseGroup( JSContext* cx, HandleObjectGroup group, size_t length, diff --git a/js/src/builtin/Stream.cpp b/js/src/builtin/Stream.cpp index bc0e4200dd42..bbfea8203823 100644 --- a/js/src/builtin/Stream.cpp +++ b/js/src/builtin/Stream.cpp @@ -1552,8 +1552,7 @@ static MOZ_MUST_USE JSObject* ReadableStreamCreateReadResult( // Step 4: Let obj be ObjectCreate(prototype). NativeObject* obj; JS_TRY_VAR_OR_RETURN_NULL( - cx, obj, - NativeObject::createWithTemplate(cx, gc::DefaultHeap, templateObject)); + cx, obj, NativeObject::createWithTemplate(cx, templateObject)); // Step 5: Perform CreateDataProperty(obj, "value", value). obj->setSlot(Realm::IterResultObjectValueSlot, value); diff --git a/js/src/jit-test/tests/gc/bug-1532376.js b/js/src/jit-test/tests/gc/bug-1532376.js new file mode 100644 index 000000000000..c523ba06b880 --- /dev/null +++ b/js/src/jit-test/tests/gc/bug-1532376.js @@ -0,0 +1,10 @@ +"use strict"; +function __f_276() { + this.getNameReallyHard = () => eval("eval('(() => this.name)()')") +} +for (var __v_1377 = 0; __v_1377 < 10000; __v_1377++) { + var __v_1378 = new __f_276(); + try { + __v_1376[__getRandomProperty()]; + } catch (e) {} +__v_1378.getNameReallyHard()} diff --git a/js/src/jit-test/tests/wasm/atomic.js b/js/src/jit-test/tests/wasm/atomic.js index 577cca8e2ab7..f1e7920c0648 100644 --- a/js/src/jit-test/tests/wasm/atomic.js +++ b/js/src/jit-test/tests/wasm/atomic.js @@ -177,7 +177,7 @@ var RMWOperation = (func $ld (param i32) (result ${type}) (${type}.atomic.load${view} ${address})) (func (export "ld") (param i32) (result i32) - (${type}.eq (call $ld (get_local 0)) ${operand})))`); + (${type}.eq (call $ld (local.get 0)) ${operand})))`); let mod = new WebAssembly.Module(bin); let mem = new WebAssembly.Memory({initial: 1, maximum: 1, shared: true}); let ins = new WebAssembly.Instance(mod, {"": {memory: mem}}); @@ -204,7 +204,7 @@ var RMWOperation = (func $_f (param i32) (result ${type}) (${type}.atomic.rmw${view}.${op} ${address} ${operand})) (func (export "f") (param i32) (result i32) - (${type}.eq (call $_f (get_local 0)) (${type}.const ${expected}))))`); + (${type}.eq (call $_f (local.get 0)) (${type}.const ${expected}))))`); let mod = new WebAssembly.Module(bin); let mem = new WebAssembly.Memory({initial: 1, maximum: 1, shared: true}); let ins = new WebAssembly.Instance(mod, {"": {memory: mem}}); @@ -230,7 +230,7 @@ var RMWOperation = (func $_f (param i32) (result ${type}) (${type}.atomic.rmw${view}.cmpxchg ${address} ${operand1} ${operand2})) (func (export "f") (param i32) (result i32) - (${type}.eq (call $_f (get_local 0)) (${type}.const ${expected}))))`); + (${type}.eq (call $_f (local.get 0)) (${type}.const ${expected}))))`); let mod = new WebAssembly.Module(bin); let mem = new WebAssembly.Memory({initial: 1, maximum: 1, shared: true}); let ins = new WebAssembly.Instance(mod, {"": {memory: mem}}); @@ -256,7 +256,7 @@ var RMWOperation = for ( let [TA, view] of variations ) { for ( let addr of [`(i32.const ${LOC * TA.BYTES_PER_ELEMENT})`, - `(get_local 0)`] ) + `(local.get 0)`] ) { for ( let [initial, operand] of [[0x12, 0x37]] ) { @@ -369,9 +369,9 @@ var BoundsAndAlignment = `(module (memory 1 1 shared) (func $0 (param i32) (result ${type}) - (${type}.atomic.load${ext} offset=${offset} (get_local 0))) + (${type}.atomic.load${ext} offset=${offset} (local.get 0))) (func (export "f") (param i32) - (drop (call $0 (get_local 0))))) + (drop (call $0 (local.get 0))))) `).exports.f; }, @@ -380,7 +380,7 @@ var BoundsAndAlignment = `(module (memory 1 1 shared) (func (export "f") (param i32) - (drop (${type}.atomic.load${ext} offset=${offset} (get_local 0))))) + (drop (${type}.atomic.load${ext} offset=${offset} (local.get 0))))) `).exports.f; }, @@ -389,7 +389,7 @@ var BoundsAndAlignment = `(module (memory 1 1 shared) (func (export "f") (param i32) - (${type}.atomic.store${ext} offset=${offset} (get_local 0) (${type}.const 37)))) + (${type}.atomic.store${ext} offset=${offset} (local.get 0) (${type}.const 37)))) `).exports.f; }, @@ -398,9 +398,9 @@ var BoundsAndAlignment = `(module (memory 1 1 shared) (func $0 (param i32) (result ${type}) - (${type}.atomic.rmw${ext}.${op} offset=${offset} (get_local 0) (${type}.const 37))) + (${type}.atomic.rmw${ext}.${op} offset=${offset} (local.get 0) (${type}.const 37))) (func (export "f") (param i32) - (drop (call $0 (get_local 0))))) + (drop (call $0 (local.get 0))))) `).exports.f; }, @@ -409,7 +409,7 @@ var BoundsAndAlignment = `(module (memory 1 1 shared) (func (export "f") (param i32) - (drop (${type}.atomic.rmw${ext}.${op} offset=${offset} (get_local 0) (${type}.const 37))))) + (drop (${type}.atomic.rmw${ext}.${op} offset=${offset} (local.get 0) (${type}.const 37))))) `).exports.f; }, @@ -418,9 +418,9 @@ var BoundsAndAlignment = `(module (memory 1 1 shared) (func $0 (param i32) (result ${type}) - (${type}.atomic.rmw${ext}.cmpxchg offset=${offset} (get_local 0) (${type}.const 37) (${type}.const 42))) + (${type}.atomic.rmw${ext}.cmpxchg offset=${offset} (local.get 0) (${type}.const 37) (${type}.const 42))) (func (export "f") (param i32) - (drop (call $0 (get_local 0))))) + (drop (call $0 (local.get 0))))) `).exports.f; }, @@ -471,31 +471,31 @@ BoundsAndAlignment.run(); assertErrorMessage(() => wasmEvalText(`(module (memory 1 1 shared) (func (param i32) (result i32) - (i32.atomic.wait (get_local 0) (i32.const 1) (i64.const -1))) + (i32.atomic.wait (local.get 0) (i32.const 1) (i64.const -1))) (export "" 0))`).exports[""](65536), RuntimeError, oob); assertErrorMessage(() => wasmEvalText(`(module (memory 1 1 shared) (func (param i32) (result i32) - (i64.atomic.wait (get_local 0) (i64.const 1) (i64.const -1))) + (i64.atomic.wait (local.get 0) (i64.const 1) (i64.const -1))) (export "" 0))`).exports[""](65536), RuntimeError, oob); assertErrorMessage(() => wasmEvalText(`(module (memory 1 1 shared) (func (param i32) (result i32) - (i32.atomic.wait (get_local 0) (i32.const 1) (i64.const -1))) + (i32.atomic.wait (local.get 0) (i32.const 1) (i64.const -1))) (export "" 0))`).exports[""](65501), RuntimeError, unaligned); assertErrorMessage(() => wasmEvalText(`(module (memory 1 1 shared) (func (param i32) (result i32) - (i64.atomic.wait (get_local 0) (i64.const 1) (i64.const -1))) + (i64.atomic.wait (local.get 0) (i64.const 1) (i64.const -1))) (export "" 0))`).exports[""](65501), RuntimeError, unaligned); assertErrorMessage(() => wasmEvalText(`(module (memory 1 1 shared) (func (param i32) (result i32) - (atomic.notify (get_local 0) (i32.const 1))) + (atomic.notify (local.get 0) (i32.const 1))) (export "" 0))`).exports[""](65536), RuntimeError, oob); @@ -503,7 +503,7 @@ assertErrorMessage(() => wasmEvalText(`(module (memory 1 1 shared) for (let addr of [1,2,3,5,6,7]) { assertErrorMessage(() => wasmEvalText(`(module (memory 1 1 shared) (func (export "f") (param i32) (result i32) - (atomic.notify (get_local 0) (i32.const 1))))`).exports.f(addr), + (atomic.notify (local.get 0) (i32.const 1))))`).exports.f(addr), RuntimeError, unaligned); } diff --git a/js/src/jit-test/tests/wasm/atomicity.js b/js/src/jit-test/tests/wasm/atomicity.js index 9d0545c74bc3..35cc69094303 100644 --- a/js/src/jit-test/tests/wasm/atomicity.js +++ b/js/src/jit-test/tests/wasm/atomicity.js @@ -156,10 +156,10 @@ function makeModule(id) { let BARRIER = "(i32.const 0)"; let barrier = ` ;; Barrier - (set_local $barrierValue (i32.add (get_local $barrierValue) (i32.const ${NUMAGENTS}))) + (local.set $barrierValue (i32.add (local.get $barrierValue) (i32.const ${NUMAGENTS}))) (drop (i32.atomic.rmw.add ${BARRIER} (i32.const 1))) (loop $c1 - (if (i32.lt_s (i32.atomic.load ${BARRIER}) (get_local $barrierValue)) + (if (i32.lt_s (i32.atomic.load ${BARRIER}) (local.get $barrierValue)) (br $c1))) ;; End barrier `; @@ -200,9 +200,9 @@ function makeModule(id) { (func ${name} (param $barrierValue i32) (result i32) (local $n i32) (local $tmp ${prefix}) - (set_local $n (i32.const ${ITERATIONS})) + (local.set $n (i32.const ${ITERATIONS})) (loop $outer - (if (get_local $n) + (if (local.get $n) (block ${isMaster ? `;; Init (${prefix}.atomic.store${tag} ${loc} (${prefix}.const ${distribute(initial)}))` : ``} @@ -216,11 +216,11 @@ ${(() => { // we would avoid fences in that case. if (op.match(/cmpxchg/)) { s += `(loop $doit - (set_local $tmp (${prefix}.atomic.load${tag} ${loc})) + (local.set $tmp (${prefix}.atomic.load${tag} ${loc})) (br_if $doit (i32.eqz (${prefix}.eq - (get_local $tmp) - (${op} ${loc} (get_local $tmp) (${prefix}.or (get_local $tmp) ${bitval})))))) + (local.get $tmp) + (${op} ${loc} (local.get $tmp) (${prefix}.or (local.get $tmp) ${bitval})))))) `; } else { s += `(drop (${op} ${loc} ${bitval})) @@ -232,9 +232,9 @@ ${(() => { (loop $wait_done (br_if $wait_done (${prefix}.ne (${prefix}.atomic.load${tag} ${loc}) (${prefix}.const ${distribute(expected)})))) ${barrier} - (set_local $n (i32.sub (get_local $n) (i32.const 1))) + (local.set $n (i32.sub (local.get $n) (i32.const 1))) (br $outer)))) - (get_local $barrierValue))`; + (local.get $barrierValue))`; } const ADDLOC = "(i32.const 256)"; @@ -303,33 +303,33 @@ ${(() => { (func (export "test") (local $barrierValue i32) (call $print (i32.const ${10 + id})) - (set_local $barrierValue (call $test_add8 (get_local $barrierValue))) - (set_local $barrierValue (call $test_sub8 (get_local $barrierValue))) - (set_local $barrierValue (call $test_and8 (get_local $barrierValue))) - (set_local $barrierValue (call $test_or8 (get_local $barrierValue))) - (set_local $barrierValue (call $test_xor8 (get_local $barrierValue))) - (set_local $barrierValue (call $test_cmpxchg8 (get_local $barrierValue))) + (local.set $barrierValue (call $test_add8 (local.get $barrierValue))) + (local.set $barrierValue (call $test_sub8 (local.get $barrierValue))) + (local.set $barrierValue (call $test_and8 (local.get $barrierValue))) + (local.set $barrierValue (call $test_or8 (local.get $barrierValue))) + (local.set $barrierValue (call $test_xor8 (local.get $barrierValue))) + (local.set $barrierValue (call $test_cmpxchg8 (local.get $barrierValue))) (call $print (i32.const ${20 + id})) - (set_local $barrierValue (call $test_add16 (get_local $barrierValue))) - (set_local $barrierValue (call $test_sub16 (get_local $barrierValue))) - (set_local $barrierValue (call $test_and16 (get_local $barrierValue))) - (set_local $barrierValue (call $test_or16 (get_local $barrierValue))) - (set_local $barrierValue (call $test_xor16 (get_local $barrierValue))) - (set_local $barrierValue (call $test_cmpxchg16 (get_local $barrierValue))) + (local.set $barrierValue (call $test_add16 (local.get $barrierValue))) + (local.set $barrierValue (call $test_sub16 (local.get $barrierValue))) + (local.set $barrierValue (call $test_and16 (local.get $barrierValue))) + (local.set $barrierValue (call $test_or16 (local.get $barrierValue))) + (local.set $barrierValue (call $test_xor16 (local.get $barrierValue))) + (local.set $barrierValue (call $test_cmpxchg16 (local.get $barrierValue))) (call $print (i32.const ${30 + id})) - (set_local $barrierValue (call $test_add (get_local $barrierValue))) - (set_local $barrierValue (call $test_sub (get_local $barrierValue))) - (set_local $barrierValue (call $test_and (get_local $barrierValue))) - (set_local $barrierValue (call $test_or (get_local $barrierValue))) - (set_local $barrierValue (call $test_xor (get_local $barrierValue))) - (set_local $barrierValue (call $test_cmpxchg (get_local $barrierValue))) + (local.set $barrierValue (call $test_add (local.get $barrierValue))) + (local.set $barrierValue (call $test_sub (local.get $barrierValue))) + (local.set $barrierValue (call $test_and (local.get $barrierValue))) + (local.set $barrierValue (call $test_or (local.get $barrierValue))) + (local.set $barrierValue (call $test_xor (local.get $barrierValue))) + (local.set $barrierValue (call $test_cmpxchg (local.get $barrierValue))) (call $print (i32.const ${40 + id})) - (set_local $barrierValue (call $test_add64 (get_local $barrierValue))) - (set_local $barrierValue (call $test_sub64 (get_local $barrierValue))) - (set_local $barrierValue (call $test_and64 (get_local $barrierValue))) - (set_local $barrierValue (call $test_or64 (get_local $barrierValue))) - (set_local $barrierValue (call $test_xor64 (get_local $barrierValue))) - (set_local $barrierValue (call $test_cmpxchg64 (get_local $barrierValue))) + (local.set $barrierValue (call $test_add64 (local.get $barrierValue))) + (local.set $barrierValue (call $test_sub64 (local.get $barrierValue))) + (local.set $barrierValue (call $test_and64 (local.get $barrierValue))) + (local.set $barrierValue (call $test_or64 (local.get $barrierValue))) + (local.set $barrierValue (call $test_xor64 (local.get $barrierValue))) + (local.set $barrierValue (call $test_cmpxchg64 (local.get $barrierValue))) )) `; } diff --git a/js/src/jit-test/tests/wasm/baseline-opt.js b/js/src/jit-test/tests/wasm/baseline-opt.js index 9c99c1ac6ca7..cbc97a3144ce 100644 --- a/js/src/jit-test/tests/wasm/baseline-opt.js +++ b/js/src/jit-test/tests/wasm/baseline-opt.js @@ -15,12 +15,12 @@ function testEqzBrIf(value, type, untaken, taken, expected) { (func (result i32) (local ${type}) (local i32) - (set_local 0 (${type}.const ${value})) - (set_local 1 (i32.const ${taken})) + (local.set 0 (${type}.const ${value})) + (local.set 1 (i32.const ${taken})) (block $b - (br_if $b (${type}.eqz (get_local 0))) - (set_local 1 (i32.const ${untaken}))) - (get_local 1)) + (br_if $b (${type}.eqz (local.get 0))) + (local.set 1 (i32.const ${untaken}))) + (local.get 1)) (export "f" 0))`).exports["f"]; assertEq(f(), expected); } @@ -33,11 +33,11 @@ function testCmpBrIf(value, type, untaken, taken, expected) { (func (result i32) (local ${type}) (local i32) - (set_local 1 (i32.const ${taken})) + (local.set 1 (i32.const ${taken})) (block $b - (br_if $b (${type}.eq (get_local 0) (${type}.const ${value}))) - (set_local 1 (i32.const ${untaken}))) - (get_local 1)) + (br_if $b (${type}.eq (local.get 0) (${type}.const ${value}))) + (local.set 1 (i32.const ${untaken}))) + (local.get 1)) (export "f" 0))`).exports["f"]; assertEq(f(), expected); } @@ -49,10 +49,10 @@ function testEqzSelect(value, type, iftrue, iffalse, expected) { var f = wasmEvalText(`(module (func (result i32) (local ${type}) - (set_local 0 (${type}.const ${value})) + (local.set 0 (${type}.const ${value})) (select (i32.const ${iftrue}) (i32.const ${iffalse}) - (${type}.eqz (get_local 0)))) + (${type}.eqz (local.get 0)))) (export "f" 0))`).exports["f"]; assertEq(f(), expected); } @@ -66,7 +66,7 @@ function testCmpSelect(value, type, iftrue, iffalse, expected) { (local ${type}) (select (i32.const ${iftrue}) (i32.const ${iffalse}) - (${type}.eq (get_local 0) (${type}.const ${value})))) + (${type}.eq (local.get 0) (${type}.const ${value})))) (export "f" 0))`).exports["f"]; assertEq(f(), expected); } @@ -79,11 +79,11 @@ function testEqzIf(value, type, trueBranch, falseBranch, expected) { (func (result i32) (local ${type}) (local i32) - (set_local 0 (${type}.const ${value})) - (if (${type}.eqz (get_local 0)) - (set_local 1 (i32.const ${trueBranch})) - (set_local 1 (i32.const ${falseBranch}))) - (get_local 1)) + (local.set 0 (${type}.const ${value})) + (if (${type}.eqz (local.get 0)) + (local.set 1 (i32.const ${trueBranch})) + (local.set 1 (i32.const ${falseBranch}))) + (local.get 1)) (export "f" 0))`).exports["f"]; assertEq(f(), expected); } @@ -96,10 +96,10 @@ function testCmpIf(value, type, trueBranch, falseBranch, expected) { (func (result i32) (local ${type}) (local i32) - (if (${type}.eq (get_local 0) (${type}.const ${value})) - (set_local 1 (i32.const ${trueBranch})) - (set_local 1 (i32.const ${falseBranch}))) - (get_local 1)) + (if (${type}.eq (local.get 0) (${type}.const ${value})) + (local.set 1 (i32.const ${trueBranch})) + (local.set 1 (i32.const ${falseBranch}))) + (local.get 1)) (export "f" 0))`).exports["f"]; assertEq(f(), expected); } diff --git a/js/src/jit-test/tests/wasm/basic.js b/js/src/jit-test/tests/wasm/basic.js index a1fea1478c0b..c3b48bcfcb31 100644 --- a/js/src/jit-test/tests/wasm/basic.js +++ b/js/src/jit-test/tests/wasm/basic.js @@ -82,7 +82,7 @@ wasmFullPassI64('(module (func $run (param i64) (result i64) (local.get 0)))', '0x123400007fffffff', {}, '(i64.const 0x123400007fffffff)'); -wasmFullPassI64('(module (func $run (param i64) (result i64) (i64.add (get_local 0) (i64.const 1))))', +wasmFullPassI64('(module (func $run (param i64) (result i64) (i64.add (local.get 0) (i64.const 1))))', '0x1234000100000000', {}, '(i64.const 0x12340000ffffffff)'); @@ -175,41 +175,41 @@ assertEq(new Uint8Array(buf)[65535], 'c'.charCodeAt(0)); // ---------------------------------------------------------------------------- // locals -assertEq(wasmEvalText('(module (func (param i32) (result i32) (get_local 0)) (export "" 0))').exports[""](), 0); -assertEq(wasmEvalText('(module (func (param i32) (result i32) (get_local 0)) (export "" 0))').exports[""](42), 42); -assertEq(wasmEvalText('(module (func (param i32) (param i32) (result i32) (get_local 0)) (export "" 0))').exports[""](42, 43), 42); -assertEq(wasmEvalText('(module (func (param i32) (param i32) (result i32) (get_local 1)) (export "" 0))').exports[""](42, 43), 43); +assertEq(wasmEvalText('(module (func (param i32) (result i32) (local.get 0)) (export "" 0))').exports[""](), 0); +assertEq(wasmEvalText('(module (func (param i32) (result i32) (local.get 0)) (export "" 0))').exports[""](42), 42); +assertEq(wasmEvalText('(module (func (param i32) (param i32) (result i32) (local.get 0)) (export "" 0))').exports[""](42, 43), 42); +assertEq(wasmEvalText('(module (func (param i32) (param i32) (result i32) (local.get 1)) (export "" 0))').exports[""](42, 43), 43); -wasmFailValidateText('(module (func (get_local 0)))', /local.get index out of range/); -wasmFailValidateText('(module (func (result f32) (local i32) (get_local 0)))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (result i32) (local f32) (get_local 0)))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (result f32) (param i32) (local f32) (get_local 0)))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (result i32) (param i32) (local f32) (get_local 1)))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (local.get 0)))', /local.get index out of range/); +wasmFailValidateText('(module (func (result f32) (local i32) (local.get 0)))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (result i32) (local f32) (local.get 0)))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (result f32) (param i32) (local f32) (local.get 0)))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (result i32) (param i32) (local f32) (local.get 1)))', mismatchError("f32", "i32")); wasmValidateText('(module (func (local i32)))'); wasmValidateText('(module (func (local i32) (local f32)))'); -wasmFullPass('(module (func (result i32) (local i32) (get_local 0)) (export "run" 0))', 0); -wasmFullPass('(module (func (result i32) (param i32) (local f32) (get_local 0)) (export "run" 0))', 0); -wasmFullPass('(module (func (result f32) (param i32) (local f32) (get_local 1)) (export "run" 0))', 0); +wasmFullPass('(module (func (result i32) (local i32) (local.get 0)) (export "run" 0))', 0); +wasmFullPass('(module (func (result i32) (param i32) (local f32) (local.get 0)) (export "run" 0))', 0); +wasmFullPass('(module (func (result f32) (param i32) (local f32) (local.get 1)) (export "run" 0))', 0); wasmFailValidateText('(module (func (local.set 0 (i32.const 0))))', /local.set index out of range/); -wasmFailValidateText('(module (func (local f32) (set_local 0 (i32.const 0))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (local f32) (set_local 0 (nop))))', emptyStackError); -wasmFailValidateText('(module (func (local i32) (local f32) (set_local 0 (get_local 1))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (local i32) (local f32) (set_local 1 (get_local 0))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (local f32) (local.set 0 (i32.const 0))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (local f32) (local.set 0 (nop))))', emptyStackError); +wasmFailValidateText('(module (func (local i32) (local f32) (local.set 0 (local.get 1))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (local i32) (local f32) (local.set 1 (local.get 0))))', mismatchError("i32", "f32")); -wasmValidateText('(module (func (local i32) (set_local 0 (i32.const 0))))'); -wasmValidateText('(module (func (local i32) (local f32) (set_local 0 (get_local 0))))'); -wasmValidateText('(module (func (local i32) (local f32) (set_local 1 (get_local 1))))'); +wasmValidateText('(module (func (local i32) (local.set 0 (i32.const 0))))'); +wasmValidateText('(module (func (local i32) (local f32) (local.set 0 (local.get 0))))'); +wasmValidateText('(module (func (local i32) (local f32) (local.set 1 (local.get 1))))'); wasmFullPass('(module (func (result i32) (local i32) (tee_local 0 (i32.const 42))) (export "run" 0))', 42); -wasmFullPass('(module (func (result i32) (local i32) (tee_local 0 (get_local 0))) (export "run" 0))', 0); +wasmFullPass('(module (func (result i32) (local i32) (tee_local 0 (local.get 0))) (export "run" 0))', 0); -wasmFullPass('(module (func (param $a i32) (result i32) (get_local $a)) (export "run" 0))', 0); -wasmFullPass('(module (func (param $a i32) (local $b i32) (result i32) (block i32 (set_local $b (get_local $a)) (get_local $b))) (export "run" 0))', 42, {}, 42); +wasmFullPass('(module (func (param $a i32) (result i32) (local.get $a)) (export "run" 0))', 0); +wasmFullPass('(module (func (param $a i32) (local $b i32) (result i32) (block i32 (local.set $b (local.get $a)) (local.get $b))) (export "run" 0))', 42, {}, 42); -wasmValidateText('(module (func (local i32) (local $a f32) (set_local 0 (i32.const 1)) (set_local $a (f32.const nan))))'); +wasmValidateText('(module (func (local i32) (local $a f32) (local.set 0 (i32.const 1)) (local.set $a (f32.const nan))))'); // ---------------------------------------------------------------------------- // blocks @@ -218,7 +218,7 @@ wasmFullPass('(module (func (block )) (export "run" 0))', undefined); wasmFailValidateText('(module (func (result i32) (block )))', emptyStackError); wasmFailValidateText('(module (func (result i32) (block (block ))))', emptyStackError); -wasmFailValidateText('(module (func (local i32) (set_local 0 (block ))))', emptyStackError); +wasmFailValidateText('(module (func (local i32) (local.set 0 (block ))))', emptyStackError); wasmFullPass('(module (func (block (block ))) (export "run" 0))', undefined); wasmFullPass('(module (func (result i32) (block i32 (i32.const 42))) (export "run" 0))', 42); @@ -226,9 +226,9 @@ wasmFullPass('(module (func (result i32) (block i32 (block i32 (i32.const 42)))) wasmFailValidateText('(module (func (result f32) (block i32 (i32.const 0))))', mismatchError("i32", "f32")); wasmFullPass('(module (func (result i32) (block i32 (drop (i32.const 13)) (block i32 (i32.const 42)))) (export "run" 0))', 42); -wasmFailValidateText('(module (func (result f32) (param f32) (block i32 (drop (get_local 0)) (i32.const 0))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (result f32) (param f32) (block i32 (drop (local.get 0)) (i32.const 0))))', mismatchError("i32", "f32")); -wasmFullPass('(module (func (result i32) (local i32) (set_local 0 (i32.const 42)) (get_local 0)) (export "run" 0))', 42); +wasmFullPass('(module (func (result i32) (local i32) (local.set 0 (i32.const 42)) (local.get 0)) (export "run" 0))', 42); // ---------------------------------------------------------------------------- // calls @@ -261,7 +261,7 @@ function checkF32CallImport(v) { wasmFullPass('(module (import "" "a" (result f32)) (func (result f32) (call 0)) (export "run" 1))', Math.fround(v), {"":{a:()=>{ return v; }}}); - wasmFullPass('(module (import "" "a" (param f32)) (func (param f32) (call 0 (get_local 0))) (export "run" 1))', + wasmFullPass('(module (import "" "a" (param f32)) (func (param f32) (call 0 (local.get 0))) (export "run" 1))', undefined, {"":{a:x=>{ assertEq(Math.fround(v), x); }}}, v); @@ -307,14 +307,14 @@ var {v2i, i2i, i2v} = wasmEvalText(`(module (type (func (param i32))) (func (type 0) (i32.const 13)) (func (type 0) (i32.const 42)) - (func (type 1) (i32.add (get_local 0) (i32.const 1))) - (func (type 1) (i32.add (get_local 0) (i32.const 2))) - (func (type 1) (i32.add (get_local 0) (i32.const 3))) - (func (type 1) (i32.add (get_local 0) (i32.const 4))) + (func (type 1) (i32.add (local.get 0) (i32.const 1))) + (func (type 1) (i32.add (local.get 0) (i32.const 2))) + (func (type 1) (i32.add (local.get 0) (i32.const 3))) + (func (type 1) (i32.add (local.get 0) (i32.const 4))) (table funcref (elem 0 1 2 3 4 5)) - (func (param i32) (result i32) (call_indirect 0 (get_local 0))) - (func (param i32) (param i32) (result i32) (call_indirect 1 (get_local 1) (get_local 0))) - (func (param i32) (call_indirect 2 (i32.const 0) (get_local 0))) + (func (param i32) (result i32) (call_indirect 0 (local.get 0))) + (func (param i32) (param i32) (result i32) (call_indirect 1 (local.get 1) (local.get 0))) + (func (param i32) (call_indirect 2 (i32.const 0) (local.get 0))) (export "v2i" 6) (export "i2i" 7) (export "i2v" 8) @@ -412,7 +412,7 @@ var f = wasmEvalText(` (select (call 0) (call 1) - (get_local 0) + (local.get 0) ) ) (export "" 2) @@ -493,7 +493,7 @@ function testSelect(type, trueVal, falseVal) { (select (${type}.const ${trueVal}) (${type}.const ${falseVal}) - (get_local 0) + (local.get 0) ) ) (export "" 0) @@ -510,7 +510,7 @@ function testSelect(type, trueVal, falseVal) { (select (${type}.const ${trueVal}) (${type}.const ${falseVal}) - (get_local 0) + (local.get 0) ) ) (export "run" 0) @@ -537,7 +537,7 @@ wasmAssert(` (select (i64.const 0xc0010ff08badf00d) (i64.const 0x12345678deadc0de) - (get_local 0) + (local.get 0) ) ) (export "" 0) diff --git a/js/src/jit-test/tests/wasm/bce.js b/js/src/jit-test/tests/wasm/bce.js index 5e3d232b5b0d..e4f9aa24d2a1 100644 --- a/js/src/jit-test/tests/wasm/bce.js +++ b/js/src/jit-test/tests/wasm/bce.js @@ -67,12 +67,12 @@ function loadTwiceModule(type, ext, offset, align) { (drop (${type}.load${ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (get_local 0) + (local.get 0) )) (${type}.load${ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (get_local 1) + (local.get 1) ) ) (export "" 0))` ).exports[""]; @@ -89,12 +89,12 @@ function loadTwiceSameBasePlusConstModule(type, ext, offset, align, addConst) { (drop (${type}.load${ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (get_local 0) + (local.get 0) )) (${type}.load${ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (i32.add (get_local 0) (i32.const ${addConst})) + (i32.add (local.get 0) (i32.const ${addConst})) ) ) (export "" 0))` ).exports[""]; @@ -111,12 +111,12 @@ function loadTwiceSameBasePlusNonConstModule(type, ext, offset, align) { (drop (${type}.load${ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (get_local 0) + (local.get 0) )) (${type}.load${ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (i32.add (get_local 0) (get_local 1)) + (i32.add (local.get 0) (local.get 1)) ) ) (export "" 0))` ).exports[""]; diff --git a/js/src/jit-test/tests/wasm/builtin.js b/js/src/jit-test/tests/wasm/builtin.js index 063a91df7d1c..dda1c605b9e9 100644 --- a/js/src/jit-test/tests/wasm/builtin.js +++ b/js/src/jit-test/tests/wasm/builtin.js @@ -22,20 +22,20 @@ function unary(name) { (elem (i32.const 0) $f32 $f64) (func (export "f32") (param f32) (result f32) - get_local 0 + local.get 0 call $f32 ) (func (export "f32_t") (param f32) (result f32) - get_local 0 + local.get 0 i32.const 0 call_indirect $f_f ) (func (export "f64") (param f64) (result f64) - get_local 0 + local.get 0 call $f64 ) (func (export "f64_t") (param f64) (result f64) - get_local 0 + local.get 0 i32.const 1 call_indirect $d_d ) @@ -71,24 +71,24 @@ function binary(name) { (elem (i32.const 0) $f32 $f64) (func (export "f32") (param f32) (param f32) (result f32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 call $f32 ) (func (export "f32_t") (param f32) (param f32) (result f32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.const 0 call_indirect $ff_f ) (func (export "f64") (param f64) (param f64) (result f64) - get_local 0 - get_local 1 + local.get 0 + local.get 1 call $f64 ) (func (export "f64_t") (param f64) (param f64) (result f64) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.const 1 call_indirect $dd_d ) diff --git a/js/src/jit-test/tests/wasm/caching.js b/js/src/jit-test/tests/wasm/caching.js index 63019eadb6e0..a03458f48a66 100644 --- a/js/src/jit-test/tests/wasm/caching.js +++ b/js/src/jit-test/tests/wasm/caching.js @@ -37,7 +37,7 @@ function testCached(code, imports, test) { testCached(`(module (func $test (param i64) (result f64) - get_local 0 + local.get 0 f64.convert_u/i64 ) (func (export "run") (result i32) @@ -68,7 +68,7 @@ testCached( (func $t4 (type $T) (i32.const 40)) (table funcref (elem $t1 $t2 $t3 $t4)) (func (export "run") (param i32) (result i32) - (call_indirect $T (get_local 0))))`, + (call_indirect $T (local.get 0))))`, {'':{ t1() { return 10 }, t2() { return 20 } }}, i => { assertEq(i.exports.run(0), 10); diff --git a/js/src/jit-test/tests/wasm/compiler-frame-depth.js b/js/src/jit-test/tests/wasm/compiler-frame-depth.js index 2fb7ae460bbc..6daf2c5dd8ce 100644 --- a/js/src/jit-test/tests/wasm/compiler-frame-depth.js +++ b/js/src/jit-test/tests/wasm/compiler-frame-depth.js @@ -1,6 +1,6 @@ // Ensures that the postorder allows us to have very deep expression trees. -var expr = '(get_local 0)'; +var expr = '(local.get 0)'; for (var i = 1000; i --> 0; ) { expr = `(f32.neg ${expr})`; diff --git a/js/src/jit-test/tests/wasm/control-flow.js b/js/src/jit-test/tests/wasm/control-flow.js index d0424566d73c..876229359e65 100644 --- a/js/src/jit-test/tests/wasm/control-flow.js +++ b/js/src/jit-test/tests/wasm/control-flow.js @@ -4,23 +4,23 @@ const RuntimeError = WebAssembly.RuntimeError; // if // Condition is an int32 -wasmFailValidateText('(module (func (local f32) (if (get_local 0) (i32.const 1))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (local f32) (if (get_local 0) (i32.const 1) (i32.const 0))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (local f64) (if (get_local 0) (i32.const 1) (i32.const 0))))', mismatchError("f64", "i32")); -wasmEvalText('(module (func (local i32) (if (get_local 0) (nop))) (export "" 0))'); -wasmEvalText('(module (func (local i32) (if (get_local 0) (nop) (nop))) (export "" 0))'); +wasmFailValidateText('(module (func (local f32) (if (local.get 0) (i32.const 1))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (local f32) (if (local.get 0) (i32.const 1) (i32.const 0))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (local f64) (if (local.get 0) (i32.const 1) (i32.const 0))))', mismatchError("f64", "i32")); +wasmEvalText('(module (func (local i32) (if (local.get 0) (nop))) (export "" 0))'); +wasmEvalText('(module (func (local i32) (if (local.get 0) (nop) (nop))) (export "" 0))'); // Expression values types are consistent -wasmFailValidateText('(module (func (result i32) (local f32) (if f32 (i32.const 42) (get_local 0) (i32.const 0))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (result i32) (local f64) (if i32 (i32.const 42) (i32.const 0) (get_local 0))))', mismatchError("f64", "i32")); +wasmFailValidateText('(module (func (result i32) (local f32) (if f32 (i32.const 42) (local.get 0) (i32.const 0))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (result i32) (local f64) (if i32 (i32.const 42) (i32.const 0) (local.get 0))))', mismatchError("f64", "i32")); assertEq(wasmEvalText('(module (func (result i32) (if i32 (i32.const 42) (i32.const 1) (i32.const 2))) (export "" 0))').exports[""](), 1); assertEq(wasmEvalText('(module (func (result i32) (if i32 (i32.const 0) (i32.const 1) (i32.const 2))) (export "" 0))').exports[""](), 2); // Even if we don't yield, sub expressions types still have to match. -wasmFailValidateText('(module (func (param f32) (if i32 (i32.const 42) (i32.const 1) (get_local 0))) (export "" 0))', mismatchError('f32', 'i32')); +wasmFailValidateText('(module (func (param f32) (if i32 (i32.const 42) (i32.const 1) (local.get 0))) (export "" 0))', mismatchError('f32', 'i32')); wasmFailValidateText('(module (func (if i32 (i32.const 42) (i32.const 1) (i32.const 0))) (export "" 0))', /unused values not explicitly dropped by end of block/); wasmFullPass('(module (func (drop (if i32 (i32.const 42) (i32.const 1) (i32.const 0)))) (export "run" 0))', undefined); -wasmFullPass('(module (func (param f32) (if (i32.const 42) (drop (i32.const 1)) (drop (get_local 0)))) (export "run" 0))', undefined, {}, 13.37); +wasmFullPass('(module (func (param f32) (if (i32.const 42) (drop (i32.const 1)) (drop (local.get 0)))) (export "run" 0))', undefined, {}, 13.37); // Sub-expression values are returned wasmFullPass(`(module @@ -295,7 +295,7 @@ wasmFullPass('(module (func (block $l (br_if $l (i32.const 1)))) (export "run" 0 var isNonZero = wasmEvalText(`(module (func (result i32) (param i32) (block - (br_if 0 (get_local 0)) + (br_if 0 (local.get 0)) (return (i32.const 0)) ) (return (i32.const 1)) @@ -312,8 +312,8 @@ wasmFailValidateText('(module (func (result i32) (br 0 (f32.const 42))))', misma wasmFailValidateText('(module (func (result i32) (block (br 0))))', emptyStackError); wasmFailValidateText('(module (func (result i32) (block f32 (br 0 (f32.const 42)))))', mismatchError("f32", "i32")); -wasmFailValidateText(`(module (func (result i32) (param i32) (block (if i32 (get_local 0) (br 0 (i32.const 42))))) (export "" 0))`, /if without else with a result value/); -wasmFailValidateText(`(module (func (result i32) (param i32) (block i32 (if (get_local 0) (drop (i32.const 42))) (br 0 (f32.const 42)))) (export "" 0))`, mismatchError("f32", "i32")); +wasmFailValidateText(`(module (func (result i32) (param i32) (block (if i32 (local.get 0) (br 0 (i32.const 42))))) (export "" 0))`, /if without else with a result value/); +wasmFailValidateText(`(module (func (result i32) (param i32) (block i32 (if (local.get 0) (drop (i32.const 42))) (br 0 (f32.const 42)))) (export "" 0))`, mismatchError("f32", "i32")); wasmFullPass('(module (func (result i32) (br 0 (i32.const 42)) (i32.const 13)) (export "run" 0))', 42); wasmFullPass('(module (func (result i32) (block i32 (br 0 (i32.const 42)) (i32.const 13))) (export "run" 0))', 42); @@ -321,57 +321,57 @@ wasmFullPass('(module (func (result i32) (block i32 (br 0 (i32.const 42)) (i32.c wasmFailValidateText('(module (func) (func (block i32 (br 0 (call 0)) (i32.const 13))) (export "" 0))', emptyStackError); wasmFailValidateText('(module (func) (func (block i32 (br_if 0 (call 0) (i32.const 1)) (i32.const 13))) (export "" 0))', emptyStackError); -var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (if (get_local 0) (drop (i32.const 42))) (i32.const 43))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (if (local.get 0) (drop (i32.const 42))) (i32.const 43))) (export "" 0))`).exports[""]; assertEq(f(0), 43); assertEq(f(1), 43); -wasmFailValidateText(`(module (func (result i32) (param i32) (block i32 (if i32 (get_local 0) (br 0 (i32.const 42))) (i32.const 43))) (export "" 0))`, /if without else with a result value/); +wasmFailValidateText(`(module (func (result i32) (param i32) (block i32 (if i32 (local.get 0) (br 0 (i32.const 42))) (i32.const 43))) (export "" 0))`, /if without else with a result value/); -var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (if (get_local 0) (br 1 (i32.const 42))) (i32.const 43))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (if (local.get 0) (br 1 (i32.const 42))) (i32.const 43))) (export "" 0))`).exports[""]; assertEq(f(0), 43); assertEq(f(1), 42); -wasmFailValidateText(`(module (func (result i32) (param i32) (block (br_if 0 (i32.const 42) (get_local 0)) (i32.const 43))) (export "" 0))`, /unused values not explicitly dropped by end of block/); +wasmFailValidateText(`(module (func (result i32) (param i32) (block (br_if 0 (i32.const 42) (local.get 0)) (i32.const 43))) (export "" 0))`, /unused values not explicitly dropped by end of block/); -var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (drop (br_if 0 (i32.const 42) (get_local 0))) (i32.const 43))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (drop (br_if 0 (i32.const 42) (local.get 0))) (i32.const 43))) (export "" 0))`).exports[""]; assertEq(f(0), 43); assertEq(f(1), 42); -var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (if (get_local 0) (drop (i32.const 42))) (br 0 (i32.const 43)))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (if (local.get 0) (drop (i32.const 42))) (br 0 (i32.const 43)))) (export "" 0))`).exports[""]; assertEq(f(0), 43); assertEq(f(1), 43); -wasmFailValidateText(`(module (func (result i32) (param i32) (block i32 (if i32 (get_local 0) (br 0 (i32.const 42))) (br 0 (i32.const 43)))) (export "" 0))`, /if without else with a result value/); +wasmFailValidateText(`(module (func (result i32) (param i32) (block i32 (if i32 (local.get 0) (br 0 (i32.const 42))) (br 0 (i32.const 43)))) (export "" 0))`, /if without else with a result value/); -var f = wasmEvalText(`(module (func (result i32) (param i32) (if (get_local 0) (br 1 (i32.const 42))) (br 0 (i32.const 43))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (result i32) (param i32) (if (local.get 0) (br 1 (i32.const 42))) (br 0 (i32.const 43))) (export "" 0))`).exports[""]; assertEq(f(0), 43); assertEq(f(1), 42); -var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (if (get_local 0) (br 1 (i32.const 42))) (br 0 (i32.const 43)))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (if (local.get 0) (br 1 (i32.const 42))) (br 0 (i32.const 43)))) (export "" 0))`).exports[""]; assertEq(f(0), 43); assertEq(f(1), 42); -var f = wasmEvalText(`(module (func (result i32) (param i32) (br_if 0 (i32.const 42) (get_local 0)) (br 0 (i32.const 43))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (result i32) (param i32) (br_if 0 (i32.const 42) (local.get 0)) (br 0 (i32.const 43))) (export "" 0))`).exports[""]; assertEq(f(0), 43); assertEq(f(1), 42); -var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (br_if 0 (i32.const 42) (get_local 0)) (br 0 (i32.const 43)))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (result i32) (param i32) (block i32 (br_if 0 (i32.const 42) (local.get 0)) (br 0 (i32.const 43)))) (export "" 0))`).exports[""]; assertEq(f(0), 43); assertEq(f(1), 42); -var f = wasmEvalText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block i32 (if (get_local 0) (drop (i32.const 99))) (i32.const -1)))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block i32 (if (local.get 0) (drop (i32.const 99))) (i32.const -1)))) (export "" 0))`).exports[""]; assertEq(f(0), 0); assertEq(f(1), 0); -wasmFailValidateText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block i32 (if i32 (get_local 0) (br 0 (i32.const 99))) (i32.const -1)))) (export "" 0))`, /if without else with a result value/); +wasmFailValidateText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block i32 (if i32 (local.get 0) (br 0 (i32.const 99))) (i32.const -1)))) (export "" 0))`, /if without else with a result value/); -var f = wasmEvalText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block i32 (if (get_local 0) (br 1 (i32.const 99))) (i32.const -1)))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block i32 (if (local.get 0) (br 1 (i32.const 99))) (i32.const -1)))) (export "" 0))`).exports[""]; assertEq(f(0), 0); assertEq(f(1), 100); -wasmFailValidateText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block (br_if 0 (i32.const 99) (get_local 0)) (i32.const -1)))) (export "" 0))`, /unused values not explicitly dropped by end of block/); +wasmFailValidateText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block (br_if 0 (i32.const 99) (local.get 0)) (i32.const -1)))) (export "" 0))`, /unused values not explicitly dropped by end of block/); -var f = wasmEvalText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block i32 (drop (br_if 0 (i32.const 99) (get_local 0))) (i32.const -1)))) (export "" 0))`).exports[""]; +var f = wasmEvalText(`(module (func (param i32) (result i32) (i32.add (i32.const 1) (block i32 (drop (br_if 0 (i32.const 99) (local.get 0))) (i32.const -1)))) (export "" 0))`).exports[""]; assertEq(f(0), 0); assertEq(f(1), 100); @@ -395,11 +395,11 @@ var f = wasmEvalText(`(module (param i32) (result i32) (block $outer (if - (get_local 0) + (local.get 0) (block (call 0 (i32.const 13)) (br $outer)) ) (if - (i32.eqz (get_local 0)) + (i32.eqz (local.get 0)) (block (call 1 (i32.const 37)) (br $outer)) ) ) @@ -412,16 +412,16 @@ assertEq(f(1), 42); assertEq(called, 0); // br/br_if and loop -wasmFullPass(`(module (func (param i32) (result i32) (loop $out $in i32 (br $out (get_local 0)))) (export "run" 0))`, 1, {}, 1); -wasmFullPass(`(module (func (param i32) (result i32) (loop $in i32 (br 1 (get_local 0)))) (export "run" 0))`, 1, {}, 1); -wasmFullPass(`(module (func (param i32) (result i32) (block $out i32 (loop $in i32 (br $out (get_local 0))))) (export "run" 0))`, 1, {}, 1); +wasmFullPass(`(module (func (param i32) (result i32) (loop $out $in i32 (br $out (local.get 0)))) (export "run" 0))`, 1, {}, 1); +wasmFullPass(`(module (func (param i32) (result i32) (loop $in i32 (br 1 (local.get 0)))) (export "run" 0))`, 1, {}, 1); +wasmFullPass(`(module (func (param i32) (result i32) (block $out i32 (loop $in i32 (br $out (local.get 0))))) (export "run" 0))`, 1, {}, 1); wasmFailValidateText(`(module (func (param i32) (result i32) (loop $out $in - (if (get_local 0) (br $in (i32.const 1))) - (if (get_local 0) (br $in (f32.const 2))) - (if (get_local 0) (br $in (f64.const 3))) - (if (get_local 0) (br $in)) + (if (local.get 0) (br $in (i32.const 1))) + (if (local.get 0) (br $in (f32.const 2))) + (if (local.get 0) (br $in (f64.const 3))) + (if (local.get 0) (br $in)) (i32.const 7) ) ) (export "" 0))`, /unused values not explicitly dropped by end of block/); @@ -432,10 +432,10 @@ wasmFullPass(`(module (local i32) (block $out i32 (loop $in i32 - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (if - (i32.ge_s (get_local 0) (i32.const 7)) - (br $out (get_local 0)) + (i32.ge_s (local.get 0) (i32.const 7)) + (br $out (local.get 0)) ) (br $in) ) @@ -449,8 +449,8 @@ wasmFullPass(`(module (local i32) (block $out i32 (loop $in i32 - (set_local 0 (i32.add (get_local 0) (i32.const 1))) - (br_if $out (get_local 0) (i32.ge_s (get_local 0) (i32.const 7))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) + (br_if $out (local.get 0) (i32.ge_s (local.get 0) (i32.const 7))) (br $in) ) ) @@ -477,13 +477,13 @@ wasmFullPass(`(module (func (result i32) (local i32) (loop $break $continue (if - (i32.gt_u (get_local 0) (i32.const 5)) + (i32.gt_u (local.get 0) (i32.const 5)) (br $break) ) - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (br $continue) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); wasmFullPass(`(module (func (result i32) (local i32) @@ -492,14 +492,14 @@ wasmFullPass(`(module (func (result i32) (local i32) (loop $continue (if - (i32.gt_u (get_local 0) (i32.const 5)) + (i32.gt_u (local.get 0) (i32.const 5)) (br $break) ) - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (br $continue) ) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); wasmFullPass(`(module (func (result i32) (local i32) @@ -507,12 +507,12 @@ wasmFullPass(`(module (func (result i32) (local i32) $break $continue (br_if $break - (i32.gt_u (get_local 0) (i32.const 5)) + (i32.gt_u (local.get 0) (i32.const 5)) ) - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (br $continue) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); wasmFullPass(`(module (func (result i32) (local i32) @@ -522,25 +522,25 @@ wasmFullPass(`(module (func (result i32) (local i32) $continue (br_if $break - (i32.gt_u (get_local 0) (i32.const 5)) + (i32.gt_u (local.get 0) (i32.const 5)) ) - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (br $continue) ) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); wasmFullPass(`(module (func (result i32) (local i32) (loop $break $continue - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (br_if $continue - (i32.le_u (get_local 0) (i32.const 5)) + (i32.le_u (local.get 0) (i32.const 5)) ) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); wasmFullPass(`(module (func (result i32) (local i32) @@ -548,14 +548,14 @@ wasmFullPass(`(module (func (result i32) (local i32) $break (loop $continue - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (br_if $continue - (i32.le_u (get_local 0) (i32.const 5)) + (i32.le_u (local.get 0) (i32.const 5)) ) ) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); wasmFullPass(`(module (func (result i32) (local i32) @@ -563,15 +563,15 @@ wasmFullPass(`(module (func (result i32) (local i32) $break $continue (br_if $break - (i32.gt_u (get_local 0) (i32.const 5)) + (i32.gt_u (local.get 0) (i32.const 5)) ) - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (loop (br $continue) ) (return (i32.const 42)) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); wasmFullPass(`(module (func (result i32) (local i32) @@ -581,31 +581,31 @@ wasmFullPass(`(module (func (result i32) (local i32) $continue (br_if $break - (i32.gt_u (get_local 0) (i32.const 5)) + (i32.gt_u (local.get 0) (i32.const 5)) ) - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (loop (br $continue) ) (return (i32.const 42)) ) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); wasmFullPass(`(module (func (result i32) (local i32) (loop $break $continue - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (loop (br_if $continue - (i32.le_u (get_local 0) (i32.const 5)) + (i32.le_u (local.get 0) (i32.const 5)) ) ) (br $break) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); wasmFullPass(`(module (func (result i32) (local i32) @@ -613,17 +613,17 @@ wasmFullPass(`(module (func (result i32) (local i32) $break (loop $continue - (set_local 0 (i32.add (get_local 0) (i32.const 1))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) (loop (br_if $continue - (i32.le_u (get_local 0) (i32.const 5)) + (i32.le_u (local.get 0) (i32.const 5)) ) ) (br $break) ) ) - (return (get_local 0)) + (return (local.get 0)) ) (export "run" 0))`, 6); // ---------------------------------------------------------------------------- @@ -641,7 +641,7 @@ wasmFailValidateText('(module (func (loop (br_table 0 (f32.const 0)))))', mismat wasmFullPass(`(module (func (result i32) (param i32) (block $default - (br_table $default (get_local 0)) + (br_table $default (local.get 0)) (return (i32.const 0)) ) (return (i32.const 1)) @@ -658,7 +658,7 @@ wasmFullPass(`(module (func (result i32) (param i32) wasmFullPass(`(module (func (result i32) (param i32) (block $outer (block $inner - (br_table $inner (get_local 0)) + (br_table $inner (local.get 0)) (return (i32.const 0)) ) (return (i32.const 1)) @@ -671,7 +671,7 @@ var f = wasmEvalText(`(module (func (result i32) (param i32) (block $1 (block $2 (block $default - (br_table $0 $1 $2 $default (get_local 0)) + (br_table $0 $1 $2 $default (local.get 0)) ) (return (i32.const -1)) ) @@ -711,11 +711,11 @@ var f = wasmEvalText(`(module (func (param i32) (result i32) (block $1 i32 (drop (block $0 i32 (drop (block $default i32 - (br_table $0 $1 $default (get_local 0) (get_local 0)) + (br_table $0 $1 $default (local.get 0) (local.get 0)) )) - (tee_local 0 (i32.mul (i32.const 2) (get_local 0))) + (tee_local 0 (i32.mul (i32.const 2) (local.get 0))) )) - (tee_local 0 (i32.add (i32.const 4) (get_local 0))) + (tee_local 0 (i32.add (i32.const 4) (local.get 0))) ) (i32.const 1) ) diff --git a/js/src/jit-test/tests/wasm/conversion.js b/js/src/jit-test/tests/wasm/conversion.js index 3c0e27caf62d..d8a0af97fa0a 100644 --- a/js/src/jit-test/tests/wasm/conversion.js +++ b/js/src/jit-test/tests/wasm/conversion.js @@ -2,7 +2,7 @@ function testConversion0(resultType, opcode, paramType, op, expect) { if (resultType === 'i64') { wasmFullPassI64(`(module (func $run (param ${paramType}) (result ${resultType}) - (${opcode} (get_local 0)) + (${opcode} (local.get 0)) ) )`, expect, {}, `${paramType}.const ${op}`); @@ -15,7 +15,7 @@ function testConversion0(resultType, opcode, paramType, op, expect) { } else if (paramType === 'i64') { wasmFullPass(`(module (func $f (param ${paramType}) (result ${resultType}) - (${opcode} (get_local 0)) + (${opcode} (local.get 0)) ) (func (export "run") (result ${resultType}) i64.const ${op} @@ -25,7 +25,7 @@ function testConversion0(resultType, opcode, paramType, op, expect) { } else { wasmFullPass(`(module (func (param ${paramType}) (result ${resultType}) - (${opcode} (get_local 0))) + (${opcode} (local.get 0))) (export "run" 0) )`, expect, {}, op); } @@ -33,14 +33,14 @@ function testConversion0(resultType, opcode, paramType, op, expect) { for (var bad of ['i32', 'f32', 'f64', 'i64']) { if (bad !== resultType) { wasmFailValidateText( - `(module (func (param ${paramType}) (result ${bad}) (${opcode} (get_local 0))))`, + `(module (func (param ${paramType}) (result ${bad}) (${opcode} (local.get 0))))`, mismatchError(resultType, bad) ); } if (bad !== paramType) { wasmFailValidateText( - `(module (func (param ${bad}) (result ${resultType}) (${opcode} (get_local 0))))`, + `(module (func (param ${bad}) (result ${resultType}) (${opcode} (local.get 0))))`, mismatchError(bad, paramType) ); } @@ -60,11 +60,11 @@ function testTrap(resultType, opcode, paramType, op) { (func (param ${paramType}) (result ${resultType}) - (${resultType}.${opcode}/${paramType} (get_local 0)) + (${resultType}.${opcode}/${paramType} (local.get 0)) ) (func (param ${paramType}) - get_local 0 + local.get 0 call 0 drop ) @@ -367,4 +367,4 @@ testConversion('f64', 'promote', 'f32', 40.1, 40.099998474121094); // Non-canonical NaNs. wasmFullPass('(module (func (result i32) (i32.reinterpret/f32 (f32.demote/f64 (f64.const -nan:0x4444444444444)))) (export "run" 0))', -0x1dddde); -wasmFullPass('(module (func (result i32) (local i64) (set_local 0 (i64.reinterpret/f64 (f64.promote/f32 (f32.const -nan:0x222222)))) (i32.xor (i32.wrap/i64 (get_local 0)) (i32.wrap/i64 (i64.shr_u (get_local 0) (i64.const 32))))) (export "run" 0))', -0x4003bbbc); +wasmFullPass('(module (func (result i32) (local i64) (local.set 0 (i64.reinterpret/f64 (f64.promote/f32 (f32.const -nan:0x222222)))) (i32.xor (i32.wrap/i64 (local.get 0)) (i32.wrap/i64 (i64.shr_u (local.get 0) (i64.const 32))))) (export "run" 0))', -0x4003bbbc); diff --git a/js/src/jit-test/tests/wasm/drop.js b/js/src/jit-test/tests/wasm/drop.js index 90d0ae5942e2..8e91356319b9 100644 --- a/js/src/jit-test/tests/wasm/drop.js +++ b/js/src/jit-test/tests/wasm/drop.js @@ -2,8 +2,8 @@ for (let type of ['i32', 'f32', 'f64']) { assertEq(wasmEvalText(` (module (func $test (result ${type}) (param $p ${type}) (param $p2 ${type}) - get_local $p - get_local $p2 + local.get $p + local.get $p2 (block) drop ) @@ -15,10 +15,10 @@ for (let type of ['i32', 'f32', 'f64']) { assertEq(wasmEvalText(` (module (func $test (result i32) (param $p i32) (param $p2 f32) (param $p3 f64) (param $p4 i32) - get_local $p - get_local $p2 - get_local $p3 - get_local $p4 + local.get $p + local.get $p2 + local.get $p3 + local.get $p4 (block) drop (block) @@ -33,8 +33,8 @@ assertEq(wasmEvalText(` wasmAssert(` (module (func $test (result i64) (param $p i64) (param $p2 i64) - get_local $p - get_local $p2 + local.get $p + local.get $p2 (block) drop ) diff --git a/js/src/jit-test/tests/wasm/errors.js b/js/src/jit-test/tests/wasm/errors.js index 44bc2504f6c5..896eed1ec0cd 100644 --- a/js/src/jit-test/tests/wasm/errors.js +++ b/js/src/jit-test/tests/wasm/errors.js @@ -70,12 +70,12 @@ function testAccess(opcode, text, width, type, msg) { } function testLoad(opcode, optext, width, type, msg) { - var text = `(module (memory 1) (func (export "") (param i32) (drop (${optext} (get_local 0)))))`; + var text = `(module (memory 1) (func (export "") (param i32) (drop (${optext} (local.get 0)))))`; testAccess(opcode, text, width, type, msg); } function testStore(opcode, optext, consttext, width, type, msg) { - var text = `(module (memory 1) (func (export "") (param i32) (${optext} (get_local 0) (${consttext}.const 0))))`; + var text = `(module (memory 1) (func (export "") (param i32) (${optext} (local.get 0) (${consttext}.const 0))))`; testAccess(opcode, text, width, type, msg); } diff --git a/js/src/jit-test/tests/wasm/fac.js b/js/src/jit-test/tests/wasm/fac.js index c032f9ecaaad..b4eca7170d85 100644 --- a/js/src/jit-test/tests/wasm/fac.js +++ b/js/src/jit-test/tests/wasm/fac.js @@ -3,16 +3,16 @@ assertEq(wasmEvalText(`(module (func $fac-opt (param i32) (result i32) (local i32) - (set_local 1 (i32.const 1)) + (local.set 1 (i32.const 1)) (block - (br_if 0 (i32.lt_s (get_local 0) (i32.const 2))) + (br_if 0 (i32.lt_s (local.get 0) (i32.const 2))) (loop - (set_local 1 (i32.mul (get_local 1) (get_local 0))) - (set_local 0 (i32.add (get_local 0) (i32.const -1))) - (br_if 0 (i32.gt_s (get_local 0) (i32.const 1))) + (local.set 1 (i32.mul (local.get 1) (local.get 0))) + (local.set 0 (i32.add (local.get 0) (i32.const -1))) + (br_if 0 (i32.gt_s (local.get 0) (i32.const 1))) ) ) - (get_local 1) + (local.get 1) ) (export "" 0) diff --git a/js/src/jit-test/tests/wasm/float-unaligned.js b/js/src/jit-test/tests/wasm/float-unaligned.js index 52ff1632d90d..a22ffe5feecf 100644 --- a/js/src/jit-test/tests/wasm/float-unaligned.js +++ b/js/src/jit-test/tests/wasm/float-unaligned.js @@ -35,7 +35,7 @@ function makeLoadStore(numBallast, ty, offset) { (i32.store (i32.const 8) (i32.add (i32.load (i32.const 8)) (i32.const 1))) (${ty}.load (i32.const 8))`)} - (${ty}.store (i32.const 0) (${ty}.load offset=${offset} (get_local $p))) + (${ty}.store (i32.const 0) (${ty}.load offset=${offset} (local.get $p))) ${ballast(() => ` ${ty}.store`)} @@ -51,12 +51,12 @@ function makeLoadStore(numBallast, ty, offset) { (i32.store (i32.const 8) (i32.add (i32.load (i32.const 8)) (i32.const 1))) (${ty}.load (i32.const 8))`)} - (set_local $tmp (${ty}.add (get_local $v) (${ty}.load (i32.const 16)))) - (${ty}.store offset=${offset} (get_local $p) (get_local $tmp)) + (local.set $tmp (${ty}.add (local.get $v) (${ty}.load (i32.const 16)))) + (${ty}.store offset=${offset} (local.get $p) (local.get $tmp)) ${ballast(() => ` ${ty}.store`)} - (${ty}.store (i32.const 8) (get_local $v)))`; + (${ty}.store (i32.const 8) (local.get $v)))`; return `${loadtxt} ${storetxt}`; diff --git a/js/src/jit-test/tests/wasm/float.js b/js/src/jit-test/tests/wasm/float.js index 11d3e018b834..21df5ab6a48c 100644 --- a/js/src/jit-test/tests/wasm/float.js +++ b/js/src/jit-test/tests/wasm/float.js @@ -12,21 +12,21 @@ wasmFullPass('(module (func (result f64) (f64.const -9223372036854775808)) (expo wasmFullPass('(module (func (result f64) (f64.const 1797693134862315708145274e284)) (export "run" 0))', 1797693134862315708145274e284); function testUnary(type, opcode, op, expect) { - wasmFullPass('(module (func (param ' + type + ') (result ' + type + ') (' + type + '.' + opcode + ' (get_local 0))) (export "run" 0))', + wasmFullPass('(module (func (param ' + type + ') (result ' + type + ') (' + type + '.' + opcode + ' (local.get 0))) (export "run" 0))', expect, {}, op); } function testBinary(type, opcode, lhs, rhs, expect) { - wasmFullPass('(module (func (param ' + type + ') (param ' + type + ') (result ' + type + ') (' + type + '.' + opcode + ' (get_local 0) (get_local 1))) (export "run" 0))', + wasmFullPass('(module (func (param ' + type + ') (param ' + type + ') (result ' + type + ') (' + type + '.' + opcode + ' (local.get 0) (local.get 1))) (export "run" 0))', expect, {}, lhs, rhs); } function testComparison(type, opcode, lhs, rhs, expect) { - wasmFullPass('(module (func (param ' + type + ') (param ' + type + ') (result i32) (' + type + '.' + opcode + ' (get_local 0) (get_local 1))) (export "run" 0))', + wasmFullPass('(module (func (param ' + type + ') (param ' + type + ') (result i32) (' + type + '.' + opcode + ' (local.get 0) (local.get 1))) (export "run" 0))', expect, {}, lhs, rhs); @@ -78,26 +78,26 @@ testComparison('f64', 'le', 40, 40, 1); testComparison('f64', 'gt', 40, 40, 0); testComparison('f64', 'ge', 40, 40, 1); -wasmFailValidateText('(module (func (param i32) (result f32) (f32.sqrt (get_local 0))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param f32) (result i32) (f32.sqrt (get_local 0))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (param i32) (result i32) (f32.sqrt (get_local 0))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param i32) (result f64) (f64.sqrt (get_local 0))))', mismatchError("i32", "f64")); -wasmFailValidateText('(module (func (param f64) (result i32) (f64.sqrt (get_local 0))))', mismatchError("f64", "i32")); -wasmFailValidateText('(module (func (param i32) (result i32) (f64.sqrt (get_local 0))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param i32) (result f32) (f32.sqrt (local.get 0))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (result i32) (f32.sqrt (local.get 0))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param i32) (result i32) (f32.sqrt (local.get 0))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param i32) (result f64) (f64.sqrt (local.get 0))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (result i32) (f64.sqrt (local.get 0))))', mismatchError("f64", "i32")); +wasmFailValidateText('(module (func (param i32) (result i32) (f64.sqrt (local.get 0))))', mismatchError("i32", "f64")); wasmFailValidateText('(module (func (f32.sqrt (nop))))', /popping value from empty stack/); -wasmFailValidateText('(module (func (param i32) (param f32) (result f32) (f32.add (get_local 0) (get_local 1))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param f32) (param i32) (result f32) (f32.add (get_local 0) (get_local 1))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param f32) (param f32) (result i32) (f32.add (get_local 0) (get_local 1))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (param i32) (param i32) (result i32) (f32.add (get_local 0) (get_local 1))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param i32) (param f64) (result f64) (f64.add (get_local 0) (get_local 1))))', mismatchError("i32", "f64")); -wasmFailValidateText('(module (func (param f64) (param i32) (result f64) (f64.add (get_local 0) (get_local 1))))', mismatchError("i32", "f64")); -wasmFailValidateText('(module (func (param f64) (param f64) (result i32) (f64.add (get_local 0) (get_local 1))))', mismatchError("f64", "i32")); -wasmFailValidateText('(module (func (param i32) (param i32) (result i32) (f64.add (get_local 0) (get_local 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param i32) (param f32) (result f32) (f32.add (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param i32) (result f32) (f32.add (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param f32) (result i32) (f32.add (local.get 0) (local.get 1))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param i32) (param i32) (result i32) (f32.add (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param i32) (param f64) (result f64) (f64.add (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (param i32) (result f64) (f64.add (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (param f64) (result i32) (f64.add (local.get 0) (local.get 1))))', mismatchError("f64", "i32")); +wasmFailValidateText('(module (func (param i32) (param i32) (result i32) (f64.add (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); -wasmFailValidateText('(module (func (param i32) (param f32) (result f32) (f32.eq (get_local 0) (get_local 1))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param f32) (param i32) (result f32) (f32.eq (get_local 0) (get_local 1))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param f32) (param f32) (result f32) (f32.eq (get_local 0) (get_local 1))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param i32) (param f64) (result f64) (f64.eq (get_local 0) (get_local 1))))', mismatchError("i32", "f64")); -wasmFailValidateText('(module (func (param f64) (param i32) (result f64) (f64.eq (get_local 0) (get_local 1))))', mismatchError("i32", "f64")); -wasmFailValidateText('(module (func (param f64) (param f64) (result f64) (f64.eq (get_local 0) (get_local 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param i32) (param f32) (result f32) (f32.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param i32) (result f32) (f32.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param f32) (result f32) (f32.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param i32) (param f64) (result f64) (f64.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (param i32) (result f64) (f64.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); +wasmFailValidateText('(module (func (param f64) (param f64) (result f64) (f64.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f64")); diff --git a/js/src/jit-test/tests/wasm/full-cycle.js b/js/src/jit-test/tests/wasm/full-cycle.js index 22844774a742..cf55af9afd44 100644 --- a/js/src/jit-test/tests/wasm/full-cycle.js +++ b/js/src/jit-test/tests/wasm/full-cycle.js @@ -1,5 +1,5 @@ wasmFullPass(`(module - (func $test (result i32) (param i32) (param i32) (i32.add (get_local 0) (get_local 1))) + (func $test (result i32) (param i32) (param i32) (i32.add (local.get 0) (local.get 1))) (func $run (result i32) (call $test (i32.const 1) (i32.const ${Math.pow(2, 31) - 1}))) (export "run" $run) )`, -Math.pow(2, 31)); @@ -23,7 +23,7 @@ wasmFullPass(` (module (import "env" "a" (global $a i32)) (import "env" "b" (func $b (param i32) (result i32))) - (func (export "run") (param $0 i32) (result i32) get_local 0 call $b) + (func (export "run") (param $0 i32) (result i32) local.get 0 call $b) )`, 43, { env: { a: 1337, b: x => x+1 } }, 42); // Global section. @@ -31,16 +31,16 @@ wasmFullPass(`(module (import $imported "globals" "x" (global i32)) (global $mut_local (mut i32) (i32.const 0)) (global $imm_local i32 (i32.const 37)) - (global $imm_local_2 i32 (get_global 0)) + (global $imm_local_2 i32 (global.get 0)) (func $get (result i32) i32.const 13 - set_global $mut_local - get_global $imported - get_global $mut_local + global.set $mut_local + global.get $imported + global.get $mut_local i32.add - get_global $imm_local + global.get $imm_local i32.add - get_global $imm_local_2 + global.get $imm_local_2 i32.add ) (export "run" $get) @@ -79,7 +79,7 @@ wasmFullPass(`(module (elem (i32.const 0) $baz $bar) (elem (i32.const 2) $foo) (func (export "run") (param i32) (result i32) - get_local 0 + local.get 0 call_indirect $t ) )`, 3, {}, 0); @@ -95,7 +95,7 @@ wasmFullPass(`(module (elem (i32.const 0) $baz $bar) (elem (i32.const 2) $foo) (func (export "run") (param i32) (result i32) - get_local 0 + local.get 0 call_indirect $t ) )`, 3, {"":{table}}, 0); @@ -104,14 +104,14 @@ wasmFullPass(`(module wasmFullPass(`(module (global $g (mut i32) (i32.const 0)) (func $start - get_global $g + global.get $g i32.const 1 i32.add - set_global $g + global.set $g ) (start $start) (func (export "run") (result i32) - get_global $g + global.get $g ) )`, 1); @@ -125,22 +125,22 @@ for (let [p, result] of [ wasmFullPass(`(module (func (export "run") (result i32) (param $p i32) (local $n i32) i32.const 0 - set_local $n + local.set $n block $c block $b block $a - get_local $p + local.get $p br_table $a $b $c end $a - get_local $n + local.get $n i32.const 1 i32.add - set_local $n + local.set $n end $b - get_local $n + local.get $n i32.const 2 i32.add - set_local $n + local.set $n end $c - get_local $n + local.get $n i32.const 4 i32.add ) diff --git a/js/src/jit-test/tests/wasm/gc/TypedObject.js b/js/src/jit-test/tests/wasm/gc/TypedObject.js index 3709704740cd..809d20710c06 100644 --- a/js/src/jit-test/tests/wasm/gc/TypedObject.js +++ b/js/src/jit-test/tests/wasm/gc/TypedObject.js @@ -137,9 +137,9 @@ (type $p (struct (field i64))) (type $q (struct (field i32) (field i32))) (func $f (param anyref) (result i32) - (ref.is_null (struct.narrow anyref (ref $q) (get_local 0)))) + (ref.is_null (struct.narrow anyref (ref $q) (local.get 0)))) (func $g (param anyref) (result i32) - (ref.is_null (struct.narrow anyref (ref $p) (get_local 0)))) + (ref.is_null (struct.narrow anyref (ref $p) (local.get 0)))) (func (export "t1") (result i32) (call $f (struct.new $p (i64.const 0)))) (func (export "t2") (result i32) diff --git a/js/src/jit-test/tests/wasm/gc/anyref-boxing-struct.js b/js/src/jit-test/tests/wasm/gc/anyref-boxing-struct.js index 24055eca87e7..2c522932bef1 100644 --- a/js/src/jit-test/tests/wasm/gc/anyref-boxing-struct.js +++ b/js/src/jit-test/tests/wasm/gc/anyref-boxing-struct.js @@ -46,7 +46,7 @@ for (let v of VALUES) (gc_feature_opt_in 3) (type $S (struct (field $S.x (mut anyref)))) (func (export "make") (param $v anyref) (result anyref) - (struct.new $S (get_local $v))))`); + (struct.new $S (local.get $v))))`); let x = ins.exports.make(v); assertEq(x._0, v); } @@ -62,7 +62,7 @@ for (let v of VALUES) (func (export "make") (result anyref) (struct.new $S (ref.null))) (func (export "get") (param $o anyref) (result anyref) - (struct.get $S 0 (struct.narrow anyref (ref $S) (get_local $o)))))`); + (struct.get $S 0 (struct.narrow anyref (ref $S) (local.get $o)))))`); let x = ins.exports.make(); x._0 = v; assertEq(ins.exports.get(x), v); @@ -79,7 +79,7 @@ for (let v of VALUES) (func (export "make") (result anyref) (struct.new $S (ref.null))) (func (export "get") (param $o anyref) (result anyref) - (struct.get $S 0 (struct.narrow anyref (ref $S) (get_local $o)))))`); + (struct.get $S 0 (struct.narrow anyref (ref $S) (local.get $o)))))`); let constructor = ins.exports.make().constructor; let x = new constructor({_0: v}); assertEq(ins.exports.get(x), v); @@ -147,7 +147,7 @@ for (let v of VALUES) { { let fields = iota(10).map(() => `(field anyref)`).join(' '); let params = iota(10).map((i) => `(param $${i} anyref)`).join(' '); - let args = iota(10).map((i) => `(get_local $${i})`).join(' '); + let args = iota(10).map((i) => `(local.get $${i})`).join(' '); let txt = `(module (gc_feature_opt_in 3) (type $S (struct ${fields})) diff --git a/js/src/jit-test/tests/wasm/gc/anyref-boxing.js b/js/src/jit-test/tests/wasm/gc/anyref-boxing.js index 5c1b1cbe0174..8423900efdff 100644 --- a/js/src/jit-test/tests/wasm/gc/anyref-boxing.js +++ b/js/src/jit-test/tests/wasm/gc/anyref-boxing.js @@ -26,12 +26,12 @@ let VALUES = [null, // - on initialization when created from JS // - on initialization when created in Wasm, from an imported global // - through the "value" property if the value is mutable -// - through the set_global wasm instruction, ditto +// - through the global.set wasm instruction, ditto // // Their values can be obtained in several ways: // // - through the "value" property -// - through the get_global wasm instruction +// - through the global.get wasm instruction // - read when other globals are initialized from them // Set via initialization and read via 'value' @@ -51,7 +51,7 @@ for (let v of VALUES) assertEq(g.value, v); } -// Set via initialization, then read via get_global and returned +// Set via initialization, then read via global.get and returned for (let v of VALUES) { @@ -60,12 +60,12 @@ for (let v of VALUES) `(module (import $glob "m" "g" (global anyref)) (func (export "f") (result anyref) - (get_global $glob)))`, + (global.get $glob)))`, {m:{g}}); assertEq(ins.exports.f(), v); } -// Set via set_global, then read via 'value' +// Set via global.set, then read via 'value' for (let v of VALUES) { @@ -74,7 +74,7 @@ for (let v of VALUES) `(module (import $glob "m" "g" (global (mut anyref))) (func (export "f") (param $v anyref) - (set_global $glob (get_local $v))))`, + (global.set $glob (local.get $v))))`, {m:{g}}); ins.exports.f(v); assertEq(g.value, v); @@ -112,7 +112,7 @@ for (let v of VALUES) `(module (import $t "m" "t" (table 10 anyref)) (func (export "f") (param $v anyref) - (table.set $t (i32.const 3) (get_local $v))))`, + (table.set $t (i32.const 3) (local.get $v))))`, {m:{t}}); ins.exports.f(v); assertEq(t.get(3), v); @@ -147,7 +147,7 @@ for (let v of VALUES) (func (export "test_returner") (result anyref) (call $returner)) (func (export "test_receiver") (param $v anyref) - (call $receiver (get_local $v))))`, + (call $receiver (local.get $v))))`, {m:{returner, receiver}}); assertEq(ins.exports.test_returner(), v); ins.exports.test_receiver(v); diff --git a/js/src/jit-test/tests/wasm/gc/anyref-global-postbarrier.js b/js/src/jit-test/tests/wasm/gc/anyref-global-postbarrier.js index ab3c8fad53d3..fa34a32c7075 100644 --- a/js/src/jit-test/tests/wasm/gc/anyref-global-postbarrier.js +++ b/js/src/jit-test/tests/wasm/gc/anyref-global-postbarrier.js @@ -12,10 +12,10 @@ function Baguette(calories) { wasmEvalText(`(module (global (mut anyref) (ref.null)) (func (export "f") - get_global 0 + global.get 0 ref.null - set_global 0 - set_global 0 + global.set 0 + global.set 0 ) )`).exports.f(); })(); @@ -23,14 +23,14 @@ function Baguette(calories) { let exportsPlain = wasmEvalText(`(module (global i32 (i32.const 42)) (global $g (mut anyref) (ref.null)) - (func (export "set") (param anyref) get_local 0 set_global $g) - (func (export "get") (result anyref) get_global $g) + (func (export "set") (param anyref) local.get 0 global.set $g) + (func (export "get") (result anyref) global.get $g) )`).exports; let exportsObj = wasmEvalText(`(module (global $g (export "g") (mut anyref) (ref.null)) - (func (export "set") (param anyref) get_local 0 set_global $g) - (func (export "get") (result anyref) get_global $g) + (func (export "set") (param anyref) local.get 0 global.set $g) + (func (export "get") (result anyref) global.get $g) )`).exports; // 7 => Generational GC zeal. diff --git a/js/src/jit-test/tests/wasm/gc/anyref-global-prebarrier.js b/js/src/jit-test/tests/wasm/gc/anyref-global-prebarrier.js index 1935c5bcd0da..2da30df1a5fc 100644 --- a/js/src/jit-test/tests/wasm/gc/anyref-global-prebarrier.js +++ b/js/src/jit-test/tests/wasm/gc/anyref-global-prebarrier.js @@ -11,7 +11,7 @@ const { startProfiling, endProfiling, assertEqPreciseStacks, isSingleStepProfili let e = wasmEvalText(`(module (global $g (mut anyref) (ref.null)) - (func (export "set") (param anyref) get_local 0 set_global $g) + (func (export "set") (param anyref) local.get 0 global.set $g) )`).exports; let obj = { field: null }; diff --git a/js/src/jit-test/tests/wasm/gc/anyref-refeq.js b/js/src/jit-test/tests/wasm/gc/anyref-refeq.js index 026c5096575b..89ab77a66401 100644 --- a/js/src/jit-test/tests/wasm/gc/anyref-refeq.js +++ b/js/src/jit-test/tests/wasm/gc/anyref-refeq.js @@ -6,10 +6,10 @@ let { exports } = wasmEvalText(`(module (gc_feature_opt_in 3) (func (export "ref_eq") (param $a anyref) (param $b anyref) (result i32) - (ref.eq (get_local $a) (get_local $b))) + (ref.eq (local.get $a) (local.get $b))) (func (export "ref_eq_for_control") (param $a anyref) (param $b anyref) (result f64) - (if f64 (ref.eq (get_local $a) (get_local $b)) + (if f64 (ref.eq (local.get $a) (local.get $b)) (f64.const 5.0) (f64.const 3.0))))`); diff --git a/js/src/jit-test/tests/wasm/gc/anyref-val-tracing.js b/js/src/jit-test/tests/wasm/gc/anyref-val-tracing.js index bcec3ef8c50b..af0f76a6be71 100644 --- a/js/src/jit-test/tests/wasm/gc/anyref-val-tracing.js +++ b/js/src/jit-test/tests/wasm/gc/anyref-val-tracing.js @@ -3,7 +3,7 @@ gczeal(14, 1); let { exports } = wasmEvalText(`(module (global $anyref (import "glob" "anyref") anyref) - (func (export "get") (result anyref) get_global $anyref) + (func (export "get") (result anyref) global.get $anyref) )`, { glob: { anyref: { sentinel: "lol" }, diff --git a/js/src/jit-test/tests/wasm/gc/anyref.js b/js/src/jit-test/tests/wasm/gc/anyref.js index 95dc77d21c33..072f22e01ff5 100644 --- a/js/src/jit-test/tests/wasm/gc/anyref.js +++ b/js/src/jit-test/tests/wasm/gc/anyref.js @@ -42,7 +42,7 @@ let simpleTests = [ "(module (func $test (param anyref)))", "(module (func $test (result anyref) (ref.null)))", "(module (func $test (block anyref (unreachable)) unreachable))", - "(module (func $test (local anyref) (result i32) (ref.is_null (get_local 0))))", + "(module (func $test (local anyref) (result i32) (ref.is_null (local.get 0))))", `(module (import "a" "b" (param anyref)))`, `(module (import "a" "b" (result anyref)))`, `(module (global anyref (ref.null)))`, @@ -63,7 +63,7 @@ let { exports } = wasmEvalText(`(module ) (func $sum (result i32) (param i32) - get_local 0 + local.get 0 i32.const 42 i32.add ) @@ -78,11 +78,11 @@ let { exports } = wasmEvalText(`(module (func (export "is_null_local") (result i32) (local anyref) ref.null - set_local 0 + local.set 0 i32.const 58 call $sum drop - get_local 0 + local.get 0 ref.is_null ) )`); @@ -95,30 +95,30 @@ assertEq(exports.is_null_local(), 1); exports = wasmEvalText(`(module (func (export "is_null") (result i32) (param $ref anyref) - get_local $ref + local.get $ref ref.is_null ) (func (export "ref_or_null") (result anyref) (param $ref anyref) (param $selector i32) - get_local $ref + local.get $ref ref.null - get_local $selector + local.get $selector select ) (func $recursive (export "nested") (result anyref) (param $ref anyref) (param $i i32) ;; i == 10 => ret $ref - get_local $i + local.get $i i32.const 10 i32.eq if - get_local $ref + local.get $ref return end - get_local $ref + local.get $ref - get_local $i + local.get $i i32.const 1 i32.add @@ -173,26 +173,26 @@ function assertJoin(body) { assertEq(val.i, -1); } -assertJoin("(block anyref get_local $ref)"); -assertJoin("(block $out anyref get_local $ref br $out)"); -assertJoin("(loop anyref get_local $ref)"); +assertJoin("(block anyref local.get $ref)"); +assertJoin("(block $out anyref local.get $ref br $out)"); +assertJoin("(loop anyref local.get $ref)"); assertJoin(`(block $out anyref (loop $top anyref - get_local $i + local.get $i i32.const 1 i32.add tee_local $i i32.const 10 i32.eq if - get_local $ref + local.get $ref return end br $top)) `); assertJoin(`(block $out (loop $top - get_local $i + local.get $i i32.const 1 i32.add tee_local $i @@ -201,15 +201,15 @@ assertJoin(`(block $out (loop $top if br $top else - get_local $ref + local.get $ref return end )) unreachable `); assertJoin(`(block $out anyref (loop $top - get_local $ref - get_local $i + local.get $ref + local.get $i i32.const 1 i32.add tee_local $i @@ -221,8 +221,8 @@ assertJoin(`(block $out anyref (loop $top `); assertJoin(`(block $out anyref (block $unreachable anyref (loop $top - get_local $ref - get_local $i + local.get $ref + local.get $i i32.const 1 i32.add tee_local $i @@ -233,9 +233,9 @@ assertJoin(`(block $out anyref (block $unreachable anyref (loop $top let x = { i: 42 }, y = { f: 53 }; exports = wasmEvalText(`(module (func (export "test") (param $lhs anyref) (param $rhs anyref) (param $i i32) (result anyref) - get_local $lhs - get_local $rhs - get_local $i + local.get $lhs + local.get $rhs + local.get $i select ) )`).exports; @@ -290,8 +290,8 @@ exports = wasmEvalText(`(module (import $param "funcs" "param" (param anyref)) (func (export "param") (param $x anyref) (param $y anyref) - get_local $y - get_local $x + local.get $y + local.get $x call $param call $param ) @@ -322,21 +322,21 @@ exports = wasmEvalText(`(module (func $f (param $param anyref) (result anyref) i32.const 1 - get_global $count_f + global.get $count_f i32.add - set_global $count_f + global.set $count_f - get_local $param + local.get $param call $augment ) (func $g (param $param anyref) (result anyref) i32.const 1 - get_global $count_g + global.get $count_g i32.add - set_global $count_g + global.set $count_g - get_local $param + local.get $param call $mirror ) @@ -345,13 +345,13 @@ exports = wasmEvalText(`(module (type $table_type (func (param anyref) (result anyref))) (func (export "call_indirect") (param $i i32) (param $ref anyref) (result anyref) - get_local $ref - get_local $i + local.get $ref + local.get $i call_indirect $table_type ) - (func (export "count_f") (result i32) get_global $count_f) - (func (export "count_g") (result i32) get_global $count_g) + (func (export "count_f") (result i32) global.get $count_f) + (func (export "count_g") (result i32) global.get $count_g) )`, { funcs: { mirror(x) { @@ -422,22 +422,22 @@ exports = wasmEvalText(`(module (global $g_imp_mut_bread (import "constants" "mut_bread") (mut anyref)) (global $g_imm_null anyref (ref.null)) - (global $g_imm_getglob anyref (get_global $g_imp_imm_bread)) + (global $g_imm_getglob anyref (global.get $g_imp_imm_bread)) (global $g_mut (mut anyref) (ref.null)) - (func (export "imm_null") (result anyref) get_global $g_imm_null) - (func (export "imm_getglob") (result anyref) get_global $g_imm_getglob) + (func (export "imm_null") (result anyref) global.get $g_imm_null) + (func (export "imm_getglob") (result anyref) global.get $g_imm_getglob) - (func (export "imp_imm_null") (result anyref) get_global $g_imp_imm_null) - (func (export "imp_imm_bread") (result anyref) get_global $g_imp_imm_bread) - (func (export "imp_mut_null") (result anyref) get_global $g_imp_mut_null) - (func (export "imp_mut_bread") (result anyref) get_global $g_imp_mut_bread) + (func (export "imp_imm_null") (result anyref) global.get $g_imp_imm_null) + (func (export "imp_imm_bread") (result anyref) global.get $g_imp_imm_bread) + (func (export "imp_mut_null") (result anyref) global.get $g_imp_mut_null) + (func (export "imp_mut_bread") (result anyref) global.get $g_imp_mut_bread) - (func (export "set_imp_null") (param anyref) get_local 0 set_global $g_imp_mut_null) - (func (export "set_imp_bread") (param anyref) get_local 0 set_global $g_imp_mut_bread) + (func (export "set_imp_null") (param anyref) local.get 0 global.set $g_imp_mut_null) + (func (export "set_imp_bread") (param anyref) local.get 0 global.set $g_imp_mut_bread) - (func (export "set_mut") (param anyref) get_local 0 set_global $g_mut) - (func (export "get_mut") (result anyref) get_global $g_mut) + (func (export "set_mut") (param anyref) local.get 0 global.set $g_mut) + (func (export "get_mut") (result anyref) global.get $g_mut) )`, imports).exports; assertEq(exports.imp_imm_null(), imports.constants.imm_null); diff --git a/js/src/jit-test/tests/wasm/gc/debugger.js b/js/src/jit-test/tests/wasm/gc/debugger.js index bcd2fd7028a3..93225d4b1636 100644 --- a/js/src/jit-test/tests/wasm/gc/debugger.js +++ b/js/src/jit-test/tests/wasm/gc/debugger.js @@ -3,7 +3,7 @@ (function() { let g = newGlobal({newCompartment: true}); let dbg = new Debugger(g); - g.eval(`o = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary('(module (func (result anyref) (param anyref) get_local 0) (export "" 0))')));`); + g.eval(`o = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary('(module (func (result anyref) (param anyref) local.get 0) (export "" 0))')));`); })(); (function() { @@ -13,7 +13,7 @@ let src = ` (module (func (export "func") (result anyref) (param $ref anyref) - get_local $ref + local.get $ref ) ) `; diff --git a/js/src/jit-test/tests/wasm/gc/disabled.js b/js/src/jit-test/tests/wasm/gc/disabled.js index 76d6a022749d..07550c79daa7 100644 --- a/js/src/jit-test/tests/wasm/gc/disabled.js +++ b/js/src/jit-test/tests/wasm/gc/disabled.js @@ -10,7 +10,7 @@ let simpleTests = [ "(module (func $test (param anyref)))", "(module (func $test (result anyref) (ref.null)))", "(module (func $test (block anyref (unreachable)) unreachable))", - "(module (func $test (local anyref) (result i32) (ref.is_null (get_local 0))))", + "(module (func $test (local anyref) (result i32) (ref.is_null (local.get 0))))", `(module (import "a" "b" (param anyref)))`, `(module (import "a" "b" (result anyref)))`, `(module (type $s (struct)))`, diff --git a/js/src/jit-test/tests/wasm/gc/ref-global.js b/js/src/jit-test/tests/wasm/gc/ref-global.js index 6a5c1671974c..d9f4087d358b 100644 --- a/js/src/jit-test/tests/wasm/gc/ref-global.js +++ b/js/src/jit-test/tests/wasm/gc/ref-global.js @@ -20,14 +20,14 @@ ;; as a return value. See ref-restrict.js. (func (export "get") (result anyref) - (get_global $g1)) + (global.get $g1)) (func (export "copy") - (set_global $g2 (get_global $g1))) + (global.set $g2 (global.get $g1))) (func (export "clear") - (set_global $g1 (get_global $g3)) - (set_global $g2 (ref.null))))`); + (global.set $g1 (global.get $g3)) + (global.set $g2 (ref.null))))`); let mod = new WebAssembly.Module(bin); let ins = new WebAssembly.Instance(mod).exports; @@ -51,19 +51,19 @@ (global $glob (mut (ref $point)) (ref.null)) (func (export "init") - (set_global $glob (struct.new $point (f64.const 0.5) (f64.const 2.75)))) + (global.set $glob (struct.new $point (f64.const 0.5) (f64.const 2.75)))) (func (export "change") - (set_global $glob (struct.new $point (f64.const 3.5) (f64.const 37.25)))) + (global.set $glob (struct.new $point (f64.const 3.5) (f64.const 37.25)))) (func (export "clear") - (set_global $glob (ref.null))) + (global.set $glob (ref.null))) (func (export "x") (result f64) - (struct.get $point 0 (get_global $glob))) + (struct.get $point 0 (global.get $glob))) (func (export "y") (result f64) - (struct.get $point 1 (get_global $glob))))`); + (struct.get $point 1 (global.get $glob))))`); let mod = new WebAssembly.Module(bin); let ins = new WebAssembly.Instance(mod).exports; @@ -89,9 +89,9 @@ `(module (gc_feature_opt_in 3) (import $g "" "g" (global anyref)) - (global $glob anyref (get_global $g)) + (global $glob anyref (global.get $g)) (func (export "get") (result anyref) - (get_global $glob)))`); + (global.get $glob)))`); let mod = new WebAssembly.Module(bin); let obj = {zappa:37}; diff --git a/js/src/jit-test/tests/wasm/gc/ref-restrict.js b/js/src/jit-test/tests/wasm/gc/ref-restrict.js index 68446488ca22..5024b39a9448 100644 --- a/js/src/jit-test/tests/wasm/gc/ref-restrict.js +++ b/js/src/jit-test/tests/wasm/gc/ref-restrict.js @@ -244,7 +244,7 @@ assertErrorMessage(() => wasmCompile( (type $fn (func (param (ref $box)))) (table (export "tbl") 1 funcref) (func (param i32) - (call_indirect $fn (ref.null) (get_local 0))))`), + (call_indirect $fn (ref.null) (local.get 0))))`), WebAssembly.CompileError, /cannot expose reference type/); @@ -255,7 +255,7 @@ assertErrorMessage(() => wasmCompile( (type $fn (func (result (ref $box)))) (table (export "tbl") 1 funcref) (func (param i32) (result (ref $box)) - (call_indirect $fn (get_local 0))))`), + (call_indirect $fn (local.get 0))))`), WebAssembly.CompileError, /cannot expose reference type/); @@ -264,7 +264,7 @@ assertEq(typeof wasmCompile( (type $fn (func (param anyref))) (table (export "tbl") 1 funcref) (func (param i32) - (call_indirect $fn (ref.null) (get_local 0))))`), + (call_indirect $fn (ref.null) (local.get 0))))`), "object"); assertEq(typeof wasmCompile( @@ -272,7 +272,7 @@ assertEq(typeof wasmCompile( (type $fn (func (result anyref))) (table (export "tbl") 1 funcref) (func (param i32) (result anyref) - (call_indirect $fn (get_local 0))))`), + (call_indirect $fn (local.get 0))))`), "object"); // Can't call via imported table with type that is exposed for Ref, though anyref is OK. @@ -284,7 +284,7 @@ assertErrorMessage(() => wasmCompile( (type $fn (func (param (ref $box)))) (import "m" "tbl" (table 1 funcref)) (func (param i32) - (call_indirect $fn (ref.null) (get_local 0))))`), + (call_indirect $fn (ref.null) (local.get 0))))`), WebAssembly.CompileError, /cannot expose reference type/); @@ -295,7 +295,7 @@ assertErrorMessage(() => wasmCompile( (type $fn (func (result (ref $box)))) (import "m" "tbl" (table 1 funcref)) (func (param i32) (result (ref $box)) - (call_indirect $fn (get_local 0))))`), + (call_indirect $fn (local.get 0))))`), WebAssembly.CompileError, /cannot expose reference type/); @@ -304,7 +304,7 @@ assertEq(typeof wasmCompile( (type $fn (func (param anyref))) (import "m" "tbl" (table 1 funcref)) (func (param i32) - (call_indirect $fn (ref.null) (get_local 0))))`), + (call_indirect $fn (ref.null) (local.get 0))))`), "object"); assertEq(typeof wasmCompile( @@ -312,7 +312,7 @@ assertEq(typeof wasmCompile( (type $fn (func (result anyref))) (import "m" "tbl" (table 1 funcref)) (func (param i32) (result anyref) - (call_indirect $fn (get_local 0))))`), + (call_indirect $fn (local.get 0))))`), "object"); // We can call via a private table with a type that is exposed for Ref. @@ -327,7 +327,7 @@ assertEq(typeof wasmCompile( (elem (i32.const 0) $f1) (func $f1 (param (ref $box)) (result i32) (i32.const 37)) (func (export "f") (param i32) (result i32) - (call_indirect $fn (ref.null) (get_local 0))))`); + (call_indirect $fn (ref.null) (local.get 0))))`); let i = new WebAssembly.Instance(m).exports; assertEq(i.f(0), 37); } diff --git a/js/src/jit-test/tests/wasm/gc/ref-struct.js b/js/src/jit-test/tests/wasm/gc/ref-struct.js index 3fbda633c894..fe2ad2a2d2ae 100644 --- a/js/src/jit-test/tests/wasm/gc/ref-struct.js +++ b/js/src/jit-test/tests/wasm/gc/ref-struct.js @@ -38,54 +38,54 @@ function checkInvalid(body, errorMessage) { (global $k (mut i32) (i32.const 0)) (func (export "init") (param $n i32) - (set_global $g (call $make (get_local $n)))) + (global.set $g (call $make (local.get $n)))) (func $make (param $n i32) (result (ref $wabbit)) (local $tmp i32) - (set_local $tmp (get_global $k)) - (set_global $k (i32.add (get_local $tmp) (i32.const 1))) - (if (ref $wabbit) (i32.le_s (get_local $n) (i32.const 2)) - (struct.new $wabbit (get_local $tmp) (ref.null) (ref.null)) + (local.set $tmp (global.get $k)) + (global.set $k (i32.add (local.get $tmp) (i32.const 1))) + (if (ref $wabbit) (i32.le_s (local.get $n) (i32.const 2)) + (struct.new $wabbit (local.get $tmp) (ref.null) (ref.null)) (block (ref $wabbit) (struct.new $wabbit - (get_local $tmp) - (call $make (i32.sub (get_local $n) (i32.const 1))) - (call $make (i32.sub (get_local $n) (i32.const 2))))))) + (local.get $tmp) + (call $make (i32.sub (local.get $n) (i32.const 1))) + (call $make (i32.sub (local.get $n) (i32.const 2))))))) (func (export "accumulate") (result i32) - (call $accum (get_global $g))) + (call $accum (global.get $g))) (func $accum (param $w (ref $wabbit)) (result i32) - (if i32 (ref.is_null (get_local $w)) + (if i32 (ref.is_null (local.get $w)) (i32.const 0) - (i32.add (struct.get $wabbit 0 (get_local $w)) - (i32.sub (call $accum (struct.get $wabbit 1 (get_local $w))) - (call $accum (struct.get $wabbit 2 (get_local $w))))))) + (i32.add (struct.get $wabbit 0 (local.get $w)) + (i32.sub (call $accum (struct.get $wabbit 1 (local.get $w))) + (call $accum (struct.get $wabbit 2 (local.get $w))))))) (func (export "reverse") - (call $reverse (get_global $g))) + (call $reverse (global.get $g))) (func $reverse (param $w (ref $wabbit)) (local $tmp (ref $wabbit)) - (if (i32.eqz (ref.is_null (get_local $w))) + (if (i32.eqz (ref.is_null (local.get $w))) (block - (struct.set $wabbit 0 (get_local $w) (i32.mul (i32.const 2) (struct.get $wabbit 0 (get_local $w)))) - (set_local $tmp (struct.get $wabbit 1 (get_local $w))) - (struct.set $wabbit 1 (get_local $w) (struct.get $wabbit 2 (get_local $w))) - (struct.set $wabbit 2 (get_local $w) (get_local $tmp)) - (call $reverse (struct.get $wabbit 1 (get_local $w))) - (call $reverse (struct.get $wabbit 2 (get_local $w)))))) + (struct.set $wabbit 0 (local.get $w) (i32.mul (i32.const 2) (struct.get $wabbit 0 (local.get $w)))) + (local.set $tmp (struct.get $wabbit 1 (local.get $w))) + (struct.set $wabbit 1 (local.get $w) (struct.get $wabbit 2 (local.get $w))) + (struct.set $wabbit 2 (local.get $w) (local.get $tmp)) + (call $reverse (struct.get $wabbit 1 (local.get $w))) + (call $reverse (struct.get $wabbit 2 (local.get $w)))))) (func (export "print") - (call $pr (get_global $g))) + (call $pr (global.get $g))) (func $pr (param $w (ref $wabbit)) - (if (i32.eqz (ref.is_null (get_local $w))) + (if (i32.eqz (ref.is_null (local.get $w))) (block (call $print_lp) - (call $print_int (struct.get $wabbit 0 (get_local $w))) - (call $pr (struct.get $wabbit 1 (get_local $w))) - (call $pr (struct.get $wabbit 2 (get_local $w))) + (call $print_int (struct.get $wabbit 0 (local.get $w))) + (call $pr (struct.get $wabbit 1 (local.get $w))) + (call $pr (struct.get $wabbit 2 (local.get $w))) (call $print_rp)))) )`); @@ -123,7 +123,7 @@ wasmEvalText( (type $node (struct (field (mut (ref $node))))) (type $nix (struct (field (mut (ref $node))) (field i32))) (func $f (param $p (ref $node)) (param $q (ref $nix)) - (struct.set $node 0 (get_local $p) (get_local $q))))`); + (struct.set $node 0 (local.get $p) (local.get $q))))`); // struct.narrow: if the pointer's null we get null @@ -133,7 +133,7 @@ assertEq(wasmEvalText( (type $node (struct (field i32))) (type $node2 (struct (field i32) (field f32))) (func $f (param $p (ref $node)) (result (ref $node2)) - (struct.narrow (ref $node) (ref $node2) (get_local $p))) + (struct.narrow (ref $node) (ref $node2) (local.get $p))) (func (export "test") (result anyref) (call $f (ref.null))))`).exports.test(), null); @@ -146,11 +146,11 @@ assertEq(wasmEvalText( (type $node (struct (field i32))) (type $node2 (struct (field i32) (field f32))) (func $f (param $p (ref $node)) (result (ref $node2)) - (struct.narrow (ref $node) (ref $node2) (get_local $p))) + (struct.narrow (ref $node) (ref $node2) (local.get $p))) (func (export "test") (result i32) (local $n (ref $node)) - (set_local $n (struct.new $node2 (i32.const 0) (f32.const 12))) - (ref.eq (call $f (get_local $n)) (get_local $n))))`).exports.test(), + (local.set $n (struct.new $node2 (i32.const 0) (f32.const 12))) + (ref.eq (call $f (local.get $n)) (local.get $n))))`).exports.test(), 1); // And once more with mutable fields @@ -161,11 +161,11 @@ assertEq(wasmEvalText( (type $node (struct (field (mut i32)))) (type $node2 (struct (field (mut i32)) (field f32))) (func $f (param $p (ref $node)) (result (ref $node2)) - (struct.narrow (ref $node) (ref $node2) (get_local $p))) + (struct.narrow (ref $node) (ref $node2) (local.get $p))) (func (export "test") (result i32) (local $n (ref $node)) - (set_local $n (struct.new $node2 (i32.const 0) (f32.const 12))) - (ref.eq (call $f (get_local $n)) (get_local $n))))`).exports.test(), + (local.set $n (struct.new $node2 (i32.const 0) (f32.const 12))) + (ref.eq (call $f (local.get $n)) (local.get $n))))`).exports.test(), 1); // A more subtle case: the downcast is to a struct that looks like the original @@ -186,12 +186,12 @@ assertEq(wasmEvalText( (type $node2b (struct (field i32) (field (ref $node)))) (func $f (param $p (ref $node)) (result (ref $node2b)) - (struct.narrow (ref $node) (ref $node2b) (get_local $p))) + (struct.narrow (ref $node) (ref $node2b) (local.get $p))) (func (export "test") (result i32) (local $n (ref $node)) - (set_local $n (struct.new $node2a (i32.const 0) (ref.null))) - (ref.eq (call $f (get_local $n)) (get_local $n))))`).exports.test(), + (local.set $n (struct.new $node2a (i32.const 0) (ref.null))) + (ref.eq (call $f (local.get $n)) (local.get $n))))`).exports.test(), 1); assertEq(wasmEvalText( @@ -204,12 +204,12 @@ assertEq(wasmEvalText( (type $node2b (struct (field i32) (field (ref $nodeCopy)))) (func $f (param $p (ref $node)) (result (ref $node2b)) - (struct.narrow (ref $node) (ref $node2b) (get_local $p))) + (struct.narrow (ref $node) (ref $node2b) (local.get $p))) (func (export "test") (result i32) (local $n (ref $node)) - (set_local $n (struct.new $node2a (i32.const 0) (ref.null))) - (ref.eq (call $f (get_local $n)) (get_local $n))))`).exports.test(), + (local.set $n (struct.new $node2a (i32.const 0) (ref.null))) + (ref.eq (call $f (local.get $n)) (local.get $n))))`).exports.test(), 0); // Another subtle case: struct.narrow can target a type that is not the concrete @@ -222,11 +222,11 @@ assertEq(wasmEvalText( (type $node2 (struct (field i32) (field f32))) (type $node3 (struct (field i32) (field f32) (field f64))) (func $f (param $p (ref $node)) (result (ref $node2)) - (struct.narrow (ref $node) (ref $node2) (get_local $p))) + (struct.narrow (ref $node) (ref $node2) (local.get $p))) (func (export "test") (result i32) (local $n (ref $node)) - (set_local $n (struct.new $node3 (i32.const 0) (f32.const 12) (f64.const 17))) - (ref.eq (call $f (get_local $n)) (get_local $n))))`).exports.test(), + (local.set $n (struct.new $node3 (i32.const 0) (f32.const 12) (f64.const 17))) + (ref.eq (call $f (local.get $n)) (local.get $n))))`).exports.test(), 1); // struct.narrow: if the downcast fails we get null @@ -238,7 +238,7 @@ assertEq(wasmEvalText( (type $node2 (struct (field i32) (field f32))) (type $snort (struct (field i32) (field f64))) (func $f (param $p (ref $node)) (result (ref $node2)) - (struct.narrow (ref $node) (ref $node2) (get_local $p))) + (struct.narrow (ref $node) (ref $node2) (local.get $p))) (func (export "test") (result anyref) (call $f (struct.new $snort (i32.const 0) (f64.const 12)))))`).exports.test(), null); @@ -251,11 +251,11 @@ assertEq(wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field i32))) (func $f (param $p anyref) (result (ref $node)) - (struct.narrow anyref (ref $node) (get_local $p))) + (struct.narrow anyref (ref $node) (local.get $p))) (func (export "test") (result i32) (local $n (ref $node)) - (set_local $n (struct.new $node (i32.const 0))) - (ref.eq (call $f (get_local $n)) (get_local $n))))`).exports.test(), + (local.set $n (struct.new $node (i32.const 0))) + (ref.eq (call $f (local.get $n)) (local.get $n))))`).exports.test(), 1); // struct.narrow: anyref -> struct when the anyref is some random gunk. @@ -265,7 +265,7 @@ assertEq(wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field i32))) (func (export "test") (param $p anyref) (result anyref) - (struct.narrow anyref (ref $node) (get_local $p))))`).exports.test({hi:37}), + (struct.narrow anyref (ref $node) (local.get $p))))`).exports.test({hi:37}), null); // Types are private to an instance and struct.narrow can't break this @@ -276,9 +276,9 @@ assertEq(wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field i32))) (func (export "make") (param $n i32) (result anyref) - (struct.new $node (get_local $n))) + (struct.new $node (local.get $n))) (func (export "coerce") (param $p anyref) (result i32) - (ref.is_null (struct.narrow anyref (ref $node) (get_local $p)))))`; + (ref.is_null (struct.narrow anyref (ref $node) (local.get $p)))))`; let mod = new WebAssembly.Module(wasmTextToBinary(txt)); let ins1 = new WebAssembly.Instance(mod).exports; let ins2 = new WebAssembly.Instance(mod).exports; @@ -296,7 +296,7 @@ assertErrorMessage(() => wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field i32))) (func $f (param $p (ref $node)) - (struct.set $node 0 (get_local $p) (i32.const 37))))`), + (struct.set $node 0 (local.get $p) (i32.const 37))))`), WebAssembly.CompileError, /field is not mutable/); @@ -307,7 +307,7 @@ assertErrorMessage(() => wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field (mut i32)))) (func $f (param $p (ref $node)) - (struct.set $node 0 (get_local $p) (f32.const 37))))`), + (struct.set $node 0 (local.get $p) (f32.const 37))))`), WebAssembly.CompileError, /expression has type f32 but expected i32/); @@ -318,7 +318,7 @@ assertErrorMessage(() => wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field i32))) (func $f (param $p (ref $node)) (result i32) - (struct.get $node 1 (get_local $p))))`), + (struct.get $node 1 (local.get $p))))`), WebAssembly.CompileError, /field index out of range/); @@ -329,7 +329,7 @@ assertErrorMessage(() => wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field (mut i32)))) (func $f (param $p (ref $node)) - (struct.set $node 1 (get_local $p) (i32.const 37))))`), + (struct.set $node 1 (local.get $p) (i32.const 37))))`), WebAssembly.CompileError, /field index out of range/); @@ -341,7 +341,7 @@ assertErrorMessage(() => wasmEvalText( (type $node (struct (field i32))) (type $snort (struct (field f64))) (func $f (param $p (ref $snort)) (result i32) - (struct.get $node 0 (get_local $p))))`), + (struct.get $node 0 (local.get $p))))`), WebAssembly.CompileError, /expression has type.*but expected.*/); @@ -353,7 +353,7 @@ assertErrorMessage(() => wasmEvalText( (type $node (struct (field (mut i32)))) (type $snort (struct (field f64))) (func $f (param $p (ref $snort)) (result i32) - (struct.set $node 0 (get_local $p) (i32.const 0))))`), + (struct.set $node 0 (local.get $p) (i32.const 0))))`), WebAssembly.CompileError, /expression has type.*but expected.*/); @@ -366,7 +366,7 @@ assertErrorMessage(() => wasmEvalText( (type $node2 (struct (field i32) (field f32))) (type $snort (struct (field f64))) (func $f (param $p (ref $snort)) (result (ref $node2)) - (struct.narrow (ref $node) (ref $node2) (get_local 0))))`), + (struct.narrow (ref $node) (ref $node2) (local.get 0))))`), WebAssembly.CompileError, /expression has type.*but expected.*/); @@ -378,7 +378,7 @@ assertErrorMessage(() => wasmEvalText( (type $node (struct (field i32))) (type $node2 (struct (field (mut i32)) (field f32))) (func $f (param $p (ref $node)) (result (ref $node2)) - (struct.narrow (ref $node) (ref $node2) (get_local 0))))`), + (struct.narrow (ref $node) (ref $node2) (local.get 0))))`), WebAssembly.CompileError, /invalid narrowing operation/); @@ -388,7 +388,7 @@ assertErrorMessage(() => wasmEvalText( (type $node (struct (field (mut i32)))) (type $node2 (struct (field i32) (field f32))) (func $f (param $p (ref $node)) (result (ref $node2)) - (struct.narrow (ref $node) (ref $node2) (get_local 0))))`), + (struct.narrow (ref $node) (ref $node2) (local.get 0))))`), WebAssembly.CompileError, /invalid narrowing operation/); @@ -399,7 +399,7 @@ assertErrorMessage(() => wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field i32))) (func $f (param $p (ref $node)) (result anyref) - (struct.narrow i32 anyref (get_local 0))))`), + (struct.narrow i32 anyref (local.get 0))))`), SyntaxError, /struct.narrow requires ref type/); @@ -408,7 +408,7 @@ assertErrorMessage(() => wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field i32))) (func $f (param $p (ref $node)) (result anyref) - (struct.narrow anyref i32 (get_local 0))))`), + (struct.narrow anyref i32 (local.get 0))))`), SyntaxError, /struct.narrow requires ref type/); @@ -437,7 +437,7 @@ assertErrorMessage(() => wasmEvalText( (gc_feature_opt_in 3) (type $node (struct (field i32))) (func $f (param $p (ref $node)) (result anyref) - (struct.narrow (ref $node) anyref (get_local 0))))`), + (struct.narrow (ref $node) anyref (local.get 0))))`), WebAssembly.CompileError, /invalid type combination in struct.narrow/); @@ -449,7 +449,7 @@ assertErrorMessage(() => wasmEvalText( (type $node (struct (field i32))) (type $node2 (struct (field i32) (field f32))) (func $f (param $p (ref $node2)) (result anyref) - (struct.narrow (ref $node2) (ref $node) (get_local 0))))`), + (struct.narrow (ref $node2) (ref $node) (local.get 0))))`), WebAssembly.CompileError, /invalid narrowing operation/); @@ -463,7 +463,7 @@ assertErrorMessage(function() { (func (export "test") (drop (call $f (ref.null)))) (func $f (param $p (ref $node)) (result i32) - (struct.get $node 0 (get_local $p))))`); + (struct.get $node 0 (local.get $p))))`); ins.exports.test(); }, WebAssembly.RuntimeError, @@ -479,7 +479,7 @@ assertErrorMessage(function() { (func (export "test") (call $f (ref.null))) (func $f (param $p (ref $node)) - (struct.set $node 0 (get_local $p) (i32.const 0))))`); + (struct.set $node 0 (local.get $p) (i32.const 0))))`); ins.exports.test(); }, WebAssembly.RuntimeError, diff --git a/js/src/jit-test/tests/wasm/gc/ref.js b/js/src/jit-test/tests/wasm/gc/ref.js index e80b00a0744e..3a2db0fc3968 100644 --- a/js/src/jit-test/tests/wasm/gc/ref.js +++ b/js/src/jit-test/tests/wasm/gc/ref.js @@ -30,12 +30,12 @@ var bin = wasmTextToBinary( (func $cdr (param $p (ref $cons)) (result (ref $cons)) (local $l (ref $cons)) ;; store null value of correct type - (set_local $l (ref.null)) + (local.set $l (ref.null)) ;; store local of correct type - (set_local $l (get_local $p)) + (local.set $l (local.get $p)) ;; store call result of correct type - (set_local $l (call $cdr (get_local $p))) - ;; TODO: eventually also a test with get_global + (local.set $l (call $cdr (local.get $p))) + ;; TODO: eventually also a test with global.get ;; blocks and if with result type (block (ref $cons) (if (ref $cons) (i32.eqz (i32.const 0)) @@ -49,16 +49,16 @@ var bin = wasmTextToBinary( (ref.null)) (func (param (ref $cons)) - (call $cdr (get_local 0)) + (call $cdr (local.get 0)) drop - (call $imp (get_local 0)) + (call $imp (local.get 0)) drop) (func (param (ref $cons)) - (drop (ref.eq (get_local 0) (ref.null))) - (drop (ref.eq (ref.null) (get_local 0))) - (drop (ref.eq (get_local 0) (ref.null))) - (drop (ref.eq (ref.null) (get_local 0)))) + (drop (ref.eq (local.get 0) (ref.null))) + (drop (ref.eq (ref.null) (local.get 0))) + (drop (ref.eq (local.get 0) (ref.null))) + (drop (ref.eq (ref.null) (local.get 0)))) )`); // Validation @@ -72,7 +72,7 @@ new WebAssembly.Module(wasmTextToBinary(` (gc_feature_opt_in 3) (type $s (struct)) (func $null (param (ref $s)) (result i32) - (ref.is_null (get_local 0)))) + (ref.is_null (local.get 0)))) `)) // Automatic upcast to anyref @@ -81,7 +81,7 @@ new WebAssembly.Module(wasmTextToBinary(` (module (gc_feature_opt_in 3) (type $s (struct (field i32))) - (func $f (param (ref $s)) (call $g (get_local 0))) + (func $f (param (ref $s)) (call $g (local.get 0))) (func $g (param anyref) (unreachable))) `)); @@ -103,7 +103,7 @@ wasmEvalText(` (type $s (struct (field i32))) (type $t (struct (field i32))) (func $f (param (ref $s)) (unreachable)) - (func $g (param (ref $t)) (call $f (get_local 0))) + (func $g (param (ref $t)) (call $f (local.get 0))) )`); assertErrorMessage(() => wasmEvalText(` @@ -112,7 +112,7 @@ assertErrorMessage(() => wasmEvalText(` (type $s (struct (field i32))) (type $t (struct (field f32))) ;; Incompatible type (func $f (param (ref $s)) (unreachable)) - (func $g (param (ref $t)) (call $f (get_local 0))) + (func $g (param (ref $t)) (call $f (local.get 0))) )`), WebAssembly.CompileError, /expression has type ref.*but expected ref/); @@ -122,7 +122,7 @@ assertErrorMessage(() => wasmEvalText(` (type $s (struct (field i32))) (type $t (struct (field (mut i32)))) ;; Incompatible mutability (func $f (param (ref $s)) (unreachable)) - (func $g (param (ref $t)) (call $f (get_local 0))) + (func $g (param (ref $t)) (call $f (local.get 0))) )`), WebAssembly.CompileError, /expression has type ref.*but expected ref/); @@ -134,7 +134,7 @@ wasmEvalText(` (gc_feature_opt_in 3) (type $s (struct (field i32))) (type $t (struct (field i32))) - (func $f (param (ref $s)) (local (ref $t)) (set_local 1 (get_local 0)))) + (func $f (param (ref $s)) (local (ref $t)) (local.set 1 (local.get 0)))) `) assertErrorMessage(() => wasmEvalText(` @@ -142,7 +142,7 @@ assertErrorMessage(() => wasmEvalText(` (gc_feature_opt_in 3) (type $s (struct (field i32))) (type $t (struct (field f32))) - (func $f (param (ref $s)) (local (ref $t)) (set_local 1 (get_local 0)))) + (func $f (param (ref $s)) (local (ref $t)) (local.set 1 (local.get 0)))) `), WebAssembly.CompileError, /expression has type ref.*but expected ref/); @@ -152,7 +152,7 @@ assertErrorMessage(() => wasmEvalText(` (type $s (struct (field i32))) (type $t (struct (field (mut i32)))) (func $f (param (ref $s)) (unreachable)) - (func $g (param (ref $t)) (call $f (get_local 0))) + (func $g (param (ref $t)) (call $f (local.get 0))) )`), WebAssembly.CompileError, /expression has type ref.*but expected ref/); @@ -164,7 +164,7 @@ wasmEvalText(` (gc_feature_opt_in 3) (type $s (struct (field i32))) (type $t (struct (field i32))) - (func $f (param (ref $s)) (result (ref $t)) (get_local 0))) + (func $f (param (ref $s)) (result (ref $t)) (local.get 0))) `); assertErrorMessage(() => wasmEvalText(` @@ -172,7 +172,7 @@ assertErrorMessage(() => wasmEvalText(` (gc_feature_opt_in 3) (type $s (struct (field i32))) (type $t (struct (field f32))) - (func $f (param (ref $s)) (result (ref $t)) (get_local 0))) + (func $f (param (ref $s)) (result (ref $t)) (local.get 0))) `), WebAssembly.CompileError, /expression has type ref.*but expected ref/); @@ -181,7 +181,7 @@ assertErrorMessage(() => wasmEvalText(` (gc_feature_opt_in 3) (type $s (struct (field i32))) (type $t (struct (field (mut i32)))) - (func $f (param (ref $s)) (result (ref $t)) (get_local 0))) + (func $f (param (ref $s)) (result (ref $t)) (local.get 0))) `), WebAssembly.CompileError, /expression has type ref.*but expected ref/); @@ -209,7 +209,7 @@ assertErrorMessage(() => wasmEvalText(` (module (gc_feature_opt_in 3) (type $s (struct (field i32))) - (func $f (param anyref) (call $g (get_local 0))) + (func $f (param anyref) (call $g (local.get 0))) (func $g (param (ref $s)) (unreachable))) `), WebAssembly.CompileError, /expression has type anyref but expected ref/); diff --git a/js/src/jit-test/tests/wasm/gc/stackmaps1.js b/js/src/jit-test/tests/wasm/gc/stackmaps1.js index eaf54224ce4f..cc388922f4a9 100644 --- a/js/src/jit-test/tests/wasm/gc/stackmaps1.js +++ b/js/src/jit-test/tests/wasm/gc/stackmaps1.js @@ -32,11 +32,11 @@ let t = (param $arg4 anyref) (param $arg5 anyref) (param $arg6 i32) (call $alloc) drop - (i32.add (i32.add (get_local $arg1) (get_local $arg3)) (get_local $arg6)) + (i32.add (i32.add (local.get $arg1) (local.get $arg3)) (local.get $arg6)) ;; Poke the ref-typed arguments, to be sure that they got kept alive ;; properly across any GC that the |alloc| call might have done. - (call $check3 (get_local $arg2) (get_local $arg4) (get_local $arg5)) + (call $check3 (local.get $arg2) (local.get $arg4) (local.get $arg5)) ) ;; -- fn 1 @@ -45,26 +45,26 @@ let t = (loop i32 ;; call direct 0 - (call $fn0 (i32.const 10) (get_local $arg1) (i32.const 12) - (get_local $arg1) (get_local $arg1) (i32.const 15)) + (call $fn0 (i32.const 10) (local.get $arg1) (i32.const 12) + (local.get $arg1) (local.get $arg1) (i32.const 15)) ;; call indirect 0 (call_indirect $typeOfFn0 - (i32.const 10) (get_local $arg1) (i32.const 12) - (get_local $arg1) (get_local $arg1) (i32.const 15) + (i32.const 10) (local.get $arg1) (i32.const 12) + (local.get $arg1) (local.get $arg1) (i32.const 15) (i32.const 0)) ;; table index i32.add ;; Do 60k iterations of this loop, to get a good amount of allocation - (set_local $i (i32.add (get_local $i) (i32.const 1))) - (br_if 0 (i32.lt_s (get_local $i) (i32.const 60000))) + (local.set $i (i32.add (local.get $i) (i32.const 1))) + (br_if 0 (i32.lt_s (local.get $i) (i32.const 60000))) ) ) ;; -- fn 2 (func $fn2 (export "fn2") (param $arg1 anyref) (result i32) - (call $fn1 (get_local $arg1)) + (call $fn1 (local.get $arg1)) ) )`; diff --git a/js/src/jit-test/tests/wasm/gc/stackmaps2.js b/js/src/jit-test/tests/wasm/gc/stackmaps2.js index 26743a4fa74d..df6ac3299426 100644 --- a/js/src/jit-test/tests/wasm/gc/stackmaps2.js +++ b/js/src/jit-test/tests/wasm/gc/stackmaps2.js @@ -46,28 +46,28 @@ let t = ;; spinloop to waste time (loop - (set_local $i (i32.add (get_local $i) (i32.const 1))) - (br_if 0 (i32.lt_s (get_local $i) (i32.const 100))) + (local.set $i (i32.add (local.get $i) (i32.const 1))) + (br_if 0 (i32.lt_s (local.get $i) (i32.const 100))) ) - (i32.add (i32.add (get_local $arg1) (get_local $arg3)) (get_local $arg6)) + (i32.add (i32.add (local.get $arg1) (local.get $arg3)) (local.get $arg6)) ;; Poke the ref-typed arguments, to be sure that they got kept alive ;; properly across any GC that might have happened. - (call $check3 (get_local $arg2) (get_local $arg4) (get_local $arg5)) + (call $check3 (local.get $arg2) (local.get $arg4) (local.get $arg5)) ) ;; -- fn 1 (func $fn1 (export "fn1") (param $arg1 anyref) (result i32) (loop i32 ;; call direct to $fn0 - (call $fn0 (i32.const 10) (get_local $arg1) (i32.const 12) - (get_local $arg1) (get_local $arg1) (i32.const 15)) + (call $fn0 (i32.const 10) (local.get $arg1) (i32.const 12) + (local.get $arg1) (local.get $arg1) (i32.const 15)) ;; call indirect to table index 0, which is $fn0 (call_indirect $typeOfFn0 - (i32.const 10) (get_local $arg1) (i32.const 12) - (get_local $arg1) (get_local $arg1) (i32.const 15) + (i32.const 10) (local.get $arg1) (i32.const 12) + (local.get $arg1) (local.get $arg1) (i32.const 15) (i32.const 0)) ;; table index i32.add @@ -79,7 +79,7 @@ let t = ;; -- fn 2 (func $fn2 (export "fn2") (param $arg1 anyref) (result i32) - (call $fn1 (get_local $arg1)) + (call $fn1 (local.get $arg1)) ) )`; diff --git a/js/src/jit-test/tests/wasm/gc/stackmaps3.js b/js/src/jit-test/tests/wasm/gc/stackmaps3.js index c3015664e6c8..8b9881944917 100644 --- a/js/src/jit-test/tests/wasm/gc/stackmaps3.js +++ b/js/src/jit-test/tests/wasm/gc/stackmaps3.js @@ -34,8 +34,8 @@ let t = (func $mkConsIgnoringScalar (result anyref) (param $hd anyref) (param i32) (param $tl anyref) - (get_local $hd) - (get_local $tl) + (local.get $hd) + (local.get $tl) call $mkCons ) @@ -48,14 +48,14 @@ let t = ;; scalars for added confusion (local $scalar99 i32) (local $scalar97 i32) - (set_local $scalar99 (i32.const 99)) - (set_local $scalar97 (i32.const 97)) + (local.set $scalar99 (i32.const 99)) + (local.set $scalar97 (i32.const 97)) call $mkBoxedInt - get_local $scalar99 + local.get $scalar99 call $mkBoxedInt call $mkBoxedInt - get_local $scalar97 + local.get $scalar97 call $mkBoxedInt call $mkBoxedInt call $mkBoxedInt diff --git a/js/src/jit-test/tests/wasm/gc/structs.js b/js/src/jit-test/tests/wasm/gc/structs.js index b6b544445993..e041acb1d63e 100644 --- a/js/src/jit-test/tests/wasm/gc/structs.js +++ b/js/src/jit-test/tests/wasm/gc/structs.js @@ -44,19 +44,19 @@ var bin = wasmTextToBinary( (func $x2 (import "m" "x2") (type $f2)) (func (export "hello") (param f64) (param i32) (result f64) - (call_indirect $f2 (get_local 0) (get_local 1))) + (call_indirect $f2 (local.get 0) (local.get 1))) (func $doit (param f64) (result f64) - (f64.sqrt (get_local 0))) + (f64.sqrt (local.get 0))) (func $doitagain (param f64) (result f64) - (f64.mul (get_local 0) (get_local 0))) + (f64.mul (local.get 0) (local.get 0))) (func (export "x1") (param i32) (result i32) - (call $x1 (get_local 0))) + (call $x1 (local.get 0))) (func (export "x2") (param f64) (result f64) - (call $x2 (get_local 0))) + (call $x2 (local.get 0))) ;; Useful for testing to ensure that the type is not type #0 here. @@ -64,7 +64,7 @@ var bin = wasmTextToBinary( (struct.new $point (i32.const 37) (i32.const 42))) (func (export "mk_int_node") (param i32) (param anyref) (result anyref) - (struct.new $int_node (get_local 0) (get_local 1))) + (struct.new $int_node (local.get 0) (local.get 1))) ;; Too big to fit in an InlineTypedObject. @@ -187,7 +187,7 @@ var bin = wasmTextToBinary( (func (export "mk_withfloats") (param f32) (param f64) (param anyref) (param f32) (param i32) (result anyref) - (struct.new $withfloats (get_local 0) (get_local 1) (get_local 2) (get_local 3) (get_local 4))) + (struct.new $withfloats (local.get 0) (local.get 1) (local.get 2) (local.get 3) (local.get 4))) )`) @@ -232,11 +232,11 @@ var stress = wasmTextToBinary( (local $list (ref $node)) (block $exit (loop $loop - (br_if $exit (i32.eqz (get_local $n))) - (set_local $list (struct.new $node (get_local $n) (get_local $list))) - (set_local $n (i32.sub (get_local $n) (i32.const 1))) + (br_if $exit (i32.eqz (local.get $n))) + (local.set $list (struct.new $node (local.get $n) (local.get $list))) + (local.set $n (i32.sub (local.get $n) (i32.const 1))) (br $loop))) - (get_local $list)))`); + (local.get $list)))`); var stressIns = new WebAssembly.Instance(new WebAssembly.Module(stress)).exports; var stressLevel = conf.x64 && !conf.tsan && !conf.asan && !conf.valgrind ? 100000 : 1000; var the_list = stressIns.iota1(stressLevel); @@ -263,20 +263,20 @@ assertEq(the_list, null); (func (export "set") (param anyref) (local (ref $big)) - (set_local 1 (struct.narrow anyref (ref $big) (get_local 0))) - (struct.set $big 1 (get_local 1) (i64.const 0x3333333376544567))) + (local.set 1 (struct.narrow anyref (ref $big) (local.get 0))) + (struct.set $big 1 (local.get 1) (i64.const 0x3333333376544567))) (func (export "set2") (param $p anyref) (struct.set $big 1 - (struct.narrow anyref (ref $big) (get_local $p)) + (struct.narrow anyref (ref $big) (local.get $p)) (i64.const 0x3141592653589793))) (func (export "low") (param $p anyref) (result i32) - (i32.wrap/i64 (struct.get $big 1 (struct.narrow anyref (ref $big) (get_local $p))))) + (i32.wrap/i64 (struct.get $big 1 (struct.narrow anyref (ref $big) (local.get $p))))) (func (export "high") (param $p anyref) (result i32) (i32.wrap/i64 (i64.shr_u - (struct.get $big 1 (struct.narrow anyref (ref $big) (get_local $p))) + (struct.get $big 1 (struct.narrow anyref (ref $big) (local.get $p))) (i64.const 32)))) (func (export "mk") (result anyref) @@ -324,34 +324,34 @@ assertEq(the_list, null); (global $g (mut (ref $big)) (ref.null)) (func (export "make") (result anyref) - (set_global $g + (global.set $g (struct.new $big (i32.const 0x7aaaaaaa) (i64.const 0x4201020337) (i32.const 0x6bbbbbbb))) - (get_global $g)) + (global.get $g)) (func (export "update0") (param $x i32) - (struct.set $big 0 (get_global $g) (get_local $x))) + (struct.set $big 0 (global.get $g) (local.get $x))) (func (export "get0") (result i32) - (struct.get $big 0 (get_global $g))) + (struct.get $big 0 (global.get $g))) (func (export "update1") (param $hi i32) (param $lo i32) - (struct.set $big 1 (get_global $g) + (struct.set $big 1 (global.get $g) (i64.or - (i64.shl (i64.extend_u/i32 (get_local $hi)) (i64.const 32)) - (i64.extend_u/i32 (get_local $lo))))) + (i64.shl (i64.extend_u/i32 (local.get $hi)) (i64.const 32)) + (i64.extend_u/i32 (local.get $lo))))) (func (export "get1_low") (result i32) - (i32.wrap/i64 (struct.get $big 1 (get_global $g)))) + (i32.wrap/i64 (struct.get $big 1 (global.get $g)))) (func (export "get1_high") (result i32) (i32.wrap/i64 - (i64.shr_u (struct.get $big 1 (get_global $g)) (i64.const 32)))) + (i64.shr_u (struct.get $big 1 (global.get $g)) (i64.const 32)))) (func (export "update2") (param $x i32) - (struct.set $big 2 (get_global $g) (get_local $x))) + (struct.set $big 2 (global.get $g) (local.get $x))) (func (export "get2") (result i32) - (struct.get $big 2 (get_global $g))) + (struct.get $big 2 (global.get $g))) )`; @@ -396,16 +396,16 @@ var bin = wasmTextToBinary( (global $g (mut (ref $cons)) (ref.null)) (func (export "push") (param i32) - (set_global $g (struct.new $cons (get_local 0) (get_global $g)))) + (global.set $g (struct.new $cons (local.get 0) (global.get $g)))) (func (export "top") (result i32) - (struct.get $cons 0 (get_global $g))) + (struct.get $cons 0 (global.get $g))) (func (export "pop") - (set_global $g (struct.get $cons 1 (get_global $g)))) + (global.set $g (struct.get $cons 1 (global.get $g)))) (func (export "is_empty") (result i32) - (ref.is_null (get_global $g))) + (ref.is_null (global.get $g))) )`); @@ -437,7 +437,7 @@ assertErrorMessage(() => ins.pop(), (func (export "mk") (result anyref) (struct.new $Node (i32.const 37))) (func (export "f") (param $n anyref) (result anyref) - (struct.narrow anyref (ref $Node) (get_local $n))))`).exports; + (struct.narrow anyref (ref $Node) (local.get $n))))`).exports; var n = ins.mk(); assertEq(ins.f(n), n); assertEq(ins.f(wrapWithProto(n, {})), null); @@ -457,16 +457,16 @@ assertErrorMessage(() => ins.pop(), (field $y i32))) (func $f (param $p (ref $s)) (result i32) - (struct.get $s $x (get_local $p))) + (struct.get $s $x (local.get $p))) (func $g (param $p (ref $s)) (result i32) - (struct.get $s $y (get_local $p))) + (struct.get $s $y (local.get $p))) (func (export "testf") (param $n i32) (result i32) - (call $f (struct.new $s (get_local $n) (i32.mul (get_local $n) (i32.const 2))))) + (call $f (struct.new $s (local.get $n) (i32.mul (local.get $n) (i32.const 2))))) (func (export "testg") (param $n i32) (result i32) - (call $g (struct.new $s (get_local $n) (i32.mul (get_local $n) (i32.const 2))))) + (call $g (struct.new $s (local.get $n) (i32.mul (local.get $n) (i32.const 2))))) )`))).exports; @@ -495,7 +495,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary(` (gc_feature_opt_in 3) (type $r (struct (field i32))) (func $f (param f64) (result anyref) - (struct.new $r (get_local 0))) + (struct.new $r (local.get 0))) )`)), WebAssembly.CompileError, /type mismatch/); diff --git a/js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js b/js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js index 9c2e7697d842..c3d469158b64 100644 --- a/js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js +++ b/js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js @@ -12,11 +12,11 @@ (table (export "t") 10 anyref) (type $dummy (struct (field i32))) (func (export "set_anyref") (param i32) (param anyref) - (table.set (get_local 0) (get_local 1))) + (table.set (local.get 0) (local.get 1))) (func (export "set_null") (param i32) - (table.set (get_local 0) (ref.null))) + (table.set (local.get 0) (ref.null))) (func (export "set_ref") (param i32) (param anyref) - (table.set (get_local 0) (struct.narrow anyref (ref $dummy) (get_local 1)))) + (table.set (local.get 0) (struct.narrow anyref (ref $dummy) (local.get 1)))) (func (export "make_struct") (result anyref) (struct.new $dummy (i32.const 37))))`); let x = {}; diff --git a/js/src/jit-test/tests/wasm/gc/tables-generalized.js b/js/src/jit-test/tests/wasm/gc/tables-generalized.js index 61a22456ffce..18e0bdb1fbad 100644 --- a/js/src/jit-test/tests/wasm/gc/tables-generalized.js +++ b/js/src/jit-test/tests/wasm/gc/tables-generalized.js @@ -162,7 +162,7 @@ function dummy() { return 37 } `(module (table (export "t") 10 anyref) (func (export "f") (param i32) (result anyref) - (table.get (get_local 0))))`); + (table.get (local.get 0))))`); let x = {}; ins.exports.t.set(0, x); assertEq(ins.exports.f(0), x); @@ -177,7 +177,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (table 10 anyref) (func (export "f") (param f64) (result anyref) - (table.get (get_local 0))))`)), + (table.get (local.get 0))))`)), WebAssembly.CompileError, /type mismatch/); @@ -188,7 +188,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (table 10 funcref) (func (export "f") (param i32) - (drop (table.get (get_local 0)))))`)), + (drop (table.get (local.get 0)))))`)), WebAssembly.CompileError, /table.get only on tables of anyref/); @@ -196,7 +196,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (table 10 funcref) (func (export "f") (param i32) - (drop (table.get (get_local 0)))))`)), + (drop (table.get (local.get 0)))))`)), WebAssembly.CompileError, /table.get only on tables of anyref/); @@ -205,7 +205,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (func (export "f") (param i32) - (drop (table.get (get_local 0)))))`)), + (drop (table.get (local.get 0)))))`)), WebAssembly.CompileError, /table index out of range for table.get/); @@ -218,9 +218,9 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (table (export "t") 10 anyref) (func (export "set_anyref") (param i32) (param anyref) - (table.set (get_local 0) (get_local 1))) + (table.set (local.get 0) (local.get 1))) (func (export "set_null") (param i32) - (table.set (get_local 0) (ref.null))))`); + (table.set (local.get 0) (ref.null))))`); let x = {}; ins.exports.set_anyref(3, x); assertEq(ins.exports.t.get(3), x); @@ -237,7 +237,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (table 10 anyref) (func (export "f") (param f64) - (table.set (get_local 0) (ref.null))))`)), + (table.set (local.get 0) (ref.null))))`)), WebAssembly.CompileError, /type mismatch/); @@ -247,7 +247,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (table 10 anyref) (func (export "f") (param f64) - (table.set (i32.const 0) (get_local 0))))`)), + (table.set (i32.const 0) (local.get 0))))`)), WebAssembly.CompileError, /type mismatch/); @@ -257,7 +257,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (table 10 funcref) (func (export "f") (param anyref) - (table.set (i32.const 0) (get_local 0))))`)), + (table.set (i32.const 0) (local.get 0))))`)), WebAssembly.CompileError, /table.set only on tables of anyref/); @@ -266,7 +266,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (func (export "f") (param anyref) - (table.set (i32.const 0) (get_local 0))))`)), + (table.set (i32.const 0) (local.get 0))))`)), WebAssembly.CompileError, /table index out of range for table.set/); @@ -280,7 +280,7 @@ let ins = wasmEvalText( `(module (table (export "t") 10 20 anyref) (func (export "grow") (param i32) (result i32) - (table.grow (get_local 0) (ref.null))))`); + (table.grow (local.get 0) (ref.null))))`); assertEq(ins.exports.grow(0), 10); assertEq(ins.exports.t.length, 10); assertEq(ins.exports.grow(1), 10); @@ -308,7 +308,7 @@ assertEq(ins.exports.t.length, 20) `(module (table 10 anyref) (func (export "grow") (param i32) (result i32) - (table.grow (get_local 0) (ref.null))))`); + (table.grow (local.get 0) (ref.null))))`); assertEq(ins.exports.grow(0), 10); assertEq(ins.exports.grow(1), 10); assertEq(ins.exports.grow(9), 11); @@ -331,7 +331,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (table 10 anyref) (func (export "f") (param f64) - (table.grow (get_local 0) (ref.null))))`)), + (table.grow (local.get 0) (ref.null))))`)), WebAssembly.CompileError, /type mismatch/); @@ -340,7 +340,7 @@ assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( assertErrorMessage(() => new WebAssembly.Module(wasmTextToBinary( `(module (func (export "f") (param i32) - (table.grow (get_local 0) (ref.null))))`)), + (table.grow (local.get 0) (ref.null))))`)), WebAssembly.CompileError, /table index out of range for table.grow/); @@ -354,7 +354,7 @@ for (let visibility of ['', '(export "t")', '(import "m" "t")']) { `(module (table ${visibility} 10 20 anyref) (func (export "grow") (param i32) (result i32) - (table.grow (get_local 0) (ref.null))) + (table.grow (local.get 0) (ref.null))) (func (export "size") (result i32) (table.size)))`, exp); @@ -414,7 +414,7 @@ let VALUES = [null, let ins = wasmEvalText( `(module (func (export "f") (param i32) (result i32) - (get_local 0)))`); + (local.get 0)))`); t.grow(1); assertEq(t.get(t.length-1), null); t.grow(2, ins.exports.f); diff --git a/js/src/jit-test/tests/wasm/gc/tables-multiple.js b/js/src/jit-test/tests/wasm/gc/tables-multiple.js index 2f5ab04283e1..73d2640a9704 100644 --- a/js/src/jit-test/tests/wasm/gc/tables-multiple.js +++ b/js/src/jit-test/tests/wasm/gc/tables-multiple.js @@ -19,17 +19,17 @@ var ins = wasmEvalText( (elem $t1 (i32.const 0) $f1 $f2) (elem $t2 (i32.const 0) $f3 $f4) (func $f1 (param $n i32) (result i32) - (i32.add (get_local $n) (i32.const 1))) + (i32.add (local.get $n) (i32.const 1))) (func $f2 (param $n i32) (result i32) - (i32.add (get_local $n) (i32.const 2))) + (i32.add (local.get $n) (i32.const 2))) (func $f3 (param $n i32) (result i32) - (i32.add (get_local $n) (i32.const 3))) + (i32.add (local.get $n) (i32.const 3))) (func $f4 (param $n i32) (result i32) - (i32.add (get_local $n) (i32.const 4))) + (i32.add (local.get $n) (i32.const 4))) (func (export "f") (param $fn i32) (param $n i32) (result i32) - (call_indirect $t1 $ftype (get_local $n) (get_local $fn))) + (call_indirect $t1 $ftype (local.get $n) (local.get $fn))) (func (export "g") (param $fn i32) (param $n i32) (result i32) - (call_indirect $t2 $ftype (get_local $n) (get_local $fn))))`).exports; + (call_indirect $t2 $ftype (local.get $n) (local.get $fn))))`).exports; assertEq(ins.f(0, 10), 11); assertEq(ins.f(1, 10), 12); @@ -64,26 +64,26 @@ var ins = wasmEvalText( `(module (table $t0 (import "m" "t0") 2 funcref) (type $id_i32_t (func (param i32) (result i32))) - (func $id_i32 (param i32) (result i32) (get_local 0)) + (func $id_i32 (param i32) (result i32) (local.get 0)) (elem $t0 (i32.const 1) $id_i32) (table $t1 (import "m" "t1") 3 anyref) (table $t2 (import "m" "t2") 4 funcref) (type $id_f64_t (func (param f64) (result f64))) - (func $id_f64 (param f64) (result f64) (get_local 0)) + (func $id_f64 (param f64) (result f64) (local.get 0)) (elem $t2 (i32.const 3) $id_f64) (table $t3 (import "m" "t3") 5 anyref) (func (export "f0") (param i32) (result i32) - (call_indirect $t0 $id_i32_t (get_local 0) (i32.const 1))) + (call_indirect $t0 $id_i32_t (local.get 0) (i32.const 1))) (func (export "f1") (param anyref) - (table.set $t1 (i32.const 2) (get_local 0))) + (table.set $t1 (i32.const 2) (local.get 0))) (func (export "f2") (param f64) (result f64) - (call_indirect $t2 $id_f64_t (get_local 0) (i32.const 3))) + (call_indirect $t2 $id_f64_t (local.get 0) (i32.const 3))) (func (export "f3") (table.set $t3 (i32.const 4) (table.get $t1 (i32.const 2)))))`, @@ -133,7 +133,7 @@ var ins = wasmEvalText( (table $t0 (import "m" "t0") 2 anyref) (table $t1 (import "m" "t1") 3 anyref) (func (export "f") (param $dest i32) (param $src i32) (param $len i32) - (table.copy $t1 (get_local $dest) $t0 (get_local $src) (get_local $len))))`, + (table.copy $t1 (local.get $dest) $t0 (local.get $src) (local.get $len))))`, exp); exp.m.t0.set(0, {x:0}); @@ -149,14 +149,14 @@ var ins = wasmEvalText( (table $t0 2 anyref) (table $t1 2 anyref) (func (export "copy") (param $dest i32) (param $src i32) (param $len i32) - get_local $dest - get_local $src - get_local $len + local.get $dest + local.get $src + local.get $len table.copy $t1 $t0) (func (export "set") (param $n i32) (param $v anyref) - (table.set $t0 (get_local $n) (get_local $v))) + (table.set $t0 (local.get $n) (local.get $v))) (func (export "get") (param $n i32) (result anyref) - (table.get $t1 (get_local $n))))`, + (table.get $t1 (local.get $n))))`, exp); var values = [{x:0}, {x:1}]; @@ -188,7 +188,7 @@ for (let [x,y,result,init] of [['(export "t")', '', arg*13, true], (table $t (export "t") 2 funcref) (type $fn1 (func (param i32) (result i32))) (func $f1 (param $n i32) (result i32) - (i32.sub (get_local $n) (i32.const 11))) + (i32.sub (local.get $n) (i32.const 11))) (elem $t (i32.const 1) $f1))`); let text = @@ -198,12 +198,12 @@ for (let [x,y,result,init] of [['(export "t")', '', arg*13, true], (table $t1 ${y} 2 funcref) (type $fn1 (func (param i32) (result i32))) (func $f1 (param $n i32) (result i32) - (i32.mul (get_local $n) (i32.const 13))) + (i32.mul (local.get $n) (i32.const 13))) ${init ? "(elem $t1 (i32.const 1) $f1)" : ""} (func (export "f") (param $n i32) (result i32) (table.copy $t0 (i32.const 0) $t1 (i32.const 0) (i32.const 2)) - (call_indirect $t0 $fn1 (get_local $n) (i32.const 1))))`; + (call_indirect $t0 $fn1 (local.get $n) (i32.const 1))))`; var ins = wasmEvalText(text, {m: otherins.exports}); assertEq(ins.exports.f(arg), result); @@ -247,11 +247,11 @@ var ins = wasmEvalText( (elem passive $f0 $f1) ;; 0 (type $ftype (func (param i32) (result i32))) (func $f0 (param i32) (result i32) - (i32.mul (get_local 0) (i32.const 13))) + (i32.mul (local.get 0) (i32.const 13))) (func $f1 (param i32) (result i32) - (i32.sub (get_local 0) (i32.const 11))) + (i32.sub (local.get 0) (i32.const 11))) (func (export "call") (param i32) (param i32) (result i32) - (call_indirect $t1 $ftype (get_local 1) (get_local 0))) + (call_indirect $t1 $ftype (local.get 1) (local.get 0))) (func (export "init") (table.init $t1 0 (i32.const 0) (i32.const 0) (i32.const 2))))`); @@ -277,11 +277,11 @@ var ins = wasmEvalText( (import "m" "t1" (table $t1 2 funcref)) (type $ftype (func (param f64) (result f64))) (func (export "f") (param $n f64) (result f64) - (f64.mul (get_local $n) (f64.const 3.25))) + (f64.mul (local.get $n) (f64.const 3.25))) (func (export "do0") (param $i i32) (param $n f64) (result f64) - (call_indirect $t0 $ftype (get_local $n) (get_local $i))) + (call_indirect $t0 $ftype (local.get $n) (local.get $i))) (func (export "do1") (param $i i32) (param $n f64) (result f64) - (call_indirect $t1 $ftype (get_local $n) (get_local $i))))`, + (call_indirect $t1 $ftype (local.get $n) (local.get $i))))`, exp); var ins2 = wasmEvalText( `(module @@ -289,9 +289,9 @@ var ins2 = wasmEvalText( (import "m" "t1" (table $t1 2 funcref)) (type $ftype (func (param f64) (result f64))) (func (export "do0") (param $i i32) (param $n f64) (result f64) - (call_indirect $t0 $ftype (get_local $n) (get_local $i))) + (call_indirect $t0 $ftype (local.get $n) (local.get $i))) (func (export "do1") (param $i i32) (param $n f64) (result f64) - (call_indirect $t1 $ftype (get_local $n) (get_local $i))))`, + (call_indirect $t1 $ftype (local.get $n) (local.get $i))))`, exp); assertEq(tbl.grow(10), 2); @@ -333,7 +333,7 @@ assertErrorMessage(() => wasmEvalText( (table $t0 2 anyref) (table $t1 2 anyref) (func $f (param anyref) - (table.set 2 (i32.const 0) (get_local 0))))`), + (table.set 2 (i32.const 0) (local.get 0))))`), WebAssembly.CompileError, /table index out of range for table.set/); diff --git a/js/src/jit-test/tests/wasm/gc/tables-stress.js b/js/src/jit-test/tests/wasm/gc/tables-stress.js index 292f0834eea0..9a4c68b981bc 100644 --- a/js/src/jit-test/tests/wasm/gc/tables-stress.js +++ b/js/src/jit-test/tests/wasm/gc/tables-stress.js @@ -12,24 +12,24 @@ for ( let prefix of ['', '(table $prefix 0 32 funcref)']) { (local $last i32) (local $iters i32) (local $tmp anyref) - (set_local $last (table.grow $tbl (i32.const 1) (ref.null))) - (table.set $tbl (get_local $last) (call $item)) + (local.set $last (table.grow $tbl (i32.const 1) (ref.null))) + (table.set $tbl (local.get $last) (call $item)) (loop $iter_continue - (set_local $i (i32.const 0)) - (set_local $j (get_local $last)) + (local.set $i (i32.const 0)) + (local.set $j (local.get $last)) (block $l_break (loop $l_continue - (br_if $l_break (i32.ge_s (get_local $j) (get_local $i))) - (set_local $tmp (table.get $tbl (get_local $i))) - (if (i32.eqz (i32.rem_s (get_local $i) (i32.const 3))) - (set_local $tmp (call $item))) - (table.set $tbl (get_local $i) (table.get $tbl (get_local $j))) - (table.set $tbl (get_local $j) (get_local $tmp)) - (set_local $i (i32.add (get_local $i) (i32.const 1))) - (set_local $j (i32.sub (get_local $j) (i32.const 1))) + (br_if $l_break (i32.ge_s (local.get $j) (local.get $i))) + (local.set $tmp (table.get $tbl (local.get $i))) + (if (i32.eqz (i32.rem_s (local.get $i) (i32.const 3))) + (local.set $tmp (call $item))) + (table.set $tbl (local.get $i) (table.get $tbl (local.get $j))) + (table.set $tbl (local.get $j) (local.get $tmp)) + (local.set $i (i32.add (local.get $i) (i32.const 1))) + (local.set $j (i32.sub (local.get $j) (i32.const 1))) (br $l_continue)) - (set_local $iters (i32.add (get_local $iters) (i32.const 1))) - (br_if $iter_continue (i32.lt_s (get_local $iters) (get_local $numiters)))))))`)); + (local.set $iters (i32.add (local.get $iters) (i32.const 1))) + (br_if $iter_continue (i32.lt_s (local.get $iters) (local.get $numiters)))))))`)); for (let [mode,freq] of [[14,100], // Compact every 100 allocations [2,12], // Collect every 12 allocations diff --git a/js/src/jit-test/tests/wasm/globals-impl.js b/js/src/jit-test/tests/wasm/globals-impl.js index 10bef827c7fd..f5ff8a3f5d6e 100644 --- a/js/src/jit-test/tests/wasm/globals-impl.js +++ b/js/src/jit-test/tests/wasm/globals-impl.js @@ -16,25 +16,25 @@ let txt = (local $tmp64 i64) (local $tmp32 i32) (loop - (set_global $ind64 (i64.add (get_global $ind64) (i64.const 11))) - (set_global $ind32 (i32.add (get_global $ind32) (i32.const 22))) - (set_global $dir64 (i64.add (get_global $dir64) (i64.const 33))) - (set_global $dir32 (i32.add (get_global $dir32) (i32.const 44))) + (global.set $ind64 (i64.add (global.get $ind64) (i64.const 11))) + (global.set $ind32 (i32.add (global.get $ind32) (i32.const 22))) + (global.set $dir64 (i64.add (global.get $dir64) (i64.const 33))) + (global.set $dir32 (i32.add (global.get $dir32) (i32.const 44))) - (set_local $tmp64 (i64.and (get_global $ind64) (get_global $dir64))) - (set_local $tmp32 (i32.or (get_global $ind32) (get_global $dir32))) + (local.set $tmp64 (i64.and (global.get $ind64) (global.get $dir64))) + (local.set $tmp32 (i32.or (global.get $ind32) (global.get $dir32))) - (set_local $sum - (i32.sub (get_local $sum) (i32.xor (i32.wrap/i64 (get_local $tmp64)) - (get_local $tmp32)))) + (local.set $sum + (i32.sub (local.get $sum) (i32.xor (i32.wrap/i64 (local.get $tmp64)) + (local.get $tmp32)))) - (set_local $loopctr - (i32.add (get_local $loopctr) (i32.const 1))) + (local.set $loopctr + (i32.add (local.get $loopctr) (i32.const 1))) (br_if 0 - (i32.lt_u (get_local $loopctr) (i32.const 10))) + (i32.lt_u (local.get $loopctr) (i32.const 10))) ) - (get_local $sum) + (local.get $sum) ) )`; diff --git a/js/src/jit-test/tests/wasm/globals.js b/js/src/jit-test/tests/wasm/globals.js index 038574e71dd2..690f8f6448a5 100644 --- a/js/src/jit-test/tests/wasm/globals.js +++ b/js/src/jit-test/tests/wasm/globals.js @@ -11,7 +11,7 @@ wasmFailValidateText(`(module (global f64 (f32.const 13.37)))`, /type mismatch/) wasmFailValidateText(`(module (global i32 (i32.add (i32.const 13) (i32.const 37))))`, /failed to read end/); wasmFailValidateText(`(module (global i32 (global.get 0)))`, /out of range/); -wasmFailValidateText(`(module (global i32 (get_global 1)) (global i32 (i32.const 1)))`, /out of range/); +wasmFailValidateText(`(module (global i32 (global.get 1)) (global i32 (i32.const 1)))`, /out of range/); // Test a well-defined global section. function testInner(type, initialValue, nextValue, coercion) @@ -20,10 +20,10 @@ function testInner(type, initialValue, nextValue, coercion) (global (mut ${type}) (${type}.const ${initialValue})) (global ${type} (${type}.const ${initialValue})) - (func $get (result ${type}) (get_global 0)) - (func $set (param ${type}) (global.set 0 (get_local 0))) + (func $get (result ${type}) (global.get 0)) + (func $set (param ${type}) (global.set 0 (local.get 0))) - (func $get_cst (result ${type}) (get_global 1)) + (func $get_cst (result ${type}) (global.get 1)) (export "get" $get) (export "get_cst" $get_cst) @@ -43,15 +43,15 @@ testInner('f32', 13.37, 0.1989, Math.fround); testInner('f64', 13.37, 0.1989, x => +x); // Semantic errors. -wasmFailValidateText(`(module (global (mut i32) (i32.const 1337)) (func (set_global 1 (i32.const 0))))`, /out of range/); -wasmFailValidateText(`(module (global i32 (i32.const 1337)) (func (set_global 0 (i32.const 0))))`, /can't write an immutable global/); +wasmFailValidateText(`(module (global (mut i32) (i32.const 1337)) (func (global.set 1 (i32.const 0))))`, /out of range/); +wasmFailValidateText(`(module (global i32 (i32.const 1337)) (func (global.set 0 (i32.const 0))))`, /can't write an immutable global/); // Big module with many variables: test that setting one doesn't overwrite the // other ones. function get_set(i, type) { return ` - (func $get_${i} (result ${type}) (get_global ${i})) - (func $set_${i} (param ${type}) (set_global ${i} (get_local 0))) + (func $get_${i} (result ${type}) (global.get ${i})) + (func $set_${i} (param ${type}) (global.set ${i} (local.get 0))) `; } @@ -91,12 +91,12 @@ for (let i = 0; i < 5; i++) { } // Initializer expressions can also be used in elem section initializers. -wasmFailValidateText(`(module (import "globals" "a" (global f32)) (table 4 funcref) (elem (get_global 0) $f) (func $f))`, /type mismatch/); +wasmFailValidateText(`(module (import "globals" "a" (global f32)) (table 4 funcref) (elem (global.get 0) $f) (func $f))`, /type mismatch/); module = wasmEvalText(`(module (import "globals" "a" (global i32)) (table (export "tbl") 4 funcref) - (elem (get_global 0) $f) + (elem (global.get 0) $f) (func $f) (export "f" $f) )`, { @@ -109,7 +109,7 @@ assertEq(module.f, module.tbl.get(1)); // Import/export semantics. module = wasmEvalText(`(module (import $g "globals" "x" (global i32)) - (func $get (result i32) (get_global $g)) + (func $get (result i32) (global.get $g)) (export "getter" $get) (export "value" global 0) )`, { globals: {x: 42} }).exports; @@ -176,25 +176,25 @@ assertEq(Number(module.imported), 42); assertEq(Number(module.defined), 1337); // Initializer expressions can reference an imported immutable global. -wasmFailValidateText(`(module (global f32 (f32.const 13.37)) (global i32 (get_global 0)))`, /must reference a global immutable import/); -wasmFailValidateText(`(module (global (mut f32) (f32.const 13.37)) (global i32 (get_global 0)))`, /must reference a global immutable import/); -wasmFailValidateText(`(module (global (mut i32) (i32.const 0)) (global i32 (get_global 0)))`, /must reference a global immutable import/); +wasmFailValidateText(`(module (global f32 (f32.const 13.37)) (global i32 (global.get 0)))`, /must reference a global immutable import/); +wasmFailValidateText(`(module (global (mut f32) (f32.const 13.37)) (global i32 (global.get 0)))`, /must reference a global immutable import/); +wasmFailValidateText(`(module (global (mut i32) (i32.const 0)) (global i32 (global.get 0)))`, /must reference a global immutable import/); -wasmFailValidateText(`(module (import "globals" "a" (global f32)) (global i32 (get_global 0)))`, /type mismatch/); +wasmFailValidateText(`(module (import "globals" "a" (global f32)) (global i32 (global.get 0)))`, /type mismatch/); function testInitExpr(type, initialValue, nextValue, coercion, assertFunc = assertEq) { var module = wasmEvalText(`(module (import "globals" "a" (global ${type})) - (global $glob_mut (mut ${type}) (get_global 0)) - (global $glob_imm ${type} (get_global 0)) + (global $glob_mut (mut ${type}) (global.get 0)) + (global $glob_imm ${type} (global.get 0)) - (func $get0 (result ${type}) (get_global 0)) + (func $get0 (result ${type}) (global.get 0)) - (func $get1 (result ${type}) (get_global 1)) - (func $set1 (param ${type}) (set_global 1 (get_local 0))) + (func $get1 (result ${type}) (global.get 1)) + (func $set1 (param ${type}) (global.set 1 (local.get 0))) - (func $get_cst (result ${type}) (get_global 2)) + (func $get_cst (result ${type}) (global.get 2)) (export "get0" $get0) (export "get1" $get1) @@ -255,7 +255,7 @@ assertErrorMessage(() => wasmEvalText(`(module let j = wasmEvalText(`(module (import "globals" "g" (global i64)) (func (export "f") (result i32) - (i64.eq (get_global 0) (i64.const 37))))`, + (i64.eq (global.get 0) (i64.const 37))))`, {globals: {g: i.exports.g}}); assertEq(j.exports.f(), 1); @@ -277,9 +277,9 @@ var nextValue = '0x531642753864975F'; wasmAssert(`(module (global (mut i64) (i64.const ${initialValue})) (global i64 (i64.const ${initialValue})) - (func $get (result i64) (get_global 0)) - (func $set (param i64) (set_global 0 (get_local 0))) - (func $get_cst (result i64) (get_global 1)) + (func $get (result i64) (global.get 0)) + (func $set (param i64) (global.set 0 (local.get 0))) + (func $get_cst (result i64) (global.get 1)) (export "get" $get) (export "get_cst" $get_cst) (export "set" $set) @@ -338,7 +338,7 @@ wasmAssert(`(module let mod = wasmEvalText(`(module (import "" "g" (global i64)) (func (export "f") (result i32) - (i64.eqz (get_global 0))))`, + (i64.eqz (global.get 0))))`, {"":{g: new Global({value: "i64"})}}); assertEq(mod.exports.f(), 1); @@ -389,7 +389,7 @@ wasmAssert(`(module let j = wasmEvalText(`(module (global (import "" "g") i32) (func (export "f") (result i32) - (get_global 0)))`, + (global.get 0)))`, { "": { "g": i.exports.g }}); // And when it is then accessed it has the right value: @@ -434,16 +434,16 @@ wasmAssert(`(module let i = wasmEvalText(`(module (global (export "g") (mut i32) (i32.const 37)) (func (export "getter") (result i32) - (get_global 0)) + (global.get 0)) (func (export "setter") (param i32) - (set_global 0 (get_local 0))))`); + (global.set 0 (local.get 0))))`); let j = wasmEvalText(`(module (import "" "g" (global (mut i32))) (func (export "getter") (result i32) - (get_global 0)) + (global.get 0)) (func (export "setter") (param i32) - (set_global 0 (get_local 0))))`, + (global.set 0 (local.get 0))))`, {"": {g: i.exports.g}}); // Initial values diff --git a/js/src/jit-test/tests/wasm/import-export.js b/js/src/jit-test/tests/wasm/import-export.js index 6504184481c8..1607a71b9b59 100644 --- a/js/src/jit-test/tests/wasm/import-export.js +++ b/js/src/jit-test/tests/wasm/import-export.js @@ -408,7 +408,7 @@ assertEq(e4.baz, e4.tbl.get(2)); // i64 is fully allowed for imported wasm functions -var code1 = wasmTextToBinary('(module (func $exp (param i64) (result i64) (i64.add (get_local 0) (i64.const 10))) (export "exp" $exp))'); +var code1 = wasmTextToBinary('(module (func $exp (param i64) (result i64) (i64.add (local.get 0) (i64.const 10))) (export "exp" $exp))'); var e1 = new Instance(new Module(code1)).exports; var code2 = wasmTextToBinary('(module (import $i "a" "b" (param i64) (result i64)) (func $f (result i32) (i32.wrap/i64 (call $i (i64.const 42)))) (export "f" $f))'); var e2 = new Instance(new Module(code2), {a:{b:e1.exp}}).exports; @@ -462,7 +462,7 @@ var m = new Module(wasmTextToBinary(` (data (i32.const 0) "\\0a\\0b") (data (i32.const 100) "\\0c\\0d") (func $get (param $p i32) (result i32) - (i32.load8_u (get_local $p))) + (i32.load8_u (local.get $p))) (export "get" $get)) `)); var mem = new Memory({initial:1, maximum:1}); @@ -487,7 +487,7 @@ var m = new Module(wasmTextToBinary(` (module (import "glob" "a" (global i32)) (memory 1) - (data (get_global 0) "\\0a\\0b")) + (data (global.get 0) "\\0a\\0b")) `)); assertEq(new Instance(m, {glob:{a:0}}) instanceof Instance, true); assertEq(new Instance(m, {glob:{a:(64*1024 - 2)}}) instanceof Instance, true); @@ -522,8 +522,8 @@ var m = new Module(wasmTextToBinary(` (func $g) (data (i32.const 0) "\\01") (elem (i32.const 0) $f) - (data (get_global $memOff) "\\02") - (elem (get_global $tblOff) $g) + (data (global.get $memOff) "\\02") + (elem (global.get $tblOff) $g) (export "f" $f) (export "g" $g)) `)); @@ -678,7 +678,7 @@ assertEq(tbl.get(3)(), undefined); // Cross-instance calls -var i1 = new Instance(new Module(wasmTextToBinary(`(module (func) (func (param i32) (result i32) (i32.add (get_local 0) (i32.const 1))) (func) (export "f" 1))`))); +var i1 = new Instance(new Module(wasmTextToBinary(`(module (func) (func (param i32) (result i32) (i32.add (local.get 0) (i32.const 1))) (func) (export "f" 1))`))); var i2 = new Instance(new Module(wasmTextToBinary(`(module (import $imp "a" "b" (param i32) (result i32)) (func $g (result i32) (call $imp (i32.const 13))) (export "g" $g))`)), {a:{b:i1.exports.f}}); assertEq(i2.exports.g(), 14); @@ -696,7 +696,7 @@ var i2 = new Instance(new Module(wasmTextToBinary(`(module (elem (i32.const 0) $imp $def) (func $def (result i32) (i32.load (i32.const 0))) (type $v2i (func (result i32))) - (func $call (param i32) (result i32) (call_indirect $v2i (get_local 0))) + (func $call (param i32) (result i32) (call_indirect $v2i (local.get 0))) (export "call" $call) )`)), {a:{b:i1.exports.f}}); assertEq(i2.exports.call(0), 0x42); @@ -706,11 +706,11 @@ var m = new Module(wasmTextToBinary(`(module (import $val "a" "val" (global i32)) (import $next "a" "next" (result i32)) (memory 1) - (func $start (i32.store (i32.const 0) (get_global $val))) + (func $start (i32.store (i32.const 0) (global.get $val))) (start $start) (func $call (result i32) (i32.add - (get_global $val) + (global.get $val) (i32.add (i32.load (i32.const 0)) (call $next)))) @@ -760,7 +760,7 @@ assertEq(e.call(), 1090); (import $missingThreeArgs "a" "sum" (result i32)) (func (export "foo") (param i32) (result i32) - get_local 0 + local.get 0 call $ffi ) @@ -769,13 +769,13 @@ assertEq(e.call(), 1090); ) (func (export "missTwo") (param i32) (result i32) - get_local 0 + local.get 0 call $missingTwoArgs ) (func (export "missOne") (param i32) (param i32) (result i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 call $missingOneArg ) )`, imports).exports; diff --git a/js/src/jit-test/tests/wasm/integer.js b/js/src/jit-test/tests/wasm/integer.js index 7c53d822520f..d9c67fb09d4b 100644 --- a/js/src/jit-test/tests/wasm/integer.js +++ b/js/src/jit-test/tests/wasm/integer.js @@ -7,42 +7,42 @@ function testUnary(type, opcode, op, expect) { // Test with constant wasmFullPassI64(`(module (func $run (result ${type}) (${type}.${opcode} (${type}.const ${op}))))`, expect); // Test with param - wasmFullPassI64(`(module (func $run (param ${type}) (result ${type}) (${type}.${opcode} (get_local 0))))`, expect, {}, `i64.const ${op}`); + wasmFullPassI64(`(module (func $run (param ${type}) (result ${type}) (${type}.${opcode} (local.get 0))))`, expect, {}, `i64.const ${op}`); return; } // Test with constant wasmFullPass(`(module (func (result ${type}) (${type}.${opcode} (${type}.const ${op}))) (export "run" 0))`, expect); // Test with param - wasmFullPass(`(module (func (param ${type}) (result ${type}) (${type}.${opcode} (get_local 0))) (export "run" 0))`, expect, {}, op); + wasmFullPass(`(module (func (param ${type}) (result ${type}) (${type}.${opcode} (local.get 0))) (export "run" 0))`, expect, {}, op); } function testBinary64(opcode, lhs, rhs, expect) { let lsrc = `i64.const ${lhs}`; let rsrc = `i64.const ${rhs}`; - wasmFullPassI64(`(module (func $run (param i64) (param i64) (result i64) (i64.${opcode} (get_local 0) (get_local 1))))`, expect, {}, lsrc, rsrc); + wasmFullPassI64(`(module (func $run (param i64) (param i64) (result i64) (i64.${opcode} (local.get 0) (local.get 1))))`, expect, {}, lsrc, rsrc); // The same, but now the RHS is a constant. - wasmFullPassI64(`(module (func $run (param i64) (result i64) (i64.${opcode} (get_local 0) (i64.const ${rhs}))))`, expect, {}, lsrc); + wasmFullPassI64(`(module (func $run (param i64) (result i64) (i64.${opcode} (local.get 0) (i64.const ${rhs}))))`, expect, {}, lsrc); // LHS and RHS are constants. wasmFullPassI64(`(module (func $run (result i64) (i64.${opcode} (i64.const ${lhs}) (i64.const ${rhs}))))`, expect); } function testBinary32(opcode, lhs, rhs, expect) { - wasmFullPass(`(module (func (param i32) (param i32) (result i32) (i32.${opcode} (get_local 0) (get_local 1))) (export "run" 0))`, expect, {}, lhs, rhs); + wasmFullPass(`(module (func (param i32) (param i32) (result i32) (i32.${opcode} (local.get 0) (local.get 1))) (export "run" 0))`, expect, {}, lhs, rhs); // The same, but now the RHS is a constant. - wasmFullPass(`(module (func (param i32) (result i32) (i32.${opcode} (get_local 0) (i32.const ${rhs}))) (export "run" 0))`, expect, {}, lhs); + wasmFullPass(`(module (func (param i32) (result i32) (i32.${opcode} (local.get 0) (i32.const ${rhs}))) (export "run" 0))`, expect, {}, lhs); // LHS and RHS are constants. wasmFullPass(`(module (func (result i32) (i32.${opcode} (i32.const ${lhs}) (i32.const ${rhs}))) (export "run" 0))`, expect); } function testComparison32(opcode, lhs, rhs, expect) { - wasmFullPass(`(module (func (param i32) (param i32) (result i32) (i32.${opcode} (get_local 0) (get_local 1))) (export "run" 0))`, expect, {}, lhs, rhs); + wasmFullPass(`(module (func (param i32) (param i32) (result i32) (i32.${opcode} (local.get 0) (local.get 1))) (export "run" 0))`, expect, {}, lhs, rhs); } function testComparison64(opcode, lhs, rhs, expect) { let lsrc = `i64.const ${lhs}`; let rsrc = `i64.const ${rhs}`; wasmFullPass(`(module - (func $cmp (param i64) (param i64) (result i32) (i64.${opcode} (get_local 0) (get_local 1))) + (func $cmp (param i64) (param i64) (result i32) (i64.${opcode} (local.get 0) (local.get 1))) (func $assert (result i32) i64.const ${lhs} i64.const ${rhs} @@ -53,7 +53,7 @@ function testComparison64(opcode, lhs, rhs, expect) { // Also test `if`, for the compare-and-branch path. wasmFullPass(`(module (func $cmp (param i64) (param i64) (result i32) - (if i32 (i64.${opcode} (get_local 0) (get_local 1)) + (if i32 (i64.${opcode} (local.get 0) (local.get 1)) (i32.const 1) (i32.const 0))) (func $assert (result i32) @@ -67,15 +67,15 @@ function testComparison64(opcode, lhs, rhs, expect) { function testI64Eqz(input, expect) { wasmFullPass(`(module (func (result i32) (i64.eqz (i64.const ${input}))) (export "run" 0))`, expect, {}); wasmFullPass(`(module - (func (param i64) (result i32) (i64.eqz (get_local 0))) + (func (param i64) (result i32) (i64.eqz (local.get 0))) (func $assert (result i32) (i64.const ${input}) (call 0)) (export "run" $assert))`, expect); } function testTrap32(opcode, lhs, rhs, expect) { - assertErrorMessage(() => wasmEvalText(`(module (func (param i32) (param i32) (result i32) (i32.${opcode} (get_local 0) (get_local 1))) (export "" 0))`).exports[""](lhs, rhs), Error, expect); + assertErrorMessage(() => wasmEvalText(`(module (func (param i32) (param i32) (result i32) (i32.${opcode} (local.get 0) (local.get 1))) (export "" 0))`).exports[""](lhs, rhs), Error, expect); // The same, but now the RHS is a constant. - assertErrorMessage(() => wasmEvalText(`(module (func (param i32) (result i32) (i32.${opcode} (get_local 0) (i32.const ${rhs}))) (export "" 0))`).exports[""](lhs), Error, expect); + assertErrorMessage(() => wasmEvalText(`(module (func (param i32) (result i32) (i32.${opcode} (local.get 0) (i32.const ${rhs}))) (export "" 0))`).exports[""](lhs), Error, expect); // LHS and RHS are constants. assertErrorMessage(wasmEvalText(`(module (func (result i32) (i32.${opcode} (i32.const ${lhs}) (i32.const ${rhs}))) (export "" 0))`).exports[""], Error, expect); } @@ -84,12 +84,12 @@ function testTrap64(opcode, lhs, rhs, expect) { let $call = ``; assertErrorMessage(wasmEvalText(`(module - (func (param i64) (param i64) (result i64) (i64.${opcode} (get_local 0) (get_local 1))) + (func (param i64) (param i64) (result i64) (i64.${opcode} (local.get 0) (local.get 1))) (func $f (export "") (i64.const ${lhs}) (i64.const ${rhs}) (call 0) drop) )`).exports[""], Error, expect); // The same, but now the RHS is a constant. assertErrorMessage(wasmEvalText(`(module - (func (param i64) (result i64) (i64.${opcode} (get_local 0) (i64.const ${rhs}))) + (func (param i64) (result i64) (i64.${opcode} (local.get 0) (i64.const ${rhs}))) (func $f (export "") (i64.const ${lhs}) (call 0) drop) )`).exports[""], Error, expect); // LHS and RHS are constants. @@ -174,7 +174,7 @@ if (getJitCompilerOptions()["ion.warmup.trigger"] === 0) gc(); // Test MTest's GVN branch inversion. -var testTrunc = wasmEvalText(`(module (func (param f32) (result i32) (if i32 (i32.eqz (i32.trunc_s/f32 (get_local 0))) (i32.const 0) (i32.const 1))) (export "" 0))`).exports[""]; +var testTrunc = wasmEvalText(`(module (func (param f32) (result i32) (if i32 (i32.eqz (i32.trunc_s/f32 (local.get 0))) (i32.const 0) (i32.const 1))) (export "" 0))`).exports[""]; assertEq(testTrunc(0), 0); assertEq(testTrunc(13.37), 1); @@ -368,26 +368,26 @@ testUnary('i64', 'popcnt', 0, 0); testI64Eqz(40, 0); testI64Eqz(0, 1); -wasmAssert(`(module (func $run (param i64) (result i64) (local i64) (set_local 1 (i64.shl (get_local 0) (get_local 0))) (i64.shl (get_local 1) (get_local 1))))`, +wasmAssert(`(module (func $run (param i64) (result i64) (local i64) (local.set 1 (i64.shl (local.get 0) (local.get 0))) (i64.shl (local.get 1) (local.get 1))))`, [{ type: 'i64', func: '$run', args: ['i64.const 2'], expected: 2048}]); // Test MTest's GVN branch inversion. -var testTrunc = wasmEvalText(`(module (func (param f32) (result i32) (if i32 (i64.eqz (i64.trunc_s/f32 (get_local 0))) (i32.const 0) (i32.const 1))) (export "" 0))`).exports[""]; +var testTrunc = wasmEvalText(`(module (func (param f32) (result i32) (if i32 (i64.eqz (i64.trunc_s/f32 (local.get 0))) (i32.const 0) (i32.const 1))) (export "" 0))`).exports[""]; assertEq(testTrunc(0), 0); assertEq(testTrunc(13.37), 1); -wasmAssert(`(module (func $run (result i64) (local i64) (set_local 0 (i64.rem_s (i64.const 1) (i64.const 0xf))) (i64.rem_s (get_local 0) (get_local 0))))`, +wasmAssert(`(module (func $run (result i64) (local i64) (local.set 0 (i64.rem_s (i64.const 1) (i64.const 0xf))) (i64.rem_s (local.get 0) (local.get 0))))`, [{ type: 'i64', func: '$run', expected: 0 }]); -wasmFailValidateText('(module (func (param f32) (result i32) (i32.clz (get_local 0))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (param i32) (result f32) (i32.clz (get_local 0))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param f32) (result f32) (i32.clz (get_local 0))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param f32) (result i32) (i32.clz (local.get 0))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param i32) (result f32) (i32.clz (local.get 0))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (result f32) (i32.clz (local.get 0))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (param f32) (param i32) (result i32) (i32.add (get_local 0) (get_local 1))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (param i32) (param f32) (result i32) (i32.add (get_local 0) (get_local 1))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (param i32) (param i32) (result f32) (i32.add (get_local 0) (get_local 1))))', mismatchError("i32", "f32")); -wasmFailValidateText('(module (func (param f32) (param f32) (result f32) (i32.add (get_local 0) (get_local 1))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param f32) (param i32) (result i32) (i32.add (local.get 0) (local.get 1))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param i32) (param f32) (result i32) (i32.add (local.get 0) (local.get 1))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param i32) (param i32) (result f32) (i32.add (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param f32) (result f32) (i32.add (local.get 0) (local.get 1))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (param f32) (param i32) (result i32) (i32.eq (get_local 0) (get_local 1))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (param i32) (param f32) (result i32) (i32.eq (get_local 0) (get_local 1))))', mismatchError("f32", "i32")); -wasmFailValidateText('(module (func (param i32) (param i32) (result f32) (i32.eq (get_local 0) (get_local 1))))', mismatchError("i32", "f32")); +wasmFailValidateText('(module (func (param f32) (param i32) (result i32) (i32.eq (local.get 0) (local.get 1))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param i32) (param f32) (result i32) (i32.eq (local.get 0) (local.get 1))))', mismatchError("f32", "i32")); +wasmFailValidateText('(module (func (param i32) (param i32) (result f32) (i32.eq (local.get 0) (local.get 1))))', mismatchError("i32", "f32")); diff --git a/js/src/jit-test/tests/wasm/ion-args.js b/js/src/jit-test/tests/wasm/ion-args.js index 194de924840c..3dc4e4d29217 100644 --- a/js/src/jit-test/tests/wasm/ion-args.js +++ b/js/src/jit-test/tests/wasm/ion-args.js @@ -1,21 +1,21 @@ let { exports } = wasmEvalText(`(module (func (export "i32") (result i32) (param i32) - get_local 0 + local.get 0 ) (func (export "f32") (result f32) (param f32) - get_local 0 + local.get 0 ) (func (export "f64") (result f64) (param f64) - get_local 0 + local.get 0 ) (func (export "mixed_args") (result f64) (param i32) (param i32) (param i32) (param i32) (param i32) ;; 5 i32 (param $f64 f64) ;; 1 f64 (param i32) - get_local $f64 + local.get $f64 ) )`); @@ -82,7 +82,7 @@ let {func} = wasmEvalText(`(module (func (export "func") (result i32) ${Array(32).join('(param i32)')} (param $last i32) - get_local $last + local.get $last ) )`).exports; @@ -99,7 +99,7 @@ func = wasmEvalText(`(module (func (export "func") (result i32) ${Array(32).join('(param f64)')} (param $last i32) - get_local $last + local.get $last ) )`).exports.func; @@ -124,7 +124,7 @@ func = wasmEvalText(`(module (func (export "func") (result i32) ${Array(32).join('(param f64)')} (param $last i32) - get_local $last + local.get $last ) )`).exports.func; diff --git a/js/src/jit-test/tests/wasm/ion-error-i64.js b/js/src/jit-test/tests/wasm/ion-error-i64.js index 3e4510e38895..1e542c5081a1 100644 --- a/js/src/jit-test/tests/wasm/ion-error-i64.js +++ b/js/src/jit-test/tests/wasm/ion-error-i64.js @@ -10,21 +10,21 @@ const EXCEPTION_ITER = ITER - 2; var instance = wasmEvalText(`(module (func $add (export "add") (result i32) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add ) (func $addi64 (export "add64") (result i64) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 call $add i64.extend_s/i32 ) (func $add_two_i64 (export "add_two_i64") (result i64) (param i64) (param i64) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i64.add ) )`).exports; diff --git a/js/src/jit-test/tests/wasm/ion-error-ool.js b/js/src/jit-test/tests/wasm/ion-error-ool.js index b1b934534864..bae1406ff82b 100644 --- a/js/src/jit-test/tests/wasm/ion-error-ool.js +++ b/js/src/jit-test/tests/wasm/ion-error-ool.js @@ -19,8 +19,8 @@ enableGeckoProfiling(); for (let type of ['i32', 'f32', 'f64']) { var instance = wasmEvalText(`(module (func $add (export "add") (result ${type}) (param ${type}) (param ${type}) - get_local 0 - get_local 1 + local.get 0 + local.get 1 ${type}.add ) )`).exports; diff --git a/js/src/jit-test/tests/wasm/ion-error-throw.js b/js/src/jit-test/tests/wasm/ion-error-throw.js index c55c8d36e72b..59099c0de69b 100644 --- a/js/src/jit-test/tests/wasm/ion-error-throw.js +++ b/js/src/jit-test/tests/wasm/ion-error-throw.js @@ -7,15 +7,15 @@ enableGeckoProfiling(); let { add } = wasmEvalText(`(module (func $add (export "add") (result i32) (param i32) (param i32) - get_local 0 + local.get 0 i32.const 42 i32.eq if unreachable end - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add ) )`).exports; diff --git a/js/src/jit-test/tests/wasm/ion-error-trace.js b/js/src/jit-test/tests/wasm/ion-error-trace.js index 8e9f15e67f28..7790cc80e1bc 100644 --- a/js/src/jit-test/tests/wasm/ion-error-trace.js +++ b/js/src/jit-test/tests/wasm/ion-error-trace.js @@ -20,20 +20,20 @@ var imports = { var instance = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(`(module (import $main "main" "f" (func)) (func $lol (export "add") (result i32) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 call $add ) (func $add (result i32) (param i32) (param i32) - get_local 0 + local.get 0 i32.const 5000 i32.eq if call $main end - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add ) )`)), imports).exports; @@ -83,12 +83,12 @@ var imports = { var instance = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(`(module (import $main "main" "f" (func)) (func $lol (export "add") (result i32) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 call $add ) (func $add (result i32) (param i32) (param i32) - get_local 0 + local.get 0 i32.const 5000 i32.eq if @@ -96,8 +96,8 @@ var instance = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary( unreachable end - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add ) )`)), imports).exports; diff --git a/js/src/jit-test/tests/wasm/ion-gc.js b/js/src/jit-test/tests/wasm/ion-gc.js index 77c8802cb575..82d6b308e86c 100644 --- a/js/src/jit-test/tests/wasm/ion-gc.js +++ b/js/src/jit-test/tests/wasm/ion-gc.js @@ -9,8 +9,8 @@ const EXCEPTION_ITER = TRIGGER + 5; for (let type of ['i32', 'f32', 'f64']) { var instance = wasmEvalText(`(module (func $add (export "add") (result ${type}) (param ${type}) (param ${type}) - get_local 0 - get_local 1 + local.get 0 + local.get 1 ${type}.add ) )`).exports; diff --git a/js/src/jit-test/tests/wasm/ion-lazy-tables.js b/js/src/jit-test/tests/wasm/ion-lazy-tables.js index eb38094de553..5cbb59ccc382 100644 --- a/js/src/jit-test/tests/wasm/ion-lazy-tables.js +++ b/js/src/jit-test/tests/wasm/ion-lazy-tables.js @@ -16,8 +16,8 @@ const EXPECTED_STACKS = [SLOW_ENTRY_STACK, FAST_ENTRY_STACK, INLINED_CALL_STACK] function main() { var { table } = wasmEvalText(`(module (func $add (result i32) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add ) (table (export "table") 10 funcref) @@ -36,8 +36,8 @@ function withTier2() { var module = new WebAssembly.Module(wasmTextToBinary(`(module (func $add (result i32) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add ) (table (export "table") 10 funcref) diff --git a/js/src/jit-test/tests/wasm/ion2wasm.js b/js/src/jit-test/tests/wasm/ion2wasm.js index 0b16f4c7eb92..3cc657668621 100644 --- a/js/src/jit-test/tests/wasm/ion2wasm.js +++ b/js/src/jit-test/tests/wasm/ion2wasm.js @@ -3,8 +3,8 @@ var INNER_ITERATIONS = 100; let instance = wasmEvalText(`(module (func (export "add") (result i32) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add ) @@ -17,19 +17,19 @@ let instance = wasmEvalText(`(module (global $g (mut i32) (i32.const 0)) (func (export "set_global_one") (param i32) - get_local 0 - set_global $g + local.get 0 + global.set $g ) (func (export "set_global_two") (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add - set_global $g + global.set $g ) (func (export "glob") (result i32) - get_global $g + global.get $g ) )`).exports; diff --git a/js/src/jit-test/tests/wasm/memory-aliasing.js b/js/src/jit-test/tests/wasm/memory-aliasing.js index 062f974ff385..5643c39a65eb 100644 --- a/js/src/jit-test/tests/wasm/memory-aliasing.js +++ b/js/src/jit-test/tests/wasm/memory-aliasing.js @@ -3,14 +3,14 @@ var i = wasmEvalText( (memory 1) (data (i32.const 0) "\\01\\02\\03\\04\\05\\06\\07\\08") (func $off1 (param $base i32) (result i32) (i32.add - (i32.load8_u (get_local $base)) - (i32.load8_u offset=1 (get_local $base))) + (i32.load8_u (local.get $base)) + (i32.load8_u offset=1 (local.get $base))) ) (export "off1" $off1) (func $off2 (param $base i32) (result i32) (i32.add - (i32.load8_u offset=1 (get_local $base)) - (i32.load8_u offset=2 (get_local $base))) + (i32.load8_u offset=1 (local.get $base)) + (i32.load8_u offset=2 (local.get $base))) ) (export "off2" $off2) )`).exports; diff --git a/js/src/jit-test/tests/wasm/memory-sharing.js b/js/src/jit-test/tests/wasm/memory-sharing.js index b6edee05a08c..d1cd60d6d9fa 100644 --- a/js/src/jit-test/tests/wasm/memory-sharing.js +++ b/js/src/jit-test/tests/wasm/memory-sharing.js @@ -65,7 +65,7 @@ const WASMPAGE = 65536; { let text = `(module (memory (import "" "memory") 1 1 shared) - (func (export "id") (param i32) (result i32) (get_local 0)))`; + (func (export "id") (param i32) (result i32) (local.get 0)))`; let mod = new WebAssembly.Module(wasmTextToBinary(text)); let mem = new WebAssembly.Memory({initial: 1, maximum: 1, shared: true}); let ins = new WebAssembly.Instance(mod, {"": {memory: mem}}); @@ -77,7 +77,7 @@ const WASMPAGE = 65536; { let text = `(module (memory (import "" "memory") 1 1 shared) - (func (export "id") (param i32) (result i32) (get_local 0)))`; + (func (export "id") (param i32) (result i32) (local.get 0)))`; let mod = new WebAssembly.Module(wasmTextToBinary(text)); let mem = new WebAssembly.Memory({initial: 1, maximum: 1}); assertErrorMessage(() => new WebAssembly.Instance(mod, {"": {memory: mem}}), @@ -90,7 +90,7 @@ const WASMPAGE = 65536; { let text = `(module (memory (import "" "memory") 1 1) - (func (export "id") (param i32) (result i32) (get_local 0)))`; + (func (export "id") (param i32) (result i32) (local.get 0)))`; let mod = new WebAssembly.Module(wasmTextToBinary(text)); let mem = new WebAssembly.Memory({initial: 1, maximum: 1, shared: true}); assertErrorMessage(() => new WebAssembly.Instance(mod, {"": {memory: mem}}), @@ -104,7 +104,7 @@ const WASMPAGE = 65536; { let text = `(module (memory (import "" "memory") 2 4 shared) - (func (export "id") (param i32) (result i32) (get_local 0)))`; + (func (export "id") (param i32) (result i32) (local.get 0)))`; let mod = new WebAssembly.Module(wasmTextToBinary(text)); // some cases that are non-matching are allowed, eg, initial > declared min @@ -137,8 +137,8 @@ const WASMPAGE = 65536; (memory (export "memory") 2 4 shared) (func (export "c") (result i32) memory.size) (func (export "g") (result i32) (memory.grow (i32.const 1))) - (func (export "l") (param i32) (result i32) (i32.load (get_local 0))) - (func (export "s") (param i32) (param i32) (i32.store (get_local 0) (get_local 1))))`; + (func (export "l") (param i32) (result i32) (i32.load (local.get 0))) + (func (export "s") (param i32) (param i32) (i32.store (local.get 0) (local.get 1))))`; let mod = new WebAssembly.Module(wasmTextToBinary(text)); let ins = new WebAssembly.Instance(mod); let exp = ins.exports; @@ -200,7 +200,7 @@ const WASMPAGE = 65536; let text = `(module (memory (import "" "memory") 2 4 shared) (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") - (func (export "l") (param i32) (result i32) (i32.load8_u (get_local 0))))`; + (func (export "l") (param i32) (result i32) (i32.load8_u (local.get 0))))`; let mod = new WebAssembly.Module(wasmTextToBinary(text)); let mem = new WebAssembly.Memory({initial: 2, maximum: 4, shared: true}); let ins = new WebAssembly.Instance(mod, {"": {memory: mem}}); diff --git a/js/src/jit-test/tests/wasm/memory.js b/js/src/jit-test/tests/wasm/memory.js index c619cc7b246e..472d43cc4a16 100644 --- a/js/src/jit-test/tests/wasm/memory.js +++ b/js/src/jit-test/tests/wasm/memory.js @@ -11,7 +11,7 @@ function loadModuleSrc(type, ext, offset, align, drop = false) { (${type}.load${ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (get_local 0) + (local.get 0) ) ${maybeDrop} ) (export "" 0))`; @@ -30,15 +30,15 @@ function storeModuleSrc(type, ext, offset, align) { (${type}.store${ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (get_local 0) - (get_local 1) + (local.get 0) + (local.get 1) ) ) (export "store" 0) (func $load (param i32) (result ${type}) (${type}.load${load_ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (get_local 0) + (local.get 0) ) ) (export "load" 1))`; } @@ -56,7 +56,7 @@ function storeModuleCstSrc(type, ext, offset, align, value) { (${type}.store${ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (get_local 0) + (local.get 0) (${type}.const ${value}) ) ) (export "store" 0) @@ -64,7 +64,7 @@ function storeModuleCstSrc(type, ext, offset, align, value) { (${type}.load${load_ext} offset=${offset} ${align != 0 ? 'align=' + align : ''} - (get_local 0) + (local.get 0) ) ) (export "load" 1))`; } @@ -122,11 +122,11 @@ function testStoreOOB(type, ext, base, offset, align, value) { } function badLoadModule(type, ext) { - wasmFailValidateText( `(module (func (param i32) (${type}.load${ext} (get_local 0))) (export "" 0))`, /can't touch memory/); + wasmFailValidateText( `(module (func (param i32) (${type}.load${ext} (local.get 0))) (export "" 0))`, /can't touch memory/); } function badStoreModule(type, ext) { - wasmFailValidateText(`(module (func (param i32) (${type}.store${ext} (get_local 0) (${type}.const 0))) (export "" 0))`, /can't touch memory/); + wasmFailValidateText(`(module (func (param i32) (${type}.store${ext} (local.get 0) (${type}.const 0))) (export "" 0))`, /can't touch memory/); } // Can't touch memory. @@ -310,30 +310,30 @@ for (var foldOffsets = 0; foldOffsets <= 1; foldOffsets++) { (data (i32.const 0) "\\00\\01\\02\\03\\04\\05\\06\\07\\08\\09\\0a\\0b\\0c\\0d\\0e\\0f") (data (i32.const 16) "\\f0\\f1\\f2\\f3\\f4\\f5\\f6\\f7\\f8\\f9\\fa\\fb\\fc\\fd\\fe\\ff") (func (param i32) (local i32 i32 i32 i32 f32 f64) (result i32) - (set_local 1 (i32.load8_s offset=4 (get_local 0))) - (set_local 2 (i32.load16_s (get_local 1))) - (i32.store8 offset=4 (get_local 0) (get_local 1)) - (set_local 3 (i32.load16_u (get_local 2))) - (i32.store16 (get_local 1) (get_local 2)) - (set_local 4 (i32.load (get_local 2))) - (i32.store (get_local 1) (get_local 2)) - (set_local 5 (f32.load (get_local 4))) - (f32.store (get_local 4) (get_local 5)) - (set_local 6 (f64.load (get_local 4))) - (f64.store (get_local 4) (get_local 6)) + (local.set 1 (i32.load8_s offset=4 (local.get 0))) + (local.set 2 (i32.load16_s (local.get 1))) + (i32.store8 offset=4 (local.get 0) (local.get 1)) + (local.set 3 (i32.load16_u (local.get 2))) + (i32.store16 (local.get 1) (local.get 2)) + (local.set 4 (i32.load (local.get 2))) + (i32.store (local.get 1) (local.get 2)) + (local.set 5 (f32.load (local.get 4))) + (f32.store (local.get 4) (local.get 5)) + (local.set 6 (f64.load (local.get 4))) + (f64.store (local.get 4) (local.get 6)) (i32.add (i32.add - (get_local 0) - (get_local 1) + (local.get 0) + (local.get 1) ) (i32.add (i32.add - (get_local 2) - (get_local 3) + (local.get 2) + (local.get 3) ) (i32.add - (get_local 4) - (i32.reinterpret/f32 (get_local 5)) + (local.get 4) + (i32.reinterpret/f32 (local.get 5)) ) ) ) diff --git a/js/src/jit-test/tests/wasm/nan-semantics.js b/js/src/jit-test/tests/wasm/nan-semantics.js index 575cad818df7..d65cbf6b9085 100644 --- a/js/src/jit-test/tests/wasm/nan-semantics.js +++ b/js/src/jit-test/tests/wasm/nan-semantics.js @@ -84,22 +84,22 @@ wasmAssert(`(module (func $add (result f32) (f32.add ${f32_snan_code} (f32.const 0))) ;; Shouldn't affect NaNess. - (func $set_get_global_f32 (result f32) + (func $global.set.get_f32 (result f32) ${f32_snan_code} - set_global 0 - get_global 0 + global.set 0 + global.get 0 ) ;; Shouldn't affect NaNess. - (func $set_get_global_f64 (result f64) + (func $global.set.get_f64 (result f64) ${f64_snan_code} - set_global 1 - get_global 1 + global.set 1 + global.get 1 ) )`, [ { type: 'f32', func: '$add', expected: f32_qnan }, - { type: 'f32', func: '$set_get_global_f32', expected: f32_snan }, - { type: 'f64', func: '$set_get_global_f64', expected: f64_snan }, + { type: 'f32', func: '$global.set.get_f32', expected: f32_snan }, + { type: 'f64', func: '$global.set.get_f64', expected: f64_snan }, ]); // NaN propagation behavior. @@ -116,9 +116,9 @@ function test(type, opcode, lhs_code, rhs_code) { // - (variable, variable) wasmAssert(`(module (func $1 (result ${t}) (${t}.${op} ${lhs_code} ${rhs_code})) - (func $2 (param ${t}) (result ${t}) (${t}.${op} (get_local 0) ${rhs_code})) - (func $3 (param ${t}) (result ${t}) (${t}.${op} ${lhs_code} (get_local 0))) - (func $4 (param ${t}) (param ${t}) (result ${t}) (${t}.${op} (get_local 0) (get_local 1))) + (func $2 (param ${t}) (result ${t}) (${t}.${op} (local.get 0) ${rhs_code})) + (func $3 (param ${t}) (result ${t}) (${t}.${op} ${lhs_code} (local.get 0))) + (func $4 (param ${t}) (param ${t}) (result ${t}) (${t}.${op} (local.get 0) (local.get 1))) )`, [ { type, func: '$1', expected: qnan_code }, { type, func: '$2', args: [lhs_code], expected: qnan_code }, diff --git a/js/src/jit-test/tests/wasm/passive-segs-nonboundary.js b/js/src/jit-test/tests/wasm/passive-segs-nonboundary.js index a0fe4bc2b95c..4f07335aa94f 100644 --- a/js/src/jit-test/tests/wasm/passive-segs-nonboundary.js +++ b/js/src/jit-test/tests/wasm/passive-segs-nonboundary.js @@ -60,7 +60,7 @@ function gen_tab_impmod_t(insn) (func (export "check") (param i32) (result i32) ;; call the selected table entry, which will either return a value, ;; or will cause an exception. - get_local 0 ;; callIx + local.get 0 ;; callIx call_indirect 0 ;; and its return value is our return value. ) )`; @@ -354,7 +354,7 @@ checkPassiveElemSegment("end", /failed to read end of initializer expression/); (func $g) (func $h) (func (export "doit") (param $idx i32) - (table.init 4 (get_local $idx) (i32.const 0) (i32.const 5))))`; + (table.init 4 (local.get $idx) (i32.const 0) (i32.const 5))))`; let ins = wasmEvalText(txt); ins.exports.doit(0); ins.exports.doit(5); diff --git a/js/src/jit-test/tests/wasm/passive-segs-partial-mem.js b/js/src/jit-test/tests/wasm/passive-segs-partial-mem.js index 9dc67ff98e50..1d7c66cc467b 100644 --- a/js/src/jit-test/tests/wasm/passive-segs-partial-mem.js +++ b/js/src/jit-test/tests/wasm/passive-segs-partial-mem.js @@ -23,7 +23,7 @@ function mem_fill(min, max, shared, backup, write=backup*2) { `(module (memory (export "mem") ${min} ${max} ${shared}) (func (export "run") (param $offs i32) (param $val i32) (param $len i32) - (memory.fill (get_local $offs) (get_local $val) (get_local $len))))`); + (memory.fill (local.get $offs) (local.get $val) (local.get $len))))`); // A fill past the end should throw *and* have filled all the way up to the end let offs = min*PAGESIZE - backup; let val = 37; @@ -60,7 +60,7 @@ function mem_init(min, max, shared, backup, write) { (memory (export "mem") ${min} ${max} ${shared}) (data passive "\\42\\42\\42\\42\\42\\42\\42\\42\\42\\42\\42\\42\\42\\42\\42\\42") (func (export "run") (param $offs i32) (param $len i32) - (memory.init 0 (get_local $offs) (i32.const 0) (get_local $len))))`); + (memory.init 0 (local.get $offs) (i32.const 0) (local.get $len))))`); // A fill writing past the end of the memory should throw *and* have filled // all the way up to the end. // @@ -118,7 +118,7 @@ function mem_copy(min, max, shared, srcOffs, targetOffs, len, copyDown=false) { `(module (memory (export "mem") ${min} ${max} ${shared}) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) - (memory.copy (get_local $targetOffs) (get_local $srcOffs) (get_local $len))))`); + (memory.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))`); let v = new Uint8Array(ins.exports.mem.buffer); diff --git a/js/src/jit-test/tests/wasm/passive-segs-partial-table.js b/js/src/jit-test/tests/wasm/passive-segs-partial-table.js index 84a5af2d146d..47e1e7ccbb1d 100644 --- a/js/src/jit-test/tests/wasm/passive-segs-partial-table.js +++ b/js/src/jit-test/tests/wasm/passive-segs-partial-table.js @@ -33,7 +33,7 @@ function tbl_init(min, max, backup, write, segoffs=0) { (func $f14 (export "f14")) (func $f15 (export "f15")) (func (export "run") (param $offs i32) (param $len i32) - (table.init 0 (get_local $offs) (i32.const ${segoffs}) (get_local $len))))`); + (table.init 0 (local.get $offs) (i32.const ${segoffs}) (local.get $len))))`); // A fill writing past the end of the table should throw *and* have filled // all the way up to the end. // @@ -109,7 +109,7 @@ function tbl_copy(min, max, srcOffs, targetOffs, len, copyDown=false) { (func $f14 (export "f14")) (func $f15 (export "f15")) (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32) - (table.copy (get_local $targetOffs) (get_local $srcOffs) (get_local $len))))`); + (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))`); let tbl = ins.exports.tbl; diff --git a/js/src/jit-test/tests/wasm/profiling.js b/js/src/jit-test/tests/wasm/profiling.js index 55d09bc254a8..a8e18bab2c54 100644 --- a/js/src/jit-test/tests/wasm/profiling.js +++ b/js/src/jit-test/tests/wasm/profiling.js @@ -63,7 +63,7 @@ test( test(`(module (import $f32 "Math" "sin" (param f32) (result f32)) (func (export "") (param f32) (result f32) - get_local 0 + local.get 0 call $f32 ) )`, @@ -75,7 +75,7 @@ if (getBuildConfiguration()["arm-simulator"]) { for (let op of ['div_s', 'rem_s', 'div_u', 'rem_u']) { test(`(module (func (export "") (param i32) (result i32) - get_local 0 + local.get 0 i64.extend_s/i32 i64.const 0x1a2b3c4d5e6f i64.${op} @@ -116,7 +116,7 @@ for (let type of ['f32', 'f64']) { for (let func of ['ceil', 'floor', 'nearest', 'trunc']) { test(`(module (func (export "") (param ${type}) (result ${type}) - get_local 0 + local.get 0 ${type}.${func} ) )`, @@ -206,7 +206,7 @@ for (let type of ['f32', 'f64']) { (import "a" "b" (table 10 funcref)) (elem (i32.const 2) $bar) (func $bar (result i32) (i32.const 99)) - (func $baz (param $i i32) (result i32) (call_indirect $v2i (get_local $i))) + (func $baz (param $i i32) (result i32) (call_indirect $v2i (local.get $i))) (export "baz" $baz) )`, {a:{b:e.tbl}}).exports; @@ -281,11 +281,11 @@ for (let type of ['f32', 'f64']) { (import $missingOneArg "a" "sumTwo" (param i32) (result i32)) (func (export "foo") (param i32) (result i32) - get_local 0 + local.get 0 call $ffi) (func (export "id") (param i32) (result i32) - get_local 0 + local.get 0 call $missingOneArg ) )`)); @@ -388,13 +388,13 @@ for (let type of ['f32', 'f64']) { // Ion->wasm calls. let func = wasmEvalText(`(module (func $inner (result i32) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add ) (func (export "add") (result i32) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 call $inner ) )`).exports.add; diff --git a/js/src/jit-test/tests/wasm/regress/baseline-arm64-chunk-pop.js b/js/src/jit-test/tests/wasm/regress/baseline-arm64-chunk-pop.js index f1f520034882..5bddd44a069d 100644 --- a/js/src/jit-test/tests/wasm/regress/baseline-arm64-chunk-pop.js +++ b/js/src/jit-test/tests/wasm/regress/baseline-arm64-chunk-pop.js @@ -4,19 +4,19 @@ var bin = wasmTextToBinary( (local i32 i64 i64 i64 f32) i32.const 1 tee_local 0 - get_local 0 - get_local 0 - get_local 0 - get_local 0 - get_local 0 - get_local 0 - get_local 0 + local.get 0 + local.get 0 + local.get 0 + local.get 0 + local.get 0 + local.get 0 + local.get 0 if i32 - get_local 0 + local.get 0 else - get_local 0 + local.get 0 tee_local 0 - get_local 0 + local.get 0 br_if 1 end drop diff --git a/js/src/jit-test/tests/wasm/regress/baseline-builtin-abi.js b/js/src/jit-test/tests/wasm/regress/baseline-builtin-abi.js index d11bfeda7275..16de2dc40004 100644 --- a/js/src/jit-test/tests/wasm/regress/baseline-builtin-abi.js +++ b/js/src/jit-test/tests/wasm/regress/baseline-builtin-abi.js @@ -12,9 +12,9 @@ var prog = wasmEvalText( (local $x f64) (local $y f64) (local $z f64) - (set_local $x (get_local $a)) - (set_local $y (get_local $b)) - (set_local $z (f64.floor (f64.div (get_local $x) (get_local $y)))) - (get_local $z)))`); + (local.set $x (local.get $a)) + (local.set $y (local.get $b)) + (local.set $z (f64.floor (f64.div (local.get $x) (local.get $y)))) + (local.get $z)))`); assertEq(prog.exports.test(16096, 32), 503); diff --git a/js/src/jit-test/tests/wasm/regress/baseline-bytereg.js b/js/src/jit-test/tests/wasm/regress/baseline-bytereg.js index 20f05537e10d..afb2eaf1bd6c 100644 --- a/js/src/jit-test/tests/wasm/regress/baseline-bytereg.js +++ b/js/src/jit-test/tests/wasm/regress/baseline-bytereg.js @@ -15,16 +15,16 @@ wasmEvalText(`(module (memory 1) (func $run (param i64) (param i32) (param i32) - get_local 1 - get_local 2 + local.get 1 + local.get 2 i32.add - get_local 1 - get_local 2 + local.get 1 + local.get 2 i32.add i32.const 0 - get_local 0 + local.get 0 i64.store8 drop diff --git a/js/src/jit-test/tests/wasm/regress/baseline-extend8.js b/js/src/jit-test/tests/wasm/regress/baseline-extend8.js index eb92f1bdd42f..6e637e97c9a2 100644 --- a/js/src/jit-test/tests/wasm/regress/baseline-extend8.js +++ b/js/src/jit-test/tests/wasm/regress/baseline-extend8.js @@ -10,9 +10,9 @@ for ( let i=0; i < 8; i++) { `(module (func (export "f") (param i32) (result i32) ${adds(i)} - (set_local 0 (i32.extend8_s (i32.add (get_local 0) (i32.const 1)))) + (local.set 0 (i32.extend8_s (i32.add (local.get 0) (i32.const 1)))) ${drops(i)} - (get_local 0)))`; + (local.get 0)))`; let ins = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(txt))); assertEq(ins.exports.f(254), -1); } @@ -20,7 +20,7 @@ for ( let i=0; i < 8; i++) { function adds(n) { let s = "" for ( let i=0; i < n; i++ ) - s += "(i32.add (get_local 0) (i32.const 1))\n"; + s += "(i32.add (local.get 0) (i32.const 1))\n"; return s; } diff --git a/js/src/jit-test/tests/wasm/regress/baseline-getglobal-scratch.js b/js/src/jit-test/tests/wasm/regress/baseline-getglobal-scratch.js index 87f0a7c647c5..2f4d74b91212 100644 --- a/js/src/jit-test/tests/wasm/regress/baseline-getglobal-scratch.js +++ b/js/src/jit-test/tests/wasm/regress/baseline-getglobal-scratch.js @@ -2,33 +2,33 @@ new WebAssembly.Module(wasmTextToBinary(` (module (global $g (mut i32) (i32.const 42)) (func (param $i i32) - get_local $i - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g + local.get $i + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g unreachable ) ) @@ -38,20 +38,20 @@ new WebAssembly.Module(wasmTextToBinary(` (module (global $g (mut i32) (i32.const 42)) (func (param $i i32) - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_global $g - get_local $i - set_global $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + global.get $g + local.get $i + global.set $g unreachable ) ) diff --git a/js/src/jit-test/tests/wasm/regress/baseline-i64-opt-cmp.js b/js/src/jit-test/tests/wasm/regress/baseline-i64-opt-cmp.js index aad892558a15..0cef5d061a47 100644 --- a/js/src/jit-test/tests/wasm/regress/baseline-i64-opt-cmp.js +++ b/js/src/jit-test/tests/wasm/regress/baseline-i64-opt-cmp.js @@ -7,7 +7,7 @@ wasmEvalText( (func $run (param i64) (param i64) (result i64) block i64 i64.const 1 - (i64.lt_s (get_local 0) (get_local 1)) + (i64.lt_s (local.get 0) (local.get 1)) br_if 0 drop i64.const 2 diff --git a/js/src/jit-test/tests/wasm/regress/baseline-nops-jumptable.js b/js/src/jit-test/tests/wasm/regress/baseline-nops-jumptable.js index 98bfe19be43e..2da3dac6d6ed 100644 --- a/js/src/jit-test/tests/wasm/regress/baseline-nops-jumptable.js +++ b/js/src/jit-test/tests/wasm/regress/baseline-nops-jumptable.js @@ -4,7 +4,7 @@ var f = wasmEvalText(`(module (func (result i32) (param i32) (block $1 (block $2 (block $default - (br_table $0 $1 $2 $default (get_local 0)))))) + (br_table $0 $1 $2 $default (local.get 0)))))) (return (i32.const 0))) (export "" 0) )`).exports[""]; diff --git a/js/src/jit-test/tests/wasm/regress/baseline-pop-along-edge.js b/js/src/jit-test/tests/wasm/regress/baseline-pop-along-edge.js index 64b23d7c86a9..303e26404724 100644 --- a/js/src/jit-test/tests/wasm/regress/baseline-pop-along-edge.js +++ b/js/src/jit-test/tests/wasm/regress/baseline-pop-along-edge.js @@ -1,7 +1,7 @@ // Bug 1316181 // There are locals with different values here to ensure that the -// get_local at the end picks up the right one even if the stack might +// local.get at the end picks up the right one even if the stack might // have become unbalanced by a failure to adjust SP along the branch // edge. The logic is that we use SP-relative addressing, and if the // actual SP is not what the compiler thinks it is we will read @@ -19,16 +19,16 @@ var o = wasmEvalText( (local $v6 i32) (local $v7 i32) (local $res i32) - (set_local $v0 (i32.const 0xDEADBEEF)) - (set_local $v1 (i32.const 0xFDEADBEE)) - (set_local $v2 (i32.const 0xEFDEADBE)) - (set_local $v3 (i32.const 0xEEFDEADB)) - (set_local $v4 (i32.const 0xBEEFDEAD)) - (set_local $v5 (i32.const 0xDBEEFDEA)) - (set_local $v6 (i32.const 0xADBEEFDE)) - (set_local $v7 (i32.const 0xEADBEEFD)) + (local.set $v0 (i32.const 0xDEADBEEF)) + (local.set $v1 (i32.const 0xFDEADBEE)) + (local.set $v2 (i32.const 0xEFDEADBE)) + (local.set $v3 (i32.const 0xEEFDEADB)) + (local.set $v4 (i32.const 0xBEEFDEAD)) + (local.set $v5 (i32.const 0xDBEEFDEA)) + (local.set $v6 (i32.const 0xADBEEFDE)) + (local.set $v7 (i32.const 0xEADBEEFD)) (block $b - (set_local $res + (local.set $res (i32.add (i32.add (i32.const 1) (i32.const 2)) (i32.add @@ -60,7 +60,7 @@ var o = wasmEvalText( (i32.add (i32.add (i32.const 29) (i32.const 30)) (br_if $b (i32.const 31) (i32.const 1))))))))))))))))))) - (return (get_local $v3))) + (return (local.get $v3))) (export "a" 0))`).exports; assertEq(o["a"](), 0xEEFDEADB|0); diff --git a/js/src/jit-test/tests/wasm/regress/brtable-conditionblock-folding.js b/js/src/jit-test/tests/wasm/regress/brtable-conditionblock-folding.js index 77d07b2eefbc..2dab33e3850f 100644 --- a/js/src/jit-test/tests/wasm/regress/brtable-conditionblock-folding.js +++ b/js/src/jit-test/tests/wasm/regress/brtable-conditionblock-folding.js @@ -9,7 +9,7 @@ assertEq(wasmEvalText(` br_table $out $out end end - get_local $p + local.get $p br_if 0 ) (export "f" $f) diff --git a/js/src/jit-test/tests/wasm/regress/bug1392105.js b/js/src/jit-test/tests/wasm/regress/bug1392105.js index fae18894cab1..4752da8ddff3 100644 --- a/js/src/jit-test/tests/wasm/regress/bug1392105.js +++ b/js/src/jit-test/tests/wasm/regress/bug1392105.js @@ -2,7 +2,7 @@ var code = "(module "; for (var i = 0; i < 100; i++) - code += "(func (param i32) (result i32) (i32.add (i32.const 1) (get_local 0))) "; + code += "(func (param i32) (result i32) (i32.add (i32.const 1) (local.get 0))) "; code += ")"; var buf = wasmTextToBinary(code); WebAssembly.compile(buf); diff --git a/js/src/jit-test/tests/wasm/regress/bug1450800.js b/js/src/jit-test/tests/wasm/regress/bug1450800.js index abb8b4901755..fb8493c102b4 100644 --- a/js/src/jit-test/tests/wasm/regress/bug1450800.js +++ b/js/src/jit-test/tests/wasm/regress/bug1450800.js @@ -9,14 +9,14 @@ function wasmEvalText(str, imports) { assertEq(wasmEvalText(`(module (global (import "a" "b") i32) (export "g" (global 0)) - (func (export "get") (result i32) get_global 0))`, + (func (export "get") (result i32) global.get 0))`, { a: { b: 42 }}).exports.get(), 42); for (let v of []) {} function testInitExpr(type, initialValue, nextValue, coercion, assertFunc = assertEq) { var module = wasmEvalText(`(module (import "globals" "a" (global ${type})) - (global $glob_imm ${type} (get_global 0)) + (global $glob_imm ${type} (global.get 0)) (export "global_imm" (global $glob_imm)) )`, { globals: { diff --git a/js/src/jit-test/tests/wasm/regress/bug1467415.js b/js/src/jit-test/tests/wasm/regress/bug1467415.js index 0a1898521879..997fa170f260 100644 --- a/js/src/jit-test/tests/wasm/regress/bug1467415.js +++ b/js/src/jit-test/tests/wasm/regress/bug1467415.js @@ -13,12 +13,12 @@ let mt = ` (local i32) (local i32) (block i32 - (set_local 0 (get_global 0)) + (local.set 0 (global.get 0)) (block i32 - (set_global 1 (i32.const 37)) + (global.set 1 (i32.const 37)) (block i32 - (set_local 1 (get_global 0)) - (i32.add (get_local 0) (get_local 1))))))) + (local.set 1 (global.get 0)) + (i32.add (local.get 0) (local.get 1))))))) `; let glob = new WebAssembly.Global({value:'i32', mutable:true}, 88); diff --git a/js/src/jit-test/tests/wasm/regress/current-memory-tls.js b/js/src/jit-test/tests/wasm/regress/current-memory-tls.js index 5758074c6224..6bd46b2b5f88 100644 --- a/js/src/jit-test/tests/wasm/regress/current-memory-tls.js +++ b/js/src/jit-test/tests/wasm/regress/current-memory-tls.js @@ -22,7 +22,7 @@ let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(` i64.mul ;; get the last byte index accessed by an int32 access. - get_local $i + local.get $i i32.const 3 i32.add tee_local $i @@ -32,7 +32,7 @@ let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(` i64.le_u if ;; get the floor of the accessed *page* index. - get_local $i + local.get $i i64.extend_u/i32 i64.const 65536 i64.div_u @@ -56,15 +56,15 @@ let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(` ) (func (export "set") (param $i i32) (param $v i32) - get_local $i + local.get $i call $maybeGrow - get_local $i - get_local $v + local.get $i + local.get $v i32.store ) (func (export "get") (param $i i32) (result i32) - get_local $i + local.get $i i32.load ) ) diff --git a/js/src/jit-test/tests/wasm/regress/frame-offset-stack-arg.js b/js/src/jit-test/tests/wasm/regress/frame-offset-stack-arg.js index 5ef4dff7db53..4bfedf3f4ad2 100644 --- a/js/src/jit-test/tests/wasm/regress/frame-offset-stack-arg.js +++ b/js/src/jit-test/tests/wasm/regress/frame-offset-stack-arg.js @@ -24,8 +24,8 @@ var bin = wasmTextToBinary( (param i32) (param i32) (param i32) (param i32) (param i32))) (func (export "test") (param $a i32) (param $b i32) (param $c i32) (param $d i32) (param $e i32) (param $f i32) (param $g i32) (param $h i32) (param $i i32) (param $j i32) - (call $f (get_local $a) (get_local $b) (get_local $c) (get_local $d) (get_local $e) - (get_local $f) (get_local $g) (get_local $h) (get_local $i) (get_local $j))))`); + (call $f (local.get $a) (local.get $b) (local.get $c) (local.get $d) (local.get $e) + (local.get $f) (local.get $g) (local.get $h) (local.get $i) (local.get $j))))`); var mod = new WebAssembly.Module(bin); var ins = new WebAssembly.Instance(mod, {m:{f}}); diff --git a/js/src/jit-test/tests/wasm/regress/gvn-unremovable-phi.js b/js/src/jit-test/tests/wasm/regress/gvn-unremovable-phi.js index d4e744746a37..832215f4e6c8 100644 --- a/js/src/jit-test/tests/wasm/regress/gvn-unremovable-phi.js +++ b/js/src/jit-test/tests/wasm/regress/gvn-unremovable-phi.js @@ -3,14 +3,14 @@ wasmEvalText(`(module (func $f (param $p i32) (local $x i32) (local $y i32) loop $top - get_local $x - get_local $p - get_local $x + local.get $x + local.get $p + local.get $x br_if $top i32.const 1 tee_local $p - get_local $y - set_local $x + local.get $y + local.set $x i32.add call $f br_if $top diff --git a/js/src/jit-test/tests/wasm/regress/ion-error-gc-fakeexitframe.js b/js/src/jit-test/tests/wasm/regress/ion-error-gc-fakeexitframe.js index 08b28149c0e1..3088619a25a1 100644 --- a/js/src/jit-test/tests/wasm/regress/ion-error-gc-fakeexitframe.js +++ b/js/src/jit-test/tests/wasm/regress/ion-error-gc-fakeexitframe.js @@ -22,12 +22,12 @@ var letext =`(module (export "load" $func1) (export "assert_0" $func2) (func $func0 (param $var0 i32) (param $var1 i64) - get_local $var0 - get_local $var1 + local.get $var0 + local.get $var1 i64.store16 offset=16 ) (func $func1 (param $var0 i32) (result i64) - get_local $var0 + local.get $var0 i64.load16_s offset=16 ) (func $func2 (result i32) diff --git a/js/src/jit-test/tests/wasm/regress/ion-inlinedcall-resumepoint.js b/js/src/jit-test/tests/wasm/regress/ion-inlinedcall-resumepoint.js index 388f57767c87..9b9c8209bc6f 100644 --- a/js/src/jit-test/tests/wasm/regress/ion-inlinedcall-resumepoint.js +++ b/js/src/jit-test/tests/wasm/regress/ion-inlinedcall-resumepoint.js @@ -26,7 +26,7 @@ let { exports } = new WebAssembly.Instance( (module (func $imp (import "env" "importedFunc") (param i32)) (func (export "exp") (param i32) - get_local 0 + local.get 0 call $imp ) ) diff --git a/js/src/jit-test/tests/wasm/regress/ion-lazy-stubs-jit.js b/js/src/jit-test/tests/wasm/regress/ion-lazy-stubs-jit.js index 082f089d39a8..94c0027d70bd 100644 --- a/js/src/jit-test/tests/wasm/regress/ion-lazy-stubs-jit.js +++ b/js/src/jit-test/tests/wasm/regress/ion-lazy-stubs-jit.js @@ -1,7 +1,7 @@ (function coerceinplace() { var { table } = wasmEvalText(`(module (func $add (result i32) (param i32) (param i32) - get_local 0 + local.get 0 ) (table (export "table") 10 funcref) (elem (i32.const 0) $add) @@ -15,14 +15,14 @@ (function reporti64() { var instance = wasmEvalText(`(module (func $add (export "add") (result i32) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 i32.add ) (func $addi64 (result i64) (param i32) (param i32) - get_local 0 - get_local 1 + local.get 0 + local.get 1 call $add i64.extend_s/i32 ) diff --git a/js/src/jit-test/tests/wasm/regress/jit-updatepcquad.js b/js/src/jit-test/tests/wasm/regress/jit-updatepcquad.js index 6ff0a14637fc..e1a09b454aef 100644 --- a/js/src/jit-test/tests/wasm/regress/jit-updatepcquad.js +++ b/js/src/jit-test/tests/wasm/regress/jit-updatepcquad.js @@ -14,7 +14,7 @@ const { exports } = wasmEvalText(` (module (import "global" "func" (param i32) (result i32)) (func (export "func_0") (param i32)(result i32) - get_local 0 + local.get 0 call 0 ) ) diff --git a/js/src/jit-test/tests/wasm/regress/misc-control-flow.js b/js/src/jit-test/tests/wasm/regress/misc-control-flow.js index 7a514107594c..e0264f76f9d0 100644 --- a/js/src/jit-test/tests/wasm/regress/misc-control-flow.js +++ b/js/src/jit-test/tests/wasm/regress/misc-control-flow.js @@ -1,24 +1,24 @@ wasmFailValidateText(`(module (func (result i32) (param i32) - (loop (if (i32.const 0) (br 0)) (get_local 0))) + (loop (if (i32.const 0) (br 0)) (local.get 0))) (export "" 0) )`, /unused values not explicitly dropped by end of block/); wasmFailValidateText(`(module (func (param i32) - (loop (if (i32.const 0) (br 0)) (get_local 0))) + (loop (if (i32.const 0) (br 0)) (local.get 0))) (export "" 0) )`, /unused values not explicitly dropped by end of block/); wasmFailValidateText(`(module (func (result i32) (param i32) - (loop (if (i32.const 0) (br 0)) (drop (get_local 0)))) + (loop (if (i32.const 0) (br 0)) (drop (local.get 0)))) (export "" 0) )`, emptyStackError); assertEq(wasmEvalText(`(module (func (result i32) (param i32) - (loop (if (i32.const 0) (br 0))) (get_local 0)) + (loop (if (i32.const 0) (br 0))) (local.get 0)) (export "" 0) )`).exports[""](42), 42); @@ -85,8 +85,8 @@ wasmEvalText(` (module (import "check" "one" (param i32)) (import "check" "two" (param i32) (param i32)) - (func (param i32) (call 0 (get_local 0))) - (func (param i32) (param i32) (call 1 (get_local 0) (get_local 1))) + (func (param i32) (call 0 (local.get 0))) + (func (param i32) (param i32) (call 1 (local.get 0) (local.get 1))) (func (call 1 (i32.const 43) diff --git a/js/src/jit-test/tests/wasm/regress/movable-traps.js b/js/src/jit-test/tests/wasm/regress/movable-traps.js index f723a56658eb..ebc9935fd9b3 100644 --- a/js/src/jit-test/tests/wasm/regress/movable-traps.js +++ b/js/src/jit-test/tests/wasm/regress/movable-traps.js @@ -24,9 +24,9 @@ for (let body of bodies) { (module (func $f (param $x i32) (result i32) loop $top i32 - get_local $x + local.get $x if - get_local $x + local.get $x br 2 end ${body} diff --git a/js/src/jit-test/tests/wasm/regress/oom-masm-baseline.js b/js/src/jit-test/tests/wasm/regress/oom-masm-baseline.js index bd7f05603cd2..cda1b54584c6 100644 --- a/js/src/jit-test/tests/wasm/regress/oom-masm-baseline.js +++ b/js/src/jit-test/tests/wasm/regress/oom-masm-baseline.js @@ -8,7 +8,7 @@ try { var bin = wasmTextToBinary( `(module (func (result i32) (param f64) (param f32) i64.const 0 - get_local 0 + local.get 0 drop i32.wrap/i64 f64.const 0 diff --git a/js/src/jit-test/tests/wasm/regress/pass-stack-int64.js b/js/src/jit-test/tests/wasm/regress/pass-stack-int64.js index cb25ec1add8a..94497f35deac 100644 --- a/js/src/jit-test/tests/wasm/regress/pass-stack-int64.js +++ b/js/src/jit-test/tests/wasm/regress/pass-stack-int64.js @@ -2,7 +2,7 @@ var params = ''; var locals = ''; for (let i = 0; i < 20; i++) { params += '(param i64) '; - locals += `(get_local ${i}) `; + locals += `(local.get ${i}) `; } wasmEvalText(` diff --git a/js/src/jit-test/tests/wasm/regress/regalloc-i64-load-store-global.js b/js/src/jit-test/tests/wasm/regress/regalloc-i64-load-store-global.js index 2cfcd5bc2a48..3b320b14054b 100644 --- a/js/src/jit-test/tests/wasm/regress/regalloc-i64-load-store-global.js +++ b/js/src/jit-test/tests/wasm/regress/regalloc-i64-load-store-global.js @@ -1,13 +1,13 @@ wasmFullPassI64(` (module (global (mut i64) (i64.const 9970292656026947164)) - (func (export "get_global_0") (result i64) get_global 0) + (func (export "global.get_0") (result i64) global.get 0) (func $run (result i64) (param i32) i64.const 8692897571457488645 i64.const 1028567229461950342 i64.mul - get_global 0 + global.get 0 f32.const 3.141592653 f32.floor f32.const -13.37 diff --git a/js/src/jit-test/tests/wasm/regress/reserve-joinreg.js b/js/src/jit-test/tests/wasm/regress/reserve-joinreg.js index e48c6c14a32f..a6f2f792d1b6 100644 --- a/js/src/jit-test/tests/wasm/regress/reserve-joinreg.js +++ b/js/src/jit-test/tests/wasm/regress/reserve-joinreg.js @@ -3,14 +3,14 @@ wasmEvalText( `(module (func $func0 (param $arg0 i32) (result i32) (local $var0 i64) - (set_local $var0 (i64.extend_u/i32 (get_local $arg0))) + (local.set $var0 (i64.extend_u/i32 (local.get $arg0))) (i32.wrap/i64 (i64.add (block i64 (loop $label1 $label0 (drop (block $label2 i64 - (br_table $label2 (i64.const 0) (get_local $arg0)))) - (set_local $var0 (i64.mul (i64.const 2) (get_local $var0)))) - (tee_local $var0 (i64.add (i64.const 4) (get_local $var0)))) + (br_table $label2 (i64.const 0) (local.get $arg0)))) + (local.set $var0 (i64.mul (i64.const 2) (local.get $var0)))) + (tee_local $var0 (i64.add (i64.const 4) (local.get $var0)))) (i64.const 1)))) (export "" 0))`); diff --git a/js/src/jit-test/tests/wasm/regress/teavm-bugs.js b/js/src/jit-test/tests/wasm/regress/teavm-bugs.js index 2cbe7483cc8c..dd91586537fa 100644 --- a/js/src/jit-test/tests/wasm/regress/teavm-bugs.js +++ b/js/src/jit-test/tests/wasm/regress/teavm-bugs.js @@ -9,10 +9,10 @@ for (let i = 15; i --> 0;) { tests = ` (if i64 (i64.eq - (get_local ${i + 8}) - (get_local ${i}) + (local.get ${i + 8}) + (local.get ${i}) ) - (get_local ${i + 8}) + (local.get ${i + 8}) ${tests} )`; } @@ -30,23 +30,23 @@ wasmEvalText(code); assertEq(wasmEvalText(`(module (memory 1) (func (param $p i32) (local $l i32) (result i32) - (set_local $l (i32.const 0)) + (local.set $l (i32.const 0)) (if - (get_local $p) - (set_local $l + (local.get $p) + (local.set $l (i32.add - (get_local $l) - (i32.load8_s (get_local $p)) + (local.get $l) + (i32.load8_s (local.get $p)) ) ) ) - (set_local $l + (local.set $l (i32.add - (get_local $l) - (i32.load8_s (get_local $p)) + (local.get $l) + (i32.load8_s (local.get $p)) ) ) - (get_local $l) + (local.get $l) ) (data (i32.const 0) "\\00\\01\\02\\03\\04\\05\\06\\07\\08\\09\\0a\\0b\\0c\\0d\\0e\\0f") (export "test" 0) diff --git a/js/src/jit-test/tests/wasm/regress/unaligned-store64.js b/js/src/jit-test/tests/wasm/regress/unaligned-store64.js index 4d6755b07bef..b87809345104 100644 --- a/js/src/jit-test/tests/wasm/regress/unaligned-store64.js +++ b/js/src/jit-test/tests/wasm/regress/unaligned-store64.js @@ -2,11 +2,11 @@ var ins = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary( `(module (memory (export "mem") 1 1) (func (export "store_32_1") (param $ptr i32) - (i64.store32 align=1 (get_local $ptr) (i64.const 0xabba1337))) + (i64.store32 align=1 (local.get $ptr) (i64.const 0xabba1337))) (func (export "store_32_2") (param $ptr i32) - (i64.store32 align=2 (get_local $ptr) (i64.const 0xabba1337))) + (i64.store32 align=2 (local.get $ptr) (i64.const 0xabba1337))) (func (export "store_16") (param $ptr i32) - (i64.store16 align=1 (get_local $ptr) (i64.const 0x1337))))`))).exports; + (i64.store16 align=1 (local.get $ptr) (i64.const 0x1337))))`))).exports; var mem = new Uint8Array(ins.mem.buffer); diff --git a/js/src/jit-test/tests/wasm/resizing.js b/js/src/jit-test/tests/wasm/resizing.js index 1498dbbfcd9c..15325b2d5b73 100644 --- a/js/src/jit-test/tests/wasm/resizing.js +++ b/js/src/jit-test/tests/wasm/resizing.js @@ -84,13 +84,13 @@ var mem = new Memory({initial:1}); new Int32Array(mem.buffer)[0] = 42; var mod = new Module(wasmTextToBinary(`(module (import "" "mem" (memory 1)) - (func $gm (param i32) (result i32) (memory.grow (get_local 0))) + (func $gm (param i32) (result i32) (memory.grow (local.get 0))) (export "grow_memory" $gm) (func $cm (result i32) (memory.size)) (export "current_memory" $cm) - (func $ld (param i32) (result i32) (i32.load (get_local 0))) + (func $ld (param i32) (result i32) (i32.load (local.get 0))) (export "load" $ld) - (func $st (param i32) (param i32) (i32.store (get_local 0) (get_local 1))) + (func $st (param i32) (param i32) (i32.store (local.get 0) (local.get 1))) (export "store" $st) )`)); var exp1 = new Instance(mod, {"":{mem}}).exports; @@ -198,7 +198,7 @@ tbl.set(0, src.one); var mod = new Module(wasmTextToBinary(`(module (type $v2i (func (result i32))) (table (import "" "tbl") 1 funcref) - (func $ci (param i32) (result i32) (call_indirect $v2i (get_local 0))) + (func $ci (param i32) (result i32) (call_indirect $v2i (local.get 0))) (export "call_indirect" $ci) )`)); var exp1 = new Instance(mod, {"":{tbl}}).exports; diff --git a/js/src/jit-test/tests/wasm/stack.js b/js/src/jit-test/tests/wasm/stack.js index 12c06a194a5f..a2fd83aba5ca 100644 --- a/js/src/jit-test/tests/wasm/stack.js +++ b/js/src/jit-test/tests/wasm/stack.js @@ -36,7 +36,7 @@ wasmFullPass(` (module i32.const 0 i32.load f64.const 5.0 - set_local $local + local.set $local f64.const 5.0 tee_local $local drop diff --git a/js/src/jit-test/tests/wasm/table-gc.js b/js/src/jit-test/tests/wasm/table-gc.js index 1562296ca0d8..62b96e00f0f5 100644 --- a/js/src/jit-test/tests/wasm/table-gc.js +++ b/js/src/jit-test/tests/wasm/table-gc.js @@ -7,7 +7,7 @@ const Instance = WebAssembly.Instance; const Table = WebAssembly.Table; const RuntimeError = WebAssembly.RuntimeError; -var caller = `(type $v2i (func (result i32))) (func $call (param $i i32) (result i32) (call_indirect $v2i (get_local $i))) (export "call" $call)` +var caller = `(type $v2i (func (result i32))) (func $call (param $i i32) (result i32) (call_indirect $v2i (local.get $i))) (export "call" $call)` var callee = i => `(func $f${i} (type $v2i) (i32.const ${i}))`; // A table should not hold exported functions alive and exported functions @@ -204,10 +204,10 @@ var m = new Module(wasmTextToBinary(`(module (import "a" "b" (table ${N} funcref)) (type $i2i (func (param i32) (result i32))) (func $f (param $i i32) (result i32) - (set_local $i (i32.sub (get_local $i) (i32.const 1))) + (local.set $i (i32.sub (local.get $i) (i32.const 1))) (i32.add (i32.const 1) - (call_indirect $i2i (get_local $i) (get_local $i)))) + (call_indirect $i2i (local.get $i) (local.get $i)))) (export "f" $f) )`)); for (var i = 1; i < N; i++) { diff --git a/js/src/jit-test/tests/wasm/tables.js b/js/src/jit-test/tests/wasm/tables.js index 8fa61c92357d..11eecd6b94f7 100644 --- a/js/src/jit-test/tests/wasm/tables.js +++ b/js/src/jit-test/tests/wasm/tables.js @@ -16,26 +16,26 @@ assertErrorMessage(() => wasmEvalText(`(module (table 10 funcref) (elem (i32.con assertErrorMessage(() => wasmEvalText(`(module (table 10 funcref) (elem (i32.const 8) $f0 $f0 $f0) ${callee(0)})`), LinkError, /elem segment does not fit/); assertErrorMessage(() => wasmEvalText(`(module (table 0 funcref) (func) (elem (i32.const 0x10001)))`), LinkError, /elem segment does not fit/); -assertErrorMessage(() => wasmEvalText(`(module (table 10 funcref) (import "globals" "a" (global i32)) (elem (get_global 0) $f0) ${callee(0)})`, {globals:{a:10}}), LinkError, /elem segment does not fit/); -assertErrorMessage(() => wasmEvalText(`(module (table 10 funcref) (import "globals" "a" (global i32)) (elem (get_global 0) $f0 $f0 $f0) ${callee(0)})`, {globals:{a:8}}), LinkError, /elem segment does not fit/); +assertErrorMessage(() => wasmEvalText(`(module (table 10 funcref) (import "globals" "a" (global i32)) (elem (global.get 0) $f0) ${callee(0)})`, {globals:{a:10}}), LinkError, /elem segment does not fit/); +assertErrorMessage(() => wasmEvalText(`(module (table 10 funcref) (import "globals" "a" (global i32)) (elem (global.get 0) $f0 $f0 $f0) ${callee(0)})`, {globals:{a:8}}), LinkError, /elem segment does not fit/); assertEq(new Module(wasmTextToBinary(`(module (table 10 funcref) (elem (i32.const 1) $f0 $f0) (elem (i32.const 0) $f0) ${callee(0)})`)) instanceof Module, true); assertEq(new Module(wasmTextToBinary(`(module (table 10 funcref) (elem (i32.const 1) $f0 $f0) (elem (i32.const 2) $f0) ${callee(0)})`)) instanceof Module, true); -wasmEvalText(`(module (table 10 funcref) (import "globals" "a" (global i32)) (elem (i32.const 1) $f0 $f0) (elem (get_global 0) $f0) ${callee(0)})`, {globals:{a:0}}); -wasmEvalText(`(module (table 10 funcref) (import "globals" "a" (global i32)) (elem (get_global 0) $f0 $f0) (elem (i32.const 2) $f0) ${callee(0)})`, {globals:{a:1}}); +wasmEvalText(`(module (table 10 funcref) (import "globals" "a" (global i32)) (elem (i32.const 1) $f0 $f0) (elem (global.get 0) $f0) ${callee(0)})`, {globals:{a:0}}); +wasmEvalText(`(module (table 10 funcref) (import "globals" "a" (global i32)) (elem (global.get 0) $f0 $f0) (elem (i32.const 2) $f0) ${callee(0)})`, {globals:{a:1}}); var m = new Module(wasmTextToBinary(` (module (import "globals" "table" (table 10 funcref)) (import "globals" "a" (global i32)) - (elem (get_global 0) $f0 $f0) + (elem (global.get 0) $f0 $f0) ${callee(0)}) `)); var tbl = new Table({initial:50, element:"funcref"}); assertEq(new Instance(m, {globals:{a:20, table:tbl}}) instanceof Instance, true); assertErrorMessage(() => new Instance(m, {globals:{a:50, table:tbl}}), LinkError, /elem segment does not fit/); -var caller = `(type $v2i (func (result i32))) (func $call (param $i i32) (result i32) (call_indirect $v2i (get_local $i))) (export "call" $call)` +var caller = `(type $v2i (func (result i32))) (func $call (param $i i32) (result i32) (call_indirect $v2i (local.get $i))) (export "call" $call)` var callee = i => `(func $f${i} (type $v2i) (i32.const ${i}))`; var call = wasmEvalText(`(module (table 10 funcref) ${callee(0)} ${caller})`).exports.call; @@ -130,11 +130,11 @@ var m = new Module(wasmTextToBinary(`(module (call $imp) (i32.add (i32.load (i32.const 0)) - (if i32 (i32.eqz (get_local $i)) + (if i32 (i32.eqz (local.get $i)) (then (i32.const 0)) (else - (set_local $i (i32.sub (get_local $i) (i32.const 1))) - (call_indirect $i2i (get_local $i) (get_local $i))))))) + (local.set $i (i32.sub (local.get $i) (i32.const 1))) + (call_indirect $i2i (local.get $i) (local.get $i))))))) (export "call" $call) )`)); var failTime = false; @@ -164,7 +164,7 @@ var call = wasmEvalText(`(module (func $a (type $v2i1) (i32.const 0)) (func $b (type $v2i2) (i32.const 1)) (func $c (type $i2v)) - (func $call (param i32) (result i32) (call_indirect $v2i1 (get_local 0))) + (func $call (param i32) (result i32) (call_indirect $v2i1 (local.get 0))) (export "call" $call) )`).exports.call; assertEq(call(0), 0); @@ -180,15 +180,15 @@ var call = wasmEvalText(`(module (type $F (func (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (result i32))) (type $G (func (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (param i32) (result i32))) (table funcref (elem $a $b $c $d $e $f $g)) - (func $a (type $A) (get_local 7)) - (func $b (type $B) (get_local 8)) - (func $c (type $C) (get_local 9)) - (func $d (type $D) (get_local 10)) - (func $e (type $E) (get_local 11)) - (func $f (type $F) (get_local 12)) - (func $g (type $G) (get_local 13)) + (func $a (type $A) (local.get 7)) + (func $b (type $B) (local.get 8)) + (func $c (type $C) (local.get 9)) + (func $d (type $D) (local.get 10)) + (func $e (type $E) (local.get 11)) + (func $f (type $F) (local.get 12)) + (func $g (type $G) (local.get 13)) (func $call (param i32) (result i32) - (call_indirect $A (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 42) (get_local 0))) + (call_indirect $A (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 0) (i32.const 42) (local.get 0))) (export "call" $call) )`).exports.call; assertEq(call(0), 42); @@ -223,7 +223,7 @@ assertEq(tbl.get(0).foo, 42); (import "a" "t" (table 3 funcref)) (import "a" "m" (memory 1)) (type $v2i (func (result i32))) - (func $call (param $i i32) (result i32) (i32.add (call_indirect $v2i (get_local $i)) (memory.size))) + (func $call (param $i i32) (result i32) (i32.add (call_indirect $v2i (local.get $i)) (memory.size))) (export "call" $call)) `)), {a:{t:g.tbl,m:g.mem}}).exports.call; diff --git a/js/src/jit-test/tests/wasm/text.js b/js/src/jit-test/tests/wasm/text.js index 51b2f7da9482..adeee1ff57f0 100644 --- a/js/src/jit-test/tests/wasm/text.js +++ b/js/src/jit-test/tests/wasm/text.js @@ -12,11 +12,11 @@ assertErrorMessage(() => wasmEvalText('(module (func $a) (func) (export "a" $a) assertErrorMessage(() => wasmEvalText('(module (import $foo "a" "b") (import $foo "a" "b"))'), SyntaxError, /duplicate import/); assertErrorMessage(() => wasmEvalText('(module (func $foo) (func $foo))'), SyntaxError, /duplicate function/); assertErrorMessage(() => wasmEvalText('(module (func (param $a i32) (local $a i32)))'), SyntaxError, /duplicate var/); -assertErrorMessage(() => wasmEvalText('(module (func (get_local $a)))'), SyntaxError, /Local label '\$a' not found/); +assertErrorMessage(() => wasmEvalText('(module (func (local.get $a)))'), SyntaxError, /Local label '\$a' not found/); assertErrorMessage(() => wasmEvalText('(module (type $a (func)) (type $a (func (param i32))))'), SyntaxError, /duplicate signature/); assertErrorMessage(() => wasmEvalText('(module (import "a" "") (func (call $abc)))'), SyntaxError, /Function label '\$abc' not found/); assertErrorMessage(() => wasmEvalText('(module (type $a (func)) (func (type $b) (i32.const 13)))'), SyntaxError, /Signature label '\$b' not found/); -assertErrorMessage(() => wasmEvalText('(module (type $a (func)) (func (call_indirect $c (i32.const 0) (get_local 0))))'), SyntaxError, /Signature label '\$c' not found/); +assertErrorMessage(() => wasmEvalText('(module (type $a (func)) (func (call_indirect $c (i32.const 0) (local.get 0))))'), SyntaxError, /Signature label '\$c' not found/); assertErrorMessage(() => wasmEvalText('(module (func (br $a)))'), SyntaxError, /branch target label '\$a' not found/); assertErrorMessage(() => wasmEvalText('(module (func (block $a ) (br $a)))'), SyntaxError, /branch target label '\$a' not found/); @@ -80,7 +80,7 @@ wasmEvalText('(module (type $t (func)) (func $t (import "mod" "func") (type $t)) assertErrorMessage(() => wasmEvalText('(module (func $t (export))))'), SyntaxError, parsingError); wasmEvalText('(module (func (export "f")))'); wasmEvalText('(module (func $f (export "f")))'); -wasmEvalText('(module (func $f (export "f") (result i32) (param i32) (i32.add (get_local 0) (i32.const 42))))'); +wasmEvalText('(module (func $f (export "f") (result i32) (param i32) (i32.add (local.get 0) (i32.const 42))))'); assertErrorMessage(() => wasmEvalText(` (module diff --git a/js/src/jit-test/tests/wasm/timeout/interrupt-multi-instance-activation.js b/js/src/jit-test/tests/wasm/timeout/interrupt-multi-instance-activation.js index 35acfec55917..05ac7ff51a71 100644 --- a/js/src/jit-test/tests/wasm/timeout/interrupt-multi-instance-activation.js +++ b/js/src/jit-test/tests/wasm/timeout/interrupt-multi-instance-activation.js @@ -6,10 +6,10 @@ const {innerWasm} = new Instance(new Module(wasmTextToBinary(`(module (func (export "innerWasm") (result i32) (local i32) (loop $top - (set_local 0 (i32.add (get_local 0) (i32.const 1))) - (br_if $top (i32.lt_u (get_local 0) (i32.const 100000))) + (local.set 0 (i32.add (local.get 0) (i32.const 1))) + (br_if $top (i32.lt_u (local.get 0) (i32.const 100000))) ) - (get_local 0) + (local.get 0) ) )`))).exports; diff --git a/js/src/jit-test/tests/wasm/utf8.js b/js/src/jit-test/tests/wasm/utf8.js index 48e152ada322..d02a49209a37 100644 --- a/js/src/jit-test/tests/wasm/utf8.js +++ b/js/src/jit-test/tests/wasm/utf8.js @@ -1,7 +1,7 @@ /* (module (func (param i32) (result i32) - (i32.add (get_local 0) (get_local 0))) + (i32.add (local.get 0) (local.get 0))) (export "hello" (func 0))) */ diff --git a/js/src/jit-test/tests/wasm/wasm-abi.js b/js/src/jit-test/tests/wasm/wasm-abi.js index ee63daa636d4..0301bfffac83 100644 --- a/js/src/jit-test/tests/wasm/wasm-abi.js +++ b/js/src/jit-test/tests/wasm/wasm-abi.js @@ -8,8 +8,8 @@ for (let numLocals of [3, 4, 5, 6, 17, 18, 19]) { for (let i = 0; i < numLocals; i++) { sum += i + 1; locals += `i32 `; - setLocals += ` (set_local ${i + 1} (i32.add (get_local 0) (i32.const ${i + 1})))\n`; - getLocals += ` get_local ${i + 1}\n`; + setLocals += ` (local.set ${i + 1} (i32.add (local.get 0) (i32.const ${i + 1})))\n`; + getLocals += ` local.get ${i + 1}\n`; if (i > 0) adds += ` i32.add\n`; } diff --git a/js/src/jit-test/tests/wasm/worker-kill.js b/js/src/jit-test/tests/wasm/worker-kill.js index c2304d3c9cf7..36b5ab95620c 100644 --- a/js/src/jit-test/tests/wasm/worker-kill.js +++ b/js/src/jit-test/tests/wasm/worker-kill.js @@ -3,7 +3,7 @@ evalInWorker(` var code = "(module "; for (var i = 0; i < 100; i++) - code += "(func (param i32) (result i32) (i32.add (i32.const 1) (get_local 0))) "; + code += "(func (param i32) (result i32) (i32.add (i32.const 1) (local.get 0))) "; code += ")"; var buf = wasmTextToBinary(code); WebAssembly.compile(buf); diff --git a/js/src/jit/BaselineCompiler.cpp b/js/src/jit/BaselineCompiler.cpp index 590869c4b952..9887a417016b 100644 --- a/js/src/jit/BaselineCompiler.cpp +++ b/js/src/jit/BaselineCompiler.cpp @@ -2573,10 +2573,9 @@ bool BaselineCompilerCodeGen::emit_JSOP_NEWARRAY_COPYONWRITE() { prepareVMCall(); - pushArg(Imm32(gc::DefaultHeap)); pushArg(ImmGCPtr(obj)); - using Fn = ArrayObject* (*)(JSContext*, HandleArrayObject, gc::InitialHeap); + using Fn = ArrayObject* (*)(JSContext*, HandleArrayObject); if (!callVM()) { return false; } diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp index 342f7c1dbf51..5d3b7779a97c 100644 --- a/js/src/jit/CodeGenerator.cpp +++ b/js/src/jit/CodeGenerator.cpp @@ -6495,10 +6495,9 @@ void CodeGenerator::visitNewArrayCopyOnWrite(LNewArrayCopyOnWrite* lir) { gc::InitialHeap initialHeap = lir->mir()->initialHeap(); // If we have a template object, we can inline call object creation. - using Fn = ArrayObject* (*)(JSContext*, HandleArrayObject, gc::InitialHeap); + using Fn = ArrayObject* (*)(JSContext*, HandleArrayObject); OutOfLineCode* ool = oolCallVM( - lir, ArgList(ImmGCPtr(templateObject), Imm32(initialHeap)), - StoreRegisterTo(objReg)); + lir, ArgList(ImmGCPtr(templateObject)), StoreRegisterTo(objReg)); TemplateObject templateObj(templateObject); templateObj.setDenseElementsAreCopyOnWrite(); diff --git a/js/src/jit/Recover.cpp b/js/src/jit/Recover.cpp index 569d94cda3f5..757fa743954c 100644 --- a/js/src/jit/Recover.cpp +++ b/js/src/jit/Recover.cpp @@ -1254,13 +1254,10 @@ bool RNewArray::recover(JSContext* cx, SnapshotIterator& iter) const { bool MNewArrayCopyOnWrite::writeRecoverData(CompactBufferWriter& writer) const { MOZ_ASSERT(canRecoverOnBailout()); writer.writeUnsigned(uint32_t(RInstruction::Recover_NewArrayCopyOnWrite)); - writer.writeByte(initialHeap()); return true; } -RNewArrayCopyOnWrite::RNewArrayCopyOnWrite(CompactBufferReader& reader) { - initialHeap_ = gc::InitialHeap(reader.readByte()); -} +RNewArrayCopyOnWrite::RNewArrayCopyOnWrite(CompactBufferReader& reader) {} bool RNewArrayCopyOnWrite::recover(JSContext* cx, SnapshotIterator& iter) const { @@ -1268,8 +1265,7 @@ bool RNewArrayCopyOnWrite::recover(JSContext* cx, &iter.read().toObject().as()); RootedValue result(cx); - ArrayObject* resultObject = - NewDenseCopyOnWriteArray(cx, templateObject, initialHeap_); + ArrayObject* resultObject = NewDenseCopyOnWriteArray(cx, templateObject); if (!resultObject) { return false; } diff --git a/js/src/jit/Recover.h b/js/src/jit/Recover.h index 4609b5fb097f..f95e7f342245 100644 --- a/js/src/jit/Recover.h +++ b/js/src/jit/Recover.h @@ -617,9 +617,6 @@ class RNewArray final : public RInstruction { }; class RNewArrayCopyOnWrite final : public RInstruction { - private: - gc::InitialHeap initialHeap_; - public: RINSTRUCTION_HEADER_NUM_OP_(NewArrayCopyOnWrite, 1) diff --git a/js/src/vm/ArrayObject-inl.h b/js/src/vm/ArrayObject-inl.h index f4a259bf989f..c2032395ef7d 100644 --- a/js/src/vm/ArrayObject-inl.h +++ b/js/src/vm/ArrayObject-inl.h @@ -42,6 +42,8 @@ inline void ArrayObject::setLength(JSContext* cx, uint32_t length) { MOZ_ASSERT_IF(clasp->hasFinalize(), heap == gc::TenuredHeap); MOZ_ASSERT_IF(group->hasUnanalyzedPreliminaryObjects(), heap == js::gc::TenuredHeap); + MOZ_ASSERT_IF(group->shouldPreTenureDontCheckGeneration(), + heap == gc::TenuredHeap); // Arrays can use their fixed slots to store elements, so can't have shapes // which allow named properties to be stored in the fixed slots. diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp index 6d3d2e4fe56c..f6f7c10c2e74 100644 --- a/js/src/vm/EnvironmentObject.cpp +++ b/js/src/vm/EnvironmentObject.cpp @@ -79,9 +79,11 @@ CallObject* CallObject::create(JSContext* cx, HandleShape shape, MOZ_ASSERT(CanBeFinalizedInBackground(kind, &CallObject::class_)); kind = gc::GetBackgroundAllocKind(kind); + gc::InitialHeap heap = GetInitialHeap(GenericObject, group); + JSObject* obj; - JS_TRY_VAR_OR_RETURN_NULL( - cx, obj, NativeObject::create(cx, kind, gc::DefaultHeap, shape, group)); + JS_TRY_VAR_OR_RETURN_NULL(cx, obj, + NativeObject::create(cx, kind, heap, shape, group)); return &obj->as(); } @@ -108,6 +110,9 @@ CallObject* CallObject::createTemplateObject(JSContext* cx, HandleScript script, MOZ_ASSERT(CanBeFinalizedInBackground(kind, &class_)); kind = gc::GetBackgroundAllocKind(kind); + // The JITs assume the result is nursery allocated unless we collected the + // nursery, so don't change |heap| here. + JSObject* obj; JS_TRY_VAR_OR_RETURN_NULL(cx, obj, NativeObject::create(cx, kind, heap, shape, group)); @@ -243,6 +248,13 @@ VarEnvironmentObject* VarEnvironmentObject::create(JSContext* cx, MOZ_ASSERT(CanBeFinalizedInBackground(kind, &class_)); kind = gc::GetBackgroundAllocKind(kind); + { + AutoSweepObjectGroup sweep(group); + if (group->shouldPreTenure(sweep)) { + heap = gc::TenuredHeap; + } + } + JSObject* obj; JS_TRY_VAR_OR_RETURN_NULL(cx, obj, NativeObject::create(cx, kind, heap, shape, group)); @@ -277,9 +289,8 @@ VarEnvironmentObject* VarEnvironmentObject::create(JSContext* cx, RootedScript script(cx, frame.script()); RootedObject envChain(cx, frame.environmentChain()); - gc::InitialHeap heap = gc::DefaultHeap; RootedShape shape(cx, scope->environmentShape()); - VarEnvironmentObject* env = create(cx, shape, envChain, heap); + VarEnvironmentObject* env = create(cx, shape, envChain, gc::DefaultHeap); if (!env) { return nullptr; } @@ -887,6 +898,9 @@ LexicalEnvironmentObject* LexicalEnvironmentObject::createTemplateObject( return nullptr; } + // The JITs assume the result is nursery allocated unless we collected the + // nursery, so don't change |heap| here. + gc::AllocKind allocKind = gc::GetGCObjectKind(shape->numFixedSlots()); MOZ_ASSERT( CanBeFinalizedInBackground(allocKind, &LexicalEnvironmentObject::class_)); diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp index 1d84f4ff3d60..8a5c0d4767a1 100644 --- a/js/src/vm/Interpreter.cpp +++ b/js/src/vm/Interpreter.cpp @@ -5303,7 +5303,7 @@ ArrayObject* js::NewArrayCopyOnWriteOperation(JSContext* cx, return nullptr; } - return NewDenseCopyOnWriteArray(cx, baseobj, gc::DefaultHeap); + return NewDenseCopyOnWriteArray(cx, baseobj); } void js::ReportRuntimeLexicalError(JSContext* cx, unsigned errorNumber, diff --git a/js/src/vm/Iteration.cpp b/js/src/vm/Iteration.cpp index a4dd6618a0f7..5484d96dc441 100644 --- a/js/src/vm/Iteration.cpp +++ b/js/src/vm/Iteration.cpp @@ -619,7 +619,7 @@ static PropertyIteratorObject* NewPropertyIteratorObject(JSContext* cx) { JS_TRY_VAR_OR_RETURN_NULL( cx, obj, NativeObject::create(cx, ITERATOR_FINALIZE_KIND, - GetInitialHeap(GenericObject, clasp), shape, group)); + GetInitialHeap(GenericObject, group), shape, group)); PropertyIteratorObject* res = &obj->as(); @@ -995,8 +995,7 @@ JSObject* js::CreateIterResultObject(JSContext* cx, HandleValue value, NativeObject* resultObj; JS_TRY_VAR_OR_RETURN_NULL( - cx, resultObj, - NativeObject::createWithTemplate(cx, gc::DefaultHeap, templateObject)); + cx, resultObj, NativeObject::createWithTemplate(cx, templateObject)); // Step 3. resultObj->setSlot(Realm::IterResultObjectValueSlot, value); diff --git a/js/src/vm/JSObject-inl.h b/js/src/vm/JSObject-inl.h index 8c42d51711f3..f6310143061f 100644 --- a/js/src/vm/JSObject-inl.h +++ b/js/src/vm/JSObject-inl.h @@ -399,6 +399,33 @@ inline bool IsInternalFunctionObject(JSObject& funobj) { return fun.isInterpreted() && !fun.environment(); } +inline gc::InitialHeap GetInitialHeap(NewObjectKind newKind, + const Class* clasp) { + if (newKind == NurseryAllocatedProxy) { + MOZ_ASSERT(clasp->isProxy()); + MOZ_ASSERT(clasp->hasFinalize()); + MOZ_ASSERT(!CanNurseryAllocateFinalizedClass(clasp)); + return gc::DefaultHeap; + } + if (newKind != GenericObject) { + return gc::TenuredHeap; + } + if (clasp->hasFinalize() && !CanNurseryAllocateFinalizedClass(clasp)) { + return gc::TenuredHeap; + } + return gc::DefaultHeap; +} + +inline gc::InitialHeap GetInitialHeap(NewObjectKind newKind, + ObjectGroup* group) { + AutoSweepObjectGroup sweep(group); + if (group->shouldPreTenure(sweep)) { + return gc::TenuredHeap; + } + + return GetInitialHeap(newKind, group->clasp()); +} + /* * Make an object with the specified prototype. If parent is null, it will * default to the prototype's global if the prototype is non-null. diff --git a/js/src/vm/JSObject.cpp b/js/src/vm/JSObject.cpp index 26a090f5de98..cfcca5bdf5c2 100644 --- a/js/src/vm/JSObject.cpp +++ b/js/src/vm/JSObject.cpp @@ -792,7 +792,7 @@ static inline JSObject* NewObject(JSContext* cx, HandleObjectGroup group, return nullptr; } - gc::InitialHeap heap = GetInitialHeap(newKind, clasp); + gc::InitialHeap heap = GetInitialHeap(newKind, group); JSObject* obj; if (clasp->isJSFunction()) { @@ -974,8 +974,8 @@ JSObject* js::NewObjectWithGroupCommon(JSContext* cx, HandleObjectGroup group, NewObjectCache& cache = cx->caches().newObjectCache; NewObjectCache::EntryIndex entry = -1; if (cache.lookupGroup(group, allocKind, &entry)) { - JSObject* obj = cache.newObjectFromHit( - cx, entry, GetInitialHeap(newKind, group->clasp())); + JSObject* obj = + cache.newObjectFromHit(cx, entry, GetInitialHeap(newKind, group)); if (obj) { return obj; } @@ -4298,6 +4298,13 @@ void JSObject::debugCheckNewObject(ObjectGroup* group, Shape* shape, MOZ_ASSERT_IF(group->hasUnanalyzedPreliminaryObjects(), heap == gc::TenuredHeap); + // Check that the group's shouldPreTenure flag is respected but ignore + // environment objects that the JIT expects to be nursery allocated. + MOZ_ASSERT_IF(group->shouldPreTenureDontCheckGeneration() && + clasp != &CallObject::class_ && + clasp != &LexicalEnvironmentObject::class_, + heap == gc::TenuredHeap); + MOZ_ASSERT(!group->realm()->hasObjectPendingMetadata()); // Non-native classes manage their own data and slots, so numFixedSlots and diff --git a/js/src/vm/JSObject.h b/js/src/vm/JSObject.h index 3826d959b1fb..1f34cb126c05 100644 --- a/js/src/vm/JSObject.h +++ b/js/src/vm/JSObject.h @@ -802,23 +802,6 @@ using ClassInitializerOp = JSObject* (*)(JSContext* cx, namespace js { -inline gc::InitialHeap GetInitialHeap(NewObjectKind newKind, - const Class* clasp) { - if (newKind == NurseryAllocatedProxy) { - MOZ_ASSERT(clasp->isProxy()); - MOZ_ASSERT(clasp->hasFinalize()); - MOZ_ASSERT(!CanNurseryAllocateFinalizedClass(clasp)); - return gc::DefaultHeap; - } - if (newKind != GenericObject) { - return gc::TenuredHeap; - } - if (clasp->hasFinalize() && !CanNurseryAllocateFinalizedClass(clasp)) { - return gc::TenuredHeap; - } - return gc::DefaultHeap; -} - bool NewObjectWithTaggedProtoIsCachable(JSContext* cx, Handle proto, NewObjectKind newKind, diff --git a/js/src/vm/NativeObject-inl.h b/js/src/vm/NativeObject-inl.h index 2051510df10b..3a18b75383da 100644 --- a/js/src/vm/NativeObject-inl.h +++ b/js/src/vm/NativeObject-inl.h @@ -522,9 +522,11 @@ inline bool NativeObject::isInWholeCellBuffer() const { } /* static */ inline JS::Result -NativeObject::createWithTemplate(JSContext* cx, js::gc::InitialHeap heap, - HandleObject templateObject) { +NativeObject::createWithTemplate(JSContext* cx, HandleObject templateObject) { RootedObjectGroup group(cx, templateObject->group()); + + gc::InitialHeap heap = GetInitialHeap(GenericObject, group); + RootedShape shape(cx, templateObject->as().lastProperty()); gc::AllocKind kind = gc::GetGCObjectKind(shape->numFixedSlots()); diff --git a/js/src/vm/NativeObject.h b/js/src/vm/NativeObject.h index f7476dca95fd..1edb0764fa31 100644 --- a/js/src/vm/NativeObject.h +++ b/js/src/vm/NativeObject.h @@ -565,7 +565,7 @@ class NativeObject : public ShapedObject { js::HandleShape shape, js::HandleObjectGroup group); static inline JS::Result createWithTemplate( - JSContext* cx, js::gc::InitialHeap heap, HandleObject templateObject); + JSContext* cx, HandleObject templateObject); #ifdef DEBUG static void enableShapeConsistencyChecks(); diff --git a/js/src/vm/ObjectGroup-inl.h b/js/src/vm/ObjectGroup-inl.h index da5238fb9417..f053a27c1efb 100644 --- a/js/src/vm/ObjectGroup-inl.h +++ b/js/src/vm/ObjectGroup-inl.h @@ -54,8 +54,13 @@ inline bool ObjectGroup::unknownProperties(const AutoSweepObjectGroup& sweep) { } inline bool ObjectGroup::shouldPreTenure(const AutoSweepObjectGroup& sweep) { - return hasAnyFlags(sweep, OBJECT_FLAG_PRE_TENURE) && - !unknownProperties(sweep); + MOZ_ASSERT(sweep.group() == this); + return shouldPreTenureDontCheckGeneration(); +} + +inline bool ObjectGroup::shouldPreTenureDontCheckGeneration() { + return hasAnyFlagsDontCheckGeneration(OBJECT_FLAG_PRE_TENURE) && + !unknownPropertiesDontCheckGeneration(); } inline bool ObjectGroup::canPreTenure(const AutoSweepObjectGroup& sweep) { diff --git a/js/src/vm/ObjectGroup.h b/js/src/vm/ObjectGroup.h index 88e381cbb7c1..6faf89c5d335 100644 --- a/js/src/vm/ObjectGroup.h +++ b/js/src/vm/ObjectGroup.h @@ -404,6 +404,10 @@ class ObjectGroup : public gc::TenuredCell { inline bool hasAllFlags(const AutoSweepObjectGroup& sweep, ObjectGroupFlags flags); + bool hasAnyFlagsDontCheckGeneration(ObjectGroupFlags flags) { + MOZ_ASSERT((flags & OBJECT_FLAG_DYNAMIC_MASK) == flags); + return !!(this->flagsDontCheckGeneration() & flags); + } bool hasAllFlagsDontCheckGeneration(ObjectGroupFlags flags) { MOZ_ASSERT((flags & OBJECT_FLAG_DYNAMIC_MASK) == flags); return (this->flagsDontCheckGeneration() & flags) == flags; @@ -418,6 +422,7 @@ class ObjectGroup : public gc::TenuredCell { } inline bool shouldPreTenure(const AutoSweepObjectGroup& sweep); + inline bool shouldPreTenureDontCheckGeneration(); gc::InitialHeap initialHeap(CompilerConstraintList* constraints); diff --git a/js/src/vm/ProxyObject.cpp b/js/src/vm/ProxyObject.cpp index ea147062aeff..61c8404c8ca0 100644 --- a/js/src/vm/ProxyObject.cpp +++ b/js/src/vm/ProxyObject.cpp @@ -184,7 +184,7 @@ void ProxyObject::nuke() { realm->newProxyCache.add(group, shape); } - gc::InitialHeap heap = GetInitialHeap(newKind, clasp); + gc::InitialHeap heap = GetInitialHeap(newKind, group); debugCheckNewObject(group, shape, allocKind, heap); JSObject* obj = diff --git a/js/src/vm/UnboxedObject.cpp b/js/src/vm/UnboxedObject.cpp index a6ab4471a3fd..81d671c7980c 100644 --- a/js/src/vm/UnboxedObject.cpp +++ b/js/src/vm/UnboxedObject.cpp @@ -875,7 +875,7 @@ UnboxedPlainObject* UnboxedPlainObject::create(JSContext* cx, AutoSweepObjectGroup sweep(group); allocKind = group->unboxedLayout(sweep).getAllocKind(); } - gc::InitialHeap heap = GetInitialHeap(newKind, &class_); + gc::InitialHeap heap = GetInitialHeap(newKind, group); MOZ_ASSERT(newKind != SingletonObject); diff --git a/layout/base/crashtests/1428892.html b/layout/base/crashtests/1428892.html new file mode 100644 index 000000000000..e8d3b4c61d0d --- /dev/null +++ b/layout/base/crashtests/1428892.html @@ -0,0 +1,15 @@ + + + + +
+
diff --git a/layout/base/crashtests/1470499.html b/layout/base/crashtests/1470499.html new file mode 100644 index 000000000000..043ac23baf7d --- /dev/null +++ b/layout/base/crashtests/1470499.html @@ -0,0 +1,22 @@ + + +
+ + + diff --git a/layout/base/crashtests/crashtests.list b/layout/base/crashtests/crashtests.list index 403c1f77680b..2523c39655f9 100644 --- a/layout/base/crashtests/crashtests.list +++ b/layout/base/crashtests/crashtests.list @@ -516,6 +516,7 @@ load 1423216.html load 1425893.html load 1425959.html load 1428353.html +load 1428892.html load 1429088.html load 1429961.html load 1429962.html @@ -540,6 +541,7 @@ load 1466638.html load 1467688.html load 1467964.html load 1469354.html +load 1470499.html pref(layout.accessiblecaret.enabled,true) load 1472020.html load 1472027.html load 1477847.html