|  | // Copyright 2017 the V8 project authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // Flags: --allow-natives-syntax | 
|  |  | 
|  | let kMinHeapSize = 4096; | 
|  |  | 
|  | (function TestLeftRight() { | 
|  | function Module(stdlib, foreign, heap) { | 
|  | "use asm"; | 
|  | var HEAP32 = new stdlib.Int32Array(heap); | 
|  | function f(i) { | 
|  | i = i | 0; | 
|  | return HEAP32[i << 2 >> 2] | 0; | 
|  | } | 
|  | return { f:f } | 
|  | } | 
|  | var buffer = new ArrayBuffer(kMinHeapSize); | 
|  | var module = new Module(this, {}, buffer); | 
|  | assertTrue(%IsAsmWasmCode(Module)); | 
|  | new Int32Array(buffer)[42] = 23; | 
|  | assertEquals(23, module.f(42)); | 
|  | })(); | 
|  |  | 
|  | (function TestRightRight() { | 
|  | function Module(stdlib, foreign, heap) { | 
|  | "use asm"; | 
|  | var HEAP32 = new stdlib.Int32Array(heap); | 
|  | function f(i) { | 
|  | i = i | 0; | 
|  | return HEAP32[i >> 2 >> 2] | 0; | 
|  | } | 
|  | return { f:f } | 
|  | } | 
|  | var buffer = new ArrayBuffer(kMinHeapSize); | 
|  | var module = new Module(this, {}, buffer) | 
|  | assertTrue(%IsAsmWasmCode(Module)); | 
|  | new Int32Array(buffer)[42 >> 4] = 23; | 
|  | assertEquals(23, module.f(42)); | 
|  | })(); | 
|  |  | 
|  | (function TestRightLeft() { | 
|  | function Module(stdlib, foreign, heap) { | 
|  | "use asm"; | 
|  | var HEAP32 = new stdlib.Int32Array(heap); | 
|  | function f(i) { | 
|  | i = i | 0; | 
|  | return HEAP32[i >> 2 << 2] | 0; | 
|  | } | 
|  | return { f:f } | 
|  | } | 
|  | var buffer = new ArrayBuffer(kMinHeapSize); | 
|  | var module = new Module(this, {}, buffer) | 
|  | assertFalse(%IsAsmWasmCode(Module)); | 
|  | new Int32Array(buffer)[42 & 0xfc] = 23; | 
|  | assertEquals(23, module.f(42)); | 
|  | })(); | 
|  |  | 
|  | (function TestRightButNotImmediate() { | 
|  | function Module(stdlib, foreign, heap) { | 
|  | "use asm"; | 
|  | var HEAP32 = new stdlib.Int32Array(heap); | 
|  | function f(i) { | 
|  | i = i | 0; | 
|  | return HEAP32[i >> 2 + 1] | 0; | 
|  | } | 
|  | return { f:f } | 
|  | } | 
|  | var buffer = new ArrayBuffer(kMinHeapSize); | 
|  | var module = new Module(this, {}, buffer) | 
|  | assertFalse(%IsAsmWasmCode(Module)); | 
|  | new Int32Array(buffer)[42 >> 3] = 23; | 
|  | assertEquals(23, module.f(42)); | 
|  | })(); | 
|  |  | 
|  | (function TestLeftOnly() { | 
|  | function Module(stdlib, foreign, heap) { | 
|  | "use asm"; | 
|  | var HEAP32 = new stdlib.Int32Array(heap); | 
|  | function f(i) { | 
|  | i = i | 0; | 
|  | return HEAP32[i << 2] | 0; | 
|  | } | 
|  | return { f:f } | 
|  | } | 
|  | var buffer = new ArrayBuffer(kMinHeapSize); | 
|  | var module = new Module(this, {}, buffer) | 
|  | assertFalse(%IsAsmWasmCode(Module)); | 
|  | new Int32Array(buffer)[42 << 2] = 23; | 
|  | assertEquals(23, module.f(42)); | 
|  | })(); |