summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/multi-memory/memory_copy.js
blob: e619200337aba875112b1c20c3b99a7698b39567 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// A simple test case for memory.copy between different memories.
// See bug 1861267.

let i = wasmEvalText(
`(module
  (memory $$mem0 (data "staubfaenger"))
  (memory $$mem1 (data "\\ee\\22\\55\\ff"))
  (memory $$mem2 (data "\\dd\\33\\66\\00"))
  (memory $$mem3 (data "schnickschnack"))

  (func (export "copy0to3") (param i32 i32 i32)
    (memory.copy $$mem3 $$mem0
      (local.get 0)
      (local.get 1)
      (local.get 2))
  )
  (func (export "copy3to0") (param i32 i32 i32)
    (memory.copy $$mem0 $$mem3
      (local.get 0)
      (local.get 1)
      (local.get 2))
  )

  (func (export "read0") (param i32) (result i32)
    (i32.load8_u $$mem0 (local.get 0))
  )
  (func (export "read3") (param i32) (result i32)
    (i32.load8_u $$mem3 (local.get 0))
  )
)`);

i.exports.copy0to3(4, 5, 6);
let s = "";
for (let ix = 0; ix < 14; ix++) {
    s = s + String.fromCharCode(i.exports.read3(ix));
}

i.exports.copy3to0(8, 2, 7);
s = s + "_";
for (let ix = 0; ix < 12; ix++) {
    s = s + String.fromCharCode(i.exports.read0(ix));
}

assertEq(s, "schnfaengenack_staubfaehnfa");