303 lines
6.0 KiB
Plaintext
303 lines
6.0 KiB
Plaintext
// micro_core.cm — direct microbenchmarks for core ops
|
|
|
|
function blackhole(sink, x) {
|
|
return (sink + (x | 0)) | 0
|
|
}
|
|
|
|
function make_obj_xy(x, y) {
|
|
return {x: x, y: y}
|
|
}
|
|
|
|
function make_obj_yx(x, y) {
|
|
// Different insertion order to force a different shape
|
|
return {y: y, x: x}
|
|
}
|
|
|
|
function make_packed_array(n) {
|
|
var a = []
|
|
var i = 0
|
|
for (i = 0; i < n; i++) a[] = i
|
|
return a
|
|
}
|
|
|
|
function make_holey_array(n) {
|
|
var a = []
|
|
var i = 0
|
|
for (i = 0; i < n; i += 2) a[i] = i
|
|
return a
|
|
}
|
|
|
|
return {
|
|
loop_empty: function(n) {
|
|
var sink = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) {}
|
|
return blackhole(sink, n)
|
|
},
|
|
|
|
i32_add: function(n) {
|
|
var sink = 0
|
|
var x = 1
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = (x + 3) | 0
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
f64_add: function(n) {
|
|
var sink = 0
|
|
var x = 1.0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = x + 3.14159
|
|
return blackhole(sink, x | 0)
|
|
},
|
|
|
|
mixed_add: function(n) {
|
|
var sink = 0
|
|
var x = 1
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = x + 0.25
|
|
return blackhole(sink, x | 0)
|
|
},
|
|
|
|
bit_ops: function(n) {
|
|
var sink = 0
|
|
var x = 0x12345678
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = ((x << 5) ^ (x >>> 3)) | 0
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
overflow_path: function(n) {
|
|
var sink = 0
|
|
var x = 0x70000000
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = (x + 0x10000000) | 0
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
call_direct: function(n) {
|
|
var sink = 0
|
|
var f = function(a) { return (a + 1) | 0 }
|
|
var x = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = f(x)
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
call_indirect: function(n) {
|
|
var sink = 0
|
|
var f = function(a) { return (a + 1) | 0 }
|
|
var g = f
|
|
var x = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = g(x)
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
call_closure: function(n) {
|
|
var sink = 0
|
|
var make_adder = function(k) {
|
|
return function(a) { return (a + k) | 0 }
|
|
}
|
|
var add3 = make_adder(3)
|
|
var x = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = add3(x)
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
array_read_packed: function(n) {
|
|
var sink = 0
|
|
var a = make_packed_array(1024)
|
|
var x = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = (x + a[i & 1023]) | 0
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
array_write_packed: function(n) {
|
|
var sink = 0
|
|
var a = make_packed_array(1024)
|
|
var i = 0
|
|
for (i = 0; i < n; i++) a[i & 1023] = i
|
|
return blackhole(sink, a[17] | 0)
|
|
},
|
|
|
|
array_read_holey: function(n) {
|
|
var sink = 0
|
|
var a = make_holey_array(2048)
|
|
var x = 0
|
|
var i = 0
|
|
var v = null
|
|
for (i = 0; i < n; i++) {
|
|
v = a[(i & 2047)]
|
|
if (v) x = (x + v) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
array_push_steady: function(n) {
|
|
var sink = 0
|
|
var x = 0
|
|
var j = 0
|
|
var i = 0
|
|
var a = null
|
|
for (j = 0; j < n; j++) {
|
|
a = []
|
|
for (i = 0; i < 256; i++) a[] = i
|
|
x = (x + length(a)) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
array_indexed_sum: function(n) {
|
|
var sink = 0
|
|
var a = make_packed_array(1024)
|
|
var x = 0
|
|
var j = 0
|
|
var i = 0
|
|
for (j = 0; j < n; j++) {
|
|
x = 0
|
|
for (i = 0; i < 1024; i++) {
|
|
x = (x + a[i]) | 0
|
|
}
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
prop_read_mono: function(n) {
|
|
var sink = 0
|
|
var o = make_obj_xy(1, 2)
|
|
var x = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = (x + o.x) | 0
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
prop_read_poly_2: function(n) {
|
|
var sink = 0
|
|
var a = make_obj_xy(1, 2)
|
|
var b = make_obj_yx(1, 2)
|
|
var x = 0
|
|
var i = 0
|
|
var o = null
|
|
for (i = 0; i < n; i++) {
|
|
o = (i & 1) == 0 ? a : b
|
|
x = (x + o.x) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
prop_read_poly_4: function(n) {
|
|
var sink = 0
|
|
var shapes = [
|
|
{x: 1, y: 2},
|
|
{y: 2, x: 1},
|
|
{x: 1, z: 3, y: 2},
|
|
{w: 0, x: 1, y: 2}
|
|
]
|
|
var x = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) {
|
|
x = (x + shapes[i & 3].x) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
string_concat_small: function(n) {
|
|
var sink = 0
|
|
var x = 0
|
|
var j = 0
|
|
var i = 0
|
|
var s = null
|
|
for (j = 0; j < n; j++) {
|
|
s = ""
|
|
for (i = 0; i < 16; i++) s = s + "x"
|
|
x = (x + length(s)) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
string_concat_medium: function(n) {
|
|
var sink = 0
|
|
var x = 0
|
|
var j = 0
|
|
var i = 0
|
|
var s = null
|
|
for (j = 0; j < n; j++) {
|
|
s = ""
|
|
for (i = 0; i < 100; i++) s = s + "abcdefghij"
|
|
x = (x + length(s)) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
string_slice: function(n) {
|
|
var sink = 0
|
|
var base = "the quick brown fox jumps over the lazy dog"
|
|
var x = 0
|
|
var i = 0
|
|
var s = null
|
|
for (i = 0; i < n; i++) {
|
|
s = text(base, i % 10, i % 10 + 10)
|
|
x = (x + length(s)) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
guard_hot_number: function(n) {
|
|
var sink = 0
|
|
var x = 1
|
|
var i = 0
|
|
for (i = 0; i < n; i++) x = x + 1
|
|
return blackhole(sink, x | 0)
|
|
},
|
|
|
|
guard_mixed_types: function(n) {
|
|
var sink = 0
|
|
var vals = [1, "a", 2, "b", 3, "c", 4, "d"]
|
|
var x = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) {
|
|
if (is_number(vals[i & 7])) x = (x + vals[i & 7]) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
reduce_sum: function(n) {
|
|
var sink = 0
|
|
var a = make_packed_array(256)
|
|
var x = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) {
|
|
x = (x + reduce(a, function(acc, v) { return acc + v }, 0)) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
filter_evens: function(n) {
|
|
var sink = 0
|
|
var a = make_packed_array(256)
|
|
var x = 0
|
|
var i = 0
|
|
for (i = 0; i < n; i++) {
|
|
x = (x + length(filter(a, function(v) { return v % 2 == 0 }))) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
},
|
|
|
|
arrfor_sum: function(n) {
|
|
var sink = 0
|
|
var a = make_packed_array(256)
|
|
var x = 0
|
|
var i = 0
|
|
var sum = 0
|
|
for (i = 0; i < n; i++) {
|
|
sum = 0
|
|
arrfor(a, function(v) { sum += v })
|
|
x = (x + sum) | 0
|
|
}
|
|
return blackhole(sink, x)
|
|
}
|
|
}
|