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
46
47
48
|
//
// Test wasm-only builds. In this case, fastcomp emits code that is
// not asm.js, it will only ever run as wasm, and contains special intrinsics for
// asm2wasm that map LLVM IR into i64s.
//
function asm(global, env, buffer) {
"use asm";
var HEAP8 = new global.Int8Array(buffer);
var HEAP16 = new global.Int16Array(buffer);
var HEAP32 = new global.Int32Array(buffer);
var HEAPU8 = new global.Uint8Array(buffer);
var HEAPU16 = new global.Uint16Array(buffer);
var HEAPU32 = new global.Uint32Array(buffer);
var HEAPF32 = new global.Float32Array(buffer);
var HEAPF64 = new global.Float64Array(buffer);
var STACKTOP = env.STACKTOP | 0;
var fround = global.Math.fround;
var Math_imul = global.Math.imul;
var illegalImport = env.illegalImport;
var illegalImportResult = env.illegalImportResult;
var _fabsf = env._fabsf;
var do_i64 = env.do_i64;
var abort = env.abort;
function test64() {
var x = i64(), y = i64(), z = 0; // define i64 variables using special intrinsic
var int32 = 0, float32 = fround(0), float64 = +0;
i64_atomics_store(4656, i64_const(92, 0))|0;
x = i64_atomics_load(4656);
y = i64_atomics_add(int32, i64_const(26, 0))|0;
x = i64_atomics_sub(1024, y)|0;
y = i64_atomics_and(1024, x)|0;
x = i64_atomics_or(1024, y)|0;
y = i64_atomics_xor(1024, x)|0;
x = i64_atomics_exchange(1024, y)|0;
y = i64_atomics_compareExchange(1024, x, y)|0;
return x;
}
return { test64: test64 };
}
|