asm-js

JavaScript performance comparison

Revision 6 of this test case created

Preparation code

<script>
var a = (function(stdlib){//native
        var sqrt = stdlib.Math.sqrt;
       
        function square(x) {
        return +(x*x);
    }  
        function diag(x, y) {
        return +sqrt(square(x) + square(y));
    }
       
        return { diag: diag };
       
})(window);

var b = (function(stdlib){ //native and asm
        "use asm";
       
        var sqrt = stdlib.Math.sqrt;
       
        function square(x) {
        x = x|0;
        return +(x*x);
    }
       
        function diag(x, y) {
                x = x|0;
                y = y|0;
        return sqrt(square(x) + square(y));
    }
       
        return { diag: diag }; 
})(window);

var c = (function(stdlib){ //full asm
        "use asm";
       
        function sqrt(x){
                x = x|0;
                return +(x*2);
        }
       
        function square(x) {
        x = x|0;
        return +(x*x);
    }
       
        function diag(x, y) {
                x = x|0;
                y = y|0;
        return sqrt(square(x) + square(y));
    }
       
        return { diag: diag }; 
})(window);

var d = (function(stdlib){ //asm not annotation
       
        function sqrt(x){
                x = x|0;
                return +(x*2);
        }
       
        function square(x) {
        x = x|0;
        return +(x*x);
    }
       
        function diag(x, y) {
                x = x|0;
                y = y|0;
        return sqrt(square(x) + square(y));
    }
       
        return { diag: diag };
       
})(window);

var e = (function(stdlib){ //js

        function sqrt(x){
                return +(x*2);
        }
       
        function square(x) {
        return +(x*x);
    }
       
        function diag(x, y) {
        return sqrt(square(x) + square(y));
    }
       
        return { diag: diag };
       
})(window);
var f = (function(stdlib){ //full asm full annotate
        "use asm";
       
        function sqrt(x){
                x = x|0;
                return +(x*2)|0;
        }
       
        function square(x) {
        x = x|0;
        return +(x*x)|0;
    }
       
        function diag(x, y) {
                x = x|0;
                y = y|0;
        return sqrt(square(x)|0 + square(y)|0)|0;
    }
       
        return { diag: diag }; 
})(window);
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
native
a.diag(3, 4);
pending…
native and asm
b.diag(3, 4);
pending…
full asm
c.diag(3, 4);
pending…
asm not annotation
d.diag(3, 4);
pending…
js
e.diag(3, 4);
pending…
full asm full annotate
f.diag(3, 4);
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment