1958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// Copyright 2014 the V8 project authors. All rights reserved. 2958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// Use of this source code is governed by a BSD-style license that can be 3958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier// found in the LICENSE file. 4958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 5958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierfunction Module(stdlib, foreign, heap) { 6958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier "use asm"; 7958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier var MEM16 = new stdlib.Int16Array(heap); 8958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier function load(i) { 9958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier i = i|0; 10958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier i = MEM16[i >> 1] | 0; 11958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return i; 12958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 13958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier function loadm1() { 14958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return MEM16[-1] | 0; 15958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 16958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier function store(i, v) { 17958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier i = i|0; 18958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier v = v|0; 19958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier MEM16[i >> 1] = v; 20958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 21958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier function storem1(v) { 22958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier v = v|0; 23958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier MEM16[-1] = v; 24958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 25958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return {load: load, loadm1: loadm1, store: store, storem1: storem1}; 26958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 27958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 28958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Berniervar m = Module(this, {}, new ArrayBuffer(2)); 29958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 30958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierm.store(-1000, 4); 31958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierassertEquals(0, m.load(-1000)); 32958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierassertEquals(0, m.loadm1()); 33958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierm.storem1(1); 34958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierassertEquals(0, m.loadm1()); 35958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierm.store(0, 32767); 36958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierfor (var i = 1; i < 64; ++i) { 37958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier m.store(i * 2 * 32 * 1024, i); 38958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 39958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily BernierassertEquals(32767, m.load(0)); 40958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierfor (var i = 1; i < 64; ++i) { 41958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier assertEquals(0, m.load(i * 2 * 32 * 1024)); 42958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 43